Rocketmq4.1.0详细部署步骤(亲测)

作者 : 开心源码 本文共5014个字,预计阅读时间需要13分钟 发布时间: 2022-05-12 共144人阅读

编译

按照官方说明:http://rocketmq.apache.org/docs/quick-start/

git clone -b develop

https://github.com/apache/rocketmq.git

cd rocketmq

mvn -Prelease-all -DskipTests clean install -U

cd distribution/target/apache-rocketmq

其中,mvn打包时超时,我使用了下面的镜像。

central

Maven Repository Switchboard

http://repo1.maven.org/maven2/

central

环境 centOS 6.5

  • 创立使用户
  • 最好不要使用root使用户来搭建应使用。

useradd -d /home/rocketmq410 -m rocketmq410

passwd rocketmq410

  • 切换使用户
  • 下载jdk 1.8。并配置
  • 解压tar -zxvf 修改.bash_profile。这种方式更安全,只对当前使用户生效。
  • [rocketmq410@wuliutest001 ~]$ vim .bash_profile
  • 在最后加上

export JAVA_HOME=/home/rocketmq410/jdk1.8.0_144

export PATH=$JAVA_HOME/bin:$PATH

  • 重新登录,使配置生效
  • 上传rocketmq
  • 使用到命令
  • rz
  • scp
  • tar -zxvf
  • 部署规划
  • 本次搭的是4主无备的集群。 2个nameServer 10.135.26.200 和 10.135.26.201 ,nameserver端口开在9876
  • 系统配置
  • 用root权限,执行一次os.sh
  • 仅执行一次就好,以前执行过,就不要再次执行了。
  • 然而,并不会成功。报错:

-bash: ./os.sh: /bin/sh^M: bad interpreter: No such file or directory

起因是,我之前的编译打包是在windows环境下。 此时的文件编码是dos的。要改成unix的。

vim 打开文件。

:set ff=unix

同样解决其余使用到的脚本。

发现4.1.0版本的os.sh不好使。还是3.2.6版本里的echo好使用。

用root权限

echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf

echo 'vm.min_free_kbytes=5000000' >> /etc/sysctl.conf

echo 'vm.drop_caches=1' >> /etc/sysctl.conf

echo 'vm.zone_reclaim_mode=0' >> /etc/sysctl.conf

echo 'vm.max_map_count=655360' >> /etc/sysctl.conf

echo 'vm.dirty_background_ratio=50' >> /etc/sysctl.conf

echo 'vm.dirty_ratio=50' >> /etc/sysctl.conf

echo 'vm.page-cluster=3' >> /etc/sysctl.conf

echo 'vm.dirty_writeback_centisecs=360000' >> /etc/sysctl.conf

echo 'vm.swappiness=10' >> /etc/sysctl.conf

sysctl -p

echo 'ulimit -n 655350' >> /etc/profile

echo '* hard nofile 655350' >> /etc/security/limits.conf

echo '* hard memlock unlimited' >> /etc/security/limits.conf

echo '* soft memlock unlimited' >> /etc/security/limits.conf

查看内核参数使用cat /etc/sysctl.conf

查看文件句柄 使用 ulimit -a 或者 -n

还有一个参数

DISK=`df -k | sort -n -r -k 2 | awk -F/ 'NR==1 {gsub(/[0-9].*/,””,$3); print $3}'`

[ “$DISK” = 'cciss' ] && DISK='cciss!c0d0'

echo 'deadline' > /sys/block/${DISK}/queue/scheduler

这个是设置io调度算法,细节google。注意两点:

  1. 之前使用centos6.5。这个值默认是cfq。换了7.2后发现这个参数默认就是deadline。省了配置了。
  2. 我的系统第一句得到的DISK值是mapper。但是在echo时,发现/sys/block下根本没有mapper目录。其实应该是sda。所以mq提供的脚本可能有问题。供大家参考。

配置启动nameServer

新建一个配置文件namesrv-a.properties,放在conf/2m-noslave下

listenPort=9876

serverWorkerThreads=8

serverCallbackExecutorThreads=0

serverSelectorThreads=3

serverOnewaySemaphoreValue=256

serverAsyncSemaphoreValue=64

serverChannelMaxIdleTimeSeconds=120

serverSocketSndBufSize=2048

serverSocketRcvBufSize=1024

serverPooledByteBufAllocatorEnable=false

在bin下,新建一个启动脚本startnamesrv.sh

nohup ./mqnamesrv -c ../conf/namesrv-a.properties > ~/logs/ns.log &

tail -100f ~/logs/ns.log

执行startnamesrv.sh

同样操作,配置好另一台机器

配置启动broker

新建一个启动脚本,startbroker.sh

nohup ./mqbroker -c ../conf/2m-noslave/broker-a.properties > broker-a.log &

tail -100f ./broker-a.log

chmod +x

startbroker.sh

配置broker-a.properties

brokerClusterName=HopRocketMqClusterProduction

brokerName=broker-a-pro

# 相同的brokerName,brokerId是0为master,>0为slave

brokerId=0

# 清除commitlog的时间,默认就是04

deleteWhen=04

# commitlog保存时间,默认就是72

fileReservedTime=72

# 角色ASYNC_MASTER,SYNC_MASTER,SLAVE;

# ASYNC_MASTER:master接受消息成功即返回成功

# SYNC_MASTER:至少一个slave接受消息成功,才返回成功

brokerRole=ASYNC_MASTER

# 刷盘方式SYNC_FLUSH和ASYNC_FLUSH

flushDiskType=ASYNC_FLUSH

# netty的监听端口

listenPort=10922

# namesrv地址

namesrvAddr=10.135.26.200:9876;10.135.26.201:9876

# 获取本地地址

brokerIP1=10.135.26.200

# 默认队列数量

defaultTopicQueueNums=8

# 自动创立Topic功能能否开启(线上建议关闭)

autoCreateTopicEnable=false

# 自动创立订阅组功能能否开启(线上建议关闭)

autoCreateSubscriptionGroup=false

# 磁盘空间最大用率,超了拒收消息

diskMaxUsedSpaceRatio=95

# 存储commitlog路径

storePathRootDir=/home/rocketmq410/mqstore/rocketmqstore-a

storePathCommitLog=/home/rocketmq410/mqstore/rocketmqstore-a/commitlog

# 自动创立以服务器名字命名的Topic功能能否开启

brokerTopicEnable=false

# 自动创立以集群名字命名的Topic功能能否开启

clusterTopicEnable=false

# 能否拒绝接收事务消息

rejectTransactionMessage=false

# 能否从地址服务器寻觅Name Server地址,正式发布后,默认值为false

fetchNamesrvAddrByAddressServer=false

# 以下全是默认值,删掉就可

# CommitLog刷盘间隔时间(单位毫秒)

flushIntervalCommitLog=1000

# 能否定时方式刷盘,默认是实时刷盘

flushCommitLogTimed=false

# 最大被拉取的消息字节数,消息在内存

maxTransferBytesOnMessageInMemory=262144

# 最大被拉取的消息个数,消息在内存

maxTransferCountOnMessageInMemory=32

# 最大被拉取的消息字节数,消息在磁盘

maxTransferBytesOnMessageInDisk=65536

# 最大被拉取的消息个数,消息在磁盘

maxTransferCountOnMessageInDisk=8

# 命中消息在内存的最大比例

accessMessageInMemoryMaxRatio=40

# 能否开启消息索引功能

messageIndexEnable=true

# 能否用安全的消息索引功能,就可靠模式。

# 可靠模式下,异常宕机恢复慢

# 非可靠模式下,异常宕机恢复快

messageIndexSafe=false

# ha是主从同步相关配置

haMasterAddress=

新建存储commitlog的目录 mkdir -p /home/rocketmq410/mqstore/rocketmqstore-a/commitlog

执行startbroker.sh

安装rocketmq-console

git clone git@github.com:apache/rocketmq-externals.git

cd rocketmq-console

mvn clean package -Dmaven.test.skip=true

上传

写一个启动脚本,指定namesrv。

admin cli命令

查询消费进度 ./mqadmin consumerProgress -g TestConsumer1 -n 10.135.26.200:9876

问题:

  1. client用3.6.2版本,需要设置setVipChannelEnabled为false,否则发送失败。
  2. client用3.6.2版本,代码日志可以看到消息已经消费成功,但是broker上的offset没变。
  3. client版本降为3.2.6问题处理。
  4. 该问题在broker端是3.2.6版本上是一样的。
  5. 关于sendMessageWithVIPChannel,3.2.6以上的client默认是true
  6. broker的netty server会起两个通信服务。两个服务除了服务的端口号不一样,其余都一样。其中一个的端口(配置端口-2)作为vip通道,用户端可以启使用本设置项把发送消息此vip通道。
  7. 这个可以减少消息的丢失率。加快刷到硬盘的速度。这个通道很少生产者走的。所以,保证了消息稳固地到达了 broker 端,特别是 当 洪水般的消息涌过来的话,对于 金钱方面的消息,这个通道非常快速。
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Rocketmq4.1.0详细部署步骤(亲测)

发表回复