商务网站规划设计要点,做的好的企业网站,湘潭找工作网站,湖南网站排名优化公司rocketMQ集群双主双从同步模式(2m-2s-sync)搭建-CSDN博客
集群架构概念 在部署的时候首先要将nameserver启动起来#xff0c;之后就是将broker启动起来#xff0c;broker启动起来会将自己的信息注册到nameserver上面。之后再去创建topic#xff0c;因为发消息的逻辑和收消…rocketMQ集群双主双从同步模式(2m-2s-sync)搭建-CSDN博客
集群架构概念 在部署的时候首先要将nameserver启动起来之后就是将broker启动起来broker启动起来会将自己的信息注册到nameserver上面。之后再去创建topic因为发消息的逻辑和收消息的逻辑都是要基于topic来实现的。
有了topic才能将消息发到某个topic上面也就是某个主题上面这个topic是自己可以去建立的。这个topic就是用来区分消息的。
现在建立了topic1那么生产者就可以把消息往t1上面发。topic是建立在nameserver上面它其实是逻辑上面的概念。topic和broker在nameserver上面会形成映射的关系。具体物理的保存是保存在broker上面。也就是具体的topic和broker映射关系是保存在nameserver上面的具体topic对应的消息保存在broker上面。创建某个topic那么就在broker上面创建出来了
生产者启动了就要随机选择一个nameserver然后建立长连接。长连接的目的就是定期的获取topic信息。生产者就可以往topic对应的broker上发送消息。
生产者发送完消息了或者先启动消费者也行消费者这边也是随机选择nameserver建立长连接或得topic的信息它要去连接到broker上面从broker上面不断的去拉取数据消息。 RocketMQ集群模式 2m-2s表示两个master两个slaveasync是异步的刷盘方式sync是同步的刷盘方式。 为了追求更好的性能 RocketMQ 的最佳实践⽅式都是在集群模式下完成。 RocketMQ官⽅提供了三种集群搭建⽅式。 2主2从异步通信⽅式 使⽤异步⽅式进⾏主从之间的数据复制吞吐量⼤但可能会丢消息。 使⽤ conf/2m-2s-async ⽂件夹内的配置⽂件做集群配置。 2主2从同步通信⽅式 使⽤同步⽅式进⾏主从之间的数据复制保证消息安全投递不会丢失但影响吞吐量使⽤ conf/2m-2s-sync ⽂件夹内的配置⽂件做集群配置。 2主⽆从⽅式 会存在单点故障且读的性能没有前两种⽅式好。 使⽤ conf/2m-noslave ⽂件夹内的配置⽂件做集群配置。 Dledger⾼可⽤集群 上述三种官⽅提供的集群没办法实现⾼可⽤即在 master 节点挂掉后 slave 节点没办法⾃动被选举为新的master ⽽需要⼈⼯实现。 RocketMQ在 4.5 版本之后引⼊了第三⽅的 Dleger ⾼可⽤集群。 [rootlocalhost 2m-2s-sync]# ls -l
total 16
-rw-r--r--. 1 root root 928 Feb 22 2024 broker-a.properties
-rw-r--r--. 1 root root 922 Feb 22 2024 broker-a-s.properties
-rw-r--r--. 1 root root 928 Feb 22 2024 broker-b.properties
-rw-r--r--. 1 root root 922 Feb 22 2024 broker-b-s.propertiesbroker-a.properties broker-b.properties 描述的是两个master
broker-a-s.properties broker-b-s.properties 描述的是两个master对应的从节点两主两从之间使用的是异步刷盘的方式防火墙配置两台机器都要执行 可以开放端口此处本地实现简单粗暴点儿直接关闭防火墙 #检查状态 systemctl status firewalld #关闭防火墙 systemctl stop firewalld #禁止防火墙开机启动 systemctl disable firewalld 启动两台nameserver 服务器1192.168.136.66 broker-a master ,broker-b-s slave nameserver Master1,Slave2 服务器2192.168.136.67 broker-bmaster,broker-a-sslave nameserver Master2,Slave1 启动 RocketMQ 服务需要先启动 NameServer 。 在bin ⽬录内使⽤静默⽅式启动。 nameserver 是⼀个轻量级的注册中⼼ broker 把⾃⼰的信息注册到 nameserver 上。 ⽽且nameserver 是⽆状态的直接启动即可。三台 nameserver 之间不需要通信 ⽽是被请求⽅来关联三台nameserver 的地址。 修改启动脚本 修改配置文件runserver.sh主要是修改JVM参数:因为rocketmq默认配置的JVM参数太大本地资源有限所以就改小点儿 JAVA_OPT${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -
XX:MetaspaceSize128m -XX:MaxMetaspaceSize320m 在每台服务器的bin⽬录下执⾏如下命令 cd /usr/local/rocketmq/bin
nohup sh mqnamesrv 21
查看bin/nohup.out显示如下内容表示启动成功
[rootlocalhost bin]# cat nohup.out
OpenJDK 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
OpenJDK 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
The Name Server boot success. serializeTypeJSON 创建消息存储路径
因为同一台机器主从节点共用存储路径会冲突报错这里我们分别创建两个目录避坑我们在下一步中配置文件就用对应的路径就可以了
#主节点使用目录
mkdir -p /usr/local/rocketmq/broker-a-master/store
mkdir -p /usr/local/rocketmq/broker-b-slave/store#从节点使用目录
mkidr -p /usr/local/rocketmq/broker-a-slave/store
mkdir -p /usr/local/rocketmq/broker-b-master/storebroker配置文件配置文件修改如下 配置文件位置在conf文件目录下。我们使用2m-2s-sync文件夹里面的配置这个就是对应双主-双从-同步集群
下面配置文件可直接使用 各配置文件主要区别有主要有以下几个点brokerName、brokerId、listenPort、brokerRole、flushDiskType、存储路径 首先对192.168.136.66机器上要部署的master1和slave2配置文件进行修改
编辑broker-a.properties:
[rootlocalhost 2m-2s-sync]# cat broker-a.properties
#所属集群名称
brokerClusterNamerocketmq-cluster
#broker名字注意此处不同的配置文件填写的不一样;主从节点一样也就是这个值区分broker组的
brokerNamebroker-a
#主从标识0 表示Master, 0 表示Slave同一个组中区分主从的标识只能有一个主
brokerId0
#nameServer地址分号分割
namesrvAddr192.168.136.66:9876;192.168.136.67:9876
#在发消息时自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums4
#是否允许Broker自动创建Topic建议线下开启线上关闭
autoCreateTopicEnabletrue
#是否允许Broker自动创建订阅组建议线下开启线上关闭
autoCreateSubscriptionGrouptrue
#Broker 对外服务的监听端口
listenPort10911
#删除长期无用文件时间点默认凌晨4点
deleteWhen04
#文件保留时间h默认48小时
fileReservedTime48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog1073741824
#ConsumeQueue每个文件默认存30W条根据业务情况调整
mapedFileSizeConsumeQueue300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio88
#存储路径
storePathRootDir/usr/local/rocketmq/broker-a-master/store
#commitLog存储路径
storePathCommitLog/usr/local/rocketmq/broker-a-master/store/commitlog
#消费队列存储路径
storePathConsumeQueue/usr/local/rocketmq/broker-a-master/store/consumequeue
#消息索引存储路径
storePathIndex/usr/local/rocketmq/broker-a-master/store/index
#checkpoint 文件存储路径
storeCheckPoint/usr/local/rocketmq/broker-a-master/store/checkpoint
#abort 文件存储路径
abortFile/usr/local/rocketmq/broker-a-master/store/abort
#限制的消息大小
maxMessageSize65536
#broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE 从节点
brokerRoleASYNC_MASTER
#刷盘策略
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskTypeSYNC_FLUSH
#checkTransactionMessageEnablefalse
#发消息线程池数量
#sendMessageThreadPoolNums128
#拉消息线程池数量
#pullMessageThreadPoolNums128
编辑broker-b-s.properties:
[rootlocalhost 2m-2s-sync]# cat broker-b-s.properties
#所属集群名称
brokerClusterNamerocketmq-cluster
#broker名字注意此处不同的配置文件填写的不一样
brokerNamebroker-b
#主从标识0 表示Master, 0 表示Slave
brokerId1
#nameServer地址分号分割
namesrvAddr192.168.136.66:9876;192.168.136.67:9876
#在发消息时自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums4
#是否允许Broker自动创建Topic建议线下开启线上关闭
autoCreateTopicEnabletrue
#是否允许Broker自动创建订阅组建议线下开启线上关闭
autoCreateSubscriptionGrouptrue
#Broker 对外服务的监听端口
listenPort11011
#删除长期无用文件时间点默认凌晨4点
deleteWhen04
#文件保留时间h默认48小时
fileReservedTime48
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog1073741824
#ConsumeQueue每个文件默认存30W条根据业务情况调整
mapedFileSizeConsumeQueue300000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio88
#存储路径
storePathRootDir/usr/local/rocketmq/broker-b-slave/store
#commitLog存储路径
storePathCommitLog/usr/local/rocketmq/broker-b-slave/store/commitlog
#消费队列存储路径
storePathConsumeQueue/usr/local/rocketmq/broker-b-slave/store/consumequeue
#消息索引存储路径
storePathIndex/usr/local/rocketmq/broker-b-slave/store/index
#checkpoint 文件存储路径
storeCheckPoint/usr/local/rocketmq/broker-b-slave/store/checkpoint
#abort 文件存储路径
abortFile/usr/local/rocketmq/broker-b-slave/store/abort
#限制的消息大小
maxMessageSize65536
#broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE 从节点
brokerRoleSLAVE
#刷盘策略
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskTypeASYNC_FLUSH
#checkTransactionMessageEnablefalse
#发消息线程池数量
#sendMessageThreadPoolNums128
#拉消息线程池数量
#pullMessageThreadPoolNums128