Linux服务器安装JavaWeb环境(三) RocketMQ,Nacos

  • Post author:
  • Post category:java




/*****************【安装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



版权声明:本文为liuchang19950703原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。