rocketMQ集群部署
RocketMQ集群部署
RocketMQ是一款非常优秀的消息中间件,运用的场景也是非常丰富,且在各大公司运用中也非常广泛。但是它是如何进行部署的呢,以及它的高可用是如何实现的呢。那么就由我来为大家讲解一哈RocketMQ是如何进行部署的。本篇文章中没有对mq中各个角色进行讲解,本文也默认大家对mq的各个角色已经有了一定的认识。博主在未来一周中会对mq的基础部分以及如何使用进行详解。
一、环境准备
虚拟机、JDK、RocketMQ环境包,
二、JDK、RocketMQ相关包准备
版本 | 名称 | 官方下载地址 | |
JDK | 1.8 |
jdk-8u321-linux-x64.tar.gz |
JDK官方下载地址 |
RocketMQ | 4.5.2 |
rocketmq-all-4.5.2-bin-release.zip |
|
rocketmq-dashboard | latest release | rocketmq-dashboard-master.zip | rocketMQ控制台下载地址 |
三、部署到Linxu系统并解压
上传文件可以使用XShell。
1、如果没有lrzsz工具,可以安装,否则:跳过这一步。命令:yum install lrzsz
2、上传:rz + 上传的文件
3、上传完所有的文件,进行解压。
4、jdk解压:tar -zxvf jdk-8u321-linux-x64.tar.gz -C /opt/jdk
5、rocketMQ解压:unzip -d /opt/rocketMQ rocketmq-all-4.5.2-bin-release.zip
6、rocketmq-dashboard在windows10解压。并修改一些配置,打包就可以使用了。具体的在本文最后一个目录有讲解。
7、配置JDK环境变量:(大家可能有疑惑为啥会配置JDK环境变量,原因:rocketMQ是JAVA语言开发出来的,所有要运行rocketMQ就必须安装JDK的环境。)
1、编辑/etc/profile文件 命令:vim /etc/profile 2、配置环境变量: export JAVA_HOME=/opt/soft/jdk1.8.0_261 export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 3、重新加载配置:source /etc/profile
4、查看是否配置成功。java -version
效果:
9、rocketMQ高可用有很多种方式,比如:单机部署,多主集群,双主双从同步部署,双主双从异步部署,以及多主多从部署。部署集群可按照自己公司的实际情况进行部署。
单机部署:只启动一个rocketMQ实例就可以了,一般常用来本机测试使用。原因:一旦rocketMQ因某些原因挂掉,导致mq无法使用,则我们服务器无法接受信息与消费信息等。
多主集群:只部署mq主节点,无部署从节点。优点:配置简单,单个Master宕机或重启维护对应用无影响,即使机器宕机不可恢复情况下,也有其他主节点进行写入操作,
消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
双主双从同步:部署四个节点,每个主节点都有一个从节点,主与从节点的信息通过同步的方式进行保存。优点:消息不会丢失,即:主节点挂了后,从节点的消息也不会造成丢失,只不过没法接受新消息,只能消费,但是能保证我消费的消息一定是准确的。缺点:客户端接受服务器响应时间长。可用于消息安全高的场景。
双主双从异步:与双主双从一致,只不过在主从数据传输是通过异步的方式,优点:客户端能快速的接收到服务器的消息,缺点:主节点挂的情况,从节点会丢失一部分消息。可用于允许消息丢失,吞吐量高的情景。
四、双主双从同步部署集群
1、启动虚拟机,至少准备两个ip,也可准备四个。
ip | broker名称 | 说明 |
192.168.0.129 | broker-a | a主节点 |
192.168.0.129 | broker-b-s | b从节点 |
192.168.0.130 | broker-b | b主节点 |
192.168.0.130 | borker-a-s | a从节点 |
2、修改mq的配置。 runserver.sh与runbroker.sh
原因:我启动的虚拟机的内存设置的是3G,而mq默认的JVM最小的堆内容是8G,太大了,不修改将无法启动。
修改命令:vim /mq目录/bin/runserver.sh,或vim /mq目录/bin/runbroker.sh ,大家可以根据虚拟机大小自行修改。如果想了解更多的这个可以了解JVM相关的知识。
1 1、runserver.sh 2 JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1g -Xmn128m -XX:metaspaceSize=120m -XX:MaxMetaspaceSize=320m" 3 2、runnbroker.sh 4 JAVA_OPT="${JAVA_OPT} -server -Xms520m -Xmx1G -Xmn128m"
3、修改conf目录中2m-2s-sync目录中的配置文件
broker-a.properties # 所属集群名字 brokerClusterName=myRocketmqCluster # broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配) brokerName=broker-a # 0 表示Master, > 0 表示slave brokerId=0 # 注册中心,可使用集群模式 namesrvAddr=192.168.0.129:9876;192.168.0.130:9876 # 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数 defaultTopicQueueNums=4 # 是否允许Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许Broker自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true # Broker 对外服务的监听端口 listenPort=10933 # 删除文件时间点,默认是凌晨4点 deleteWhen=04 # 文件保留时间,默认48小时 fileReservedTime=120 # commitLog每个文件的大小默认1G # 附加:消息实际存储位置,和ConsumeQueue是mq的核心存储概念,之前搭建2m环境的时候创建在store下面,
用于数据存储,consumequeue是一个逻辑的概念,消息过来之后,consumequeue并不是把消息所有保存起来,
而是记录一个数据的位置,记录好之后再把消息存到commitlog文件里 mapedFileSizeCommitLog=1073741824 # ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 destroyMapedFileIntervalForcibly=120000 redeleteHangedFileInterval=120000 # 检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 # 存储路径 storePathRootDir=/opt/rocketmq/store # commitLog存储路径 storePathCommitLog=/opt/rocketmq/commitlog # 消费队列存储路径 storePathConsumeQueue=/opt/rocketmq/consumequeue # 消息索引存储路径 storePathIndex=/opt/rocketmq/index # checkpoint 文件存储路径 storeCheckpoint=/opt/rocketmq/checkpoint # abort 文件存储路径 abortFile=/opt/rocketm/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=ASYNC_FLUSH checkTransactionMessageEnable=false # 发消息线程池数量 sendMessageTreadPoolNums=128 # 拉消息线程池数量 pullMessageTreadPoolNums=128
broker-b-s.properties
# 所属集群名字 brokerClusterName=myRocketmqCluster # broker名字,注意此处不同的配置文件填写的不一样(按配置文件文件名来匹配) brokerName=broker-a # 0 表示Master, > 0 表示slave brokerId=1 # 注册中心,可使用集群模式 namesrvAddr=192.168.0.129:9876;192.168.0.130:9876 # 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数 defaultTopicQueueNums=4 # 是否允许Broker 自动创建Topic,建议线下开启,线上关闭 autoCreateTopicEnable=true # 是否允许Broker自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true # Broker 对外服务的监听端口 listenPort=10900 # 删除文件时间点,默认是凌晨4点 deleteWhen=04 # 文件保留时间,默认48小时 fileReservedTime=120 # commitLog每个文件的大小默认1G # 附加:消息实际存储位置,和ConsumeQueue是mq的核心存储概念,之前搭建2m环境的时候创建在store下面,用于数据存储,
consumequeue是一个逻辑的概念,消息过来之后,consumequeue并不是把消息所有保存起来,而是记录一个数据的位置,
记录好之后再把消息存到commitlog文件里 mapedFileSizeCommitLog=1073741824 # ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 destroyMapedFileIntervalForcibly=120000 redeleteHangedFileInterval=120000 # 检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 # 存储路径 storePathRootDir=/opt/rocketmq/slave/store # commitLog存储路径 storePathCommitLog=/opt/rocketmq/slave/commitlog # 消费队列存储路径 storePathConsumeQueue=/opt/rocketmq/slave/consumequeue # 消息索引存储路径 storePathIndex=/opt/rocketmq/slave/index # checkpoint 文件存储路径 storeCheckpoint=/opt/rocketmq/slave/checkpoint # abort 文件存储路径 abortFile=/opt/rocketm/slave/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=ASYNC_FLUSH checkTransactionMessageEnable=false # 发消息线程池数量 sendMessageTreadPoolNums=128 # 拉消息线程池数量 pullMessageTreadPoolNums=128
这里面的核心:
brokerClusterName:只要是同一个集群里面的节点,都必须是这一个名称,可以自定义
brokerName:broker的名称,同一个broker的主从节点名称保持一致。
brokerId:broker的id标识。0:主节点,大于0都是从节点
namesrvAddr:nameSrv的注册中心地址,可以是集群模式,多个ip之间使用英文的;分隔
listenPort:监听端口,同一个ip地址下,端口不能保持一致,需修改
brokerRole:broker的角色,ASYNC_MASTER 异步复制Master,SYNC_MASTER 同步双写Master,SLAVE从节点专用。
flushDiskType:数据刷盘方式。ASYNC_FLUSH 异步刷盘,SYNC_FLUSH 同步刷盘
storePathRootDir=/opt/rocketmq/store 存储路径
storePathCommitLog=/opt/rocketmq/commitlog commitLog存储路径
storePathConsumeQueue=/opt/rocketmq/consumequeue 消费队列存储路径
storePathIndex=/opt/rocketmq/index消息索引存储路径
storeCheckpoint=/opt/rocketmq/checkpoint checkpoint 文件存储路径
abortFile=/opt/rocketm/abort abort 文件存储路径
4、192.168.0.130虚拟机重复上面的步骤即可。
5、两台虚拟机都已经部署完成了,开始对mq集群进行启动吧。先进入mq中bin目录中,如果配置了MQ的环境变量,就没必要进入bin目录中
1、先启动两台机子上的nameServer。nohup sh mqnamesrv &
2、在启动mq中129机子上的broker的节点。
集群中a主节点:nohup sh mqbroker -c /opt/soft/rocketmq/rocketmq-all-4.5.2-bin-release/conf/2m-2s-sync/broker-a.properties &
集群中b从节点:nohup sh mqbroker -c /opt/soft/rocketmq/rocketmq-all-4.5.2-bin-release/conf/2m-2s-sync/broker-b-s.properties &
3、启动的效果:
4、对130机子重复操作即可。
6、到这里,集群我们就部署完成了,但是在这里我们肯定有疑问我们怎么看到他就是部署成功了。要不我们写一段代码来进行测试。不要急,官方虽然提供了例子来操作,但是我们只能看到一堆的控制台数据呈现,不太好看。所以官方就提供了一个用于b端的页面的控制台。那我们就来对其进行配置部署吧。
五、rocketmq-dashboard 控制台部署
1、将下载好的压缩包解压到本地中,对resource目录中的application.yml的配置进行修改,目前我们只对nameServer的配置修改一哈,其他的配置我们先不动,注重看我加粗的地方。
rocketmq:
config:
# Linux系统中启动的nameServerd地址与端口
namesrvAddrs:
- 192.168.0.130:9876
- 192.168.0.129:9876
2、打包成jar包并上传到Linux系统中。打包的时间比较久,耐心等待。
打包注意事项:必须在src同级目录下使用这个命令(也就是可以看到pom.xml的目录)。mvn clean package -Dmaven.test.skip=true
如果看到这个就说明打包成功了。那就使用rz上传到Linux系统中。
3、启动dashborad。
nohup java -jar /opt/soft/rocketmq-dashboard-1.0.1-SNAPSHOT.jar &
查看 cat nohup.out ,看到这个就说明成功了。
4、关闭防火墙或开放端口号。
方式一:建议新手使用 1、关闭防火墙。 systemctl stop firewalld 方式二:生产环境使用 1、开放指定的端口号:firewall-cmd --zone=public --add-port=8080/tcp --permanent 2、重启防火墙:firewall-cmd --reload 注意:使用方式二,就需要将nameServer 与 broker 的端口也需要开放出来。使用了那个端口就必须开放出来,否则会被防火墙给阻挡。
5、效果,如果集群中把我们部署的都显示出来了,说明我们部署的没问题,放心的使用吧。
6、鉴权登录。
既然有b端可视化页面,那肯定也有我们登录验证撒,不然任何人知道我们的ip与端口都能看到了。官方是不可能这个玩的。那我们下面就来配置一哈登录校验。
1、还是对resource下的application.yml文件进行编辑。
rocketmq:
config:
loginRequired: true
2、对resource下的user.properties修改 这个配置文件是专门来登录账号的
用户名 密码 角色:1:管理员 0:普通用户
admin=123456,1
2、修改完了,重新打包上传运行即可。
3、效果