rocketMQ4.2.0版本编译及双主双从同步双写模式搭建

一、基础环境

       系统: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


rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第1张图片

    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

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第2张图片

 默认安装3.5.2版本

    c)执行编译打包

  mvn -Prelease-all -DskipTests clean package -U

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第3张图片

[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/

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第4张图片


四、配置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的快捷方式)


rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第5张图片


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及以下内存运行)

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第6张图片

五、启动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)

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第7张图片


细心的小伙伴可能已经发现了,天呐,居然台机器一个ip,那我们接着看这三台ip相同的机器

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第8张图片

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第9张图片

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第10张图片

三台独立的虚拟主机,居然同一个内网IP(ipv4),这4台主机使用的是微软云,那我们来看下阿里云是不是也有同样的问题。

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第11张图片

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第12张图片

然而阿里云并不相同,在实际的刀片机服务器上也没有出现此类问题,显然是跟微软云的网络配置有关,正好可以借此来学习另一个知识点,就是多网卡状态下或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配置

rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第13张图片


重启nameserver和broker(参考 第五节,第2项)


rocketMQ4.2.0版本编译及双主双从同步双写模式搭建_第14张图片

至此rocketMQ4.2.0版本编译、双主双从同步双写模式搭建完成。


Ps:如有错误或不足之处,烦请各位大神指正。谢谢。



你可能感兴趣的:(rocketmq)