RocketMQ生产拓扑结构

● Console管理平台:管理RocketMQ生产者组、Topic、消费者组和RocketMQ元数据的平台。管理平台可以自研,也可以基于社区提供的RocketMQ Console二次开发而来,或者直接使用社区提供的RocketMQ Console。
● Namesrv集群:一个无状态的元数据管理,Namesrv相当于RocketMQ的注册中心,提供节点发现。
● Broker集群:消息中间商或消息代理。主要用于保存消息,处理生产者、消费者的各种请求的代理。包含Master和Slave两种角色,与MySQL中的主从角色类似。
● 生产者集群:消息发送方,通常由一个或多个生产者实例组成。
● 消费者集群:消息接收方,通常由一个或多个消费者实例组成。
RocketMQ的部署模式
● Namesrv部署
推荐一个集群并部署2~3个Namesrv节点。
● Broker集群部署
1. 单 Master。“集群”中只有一个节点,宕机后不可用。通常用于个人入门学习,比如测试发送消息代码、测试消费消息代码等,建议在生产环境中不要使用这种部署方式。
2. 单 Master,单 Salve。单主从模式,Master 宕机后集群不可写入消息,但可以读取消息。通常用于个人深入学习,比如研究源码、设计原理等,建议在生产环境中不要使用这种部署方式。
3. 多Master,无Salve。该种部署方式性能最好,并且当单个Master节点宕机时,不影响正常使用。
4. 多Master、多Slave,异步复制。在第三种方式上增加了Slave,当一个Master节点宕机时,该Master不能写入消息,消费可以在其对应的Slave上进行。新消息的生产、消费不受影响。添加Salve后,消费者可以从对应的Slave中读取已发送到宕机Master中的消息。生产环境中可以使用这种部署方式。
5. 多 Master、多Slave,同步复制。这种部署方式完全解决了第四种部署方式的弊端,虽然由于Master-Salve同步复制导致发送消息耗时增加,集群性能大大下降,但是这仍然是最可靠的部署方式。生产环境中可以使用这种部署方式。
RocketMQ单Master部署
● 部署NameServer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| # 修改IP地址到103 cd /etc/sysconfig/network-scripts sed -i 's/dhcp/static/g' ifcfg-ens33 sudo cat >> ifcfg-ens33 <<-'EOF' IPADDR=192.168.31.103 GATEWAY=192.168.31.1 NETMASK=255.255.255.0 DNS1=114.114.114.114 DNS2=8.8.8.8 EOF service network restart # YUM安装OpenJDK 1.8 yum -y install java-1.8.0-openjdk-devel.x86_64 sudo cat >> /etc/profile <<-'EOF' export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH EOF source /etc/profile echo $JAVA_HOME
unzip rocketmq-all-4.9.2-bin-release.zip cd /usr/local/rocketmq-4.9.2 sed -i 's/-Xms4g -Xmx4g -XX:MetaspaceSize=128m/-Xms1g -Xmx1g - XX:MetaspaceSize=128m/g' ./bin/runserver.sh firewall-cmd --zone=public --add-port=9876/tcp --permanent firewall-cmd --reload # sh ./bin/mqnamesrv nohup sh ./bin/mqnamesrv > nqnamesrv.log &
|
● 部署Master
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| cd /etc/sysconfig/network-scripts sed -i 's/dhcp/static/g' ifcfg-ens33 sudo cat >> ifcfg-ens33 <<-'EOF' IPADDR=192.168.31.105 GATEWAY=192.168.31.1 NETMASK=255.255.255.0 DNS1=114.114.114.114 DNS2=8.8.8.8 EOF service network restart
yum -y install java-1.8.0-openjdk-devel.x86_64 sudo cat >> /etc/profile <<-'EOF' export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH EOF source /etc/profile echo $JAVA_HOME
unzip rocketmq-all-4.9.2-bin-release.zip cd /usr/local/rocketmq-4.9.2 sed -i 's/-Xms8g -Xmx8g/-Xms1g -Xmx1g/g' ./bin/runbroker.sh cat > single-master.properties <<-'EOF' #集群名称,同一个集群下的broker要求统一 brokerClusterName=DefaultCluster #broker名称 brokerName=broker-a #brokerId=0代表主节点,大于零代表从节点 brokerId=0 #删除日志文件时间点,默认凌晨 4 点 deleteWhen=04 #日志文件保留时间,默认 48 小时 fileReservedTime=48 #Broker 的角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master brokerRole=SYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘,性能好宕机会丢数 #- SYNC_FLUSH 同步刷盘,性能较差不会丢数 flushDiskType=SYNC_FLUSH #末尾追加,NameServer节点列表,使用分号分割 namesrvAddr=192.168.31.103:9876 autoCreateTopicEnable=true EOF firewall-cmd --zone=public --add-port=10911/tcp --permanent firewall-cmd --reload # sh ./bin/mqbroker -c ./single-master.properties nohup sh ./bin/mqbroker -c ./single-master.properties > broker.log & cd /usr/local/rocketmq-4.9.2/bin sh mqadmin clusterList -n 192.168.31.103:9876 cd /usr/local/rocketmq-4.9.2/bin export NAMESRV_ADDR=192.168.31.103:9876 sh tools.sh org.apache.rocketmq.example.quickstart.Producer cd /usr/local/rocketmq-4.9.2/bin export NAMESRV_ADDR=192.168.31.103:9876 sh tools.sh org.apache.rocketmq.example.quickstart.Consumer
|
部署RocketMQ (Console)Dashboard监控
Github官网首页
https://github.com/apache/rocketmq-dashboard
Dashboard中文文档
https://github.com/apache/rocketmq-dashboard/blob/master/docs/1_0_0/UserGuide_CN.md
下载Dashboard Jar包
https://developer.aliyun.com/mvn/search 搜索 rocketmq-dashboard
RocketMQ启动方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #安装JDK8 yum -y install java-1.8.0-openjdk-devel.x86_64 sudo cat >> /etc/profile <<-'EOF' export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH EOF source /etc/profile echo $JAVA_HOME #开放端口8080 firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload #下载启动dashboard wget --no-check-certificate https://manongbiji.oss-cn-beijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-dashboard-1.0.0.jar # java -jar rocketmq-dashboard-1.0.0.jar nohup java -jar rocketmq-dashboard-1.0.0.jar > dashboard.log &
|