/*****************【安装RocketMQ】****************/
一.单Master模式
1.下载安装包
http://rocketmq.apache.org/dowloading/releases/
下载.zip版本的包,我这里下载的是4.4.0版本
2.创建文件夹,上传到服务器并解压,修改解压后的文件夹名称
cd /usr/local
rz
unzip rocketmq-all-4.4.0-bin-release.zip
mv rocketmq-all-4.4.0-bin-release rocketmq
3.在rocketmq文件夹下面创建一些文件夹用来存储日志文件和消息队列文件
logs:存储日志文件信息
store:存储数据文件目录
下面3个文件夹路径在broker配置文件中指定,在store下创建,
commitlog:存储队列消息信息
consumequeue:存储队列消息的索引条目信息
index:存储队列消息的索引数据
cd /usr/local/rocketmq
mkdir logs
mkdir store
cd store
mkdir commitlog
mkdir consumequeue
mkdir index
4.修改配置文件
2m-2s-async:2主2从异步复制
2m-2s-sync:2主2从同步复制
2m-noslave: 2主没有从
1.进入到2m-2s-async目录
broker-a.properties: a节点主配置文件
broker-a-s.properties:a节点从配置文件
broker-b.properties:b节点主配置文件
borker-b-s.properties:b节点从配置文件
3.进入rocketmq配置文件目录,替换默认的broker-a.properties配置文件
cd /usr/local/rocketmq/conf/2m-2s-async/
把默认的broker-a.properties配置文件修改为下面内容
注意:
1.namesrvAddr 对应的地址是hosts文件对应的名称
2.几个存储路径需要修改为之前创建过的文件对应的路径
3.如果是在window电脑上修改的文件,上传后需要修改文件类型为unix
vi broker-a.properties
set ff=unix
:wq
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.247.129:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/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=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
4.修改日志配置文件的路径为自己创建的目录路径
这里的三个log.xml文件里面都有${user.home},需要批量替换为自己创建的目录路径 ,我这里是 /usr/local/rocketmq
注意:这里批量替换的语法:
sed -i ‘s#原字符#替换后字符#g’ 替换的文件,
Mac:
sed -i '' 's#${user.name}#/usr/local/rocketmq#g' *.xml
Linux:
sed -i 's#${user.name}#/usr/local/rocketmq#g' *.xml
5.启动rocketmq
1.由于rocketmq的使用内存要求很高,需要修改默认的启动文件内存参数
修改runserver.sh文件内存参数和runbroker.sh文件内存参数
8g,4g和2g的参数都改为1g
vi runserver.sh
vi runbroker.sh
修改后的文件
2.先启动mqnamesrv,
注意:这里的前提是服务器已经配置了$JAVA_HOME环境变量,否则启动的时候将会报错
nohup sh mqnamesrv >/dev/null 2>&1 &
如果这里想修改namesrv的默认端口9876,需要创建一个配置文件,启动的时候指定配置文件
切换到配置文件夹下面
cd /usr/local/rocketmq/conf
新建配置文件
vim namesrv.properties
listenPort=9877
:wq保存
启动namesrv的时候指定配置文件
nohup sh mqnamesrv -c /usr/local/rocketmq/conf/namesrv.properties >/dev/null 2>&1 &
3.再启动broker
注意:这里的 /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties 路径是刚刚修改配置文件的路径
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties > /dev/null 2>&1 &
启动日志都在 /logs/rocketmqlogs/下面查看
二.
多Master多Slave模式
集群特点
(1)NameServer:是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
(2)Broker:部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer。
(3)Producer:与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
(4)Consumer:与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从NameServer取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。
集群工作流程
(1)启动NameServer,NameServer起来后监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制中心。
(2) Broker启动,跟所有的NameServer保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有Topic信息。注册成功后,NameServer集群中就有Topic跟Broker的映射关系。
(3)收发消息前,先创建Topic,创建Topic有2种方法
(3.1)手动创建Topic:NameServer服务器上rocketmq的bin目录通过指令新增或者consolse后台添加
(3.2)自动创建Topic:broker.properties配置autoCreateTopicEnable=true,Broker会预先创建【”BW102″topic】并将其注册在NameServer上,Producer发送消息时,
如果是第一次发送该Topic,那么在Nam-eServer上找不到该Topic的注册信息,此时会默认用【”BW102″topic】的路由信息,Topic名称还是Producer的名称,只是”盗用”了【”BW102″topic】的路由信息,
下一次Producer发送该Topic时,就不需要用默认的【”BW102″topic】的路由信息了。
(4)Producer发送消息,启动时先跟NameServer集群中的其中一台建立长连接,并从NameServer中获取当前发送的Topic存在哪些Broker上,轮询从队列列表中选择一个队列,然后与队列所在的Broker建立长连接从而向Broker发消息。
(5)Consumer跟Producer类似,跟其中一台NameServer建立长连接,获取当前订阅Topic存在哪些Broker上,然后直接跟Broker建立连接通道,开始消费消息。
关于同步异步
(1)同步复制:消息进入master节点之后,master会把数据复制到slave节点,复制成功之后再会给客户端返回成功消息,效率较低,但是数据安全性高(数据安全性高,性能低一点)
(2)异步复制:消息发送到master节点之后,master将给客户端返还成功消息,并异步的将消息复制到slave节点,效率较高,但是由于是异步复制,不能百分百保证数据复制成功(数据可能丢失,性能高)
(3)同步刷盘:消息进来之后,broker获取到消息,内存中消息一有更新,马上会往磁盘里头写入数据
(4)异步刷盘:异步刷盘数据可能丢失,但是性能会更高,因为同步刷盘是消息进入内存之后,不会马上返回,等把数据存入磁盘之后才会返回成功,异步刷盘是把消息存入内存之后就会马上返回,异步将数据存入磁盘中,所以异步刷盘性能会比同步刷盘性能更高
RocketMQ 集群部署模式
单 master 模式:
优点:除了配置简单没什么优点,适合个人学习使用。
缺点:不可靠,该机器重启或宕机,将导致整个服务不可用。
多 master 模式:
多个 master 节点组成集群,单个 master 节点宕机或者重启对应用没有影响。
优点:所有模式中性能最高
缺点:单个 master 节点宕机期间,未被消费的消息在节点恢复之前不可用,消息的实时性就受到影响。
注意:使用同步刷盘可以保证消息不丢失,同时 Topic 相对应的 queue 应该分布在集群中各个节点,而不是只在某各节点上,否则,该节点宕机会对订阅该 topic 的应用造成影响。
多 master 多 slave 异步复制模式:
在多 master 模式的基础上,每个 master 节点都有至少一个对应的 slave。master
节点可读可写,但是 slave 只能读不能写,类似于 mysql 的主备模式。
优点: 在 master 宕机时,消费者可以从 slave读取消息,消息的实时性不会受影响,性能几乎和多 master 一样。
缺点:使用异步复制的同步方式有可能会有消息丢失的问题。
多 master 多 slave 同步双写模式:
同多 master 多 slave 异步复制模式类似,区别在于 master 和 slave 之间的数据同步方式。
优点:同步双写的同步模式能保证数据不丢失。
缺点:发送单个消息 RT 会略长,性能相比异步复制低10%左右。
刷盘策略:同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)
同步方式:同步双写和异步复制(指的一组 master 和 slave 之间数据的同步)
注意:要保证数据可靠,需采用同步刷盘和同步双写的方式,但性能会较其他方式低
下面采用的就是【异步复制,异步刷盘】的模式:
1.服务器环境
IP | 角色 | 架构模式 |
192.168.247.129 | nameserver1 | broker-master1 |
192.168.247.130 | nameserver2 | broker-slave1 |
192.168.247.131 | nameserver3 | broker-master2 |
192.168.247.132 | nameserver4 | broker-slave2 |
2.4台服务器都按照上面步骤安装rocketmq
3.开放4台服务器的rocketmq防火墙端口
firewall-cmd --permanent --add -port=9876/tcp
firewall-cmd --permanent --add -port=10909/tcp
firewall-cmd --permanent --add -port=10911/tcp
firewall-cmd --reload
4.修改4台服务器的2m-2s-async目录下面对应的配置文件,这里根据主从不同,替换的配置文件也不同
(1)broker-master1
服务器:192.168.247.129
配置文件:broker-a.properties
配置内容:
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.247.129:9876;192.168.247.130:9876;192.168.247.131:9876;192.168.247.132:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/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
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
(2)broker-slave1
服务器:192.168.247.130
配置文件:broker-a-s.properties
配置内容:
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.247.129:9876;192.168.247.130:9876;192.168.247.131:9876;192.168.247.132:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/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
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
(3)broker-master2
服务器:192.168.247.131
配置文件:broker-b.properties
配置内容:
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.247.129:9876;192.168.247.130:9876;192.168.247.131:9876;192.168.247.132:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/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
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
(4)broker-slave2
服务器:192.168.247.132
配置文件:broker-b-s.properties
配置内容:
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.247.129:9876;192.168.247.130:9876;192.168.247.131:9876;192.168.247.132:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/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
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
5.启动服务
先启动nameserver:4台服务器都相同
cd /usr/local/rocketmq/bin/
nohup sh mqnamesrv >/dev/null 2>&1 &
再启动broker:4台服务器分别启动
cd /usr/local/rocketmq/bin/
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties > /dev/null 2>&1 &
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties > /dev/null 2>&1 &
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b.properties > /dev/null 2>&1 &
nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties > /dev/null 2>&1 &
打开管理后台界面能看到4台服务器集群
/*****************【安装RocketMq-Externals监控平台】****************/
1.github下载监控平台源码:
GitHub – apache/rocketmq-externals: Mirror of Apache RocketMQ (Incubating)
2.解压后打开文件夹
3.修改application.properties配置文件的namesrvAddr为实际的namesrv地址
4.修改配置后需要重新编译jar包,切换到target目录,并执行rocketmq-console-ng-1.0.1.jar包,浏览器输入http://localhost:8080 就能看到管理页面,默认端口也可以改
注意:如果是本机控制台访问服务器的rocketmq,需要开放服务器的几个端口
firewall-cmd --permanent --add -port=9876/tcp
firewall-cmd --permanent --add -port=10909/tcp
firewall-cmd --permanent --add -port=10911/tcp
firewall-cmd --reload
/*****************【安装RocketMq-设置开机自启】****************/
1.切换到etc目录下,上传rocketmq启动脚本
cd /etc/init.d
rz
脚本内容:
注意:
1.修改JAVA_HOME路径和ROCKETMQ_HOME为自己的路径
2.如果是windows系统编辑的脚本上传,上传后需要将dos文件类型修改为unix文件类型
3. nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties > ${BROKER_LOG} > /dev/null 2>&1 &
这里我开启的是broker-a的主节点配置,如果是多主多从的集群方案,这里要修改为对应的broker.properties
vi rocketmq
set ff=unix
:wq
#!/bin/sh
#
# rocketmq - this script starts and stops the rocketmq daemon
#
# chkconfig: - 85 15
export JAVA_HOME=/usr/local/java/jdk1.8.0_231
export PATH=$JAVA_HOME/bin:$PATH
ROCKETMQ_HOME=/usr/local/rocketmq
ROCKETMQ_BIN=${ROCKETMQ_HOME}/bin
ADDR=`hostname -i`:9876
LOG_DIR=${ROCKETMQ_HOME}/logs/rocketmqlogs
NAMESERVER_LOG=${LOG_DIR}/namesrv.log
BROKER_LOG=${LOG_DIR}/broker.log
start() {
if [ ! -d ${LOG_DIR} ];then
mkdir ${LOG_DIR}
fi
cd ${ROCKETMQ_HOME}
nohup sh bin/mqnamesrv > ${NAMESERVER_LOG} > /dev/null 2>&1 &
echo -n "The Name Server boot success..."
nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties > ${BROKER_LOG} > /dev/null 2>&1 &
echo -n "The broker[%s, ${ADDR}] boot success..."
}
stop() {
cd ${ROCKETMQ_HOME}
sh bin/mqshutdown broker
sleep 1
sh bin/mqshutdown namesrv
}
restart() {
stop
sleep 5
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 2
esac
2.赋予启动脚本执行权限和开机权限
chmod +x rocketmq
chkconfig --add rocketmq
chkconfig rocketmq on
ckconfig --list
/*****************【安装Nacos】****************/
一.下载安装包
下载tar.gz版本的bin文件
Release 1.4.1 (Jan 15, 2021) · alibaba/nacos · GitHub
二.解压安装
tar -zxvf nacos-server....
三.单机模式
1.启动nacos-server
cd bin
./startup.sh -m standalone
2.启动成功
3.防火墙打开8848端口,浏览器输入
http://192.168.247.129:8848/nacos/
账号密码默认都是nacos,即表示开启成功
四.集群模式
1.服务器环境
IP | 角色 | 架构模式 |
192.168.247.129 |
AP:分片模式,无Leader,Follower之分,各自负责自己片区的读写请求 CP:Leader节点,负责读写操作 |
AP/CP |
192.168.247.130 |
AP:分片模式,无Leader,Follower之分,各自负责自己片区的读写请求 CP:Follower节点,只负责读操作,写操作转发给Leader |
AP/CP |
192.168.247.131 |
AP:分片模式,无Leader,Follower之分,各自负责自己片区的读写请求 CP:Follower节点,只负责读操作,写操作转发给Leader |
AP/CP |
这里我使用的是默认的AP模式来部署集群
2.重命名cluster.example.conf 配置文件为 cluster.conf,填写3台服务器的ip地址和端口
.
3.利用nginx来做负载均衡请求转发到3台服务器上面,我这里指定监听的端口是8888,注意这里要开放3个端口的防火墙,不然可能会出现集群数据无法同步的问题
8888:nginx监听端口
8848:服务注册端口
7748:集群服务器之间同步通信端口,这个很容易忽视
4.打开nacos控制台页面
5.maven依赖
<!--Nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--NacosConfig-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--OpenFeign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--Sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
6.开启服务发现和注册
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
@MapperScan("com.study.dao.mapper")
public class NacosProductApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProductApplication.class, args);
}
}
7.bootstrap.yml
#注意一点: bootstrap.yml文件 只能用于SpringCloud项目,优先级高于application.yml文件
#如果仅仅是 SpringBoot项目,无法读取到bootstrap.yml文件
spring:
cloud:
#Nacos配置
nacos:
#配置中心
config:
group: nacos
#无nginx
#server-addr: 192.168.247.129:8848,192.168.247.130:8848,192.168.247.131:8848
#配置了nginx的集群
server-addr: 192.168.247.129:8888
username: nacos
password: nacos
enabled: true
refresh-enabled: true
#默认是properties
file-extension: yml
#配置中心会找
# application-name + "-" + profile + "." + file-extension
# nacos-product-dev.yml
8.application.yml
server:
port: 10002
spring:
application:
name: nacos-product
profiles:
active: @spring.profile.active@
cloud:
#Nacos配置
nacos:
#注册和发现中心配置
discovery:
group: nacos
#无nginx
#server-addr: 192.168.247.129:8848,192.168.247.130:8848,192.168.247.131:8848
#配置了nginx的集群
server-addr: 192.168.247.129:8888
username: nacos
password: nacos
#namespace: 636047c4-db75-4167-9b85-671b67a636a2
#Sentinel配置
sentinel:
#开启sentinel自动向面板注册功能
enabled: true
transport:
#sentinel注册面板地址
dashboard: 192.168.247.129:8080
#sentinel向面板通信注册的端口
port: 8719
#关闭sentinel默认对所有servlet请求的埋点,需要自定义埋点才能生效
filter:
enabled: true
#Mysql数据库配置
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://192.168.247.129:3306/ssm?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Hongkong
username: root
password: 123456
max-active: 3000
max-wait: 10000
#druid sql 监控
stat-view-servlet:
#开启监控页面
enabled: true
login-username: admin
login-password: 123456
web-stat-filter:
#开启监控功能-web请求
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
filter:
stat:
#开启监控功能-SQL请求
enabled: true
slow-sql-millis: 1000
#Mybatis配置
mybatis:
type-aliases-package: com.study.dao.entity
mapper-locations: classpath:com.study.dao.mapper/**.xml
configuration:
map-underscore-to-camel-case: true
#Seata配置
seata:
#开启Seata自动装配(AutoConfiguration @ConditionalOnProperty)
enabled: true
#将RM管理的本地事物注册到TC,application-id的名称跟微服务名相同即可,启动日志可验证
application-id: ${spring.application.name}
#Seata事务组(这个 nacos-seata-tx-group 同一个项目中所有微服务都可以用同一个事务组
#【事务分组可以作为资源的逻辑隔离单位,出现某集群故障时可以快速failover,只切换对应分组,可以把故障缩减到服务级别,但前提也是你有足够server集群)】
tx-service-group: nacos-seata-tx-group
#Seata-Service配置(和TC通信)
service:
vgroup-mapping:
#这里的 nacos-seata-tx-group 对应上面的 【tx-service-group: nacos-seata-tx-group】 default 就是TC集群的名称,实现高可用的话 将 nacos-seata-tx-group: shanghai 切换成 nacos-seata-tx-group: hangzhou
nacos-seata-tx-group: default
#如果配置了注册中心,这个就不需要了,从注册中心拿Seata-Server
# grouplist:
# #这里的 default 对应上面的 【nacos-seata-tx-group: default】 TC集群对应的IP+Port
# default: 192.168.247.129:8091
#Seata-Config配置(和Nacos配置中心通信 存放的是file.conf的内容)
config:
type: file
#nacos:
# server-addr: 192.168.247.129:8888
# group: SEATA_GROUP
# username: nacos
# password: nacos
#Seata-Registry配置(和Nacos注册中心通信 存放的是Seata-Server 各个节点的信息)
registry:
type: nacos
nacos:
application: seata-server
cluster: default
server-addr: 192.168.247.129:8888
group: SEATA_GROUP
username: nacos
password: nacos
#RestTemplate开启对sentinel配置
resttemplate:
sentinel:
enabled: true
#OpenFeign配置
feign:
client:
config: {default: {connectTimeout: 10000,readTimeout: 10000} }
#OpenFeign开启对sentinel配置
sentinel:
enabled: true