RockeyMQ集群代建
1:单节点
优点:配置简单,同步方式发送,消息一条都不会丢失.
缺点:要是宕机的话,就不可用了,在测试环境用的比较多.
2:主从模式
优点:如果主节点宕机了,从节点还能对外进行消费,但不支持写入
缺点:存在着短暂的延时,主从同步需要时间,但都是毫秒级别的,目前的话不支持主从切换,只能通过shell脚本进行检测,停止broker进行重启主从切换
3:双主
优点:配置简单,可以通过RAID磁盘策列确保一个消息的可靠性
缺点:master宕机期间,未被消费的消息都不能进行一个对外的提供,影响可用性
4:双主双重 (异步刷盘)
优点:磁盘损坏,丢失的消息非常的少,master宕机了,任然可以重slave去获取消费
缺点:主备同步存在短暂的延时
5:双主双重,多主多重模式(同步方式)
优点:同步双写方式,主备成功后才返回,可用性非常的高
缺点:性能会比异步的底
一般公司用的主要是 2,4,5
官方架构图
双主双重同步双写模式,producer和Consumer交互需要从NameSvr获取相当于的路由信息进行交互
1、Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
2、每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。
3、Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息。
4、Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息。
5.broker分为master和slave,一个master对应多个slave 但一个slave只能有一个master
同步刷盘和异步刷盘
同步刷盘安全性高,用户请求进来到应用常驻内存,在保存到磁盘,最后响应给用户
异步刷盘:性能高,用户请求进来到应用常驻内存直接返回,再去更新磁盘,但数据不可靠,假设在返回的瞬间宕机了,数据也丢失了
同步双写,异步刷盘
同步双写就是用户请求进来,发送到master主节点,在同步到slave从节点,最后返回给用户,异步刷盘就是主从节点各自开个线程去备份磁盘,假设master宕机了,也不影响slave的数据备份,数据安全性高,如果master和slave都宕机了,那数据就丢失了,这种概率非常的小
主从代建:
准备两台服务器,安装JDK,MAVEN
如果服务器内存没4G的话,各自修改内存配置
修改 distribution/target/apache-rocketmq/bin/runserver.sh
vi runserver.sh
1 修改完成后 按Esc键 :wq 保存
守护进程启动 nohup sh bin/mqnamesrv &
查看启动日志 tail -f nohup.out
jps 查看进程,NameSer启动成功
另一台服务器做相同的操作
主服务器节点配置
进入 conf 文件
2m-2s-async 两主两从 异步方式
2m-2s-sync 两主两从同步方式
2m-noslave 两主没有从节点
配置 2m-2s-async
broker-a.properties master 主节点配置
broker-a-s.properties master 主节点对应的从节点配置
broker-b.properties 主节点2配置
broker-b-s.properties 主节点2对应的从节点配置
主从的话只用第一个就行了
编辑 vi broker-a.properties
namesrvAddr :配置主从的ip,用逗号分隔
brokerClusterName :集群的名称
修改 namesrvAddr 主从IP地址
brokerId=1 从节点
回退到 rockeymq 目录
sh bin/mqshutdown broker 停止broker
sh bin/mqshutdown namesrv 停止nameSrv
服务器 1 启动主节点 nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
服务器 2 启动从节点
控制台查看是否代建成功
进入 rocketmq-externals-master/rocketmq-console 修改两个东西
1: vi pom.xml 官方的版本号 去掉后面的字母
2:进入 rocketmq-externals-master/rocketmq-console/src/main/resources 修改 application.properties
vi application.properties
回退到 rocketmq-externals-master/rocketmq-console
打包 mvn install -Dmaven.test.skip=true
打包完成后生成一个 target 目录 进入 target
守护进程启动
nohup java -jar rocketmq-console-ng-1.0.0.jar &
外网访问控制台 外网ip:8080
代建成功:
1:打不开的话可以到服务器安全组配置相对应的开放端口号
2: