准备:
1) github上下载jstorm安装包https://github.com/alibaba/jstorm
2) tar -xzvf jstorm-2.1.1.tar.gz
3) vim ~/.bashrc 添加两行:
export JSTORM_HOME=/home/aegis/tools/jstorm-2.1.1
export PATH=$PATH:$JSTORM_HOME/bin
4) source ~/.bashrc
5) vim /home/aegis/tools/jstorm-2.1.1/conf/storm.yaml
6)修改storm.zookeeper.servers及nimbus.host
7) 安装jstorm web ui:
如下只在nimbus机器上执行,supervisor可省略:
一句话总结:cp jstorm安装目录下的jstorm-ui-2.1.1.war到/home/aegis/tools/tomcat-9.0.0/webapps下,建立ROOT软链接,重启tomcat 。
具体步骤:
必须使用tomcat 7.0 或以上版本, 注意不要忘记拷贝~/.jstorm/storm.yaml
Web UI 可以和Nimbus不在同一个节点
mkdir ~/.jstorm
cp -f $JSTORM_HOME/conf/storm.yaml ~/.jstorm
下载tomcat 7.x (以apache-tomcat-7.0.37 为例)
tar -xzf apache-tomcat-7.0.37.tar.gz
cd apache-tomcat-7.0.37
cd webapps
cp $JSTORM_HOME/jstorm-ui-0.9.6.3.war ./
mv ROOT ROOT.old
ln -s jstorm-ui-0.9.6.3 ROOT 这个地方可能变化,是根据你的JStorm版本来确定,比如当0.9.6.1时,是ln -s jstorm-0.9.6.1 ROOT
另外不是 ln -s jstorm-ui-0.9.6.3.war ROOT 这个要小心
cd ../bin
./startup.sh
8) cd install-packages; cp jstorm-core-2.1.1.jar /home/aegis/tools/jstorm-2.1.1
8.1) 为了避免混乱227机器上修改/home/aegis/tools/jstorm-2.1.1/conf/storm.yaml中的
storm.local.dir: "%JSTORM_HOME%/data227"
并在$JSTORM_HOME目录下新建data227目录 mkdir data227;
其他机器上类似新建data228 及data229
9) 在qa-m10-py229.py01上: 执行命令 nohup jstorm nimbus & ;
检查服务是否启动成功:输入命令 jps ;显示有进程 NimbusServer
查看$JSTORM_HOME/logs/nimbus.log检查有无错误,成功应提示如下:
[main] INFO com.alibaba.jstorm.daemon.nimbus.TopologyMetricsRunnable - Successfully init com.alibaba.jstorm.daemon.nimbus.metric.uploader.DefaultMetricUploader
10) 在qa-m10-py228.py01上:执行命令 nohup jstorm supervisor & ;
检查服务是否启动成功: 输入命令 jps ;显示有进程 Supervisor
查看$JSTORM_HOME/logs/supervisor.log检查有无错误
11) 在qa-m10-py227.py01上:执行命令 nohup jstorm supervisor & ;
检查服务是否启动成功: 输入命令 jps ;显示有进程 Supervisor
查看$JSTORM_HOME/logs/supervisor.log检查有无错误
12) 检查拓扑结构:http://XXX.XXX.XXX:8080ip为nimbus的ip地址
报错问题分析:
1)启动nimbus报错1:
/usr/bin/java
Error: Could not find or load main class backtype.storm.command.config_value
Failed to get config nimbus.classpath
None
解决方法:
git clone git@git.XXXXXX.com:panlinstephanie/install-packages.git
cp jstorm-core-2.1.1.jar /home/aegis/tools/jstorm-2.1.1
分析原因:
缺失jar包。
2)启动nimbus报错2:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
解决方法:
下载slf4j-simple-1.6.1.jar 并保存到工程git@git.xiaojukeji.com:panlinstephanie/install-packages.git
以后只需将slf4j-simple-1.6.1.jar 拷贝到/home/aegis/tools/jstorm-2.1.1/lib 即可,和原有的slf4j-api-1.7.5.jar放在一起。
分析原因:
一些函数依赖slf4j jar包的版本较老。
3)启动nimbus报错3:
ERROR com.alibaba.jstorm.daemon.nimbus.NimbusCache - Failed to create NimbusCache!
java.lang.RuntimeException: Failed to cleanup rooDir of rocksDB /home/aegis/tools/jstorm-2.1.1/data229/nimbus/rocksdb
解决方法:
根据错误提示删除rocksdb目录,并用aegis用户新建rocksdb目录。
分析原因:
该目录下文件的权限为root,因此aegis无权限写覆盖导致。
4)启动jstorm后打开网页http://100.90.XXX.XX:8080/不显示jstorm的ui界面
解决方法:
参考https://github.com/alibaba/jstorm/wiki/如何安装#%E5%AE%89%E8%A3%85jstorm-web-ui
首先将 jstorm-ui.war 拷贝到 tomcat/webapps ,当tomcat启动后, 该war包会自动被解压到 jstorm-ui 文件夹。
如果你不改这个文件名, 则需要访问 http://hostname:8080/jstorm-ui/。
建议将解压出来的文件夹名换成 ROOT , 或者ROOT软链接到该文件夹,则可以通过 http://hostname:8080/直接访问了。
分析原因:
没有建立ROOT软链接,所以必须使用网页http://100.90.XXX.XX:8080/jstorm-ui-2.1.1/打开jstorm的UI界面。
5) sonar无法启动:
http://stackoverflow.com/questions/12583065/unable-to-access-sonar-through-web
2017.02.08 11:40:22 ERROR web[][o.a.c.c.C.[.[.[/]] Exception sending context initialized event to listener instance of class org.sonar.server.platform.web.PlatformServletContextListener
org.sonar.api.utils.SonarException: Unable to start database
Caused by: org.h2.jdbc.JdbcSQLException: Exception opening port "9092" (port may be in use), cause: "java.net.BindException: Address already in use (Bind failed)" [90061-176]
分析原因:
229机器上的9092端口已经被kafka broker占用了
解决方法:
在9092端口没有没占用的机器上启动sonar服务。
然后发现仍然无法打开网页http://100.90.xxx.xx:9000
查看/home/aegis/tools/sonarqube-6.2/logs 没有ERROR.
排除9000端口不能访问的问题:在本地执行telnet 100.90.xxx.xx 9000 显示Trying 100.90.xxx.xx... 发现9000端口可以访问
在100.90.xxx.xx上执行 netstat -anp | grep 9000 端口是在监听中的:
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN -
发现op对广州服务进行了端口权限管理,访问9000端口需要权限申请,流程参考jira:
JIRA Issues Macro: Data cannot be retrieved due to an unexpected error
,同时说明开通原因。
so, 打算换个端口,把默认的9000换成8080:
修改配置文件: /home/aegis/tools/sonarqube-6.2/conf/sonar.properties
sonar.web.host=100.90.204.58
sonar.web.port=8080
然后用root启动sonar :
cd /home/aegis/tools/sonarqube-6.2/bin/linux-x86-64
sh sonar.sh start
最后终于可以完美访问了:http://100.90.xxx.xx:8080。
---------------------分割线------------------------------------------------
如果要在同一台机器上同时部署sonar和tomcat的话,
为了防止和tomcat 8080端口冲突,修改配置文件:/home/aegis/tools/sonarqube-6.2/conf/sonar.properties
把sonar web服务端口从原来的9000改为8081:
sonar.web.host=100.90.204.58
sonar.web.port=8080
sonar database数据库端口从9092改为8082:
sonar.embeddedDatabase.port=8082
同样可以完美访问http://100.90.xxx.xx:8081/projects
(完)。
6)Jstorm启动后拓扑图报错
java.lang.RuntimeException:
java.lang.RuntimeException:
org.apache.zookeeper.KeeperException$NoNodeException:
KeeperErrorCode = NoNode for /brokers/topics/SEC_AEGIS_async_req_out/partitions ,
at 2017-02-13 14:15
at storm.kafka.DynamicBrokersReader.getBrokerInfo(DynamicBrokersReader.java:81)