rocketMq集群master模式搭建
首先说明,本文是讲述使用vmware虚拟机搭建3台服务器,相当于3台linux服务器,并且vmware模拟的也是linux系统。其中在vmware设置了静态ip,为了方便操作,能够使用xshell连接,具体如何使用xshell连接vmware的,请移步 这篇文章 vmware虚拟机设置静态ip并且通过xshell连接教程(本人已经实现)
好了,下面进入下文:
1:准备rocketMq安装包 此处已整理好,请直接通过我的百度网盘进行下载 :
链接:https://pan.baidu.com/s/1MeJB3uZyiDo-jwUBPjR9JA
提取码:8dx9
2:本文3台服务器ip分别为:192.168.242.10 192.168.242.11 192.168.242.12 下面的操作步骤需要分别在三台服务器操作
3:分别在10,11,12三台服务器的文件夹: /usr/local 新建文件夹 rocketmq。所以新建好文件夹后的完整是:/usr/local/rokcetmq
4:分别在三台服务器上传下载好的rocketMq。如下图:(注意:此处我是省了解压rocket.zip 可通过 unzip rocket.zip命令进行解压)
5:修改环境变量(记得三台服务器):vi /etc/profile
内容:export ROCKETMQ_HOME=/usr/local/rocketmq
刷新环境变量,起效:source /etc/profile
6:修改rocketmq的配置文件:/usr/local/rocketmq/conf/2m-noslave/broker-a.properties和/usr/local/rocketmq/conf/2m-noslave/broker-b.properties
增加内容如下:主要修改的配置信息是:namesrvAddr,brokerIP1,brokerId
broker-a.properties:
#此处变量本来就有,只需要自定义后面的名字就好,此处我是为了区分ip,所以定义:Rocket-10
brokerClusterName=RockMq-10 brokerName=broker-a-12 # 0 表示 Master,>0 表示 Slave 此处如果在192.168.242.10服务器的rocketmq作为master,那么此值取0,其余服务器取1(大于0的整数) brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 defaultTopicQueueNums=4 #是否允许Broker自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许Broker自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true # 文件保留时间,默认 72 小时。根据业务情况调整 fileReservedTime=168 # nameServer地址,分号分割,这里写自己需要做集群的三台服务器的地址 namesrvAddr=192.168.242.10:9876;192.168.242.11:9876;192.168.242.12:9876 # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface # 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况 #下可以人工配置。 brokerIP1=192.168.242.10
broker-b.properties:
brokerClusterName=RockMq-10 brokerName=broker-b-10 # 0 表示 Master,>0 表示 Slave brokerId=0 deleteWhen=04 fileReservedTime=48 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH #在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 defaultTopicQueueNums=4 #是否允许Broker自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许Broker自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true # 文件保留时间,默认 72 小时。根据业务情况调整 fileReservedTime=168 # nameServer地址,分号分割,这里写自己需要做集群的两台服务器的地址 namesrvAddr=192.168.242.10:9876;192.168.242.11:9876;192.168.242.12:9876 # Details:Should be configured if having multiple addresses; Default value:InetAddress for network interface # 本机ip地址,默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,这种情况 #下可以人工配置。 brokerIP1=192.168.242.10
特别注意:brokerIP1这个指定ip的,一定是当前linux的ip
7:在10,11,12服务器修改rocketmq的启动脚本的jvm参数(对了,记得在linux服务器部署jdk1.7以上的版本,博主使用的是jdk1.8。jdk1.8的部署教程请看:CentOS7安装JDK1.8图文教程)
vim /usr/local/rocketmq/bin/runbroker.sh
这是未修改前的:不修改会启动不了,会报jvm内存没这么大
所以修改后如下:(大家自行决定这个值)
8:在10,11,12三台服务器启动集群:nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &
9:看看是否启动成功:输入jps命令,能看到namesrv和broker证明启动成功(此处我没有启动集群,因为是没有连接同一网络,所以vmware里面的linxu系统连接不上)
10:关闭rocketmq
cd /usr/local/rocketmq/bin
关闭namesrv服务:sh mqshutdown namesrv
关闭broker服务:sh mqshutdown broker
>>>>>如果发现无权限操作文件,请执行命令:
chmod +777 ./mqnamesrv
chmod +777 ./mqbroker
11-----拓展(使用rocketmq-dashboard,页面查看rocket集群)
rocketmq-dashboard下载:
链接:https://pan.baidu.com/s/1AQrfgSW8a5VuIVyq_FOfbA
提取码:dnjw
12、下载后,在idea导入该项目,在maven栏,跳过test测试,进行:clean、compile
13:然后在配置文件修改rocketMq的连接ip信息:(这里是我的vmware虚拟机里面的三台rocketmq的集群配置信息)
14:启动方式一:本地启动(不用说了吧)
启动成功后:http://localhost:8888/
这里的端口看properties配置文件,在13步骤大家可以看到我的server.port=8888。大家也可自行配置
15、linux方式启动打包的jar包:打包步骤在12,只要打包成功,就是没问题的。可以看到下图的jar包:rocketmq-dashboard-1.0.1-SNAPSHOT.jar
linux启动该jar包如下: 方式一: java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar (这种方式只要关闭执行命令后模式,就会停止)
方式二:nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar (后台启动,这种方式即便是退出linux系统,jar包都运行)
16:现在已经启动了三台服务器,并且使用xshell连接上(如果不会怎么使用xshell连接虚拟机的,请看我的另外一篇博客):
17:启动rocketmq-dashboard-1.0.1-SNAPSHOT.jar
命令:sh start-api.sh
start-api.sh的命令内容如下:
nohup java -Xms128m -Xmx256m -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar > api.log 2>&1 &
我们根据日志:api.log查看里面的日志输出即可知道是否启动成功:tail -fn200 api.log
此处我的rocketMq集群还没启动,所以会报连接不上的错误,但是这已经证明jar包启动成功,且端口:8888 那么界面的访问地址:http://ip:端口 =http://192.168.242.10:8888/
注意:如果把该地址放到浏览器提示无法访问该网站,那就是防火墙的问题,没有吧该端口:8888开放出去,请执行如下的命令其中之一:
一:开放端口(这种方式我也试过,命令可以执行成功,但是访问地址还是不行):firewall-cmd --add-port=8888/tcp --permanent
二:关闭防火墙(在自己的vmware可以使用该方式,但是在真正的linux服务器是万万不可---但是目前我使用该方式):systemctl stop firewalld
18:启动rocketMq集群:
在:192.168.242.10/192.168.242.11/192.168.242.12分别执行:
执行命令1:nohup sh mqnamesrv &
执行命令2:nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &
使用命令:jps可以知道是否启动成功:图二是成功的
注意:ROCKETMQ_HOME 是rocket在linux配置的环境变量:
命令:vi /etc/profile
19:上面18步骤我只在192.168.242.10执行了,大家可以在界面的cluster(集群)里可以看到该服务器上的集群————————有点小激动是不是
注意:此处我已经把三台vmware的linux系统的防火墙已经关闭。systemctl stop firewalld