Centos 6.6 X86_64
rocketmq 3.2.6
wget https://github.com/alibaba/RocketMQ/releases/download/v3.2.6/alibaba-rocketmq-3.2.6.tar.gz
安装jdk,设置JAVA_HOME环境变量。这是使用jdk1.7
创建用户
useradd rocketmq
passwd rocketmq
移动安装文件,设置权限
mv alibaba-rocketmq-3.2.6.tar.gz ~rocketmq
chown rocketmq:rocketmq ~rocketmq/alibaba-rocketmq-3.2.6.tar.gz
切换用户
su - rocketmq
解压
tar -xf alibaba-rocketmq-3.2.6.tar.gz
mv alibaba-rocketmq-3.2.6 alibaba-rocketmq
启动
cd alibaba-rocketmq/bin
./play.sh
启动完成后
jps
会有NamesrvStartup和BrokerStartup两个java进程
如果没有问题,停止服务
cd alibaba-rocketmq/bin
./mqshutdown broker
./mqshutdown namesrv
默认启动用会使用3个端口 9876,10911,10912
分别代表名称服务端口,broker端口,broker ha端口。
ha端口haListenPort表示Master监听Slave请求的端口,默认为服务端口+1
添加到/etc/sysconfig/iptables的filter表INPUT链中
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9876 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10911 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10912 -j ACCEPT
添加完成后重启防火墙
service iptables restart
获取broker默认配置
cd alibaba-rocketmq/bin
sh mqbroker -m
启动时如何加载配置文件呢
1.生成默认的配置模板
sh mqbroker -m > broker.p
2.修改配置
注意以下两个参数
storePathRootDir=/home/rocketmq/store
storePathCommitLog=/home/rocketmq/store/commitlog
默认commitlog是存放在用户主目录的下的store/commitlog目录下
namesrvAddr=127.0.0.1:9876
名称服务器地址,可以在命令行通过-n传入,多个名称服务器用;隔开
brokerIP1=192.168.31.86
根据实际情况填写,默认启动时自动识别,一般用于多网卡识别错误,手工配置。
brokerName=peteccBrkMaster
broker名称,默认主机名,我们可以改下peteccBrkMaster
listenPort=10911
默认监听端口
brokerId=0
0表示master,>0表示slave
autoCreateTopicEnable=true
是否自动创建topic,线上环境建议关闭
deleteWhen=04
删除文件的时间点,默认凌晨4点
fileReservdTime=72
文件保留时间,默认48小时
3.加载配置
nohup sh mqbroker -c broker.p
说明:
开机启动,请参考rocketmq开机启动脚本
name server配置跟broker处理一样,我们生成namesrv.p文件,修改,再用-c加载配置文件。如有需要请自行配置。
这是本机示例
[rocketmq@vtfsdb3 bin]$ sh mqnamesrv -h
usage: mqnamesrv [-c ] [-h] [-n ] [-p]
-c,--configFile Name server config properties file
-h,--help Print help
-n,--namesrvAddr Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876
-p,--printConfigItem Print all config item
[rocketmq@vtfsdb3 bin]$ sh mqnamesrv -p
rocketmqHome=/home/rocketmq/alibaba-rocketmq
kvConfigPath=/home/rocketmq/namesrv/kvConfig.json
listenPort=9876
serverWorkerThreads=8
serverCallbackExecutorThreads=0
serverSelectorThreads=3
serverOnewaySemaphoreValue=256
serverAsyncSemaphoreValue=64
serverChannelMaxIdleTimeSeconds=120
serverSocketSndBufSize=2048
serverSocketRcvBufSize=1024
serverPooledByteBufAllocatorEnable=false
在rocketmq_home的bin目录下有一 个os.sh文件,内容如下
#!/bin/sh
#
# Execute Only Once
#
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 'admin hard nofile 655350' >> /etc/security/limits.conf
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
echo "---------------------------------------------------------------"
sysctl vm.overcommit_memory
sysctl vm.min_free_kbytes
sysctl vm.drop_caches
sysctl vm.zone_reclaim_mode
sysctl vm.max_map_count
sysctl vm.dirty_background_ratio
sysctl vm.dirty_ratio
sysctl vm.page-cluster
sysctl vm.dirty_writeback_centisecs
sysctl vm.swappiness
su - admin -c 'ulimit -n'
cat /sys/block/$DISK/queue/scheduler
大概意思是根据rocketmq的特点,修改系统参数,修改磁盘调度算法。
接下来我们操作一下,这个如要root权限
vim /etc/sysctl.conf增加
vm.overcommit_memory=1
vm.min_free_kbytes=5000000
vm.drop_caches=1
vm.zone_reclaim_mode=0
vm.max_map_count=655360
vm.dirty_background_ratio=50
vm.dirty_ratio=50
vm.page-cluster=3
vm.dirty_writeback_centisecs=360000
vm.swappiness=10
修改完成后sysctl -p
修改最大打开文件描述数
vim /etc/security/limits.conf添加
* soft nofile 655350
* hard nofile 655350
退出当前用户重新login就会生效,使用ulimit -n验证下。
修改io调试算法为deadline
查看当前系统支持的IO调度算法
[rocketmq@vtfsdb3 bin]$ dmesg | grep -i scheduler
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
查看当前系统默认io调度算法
[rocketmq@vtfsdb3 bin]$ cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
注意中间的sda换成实际运行存储rocketmq的磁盘,这个自己通过fdisk,df自己找出来吧,os.sh脚本有可能找不出真正的磁盘,还是人工操作。
临时更改I/O调度方法:
echo 'deadline' > /sys/block/sda/queue/scheduler
将这句加入开机启动/etc/rc.local中吧
修改完成,确认下
cat /sys/block/sda/queue/scheduler
cd alibaba-rocketmq/bin
有两个文件runserver.sh和runbroker.sh两个shell脚本,分别是name server和broker server的配置启动脚本,修改其中的JAVA_OPT到合适的值。
改成多少,我不知道,根据实际情况测试吧。
请调整服务器各项参数,进行性能测试对比。
生产者
cd alibaba-rocketmq/benchmark
export NAMESRV_ADDR=127.0.0.1:9876
./producer.sh 64 128 false
参数说明:第一个并发线程数
第二个消息包大小,字节。
第二个参数 是否生成key,如果生成key,
msg.setKeys(String.valueOf(beginTimestamp / 1000));
消费者
cd alibaba-rocketmq/benchmark
export NAMESRV_ADDR=127.0.0.1:9876
./consumer.sh
说明:
如果bendchmark下的shell没有执行权限,请执行chmod u+x *.sh
相关参数,ip,端口请根据实据情况调整。
rocketmq_developer_guide.pdf