一、环境准备
linux系统的机器;
-
已经安装jdk1.8及以上版本;
使用
yum install
方式安装的jdk路径默认在/usr/lib/jvm
里面,本文档使用的是其中的jre-1.8.0,只要有jre就行,不一定需要jdk。如果自己下载了jdk,解压到合适的目录下即可。
-
已经在
/ect/profile
中配置了JAVA_HOME
环境变量;如果没有配置,可以增加如下配置项:
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
如上,
JAVA_HOME
改成实际java所在目录。然后需要退出当前账户的登录,再重新登录才能是的环境变量生效;
再次登录后,可以执行
echo $JAVA_HOME
看下JAVA目录是否目录正确。 已经下载并解压好了rocketmq文件;
二、启动服务
进入Rocketmq解压后的文件夹中的bin目录中。
-
启动name-server
执行命令
nohup sh mqnamesrv &
-
调配broker内存
默认broker会占用4g内存,服务器可能不够使用会导致启动失败,所以找到
runbroker.sh
和runserver.sh
,将它们其中的如下内容JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
修改为你认为合适的大小
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"
-
启动broker
执行命令
nohup sh mqbroker -n localhost:9876 autoCreateTopicEnable=true &
此时可以执行jps命令可以看到name-server和broker都已经成功启动了。或者查看nohup.out日志内容,可以看到两者都已经成功启动。
name-server和broker的默认日志存储位置在当前登录者用户名目录下的logs文件夹里面。
三、集群配置
以上是单个节点的name-server和broker的配置,其实啥也没有配置。
主流的配置方式有双主配置、双主双从同步配置、双主双从异步配置。这个可以在bin/conf目录下看到:
-
2m-2s-async
优点是响应快速,缺点是一旦一个主节点不可用,会造成小量数据的丢失;
-
2m-2s-sync
优点是几乎不会造成数据丢失,缺点是响应速度比异步时要慢;
-
2m-noslave
优点是需要的资源较少,响应速度快,缺点是一旦一个节点不可用,就会丢失该节点的数据;
这里推荐使用双主双从,同步双写,异步刷盘的集群配置方式。我们进入如上的2m-2s-sync文件夹中,会看到如下4个配置文件,我们需要改成如下的配置内容:
-
broker-a.properties
代表一个主节点,最简单的配置信息如下:
#集群的名称,自己定义即可,要求所有主从broker的集群名称一样 brokerClusterName=test-cluster #broker名称,同一对主从节点的名称需要一致 brokerName=broker-a #0表示主节点,非负整数表示从节点 brokerId=0 #配置所有nameserver的地址,可以使用真实的IP地址替换 namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #配置队列个数 defaultTopicQueueNums=4 #是否允许自动创建主题,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #监听端口,如果从节点和broker-b的主节点在一台机器上,需要注意此处端口避免冲突 listenPort=10911 #几点删除数据 deleteWhen=04 #数据保留时长-小时 fileReservedTime=120 #commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径,需要提前创建好文件夹 storePathRootDir=/usr/local/rocketmq/store/broker-a #commitLog存储路径,需要提前创建好文件夹 storePathCommitLog=/usr/local/rocketmq/store/broker-a/commitlog #消费队列存储路径存储路径,需要提前创建好文件夹 storePathConsumeQueue=/usr/local/rocketmq/store/broker-a/consumequeue #消息索引存储路径,需要提前创建好文件夹 storePathIndex=/usr/local/rocketmq/store/broker-a/index #checkpoint文件存储路径,需要提前创建好文件夹 storeCheckpoint=/usr/local/rocketmq/store/broker-a/checkpoint #abort文件存储路径,需要提前创建好文件夹 abortFile=/usr/local/rocketmq/store/broker-a/abort #限制的消息大小 maxMessageSize=65536 #当前节点的角色 brokerRole=SYNC_MASTER #刷盘方式 flushDiskType=ASYNC_FLUSH
-
broker-a-s.properties
代表一个从节点,最简单的配置如下:
#集群的名称,自己定义即可,要求所有主从broker的集群名称一样 brokerClusterName=test-cluster #broker名称,同一对主从节点的名称需要一致 brokerName=broker-a #0表示主节点,非负整数表示从节点 brokerId=1 #配置所有nameserver的地址,可以使用真实的IP地址替换 namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #配置队列个数 defaultTopicQueueNums=4 #是否允许自动创建主题,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #监听端口,如果从节点和broker-b的主节点在一台机器上,需要注意此处端口避免冲突 listenPort=10921 #几点删除数据 deleteWhen=04 #数据保留时长-小时 fileReservedTime=120 #commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径,需要提前创建好文件夹 storePathRootDir=/usr/local/rocketmq/store/broker-a #commitLog存储路径,需要提前创建好文件夹 storePathCommitLog=/usr/local/rocketmq/store/broker-a/commitlog #消费队列存储路径存储路径,需要提前创建好文件夹 storePathConsumeQueue=/usr/local/rocketmq/store/broker-a/consumequeue #消息索引存储路径,需要提前创建好文件夹 storePathIndex=/usr/local/rocketmq/store/broker-a/index #checkpoint文件存储路径,需要提前创建好文件夹 storeCheckpoint=/usr/local/rocketmq/store/broker-a/checkpoint #abort文件存储路径,需要提前创建好文件夹 abortFile=/usr/local/rocketmq/store/broker-a/abort #限制的消息大小 maxMessageSize=65536 #当前节点的角色 brokerRole=SLAVE #刷盘方式 flushDiskType=ASYNC_FLUSH
-
broker-b.properties
代表一个主节点,最简单的配置信息如下:
#集群的名称,自己定义即可,要求所有主从broker的集群名称一样 brokerClusterName=test-cluster #broker名称,同一对主从节点的名称需要一致 brokerName=broker-b #0表示主节点,非负整数表示从节点 brokerId=0 #配置所有nameserver的地址,可以使用真实的IP地址替换 namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #配置队列个数 defaultTopicQueueNums=4 #是否允许自动创建主题,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #监听端口,如果主从节点都在一台机器上,需要注意此处端口避免冲突 listenPort=10911 #几点删除数据 deleteWhen=04 #数据保留时长-小时 fileReservedTime=120 #commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径,需要提前创建好文件夹 storePathRootDir=/usr/local/rocketmq/store/broker-b #commitLog存储路径,需要提前创建好文件夹 storePathCommitLog=/usr/local/rocketmq/store/broker-b/commitlog #消费队列存储路径存储路径,需要提前创建好文件夹 storePathConsumeQueue=/usr/local/rocketmq/store/broker-b/consumequeue #消息索引存储路径,需要提前创建好文件夹 storePathIndex=/usr/local/rocketmq/store/broker-b/index #checkpoint文件存储路径,需要提前创建好文件夹 storeCheckpoint=/usr/local/rocketmq/store/broker-b/checkpoint #abort文件存储路径,需要提前创建好文件夹 abortFile=/usr/local/rocketmq/store/broker-b/abort #限制的消息大小 maxMessageSize=65536 #当前节点的角色 brokerRole=SYNC_MASTER #刷盘方式 flushDiskType=ASYNC_FLUSH
-
broker-b-s.properties
代表一个从节点,最简单的配置如下:
#集群的名称,自己定义即可,要求所有主从broker的集群名称一样 brokerClusterName=test-cluster #broker名称,同一对主从节点的名称需要一致 brokerName=broker-b #0表示主节点,非负整数表示从节点 brokerId=1 #配置所有nameserver的地址,可以使用真实的IP地址替换 namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876 #配置队列个数 defaultTopicQueueNums=4 #是否允许自动创建主题,建议线下开启,线上关闭 autoCreateTopicEnable=true #是否允许自动创建订阅组,建议线下开启,线上关闭 autoCreateSubscriptionGroup=true #监听端口,如果主从节点都在一台机器上,需要注意此处端口避免冲突 listenPort=10921 #几点删除数据 deleteWhen=04 #数据保留时长-小时 fileReservedTime=120 #commitLog每个文件的大小默认1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每个文件默认存30W条,根据业务情况调整 mapedFileSizeConsumeQueue=300000 #检测物理文件磁盘空间 diskMaxUsedSpaceRatio=88 #存储路径,需要提前创建好文件夹 storePathRootDir=/usr/local/rocketmq/store/broker-b #commitLog存储路径,需要提前创建好文件夹 storePathCommitLog=/usr/local/rocketmq/store/broker-b/commitlog #消费队列存储路径存储路径,需要提前创建好文件夹 storePathConsumeQueue=/usr/local/rocketmq/store/broker-b/consumequeue #消息索引存储路径,需要提前创建好文件夹 storePathIndex=/usr/local/rocketmq/store/broker-b/index #checkpoint文件存储路径,需要提前创建好文件夹 storeCheckpoint=/usr/local/rocketmq/store/broker-b/checkpoint #abort文件存储路径,需要提前创建好文件夹 abortFile=/usr/local/rocketmq/store/broker-b/abort #限制的消息大小 maxMessageSize=65536 #当前节点的角色 brokerRole=SLAVE #刷盘方式 flushDiskType=ASYNC_FLUSH
一台机器上如果要启动多个broker,需要注意如下事项:
- 监听端口不能冲突;
- 6个存储路径要提前创建好,且各个broker的不能相同;
- 一台机器上上启动broker-a和broker-b-s,另一台启动broker-b和broker-a-s,两台实例互为主备;
完成配置后,先在所有机器上都启动name-server,然后使用如下命令,指定配置文件的方式分别启动各个broker角色:
nohup sh mqbroker -c /../rocketmq/conf/2m-2s-sync/broker-a.properties &
自己补全rocketmq的路径,然后你指定使用哪个配置文件,那么该配置文件对应角色的broker就会启动。
最后可以通过jps和nohup.out日子来判断启动成功与否。
四、停止服务
原先我们启动服务使用的是非阻塞的方式,所以命令行关闭了,程序还是会在运行的。即使重启后也是运行中的。
此时可以使用sh mqshutdown broker
和sh mqshutdown namesrv
来分别关闭它们;
五、Windows
其实Rocket MQ也可以在Windows上平台上运行,如果暂时不具备Linux实验环境,可以按照如下步骤,启动一个单机Windows环境的RocketMQ服务。
- 配置好JDK和环境变量;
- 安装好RocketMQ,并按照官网quickstart的教程配置好环境变量;
- 进入bin目录,使用cmd窗口启动name-server:
start ./mqnamesrv.cmd
,新窗口会显示boot success,请不要关闭该窗口; - 在bin目录下,使用cmd窗口启动broker,并指定name-server地址:
start ./mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
,其中autoCreateTopicEnable要不要无所谓,不影响broker的启动,然后也会弹出新的cmd窗口,请不要关闭该窗口; - 将下载好的rocketmq-console项目打开,找到其中的application.properties,将name-server地址改为
localhost:8080
,然后启动即可,或者达成jar包再启动也可; - 此时访问
localhost:8080
,就可以使用可视化工具管理rocketmq服务了,服务也能正常使用了。
备注:
如上每次启动本地MQ都得执行三个步骤,比较繁琐,可以把这三个动作编写为一个bat文件,如此一次运行,三个步骤都能完成。
start D:\rocketmq-all-4.9.0-bin-release\bin\mqnamesrv.cmd
start D:\rocketmq-all-4.9.0-bin-release\bin\mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true
java -jar D:\rocketmq-externals\rocketmq-console\target\rocketmq-console-ng-2.0.0.jar