Docker进行RocketMq集群部署方式
目录
文章目录隐藏
Docker 进行 RocketMq 集群部署方式如下。
环境
- (1)Centos7
- (2)JDK1.8
- (3)docker
- (4)rocketmq 4.8
两台服务器 ip
- A:192.168.5.49
- B:192.168.5.50
集群模式
1、单节点 :
- 优点:本地开发测试,配置简单,同步刷盘消息一条都不会丢
- 缺点:不可靠,如果宕机,会导致服务不可用
2、主从(异步、同步双写) :
- 优点:同步双写消息不丢失, 异步复制存在少量丢失 ,主节点宕机,从节点可以对外提供消息的消费,但是不支持写入
- 缺点:主备有短暂消息延迟,毫秒级,目前不支持自动切换,需要脚本或者其他程序进行检测然后进行停止 broker,重启让从节点成为主节点
3、双主:
- 优点:配置简单, 可以靠配置 RAID 磁盘阵列保证消息可靠,异步刷盘丢失少量消息
- 缺点: master 机器宕机期间,未被消费的消息在机器恢复之前不可消费,实时性会受到影响
4、双主双从,多主多从模式(异步复制)我们这里采用这种
- 优点:磁盘损坏,消息丢失的非常少,消息实时性不会受影响,Master 宕机后,消费者仍然可以从 Slave 消费
- 缺点:主备有短暂消息延迟,毫秒级,如果 Master 宕机,磁盘损坏情况,会丢失少量消息
5、双主双从,多主多从模式(同步双写)
- 优点:同步双写方式,主备都写成功,向应用才返回成功,服务可用性与数据可用性都非常高
- 缺点:性能比异步复制模式略低,主宕机后,备机不能自动切换为主机
概念
rocketmq 分为 Name Server 和 Broker Server
名字服务(Name Server)
名称服务充当路由消息的提供者。
生产者或消费者能够通过名字服务查找各主题相应的 Broker IP 列表。
多个 Namesrv 实例组成集群,但相互独立,没有信息交换。
是 Topic 路由注册中心,端口默认为 9876
代理服务器(Broker Server)
消息中转角色,负责存储消息、转发消息。
代理服务器在 RocketMQ 系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。
代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。
端口有三个:
- listenPort:默认 10911,接受客户端连接的监听端口,作为对 producer 和 consumer 使用服务的端口号,可以通过配置文件改
- haListenPort:默认为listenPort + 1,高可用服务监听端口,主要用于 slave 同 master 同步
- fastListenPort:默认为listenPort -2, 主要是 fastRemotingServer 服务使用,用于 VIP 通道
部署
1、安装 rmqnamesrv
两台的 rmqnamesrv 都直接运行即可,所有配置都用默认的即可
docker run -d --name rmqnamesrv \ -v /home/docker/rocketmq/data/namesrv/logs:/home/rocketmq/logs \ -p 9876:9876 \ --restart=always \ apacherocketmq/rocketmq:4.8.0-alpine sh mqnamesrv
2、安装 rmqbroker
docker run -d --name rmqbroker \ -v /home/docker/rocketmq/data/broker/logs:/home/rocketmq/logs \ --link rmqnamesrv:namesrv \ --restart=always \ -e "NAMESRV_ADDR=namesrv:9876" \ -p 10909:10909 -p 10911:10911 -p 10912:10912 \ apacherocketmq/rocketmq:4.8.0-alpine \ sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf
拷贝 rmqbroker 的配置文件到主机目录
docker cp rmqbroker:/home/rocketmq/rocketmq-4.8.0/conf /home/docker/rocketmq/data/broker/conf
编辑配置文件 broker.conf:
#切换到刚刚拷贝出来的文件夹下 cd /home/docker/rocketmq/data/broker/conf #编辑主节点配置文件 sudo vi broker.conf #编辑从节点配置文件 sudo vi broker-s.conf
主节点 broker.conf 内容
# 集群名称,取同一个 brokerClusterName = docker-mq-cluster # 节点名称,每个主节点取不一样的,另一个主节点我们取 broker-b,如果是主从节点名称保持一致 brokerName = broker-a #brokerName = broker-b # 主从标识,0 为主,其他大于 0 的为从,从只允许读,主可以读写 brokerId = 0 #未消费的持久化消息清理时间点,默认凌晨 4 点 deleteWhen = 04 #持久化消息保存周期(单位:小时) fileReservedTime = 48 #brocker 角色,异步主 #- ASYNC_MASTER 异步复制 Master #- SYNC_MASTER 同步双写 Master #- SLAVE brokerRole = ASYNC_MASTER #刷盘方式:异步刷盘 flushDiskType = ASYNC_FLUSH #节点 IP brokerIP1 = 192.168.5.49 #brokerIP1 = 192.168.5.50 #broker 的服务端口 listenPort=10911 #server 服务器地址和端口,多个用分号隔开 namesrvAddr=192.168.5.49:9876;192.168.5.50:9876 #延迟消息等级时间, #这个设置也影响全局的消费重试机制的间隔时间,消费重试机制走的就是延迟消息,这里设置后,第一次重试是在是失败的 10s 后(从第三个开始 ,DefaultMQPushConsumerImpl 源码中 setDelayTimeLevel(3 + msg.getReconsumeTimes()),舍去了前两个),第二次是上次失败的 30s 后,因为消费重试次数是 16 次(DefaultMQPushConsumerImpl 源码默认是 16 次),而我们 30s 后面没有设置了,他后面的 13 次都会按 30s 间隔去重试 messageDelayLevel = 1s 5s 10s 30s
从节点 broker-s.conf 内容
# 集群名称,取同一个 brokerClusterName = docker-mq-cluster # 节点名称,每个主节点取不一样的,另一个主节点我们取 broker-b,如果是主从节点名称保持一致 brokerName = broker-a #brokerName = broker-b # 主从标识,0 为主,其他大于 0 的为从,从只允许读,主可以读写 brokerId = 1 #未消费的持久化消息清理时间点,默认凌晨 4 点 deleteWhen = 04 #持久化消息保存周期(单位:小时) fileReservedTime = 48 #brocker 角色,从 #- ASYNC_MASTER 异步复制 Master #- SYNC_MASTER 同步双写 Master #- SLAVE brokerRole = SLAVE #刷盘方式:异步刷盘 flushDiskType = ASYNC_FLUSH #节点 IP brokerIP1 = 192.168.5.49 #brokerIP1 = 192.168.5.50 #broker 的服务端口,和主节点区分开 listenPort=11911 #server 服务器地址和端口,多个用分号隔开 namesrvAddr=192.168.5.49:9876;192.168.5.50:9876 #延迟消息等级时间 messageDelayLevel = 1s 5s 10s 30s
删除 rmqbroker 原容器
#t 停止容器 docker stop rmqbroker #删除容器 docker rm rmqbroker
重启启动 rmqbroker
启动主节点
docker run -d --name rmqbroker \ -v /home/docker/rocketmq/data/broker/logs:/home/rocketmq/logs \ -v /home/docker/rocketmq/data/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf \ --restart=always \ -p 10909:10909 -p 10911:10911 -p 10912:10912 \ apacherocketmq/rocketmq:4.8.0-alpine \ sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf
启动从节点
注意我们的启动命令,-p
后面的端口是和主节点不一样的,从节点和主节点区分开,我们就直接用 11909、11911、11912。
docker run -d --name rmqbroker-s \ -v /home/docker/rocketmq/data/broker-s/logs:/home/rocketmq/logs \ -v /home/docker/rocketmq/data/broker/conf/broker-s.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf \ --restart=always \ -p 11909:11909 -p 11911:11911 -p 11912:11912 \ apacherocketmq/rocketmq:4.8.0-alpine \ sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf
3、启动可视化页面 rocketmq-console-ng
在一台服务器安装可视化页面即可:
docker run -d -p 8080:8080 --name rocketmq-console-ng \ -v /home/docker/rocketmq/tmp:/tmp \ --restart=always \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.5.49:9876;192.168.5.50:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \ styletang/rocketmq-console-ng
结果验证
查看服务端和客户端日志无报错,查看可视化界面
http://192.168.5.49:8080
成功检测到两个服务端,集群状态也正常
以上就是关于 Docker 进行 RocketMq 集群部署方式全部内容,希望对大家有用,也希望大家多多支持码云笔记。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » Docker进行RocketMq集群部署方式
码云笔记 » Docker进行RocketMq集群部署方式