zookeeper+jstorm的集群搭建


zookeeper的配置:
zookeeper有三種配置方式:單機式/偽分布式/集群式
其中偽分布式是在一台電腦上通過不同的端口來模擬分布式情形,需要N份配置文件和啟動程序,而集群式是多個zookeeper程序。
 
首先通過sftp等方式獲取tar包,解壓到指定的目錄:/usr/local/java 下,生成目錄zookeeper-3.3.6;
配置環境變量(注意路徑后面千萬不要有空格,路徑之前,與等號之間也不要有空格。):
vi /etc/profile 
#zk
ZOOKEEPER_HOME=/usr/local/java/zookeeper-3.3.6
export PATH="$PATH:$ZOOKEEPER_HOME/bin"
export ZOOKEEPER_HOME
cd /zookeeper-3.3.6/conf
touch zoo.cfg 或 mv zoo-sample.cfg zoo.cfg
vi zoo.cfg
插入如下的內容:
tickTime=2000 
initLimit=10
syncLimit=5
dataDir=/usr/local/java/zookeeper-3.3.6/data
dataLogDir=/usr/local/java/zookeeper-3.3.6/logs
clientPort=4180
server.3=192.168.204.3:2888:3888
server.4=192.168.204.4:2888:3888
server.5=192.168.204.5:2888:3888
--其中節點數量大於虛擬機數量,文件路徑一定要存在,不存在后面要創建,路徑后面不能有空格
完成配置:Esc -> :wq
cd .. 到根目錄
mkdir logs
mkdir data
需要在data下面建立一個myid問價,內容為server的編號,一定是本機的server編號
touch myid
vi myid
插入
主機對應的server號
基本配置就是這樣,之后我們在另外兩台虛擬機上執行同樣的配置,zoo.cfg基本不變,但是myid要根據本機的ip映射的server編號來。同樣路徑不能有空格
依次啟動三台虛擬機的zookeeper,zkServer.sh start 記住啟動第一個的時候,會報錯找不到后面的兩個,這個不要緊,都啟動就好了。
通過bin下面的命令:zkServer.sh status 查看狀態,啟動成功后會有節點是leader還是follower的標識,表示啟動成功了。
中間遇到了一些問題,主要是無法啟動,啟動之后不能通信,找不到文件等。原因有:myid丟失,bin沒有配置到path里,配置的logs文件夾沒有建立,zoo.cfg中路徑有空格,防火牆阻止等。
本來已經運行成功了,但是第二天過來的時候,又出問題了。 表現是:
zhServer.sh start 啟動之后,顯示STARTED,並且后台的進程也在運行中,依次啟動zk。jps命令也能看到 QuorumPeerMain 進程。明明已經啟動成功了
但是zkServer.sh status 命令查看,卻又報錯: Error contacting service. It is probably not running 。
查看了許多資料啊,什么改hosts,檢查myid,檢查文件夾是否建立,但是沒有針對性地改來改去,始終沒有結果。而iptables命令,也顯示invalid(我以為已經關閉了)
總結一下:報錯的開始,並沒有認真看報錯日志,主要是網上有博客說啟動的時候報錯是正常的,因為其他節點沒有啟動。所以就沒有繼續深入了,然后各種漫無目的的瞎碰......
報錯如下
java.net.NoRouteToHostException: No route to host(沒有到主機的路由)
之后檢查網絡,端口,hosts,iptables都沒有用。
隨后發現centos7的防火牆不再是iptables了,變成firewall。我之前不停地
service iptables stop 命令並沒有用。
最后通過:
--------------------------------------------------------------
centos7.0(默認是使用firewall作為防火牆,如若未改為iptables防火牆,使用以下命令查看和關閉防火牆)
查看防火牆狀態:firewall-cmd --state
關閉防火牆:systemctl stop firewalld.service
------------------------------------------------------------------
Ubuntu(ubuntu-12.04-desktop-amd64)
查看防火牆狀態:ufw status
關閉防火牆:ufw disable
---------------------------------------------------------------
CentOS6.0
查看防火牆狀態:service iptables status
關閉防火牆:chkconfig iptables off    #開機不啟動防火牆服務

 

關閉了防火牆,於是不報錯了。很簡單的設置,但是卻無效率地磨蹭了很長時間。(百度居然還有說status命令有問題)
 
另外,為了防止下次再搗亂,選擇禁止開機啟動: systemctl disable firewalld.service 
命令敲完后:
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.
這一步應該是從開機的加載項里去掉,實現禁止開機啟動。如果以后有需要,再復制進去應該可以。
 
所以,依次啟動zkServer.sh start 顯示啟動成功,然后zkServer.sh status 顯示:
[root@tm4 bin]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/java/zookeeper-3.3.6/bin/../conf/zoo.cfg
Mode: follower
[root@tm4 bin]# jps
2473 QuorumPeerMain
2661 Jps

 

即為成功。記住報錯一定要圍着zookeeper.out.
其他問題
1.終端始終連不上其中一台虛擬機,我以為哪里配置地不對,刪除又重新克隆,重新配置,但還是不行,后來換了一個終端程序就好了,真是日了狗的心情。
  無論是帶UI還是不帶UI的虛擬機命令行,都很難用。只有通過xShell工具來連接,可以很方便的編輯。
 
jstorm配置
  jstorm 環境變量:
vi /etc/profile
插入
#jstorm
export JSTORM_HOME=/usr/local/java/jstorm-0.9.6
export PATH=$PATH:$JSTORM_HOME/bin

 

jstorm配置文件:
  可 參考服務器上已配置好的文件,結合自己的集群,做一些修改即可。
   
########### These MUST be filled in for a storm configuration
 storm.zookeeper.servers:
     - "192.168.204.3"
     - "192.168.204.4"
     - "192.168.204.5"
 storm.zookeeper.root: "/jstorm"
 nimbus.host: "192.168.204.3" 
# %JSTORM_HOME% is the jstorm home directory
 storm.local.dir: "%JSTORM_HOME%/data"
 
 java.library.path: "/usr/local/java/jstorm-0.9.6/lib:/usr/local/lib:/opt/local/lib:/usr/lib"
 supervisor.slots.ports:
    - 6800
    - 6801
    - 6802
    - 6803
# Default disable user-define classloader
# If there are jar conflict between jstorm and application, 
# please enable it 
 topology.enable.classloader: false
# enable supervisor use cgroup to make resource isolation
# Before enable it, you should make sure:
# 	1. Linux version (>= 2.6.18)
# 	2. Have installed cgroup (check the file's existence:/proc/cgroups)
#	3. You should start your supervisor on root
# You can get more about cgroup:
#   http://t.cn/8s7nexU
 supervisor.enable.cgroup: false
### Netty will send multiple messages in one batch  
### Setting true will improve throughput, but more latency
 storm.messaging.netty.transfer.async.batch: true
 
### default worker memory size, unit is byte
 worker.memory.size: 2147483648
# Metrics Monitor
# topology.performance.metrics: it is the switch flag for performance 
# purpose. When it is disabled, the data of timer and histogram metrics 
# will not be collected.
# topology.alimonitor.metrics.post: If it is disable, metrics data
# will only be printed to log. If it is enabled, the metrics data will be
# posted to alimonitor besides printing to log.
 topology.performance.metrics: true
 topology.alimonitor.metrics.post: false
ui.clusters:
     - {
         name: "jstorm",
         zkRoot: "/jstorm",
         zkServers:
             [ "192.168.204.3","192.168.204.4","192.168.204.5"],
         zkPort: 2181,
       }

 

 
這里需要下載一下官方例子運行在UI 上,做測試,但是git卻無法支持只clone其中example目錄,這個正常的需求。簡直失望
 
查看端口信息
netstat -ntulp |grep 80
 
ui.clusters:
- {
name: "jstorm",
zkRoot: "/jstorm",
zkServers:
[ "192.168.204.3","192.168.204.4","192.168.204.5"],
zkPort: 4180,
}
topology.backpressure.enable: true
supervisor.slots.ports.base: 6800
supervisor.slots.port.cpu.weight: 1.2
# supervisor.slots.port.cpu.weight: 0.5
supervisor.slots.port.mem.weight: 0.7
# supervisor.slots.port.mem.weight: 0.5
supervisor.slots.ports: null
 
 





附件列表

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM