(三)RocketMQ集群部署实践
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
全篇參照–《MyRocketMQ集群部署實戰(zhàn)-雙master-雙slave-同步雙寫-異步刷盤(7臺機器) - tantexian的博客空間 - 開源中國社區(qū)》
原文地址:https://my.oschina.net/tantexian/blog/703784
本文是筆者在參考上文實踐過程中的理解和擴充
符號“【】”中內(nèi)容、附注5,6以及FAQ中內(nèi)容均筆者所注
一、基礎(chǔ)環(huán)境配置:
以下所有機器均為16G內(nèi)存。【內(nèi)存配置可修改,128M以上,筆者測試機器內(nèi)存平均為4G】
二、集群部署圖
(四NameServer、雙Mastere雙Slave、同步雙寫、異步刷盤):
)
三、對centos7操作系統(tǒng)參數(shù)調(diào)優(yōu):
【該步驟未進行,為生產(chǎn)環(huán)境下的優(yōu)化操作,官網(wǎng)寫到該步驟一個系統(tǒng)只可優(yōu)化一次】
執(zhí)行下述shell腳本:
#!/bin/sh # Execute Only Once#當前程序運行環(huán)境用戶名 USERNAME=root #需要修改IO模式磁盤盤符 DISKNAME=sdaecho 'vm.overcommit_memory=1' >> /etc/sysctl.conf echo 'vm.min_free_kbytes=5000000' >> /etc/sysctl.conf echo 'vm.drop_caches=1' >> /etc/sysctl.conf echo 'vm.zone_reclaim_mode=0' >> /etc/sysctl.conf echo 'vm.max_map_count=655360' >> /etc/sysctl.conf echo 'vm.dirty_background_ratio=50' >> /etc/sysctl.conf echo 'vm.dirty_ratio=50' >> /etc/sysctl.conf echo 'vm.page-cluster=3' >> /etc/sysctl.conf echo 'vm.dirty_writeback_centisecs=360000' >> /etc/sysctl.conf echo 'vm.swappiness=10' >> /etc/sysctl.conf cat /etc/sysctl.conf sysctl -pecho 'ulimit -n 655350' >> /etc/profile echo "$USERNAME hard nofile 655350" >> /etc/security/limits.conf#DISK=`df -k | sort -n -r -k 2 | awk -F/ 'NR==1 {gsub(/[0-9].*/,"",$3); print $3}'` #[ "$DISK" = 'cciss' ] && DISK='cciss!c0d0' echo 'deadline' > /sys/block/$DISKNAME/queue/schedulerecho "---------------------------------------------------------------" sysctl vm.overcommit_memory sysctl vm.min_free_kbytes sysctl vm.drop_caches sysctl vm.zone_reclaim_mode sysctl vm.max_map_count sysctl vm.dirty_background_ratio sysctl vm.dirty_ratio sysctl vm.page-cluster sysctl vm.dirty_writeback_centisecs sysctl vm.swappinesssu - $USERNAME -c 'ulimit -n' cat /sys/block/$DISKNAME/queue/scheduler四、下載源碼及編譯(maven、git):
1、安裝maven、git:
yum install -y maven git2、下載源碼:
git clone https://git.oschina.net/tantexian/MyRocketMQ.git
【先在一個機子上安裝git、maven來編譯源碼,jdk需要安裝在7臺機子上,上一篇文章有安裝的解疑】
3、編譯源碼:
cd MyRocketMQ/ sh install.sh4、將編譯后的代碼放置到自定義文件目錄
(本次實驗中放置到/home目錄:)
PS:此處需要將編譯后的MyRocketMQ-bin文件分別scp或者rsync同步到其他所有機器上去:
rsync -avzP /home/MyRocketMQ-bin/ root@10.128.31.104:/home/MyRocketMQ-bin/ rsync -avzP /home/MyRocketMQ-bin/ root@10.128.31.105:/home/MyRocketMQ-bin/ rsync -avzP /home/MyRocketMQ-bin/ root@10.128.31.106:/home/MyRocketMQ-bin/ rsync -avzP /home/MyRocketMQ-bin/ root@10.128.31.107:/home/MyRocketMQ-bin/ rsync -avzP /home/MyRocketMQ-bin/ root@10.128.31.108:/home/MyRocketMQ-bin/ rsync -avzP /home/MyRocketMQ-bin/ root@10.128.31.109:/home/MyRocketMQ-bin/5、若不希望每次rsync輸入密碼驗證,可以配置互信ssh、scp、rsync登錄傳輸(互通):
1、在主節(jié)點node103上生成秘鑰(輸入命令后一直回車即可): ssh-keygen -t rsa 2、分別將node103加入到node104、node105、node106、node107、node108、node109的authorized_keys中 rsync -avzP /root/.ssh/id_rsa.pub root@10.128.31.104:/root/.ssh/authorized_keys rsync -avzP /root/.ssh/id_rsa.pub root@10.128.31.105:/root/.ssh/authorized_keys rsync -avzP /root/.ssh/id_rsa.pub root@10.128.31.106:/root/.ssh/authorized_keys rsync -avzP /root/.ssh/id_rsa.pub root@10.128.31.107:/root/.ssh/authorized_keys rsync -avzP /root/.ssh/id_rsa.pub root@10.128.31.108:/root/.ssh/authorized_keys rsync -avzP /root/.ssh/id_rsa.pub root@10.128.31.109:/root/.ssh/authorized_key注:這樣以后從node103往其他節(jié)點copy東西則不再需要輸入密碼驗證!!!最好檢測其他所有node是否同步成功MyRocketMQ-bin:
【rsync比scp傳文件要慢一些】
五、配置JDK、Rocketmq等環(huán)境參數(shù):
1、安裝jdk(依次在所有機器配置執(zhí)行):
雖然目前google已經(jīng)嘗試使用openjdk代替oraclejdk:http://www.oschina.net/translate/openjdk-is-now-the-time) 還是建議使用oracle的jdk替換掉自帶的openjdk,若不想替換則無需下續(xù)步驟。 首先卸載自帶的openjdk:【注:經(jīng)測試openjdk也可使用,只要保證唯一jdk就行,否則會沖突】
ps:如果rpm -e 下載不成功,可以嘗試使用yum remove命令卸載。
然后再去oracle網(wǎng)站下載對應(yīng)的jdk安裝:
若下載的為rpm包:則使用rpm -ivh xxx 進行安裝即可!!!
2、配置jdk和Rocketmq環(huán)境變量:
vim /root/.bashrc #在該文件添加一下內(nèi)容# Set RocketMQ Environment ROCKETMQ_HOME=/home/MyRocketMQ-bin # 此處為上述步驟中的maven編譯后文件目錄代碼 ROCKETMQ_CLASSPATH=$ROCKETMQ_HOME/lib # 此處為rocketmq運行所依賴的jar的classpath ROCKETMQ_PATH=$ROCKETMQ_HOME/bin # 此處為rocketmq運行bin目錄,加入到可執(zhí)行命令 export ROCKETMQ_HOME ROCKETMQ_CLASSPATH ROCKETMQ_PATH # 設(shè)置環(huán)境變量 # 此處根據(jù)具體nameser集群設(shè)置環(huán)境變量 export NAMESRV_ADDR='10.128.31.103:9876;10.128.31.104:9876;10.128.31.105:9876;10.128.31.106:9876' # Set Java Environment JAVA_HOME=/usr/java/jdk1.7.0_79 JRE_HOME=/usr/java/jdk1.7.0_79/jre PATH=.:$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ROCKETMQ_PATH # 此處將ROCKETMQ_PATH CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$ROCKETMQ_PATH export JAVA_HOME JRE_HOME PATH CLASSPATH- PS:編輯完成執(zhí)行 source/root/.bashrc或者 . /root/.bashrc 使之生效
- 執(zhí)行:chmod +x /home/MyRocketMQ-bin/bin/ *
- 上述命令將/home/MyRocketMQ-bin/bin/目錄下的命令加入到PATH,即linux能直接執(zhí)行。
- 注意:同理需要將/root/.bashrc文件使用rsync或者scp同步到其他所有節(jié)點上去!!!
【采用集群模式時,啟動broker時,需要指定nameserver 地址集,即NAMESRV_ADDR,包含每一個nameserver集群地址。因為nameserver之間不會進行信息同步,均通過broker定時匯報保持各節(jié)點信息“同步”】
六、集群啟動:
1、將所有hostname配置到hosts:
vim /etc/hosts同步到所有機器!!!
先附上集群部署規(guī)劃(更多詳細請自行參考前續(xù)集群部署圖): NameServer集群:node103/node104/node105/node106 Master1/Slave1 : node103->node105 Master2/Slave2 : node104->node106 Producer/Consumer集群:node107/node108/node1092、先啟動NameServer集群節(jié)點
(node103/node104/node105/node106分別執(zhí)行以下命令):
nohup sh /home/MyRocketMQ-bin/bin/mqnamesrv &3、再啟動Broker服務(wù)
【雙主雙備,修改相應(yīng)的配置文件參數(shù)】
node103: cp /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-a.properties /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-master1.properties vim /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-master1.properties【同步復(fù)制方式下的主/備參數(shù):SYNC_MASTER / SLAVE】
啟動node103 broker進程: nohup sh /home/MyRocketMQ-bin/bin/mqbroker -c /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-master1.properties>bk.log node104: cp /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-a.properties /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-master2.properties vim /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-master2.properties 啟動node104 broker進程: nohup sh /home/MyRocketMQ-bin/bin/mqbroker -c /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-master2.properties>bk.log node105: cp /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-a.properties /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-slave1.properties vim /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-slave1.properties 啟動node105 broker進程: sh /home/MyRocketMQ-bin/bin/mqbroker -c /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-slave1.properties node106: cp /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-a.properties /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-slave2.properties vim /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-slave2.properties 啟動node106 broker進程: sh /home/MyRocketMQ-bin/bin/mqbroker -c /home/MyRocketMQ-bin/conf/2m-2s-sync/broker-slave2.properties至此,NameServer/Broker集群服務(wù)都已啟動
4、啟動Producer
node107 啟動生成者: sh /home/MyRocketMQ-bin/bin/tools.sh com.alibaba.rocketmq.example.simple.Producer5、啟動Consumer
node108 啟動消費者: sh /home/MyRocketMQ-bin/bin/tools.sh com.alibaba.rocketmq.example.simple.PushConsumerPS:啟動順序總結(jié):
1. 先啟動nameser集群所有節(jié)點
2. 啟動Broker所有的master節(jié)點
3. 啟動Broker所有slave節(jié)點
七、rocket-web控制臺配置搭建:
1、下載tomcat至centos7:
2、下載rocketmq-console項目,編譯回去war包
(官方地址:https://github.com/rocketmq/rocketmq-console):
【附個war包下載地址:http://download.csdn.net/detail/howie_zhw/9580058#comment】
編譯之前需要修改config.properties文件nameser為當前環(huán)境nameser集群值:
3、將編譯完成的war拷貝到tomcat對應(yīng)的webapps目錄下:
4、運行tomcat:
sh /home/apache-tomcat-8.5.0/bin/catalina.sh run5、頁面訪問web控制臺:
筆者注:不方便編譯的話,直接下載war包copy到tomcat/webapps下,到自動生成的文件夾:rocketmq-console/WEB_INF/classes/config.properties
修改默認的127.0.0.1:9876?地址為你的nameserver地址。
重啟tomcat服務(wù),訪問?http://IP:8080/rocketmq-console/cluster/list.do?就可以了
以下為附加內(nèi)容,作為參考:
附1、集群操作命令匯總及自定義簡化命令:
1、啟動NameServer:
sh /home/MyRocketMQ-bin/bin/mqnamesrv2、啟動Broker
如果將上述所有的配置文件name統(tǒng)一修改為:2m2s-sync-borker.properties 則可以使用一下命令啟動各節(jié)點Broker: sh /home/MyRocketMQ-bin/bin/mqbroker -c /home/MyRocketMQ-bin/conf/2m-2s-sync/2m2s-sync-borker.properties3、停止NameServer及Broker命令:
ps aux | grep NamesrvStartup | grep -v grep | awk '{print $2}' | xargs kill -9 ps aux | grep BrokerStartup | grep -v grep | awk '{print $2}' | xargs kill -94、自定義Alias命令(首先建立文件目錄:mkdir /var/log/rocketmq):
alias stna='nohup sh /home/MyRocketMQ-bin/bin/mqnamesrv > /var/log/rocketmq/mqnamesrv.log &' alias stbr='nohup sh /home/MyRocketMQ-bin/bin/mqbroker -c /home/MyRocketMQ-bin/conf/2m-2s-sync/2m2s-sync-borker.properties > /var/log/rocketmq/broker.log &' alias killna="ps aux | grep NamesrvStartup | grep -v grep | awk '{print $2}' | xargs kill -9" alias stpr='sh /home/MyRocketMQ-bin/bin/tools.sh com.alibaba.rocketmq.example.simple.Producer' alias stco='sh /home/MyRocketMQ-bin/bin/tools.sh com.alibaba.rocketmq.example.simple.PushConsumer' alias killbr="ps aux | grep BrokerStartup | grep -v grep | awk '{print $2}' | xargs kill -9"5、添加到.bashrc中:
vim /root/.bashrc6、使用簡短命令操作:
附2:Broker相關(guān)配置參數(shù):
附3:NameserStartup僵尸進程解決辦法:
假若需要kill 掉進程,不能使用jps查看進程來kill 否則會出現(xiàn)僵尸進程:
如果出現(xiàn)僵尸進程則需要使用ps -ahp 21514來查找僵尸進程的父進程,接著再kill掉。
【RocketMQ提供了“溫柔”關(guān)閉namesrv、broker服務(wù)的命令:mqshutdown】
附4:獲取當前broker全局配置:
mqbroker -m( mqbroker -p打印全部)附5:RocketMQ中Readme
附6:rocket-console控制臺展示
【下圖為筆者測試截圖,具體信息與上文信息不符請見諒】
查詢指定topic的produceGroupName:
查詢Topic情況
查詢消費者組
查詢某條消息信息
FAQ
1、啟動Nameserver或broker服務(wù)提示內(nèi)存不足
現(xiàn)象描述:
“VM warning: INFO: OS::commit_memory(0x00000006c0000000, 2147483648, 0) faild; error=’Cannot allocate memory’ (errno=12)”
解決方案:修改/RocketMQ/devnev/bin/ 下的服務(wù)啟動腳本 runserver.sh 、runbroker.sh 中對于內(nèi)存的限制,?改成如下示例:
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx128m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=128m"2、tomcat配置和啟動問題
tomcat啟動:進入安裝目錄
- bin/startup.sh #啟動tomcat
- bin/shutdown.sh #停止tomcat
或者直接輸入tomcat命令啟動(筆者yum安裝的tomcat7.04)
tomcat start(stop)tomcat啟動后,仍無法訪問的問題可以參考幾點:
- 端口監(jiān)聽未添加
- 端口被防火墻阻攔,關(guān)閉防火墻
- 如果是用yum安裝的tomcat,能夠正常啟動,但是無法訪問ip:8080。經(jīng)筆者測試,是由于yum安裝的tomcat缺少ROOT等文件,無法訪問ip:8080成功,但是將rocket-console部署到webapps中,是可以正常訪問到的。
3、如何自定義Producer、Consume內(nèi)容進行消息收發(fā)測試?
問題描述:如何自定義Producer、Consumer的代碼運行,比如修改Producer的topic,發(fā)送條數(shù),Consumer的Group name等信息
解讀:目前Producer、Consumer的啟動是通過tool.sh進行啟動,其調(diào)用的是已經(jīng)封裝好的jar包,所以無法直接修改Producer的代碼進行測試。
解決辦法:可通過編寫demo項目,導(dǎo)入RocketMQ的依賴包,運行測試程序Producer、Consumer進行測試,具體方案參看Myeclipse中搭建RocketMQ測試項目
轉(zhuǎn)載于:https://my.oschina.net/caiyunick/blog/806850
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的(三)RocketMQ集群部署实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3D脚本 maxscript入门教程(6
- 下一篇: IDEA使用GIT插件上传到码云git@