一、基础环境
系统:centos 7.4
硬件配置:4台 2Cpu7G内存
二、基础工具安装
lrzsz和net-tools可以不用装的,只是个人习惯传文件和ifconfig命令
yum install java-1.8.0-openjdk.x86_64
yum install lrzsz
yum install net-tools
yum install wget
yum install vim
CentOS 6.5关闭防火墙
servcie iptables stop
CentOS 7关闭防火墙:
systemctl stop firewalld.service
ps:防火墙生产环境开发端口,不能直接拉掉
三、下载编译mq
本次我们编译最新的4.2.0版本,官方要求如下
1、64位操作系统
2、64位jdk 1.8+
3、maven 3.2.x以上版本
4、Git (我们通过wget拉取,可以不用安装)
1、下载
a) 新建文件夹mq,下载,解压
mkdir mq
cd mq
wget http://mirrors.hust.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip
unzip rocketmq-all-4.2.0-source-release.zip
b)确定编译环境是否ok
cd rocketmq-all-4.2.0/
确认编译机器maven是否安装(即是否存在mvn命令),如未安装,执行如下命令安装maven
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum -y install apache-maven
默认安装3.5.2版本
c)执行编译打包
mvn -Prelease-all -DskipTests clean package -U
[INFO] Building tar: /usr/mq/rocketmq-all-4.2.0/distribution/target/apache-rocketmq.tar.gz
由此信息可得知输出路径为:/usr/mq/rocketmq-all-4.2.0/distribution/target/
4)拷贝apache-rocketmq.tar.gz到/usr/local,并通过scp到其他三台机器的/usr/local
cp apache-rocketmq.tar.gz /usr/local/
cd /usr/local
scp apache-rocketmq.tar.gz [email protected]:/home/wy/
上面的scp,本人上传至用户文件夹下后,在三台机器分别执行(大家也可以使用root用户,直接传/usr/local目录)
cp /home/wy/apache-rocketmq.tar.gz /usr/local/
四、配置mq
1、解压mq(每台机器都执行)
mkdir /usr/local/rocketmq-4.2.0
cd /usr/local
tar -zxvf apache-rocketmq.tar.gz -C /usr/local/rocketmq-4.2.0
ln -s rocketmq-4.2.0/ rocketmq
解压并创建软连接(可以理解为windows的快捷方式)
2、创建存储路径(每台机器都执行)
mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index
3、配置4个主机的主从关系
序号 | IP | 角色 | 修改配置文件 | nameserver名 | broker名 |
1 | 40.125.171.200 | master | broker-a.properties | rocketmq-nameserver1 | rocketmq-maste1 |
2 | 40.125.201.109 | master | broker-b.properties | rocketmq-nameserver2 | rocketmq-maste2 |
3 | 40.125.160.62 | slave | broker-a-s.properties | rocketmq-nameserver3 | rocketmq-master1-slave1 |
4 | 139.219.110.31 | slave | broker-b-s.properties | rocketmq-nameserver4 | rocketmq-master2-slave1 |
a)在rocketmq-maste1 即 40.125.171.200 执行
vim /usr/local/rocketmq/conf/2m-2s-sync/broker-a.properties
内容为:
#所属集群名字
brokerClusterName=rocketmq-wy
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=01
#文件保留时间,默认 48 小时
fileReservedTime=72
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessaeThreadPoolNums=128
b)在rocketmq-maste2 即 40.125.201.109 执行
vim /usr/local/rocketmq/conf/2m-2s-sync/broker-b.properties
内容为:
#所属集群名字
brokerClusterName=rocketmq-wy
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=01
#文件保留时间,默认 48 小时
fileReservedTime=72
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessaeThreadPoolNums=128
c)在rocketmq-master1-slave1 即 40.125.160.62 执行
vim /usr/local/rocketmq/conf/2m-2s-sync/broker-a-s.properties
内容为:
#所属集群名字
brokerClusterName=rocketmq-wy
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=01
#文件保留时间,默认 48 小时
fileReservedTime=72
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessaeThreadPoolNums=128
d)在rocketmq-master2-slave1 即 139.219.110.31 执行
vim /usr/local/rocketmq/conf/2m-2s-sync/broker-b-s.properties
内容为:
#所属集群名字
brokerClusterName=rocketmq-wy
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=01
#文件保留时间,默认 48 小时
fileReservedTime=72
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessaeThreadPoolNums=128
e)配置hosts(每台主机都需要配置)
vi /etc/hosts
新增内容如下
40.125.171.200 rocketmq-nameserver1
40.125.171.200 rocketmq-master1
40.125.201.109 rocketmq-nameserver2
40.125.201.109 rocketmq-master2
40.125.160.62 rocketmq-nameserver3
40.125.160.62 rocketmq-master1-slave1
139.219.110.31 rocketmq-nameserver4
139.219.110.31 rocketmq-master2-slave1
f)修改日志配置文件(每台主机都需要配置)
mkdir -p /usr/local/rocketmq/logs
cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml
g)修改启动脚本
vim /usr/local/rocketmq/bin/runbroker.sh
将该参数修改为如下(注意:本次部署的都是7G内存,所以Xmx最大内存使用设置为6g了,最小设为2g,年轻代大小为1g,大家根据自己配置调整,但mq建议不要在1G及以下内存运行)
五、启动MQ
1、启动nameserver(每台主机都需要启动)
cd /usr/local/rocketmq/bin
nohup sh mqnamesrv &
2、启动brokerserver
a)在rocketmq-maste1 即 40.125.171.200 执行
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-a.properties >/dev/null 2>&1 &
b)在rocketmq-maste2 即 40.125.201.109 执行
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-b.properties >/dev/null 2>&1 &
c)在rocketmq-master1-slave1 即 40.125.160.62 执行
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-a-s.properties >/dev/null 2>&1 &
d)在rocketmq-master2-slave1 即 139.219.110.31 执行
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-b-s.properties >/dev/null 2>&1 &
六、部署rocketmq-console.war
yum install tomcat
cd /usr/share/tomcat/webapps/
wget https://github.com/duomu/rocketmq-console/raw/master/rocketmq-console.war
tomcat start
这个时候,我们没有配rocketmq-console的nameserver地址,启动仅为war解压
tomcat stop
vim /usr/share/tomcat/webapps/rocketmq-console/WEB-INF/classes/config.properties
将该文件如下参数改为:
rocketmq.namesrv.addr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
再次启动tomcat
tomcat start
访问http://40.125.171.200:8080/rocketmq-console
(注意ip换成自己tomcat的ip)
细心的小伙伴可能已经发现了,天呐,居然台机器一个ip,那我们接着看这三台ip相同的机器
三台独立的虚拟主机,居然同一个内网IP(ipv4),这4台主机使用的是微软云,那我们来看下阿里云是不是也有同样的问题。
然而阿里云并不相同,在实际的刀片机服务器上也没有出现此类问题,显然是跟微软云的网络配置有关,正好可以借此来学习另一个知识点,就是多网卡状态下或ip不对的状态下,如何指定broker的ip。(正常单网卡内网部署使用,不会用到下述配置)
在4台机器执行如下指令,先后停止broker和nameserver
cd /usr/local/rocketmq/bin
sh mqshutdown broker
sh mqshutdown namesrv
依次修改4台主机的/usr/local/rocketmq/conf/2m-2s-sync/broker-*.properties的IP为真实IP
参考 第四节,第3项,每台机器都新增 brokerIP1配置
重启nameserver和broker(参考 第五节,第2项)
至此rocketMQ4.2.0版本编译、双主双从同步双写模式搭建完成。
Ps:如有错误或不足之处,烦请各位大神指正。谢谢。