rocketmq4.1.0部署详细步骤

  1. 编译
    按照官方说明: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打包时超时,我用了下面的镜像。

<mirror>
       <id>central</id>
       <name>Maven Repository Switchboard</name>
       <url>http://repo1.maven.org/maven2/</url>
       <mirrorOf>central</mirrorOf>
   </mirror>
  1. 环境
    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

    同样操作,配置好10.135.26.201

  • 配置启动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没变。
    client版本降为3.2.6问题解决。
    该问题在broker端是3.2.6版本上是一样的。

  3. 关于sendMessageWithVIPChannel,3.2.6以上的client默认是true
    broker的netty server会起两个通信服务。两个服务除了服务的端口号不一样,其他都一样。其中一个的端口(配置端口-2)作为vip通道,客户端可以启用本设置项把发送消息此vip通道。
    这个可以减少消息的丢失率。加快刷到硬盘的速度。这个通道很少生产者走的。所以,保证了消息稳定地到达了 broker 端,特别是 当 洪水般的消息涌过来的话,对于 金钱方面的消息,这个通道非常快速。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容