RocketMQ集群部署方案(DLedger)


一、基本配置
1、准备三台虚拟机,root密码 root ;IP地址:

192.168.xxx.xxx worker1
192.168.xxx.xxx worker2
192.168.xxx.xxx worker3

并在对应的机器的/etc/hosts文件中设置对应的ip和机器名映射

2、每台机器上创建用户mq并设置密码

useradd mqpasswd mq  密码输入:Anji@1024

3、系统配置
1)免密登录,切换mq用户,在worker1、worker2、worker3上分别生成密钥:

su mqssh-keygen

2)同步公钥到其他服务器

ssh-copy-id worker1
ssh-copy-id worker2
ssh-copy-id worker3
  1. 通过命令验证免密登录配置是否成功
ssh worker1ssh worker2ssh worker2

4、在三台机器上分别配置JAVA环境
1)上传jdk8的tar包并解压到/app/jdk1.8目录

tar -zxvf jdk-8u171-linux-x64.tar.gzmv jdk1.8.0_171/ /app/jdk1.8

2)配置环境变量。使用 vi ~/.bash_profile编辑文件,添加一下配置,并使用source ~/.bash_profile使环境变量生效,输入java -version查看是否配置成功

export JAVA_HOME=/app/jdk1.8/
PATH=$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
export PATH

5、上传rocketMQ的rocketmq-all-4.8.0-bin-release.zip包到/app/rocketMq目录下并解压

 unzip rocketmq-all-4.8.0-bin-release.zip

6、把rocketmq的bin目录也配置到环境变量当中。 vi ~/.bash_profile,加入以下内容,并执行source ~/.bash_profile让环境变量生效:

export JAVA_HOME=/app/jdk1.8/
export ROCKETMQ_HOME=/app/rocketmq/rocketmq-all-4.7.1-bin-release
PATH=$ROCKETMQ_HOME/bin:$JAVA_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin
export PATH

二、集群配置
1、编写配置
每个 RocketMQ-on-DLedger Group 至少准备三台机器,

每台机器上一个节点,形成一个一主二从的机器,如果后期业务扩展,可以根据需求配置更多的主从节点

编写 3 个配置文件,建议参考 conf/dledger 目录下的配置文件样例。
关键配置介绍:

name 含义 举例
enableDLegerCommitLog 是否启动 DLedger true
dLegerGroup DLedger Raft Group的名字,建议和 brokerName 保持一致 RaftNode00
dLegerPeers DLedger Group 内各节点的端口信息,同一个 Group 内的各个节点配置必须要保证一致 n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913
dLegerSelfId 节点 id, 必须属于 dLegerPeers 中的一个;同 Group 内各个节点要唯一 n0
sendMessageThreadPoolNums 发送线程个数,建议配置成 Cpu 核数 16

其中单个节点的配置如下,具体参考集群信息:

brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30911
namesrvAddr=127.0.0.1:9876   ---配置多个nameserver地址,分别是worker1、worker2、worker3上的nameserver地址,如果开启了防火墙注意端口转发
storePathRootDir=/tmp/rmqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913 ---为了集群安全可以将三个节点放到不同的worker1、worker2、worker3上,如果开启了防火墙注意端口转发
dLegerSelfId=n0
sendMessageThreadPoolNums=16

先启动三台机器上的nameserver:

nohup bin/mqnamesrv &

在启动对应brocker的节点

nohup sh bin/mqbroker -c conf/dledger/xxx-n0.conf &
nohup sh bin/mqbroker -c conf/dledger/xxx-n1.conf &
nohup sh bin/mqbroker -c conf/dledger/xxx-n2.conf &

三、配置管理页面
RocketMQ源代码中并没有提供控制台,但是有一个Rocket的社区扩展项目中提供了一个控制台,地
址: https://github.com/apache/rocketmq-externals,下载下来后,进入其中的rocket-console目录,使用maven进行编译:mvn clean package -Dmaven.test.skip=true

1、将对应的rocketmq-console-ng-1.0.1.jar 上传到对应的管理控制台机器的/app/rocketMq/rocketmq-console目录下,并在当前目录中新增application.properties文件,

在文件中添加对应nameserver的IP和端口(如果开启了防火墙注意端口转发):

rocketmq.config.namesrvAddr=worker1:9876;worker2:9876;worker3:9876

2、启动jar包

nohup java -jar rocketmq-console-ng-1.0.1.jar &

3、启动完成后,可以访问 http://IP:8080看到管理页面

调整系统参数

到这里,我们的整个RocketMQ的服务就搭建完成了。但是在实际使用时,我们说RocketMQ的吞吐量、性能都很高,那要发挥RocketMQ的高性能,还需要对RocketMQ以及服务器的性能进行定制

1、配置RocketMQ的JVM内存大小:
之前提到过,在runserver.sh中需要定制nameserver的内存大小,在runbroker.sh中需要定制broker的内存大小。这些默认的配置可以认为都是经过检验的最优化配置,但是在实际情况中都还需要根据服务器的实际情况进行调整。这里以runbroker.sh中对G1GC的配置举例,在runbroker.sh中的关键配置:

JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintAdaptiveSizePolicy"
JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"

-XX:+UseG1GC: 使用G1垃圾回收器, -XX:G1HeapRegionSize=16m 将G1的region块大小设为16M,-XX:G1ReservePercent:在G1的老年代中预留25%空闲内存,这个默认值是10%,RocketMQ把这个参数调大了。-XX:InitiatingHeapOccupancyPercent=30:当堆内存的使用率达到30%之后就会启动G1垃圾回收器尝试回收垃圾,默认值是45%,RocketMQ把这个参数调小了,也就是提高了GC的频率,但是避免了垃圾对象过多,一次垃圾回收时间太长的问题。
然后,后面定制了GC的日志文件,确定GC日志文件的地址、打印的内容以及控制每个日志文件的大小为30M并且只保留5个文件。这些在进行性能检验时,是相当重要的参考内容。

2、RocketMQ的其他一些核心参数
例如在conf/dleger/broker-n0.conf中有一个参数:sendMessageThreadPoolNums=16。这一个参数是表明RocketMQ内部用来发送消息的线程池的线程数量是16个,其实这个参数可以根据机器的CPU核心数进行适当调整,例如如果你的机器核心数超过16个,就可以把这个参数适当调大。

3、Linux内核参数定制
我们在部署RocketMQ的时候,还需要对Linux内核参数进行一定的定制。例如
ulimit,需要进行大量的网络通信和磁盘IO。
vm.extra_free_kbytes,告诉VM在后台回收(kswapd)启动的阈值与直接回收(通过分配进程)的阈值之间保留额外的可用内存。RocketMQ使用此参数来避免内存分配中的长延迟。(与具体内核版本相关)
vm.min_free_kbytes,如果将其设置为低于1024KB,将会巧妙的将系统破坏,并且系统在高负载下容易出现死锁。
vm.max_map_count,限制一个进程可能具有的最大内存映射区域数。RocketMQ将使用mmap加载CommitLog和ConsumeQueue,因此建议将为此参数设置较大的值。
vm.swappiness,定义内核交换内存页面的积极程度。较高的值会增加攻击性,较低的值会减少交换量。建议将值设置为10来避免交换延迟。
File descriptor limits,RocketMQ需要为文件(CommitLog和ConsumeQueue)和网络连接打开文件描述符。我们建议设置文件描述符的值为655350。

这些参数在CentOS7中的配置文件都在 /proc/sys/vm目录下。
另外,RocketMQ的bin目录下有个os.sh里面设置了RocketMQ建议的系统内核参数,可以根据情况进行调整。

RocketMQ集群部署方案(DLedger)相关推荐

  1. 【有料】4 种高可用 RocketMQ 集群搭建方案!

    背景 笔者所在的业务线,最初化分为三个服务,由于业务初期业务复杂度相对简单,三个业务服务都能很好的独立完成业务功能. 随着产品迭代,业务功能越来越多后慢慢也要面对高并发.业务解耦.分布式事务等问题,所 ...

  2. 私有云办公平台大规模集群/企业级集群/小型工作室集群解决方案:NextCloud集群部署方案--NextCloud集群架构设计

    原作者:NextCloud文档库 转载来源:https://docs.nextcloud.com/server/11/admin_manual/installation/deployment_reco ...

  3. keepalive+nginx实现负载均衡高可用_高可用、负载均衡 集群部署方案:Keepalived + Nginx + Tomcat...

    前言:初期应用较小,一般以单机部署为主,即可满足业务的需求,随着业务的不断扩大,单机部署的模式无法承载这么大的业务量,需要进行服务集群化的部署,本文主要介绍服务器Tomcat多实例部署,搭载Keepa ...

  4. Nacos集群部署方案

    1. 介绍 生产环境部署nacos使用集群部署方案cluster来保障高可用 2. 集群部署架构图 nacos官方推荐把所有服务列表放到VIP下面,然后挂到一个域名下面 http://ip1:port ...

  5. RocketMQ集群部署记录

    RocketMQ集群部署记录 #引用    https://cloud.tencent.com/developer/article/1147765 一.RocketMQ基础知识介绍 Apache Ro ...

  6. Centos6下RocketMQ集群部署记录

    一.RocketMQ基础知识介绍 Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ也 ...

  7. Nacos生产环境集群部署方案

    1.介绍 生产环境中部署nacos首先肯定是使用集群模式cluster保证高可用. 2.集群部署架构图 nacos 官方推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面 http://i ...

  8. (三)RocketMQ集群部署实践

    2019独角兽企业重金招聘Python工程师标准>>> 全篇参照–<MyRocketMQ集群部署实战-双master-双slave-同步双写-异步刷盘(7台机器) - tant ...

  9. 从生产故障解锁RocketMQ集群部署的最佳实践

    1.故障描述 RocketMQ 集群采取的部署架构为2主2从,其部署架构如下图所示: 其部署架构中一个非常明显的特点是一台物理机上分别部署了 nameserver,broker 两个进程. 其中一台机 ...

最新文章

  1. 开闭鸿蒙都只为风味情浓,开辟鸿蒙,谁为情种?都只为风月情浓。
  2. 小米抢购限流峰值系统架构历年演进历程
  3. 怎样得到select所有option里的值
  4. 【Linux】一步一步学Linux——lnstat命令(189)
  5. 什么是 SAP C/4HANA Foundation
  6. Linux常用命令之wget
  7. 阿里 90 后科学家研发,达摩院开源新一代 AI 算法模型
  8. 剑指offer面试题49. 丑数
  9. 大白话vue——slot的作用与使用
  10. mysql(一主从从)
  11. 微软surface屏幕测试软件,Soomal作品 - Microsoft 微软 Surface Book 笔记本电脑屏幕测评报告和色彩校正 [Soomal]...
  12. Mac如何添加打印机
  13. 雅思大作文写作--Cities
  14. Drone SETTINGS 页面没有 Trusted
  15. 1038 01背包动态规划
  16. python报错系列(9)--SyntaxError: Missing parentheses in call to ‘print‘. Did you mean print()
  17. AJP:22q11.2缺失综合征青少年gamma频带反应和远程通信中断的异常发育模式
  18. 从零学Java(19)之 if else分支结构详解,小AD要搞对面心态!
  19. 图神经网络(十八)GEOM-GCN: GEOMETRIC GRAPH CONVOLUTIONAL NETWORKS
  20. 用Tushare实现上证综指日对数收益率的计算

热门文章

  1. 值得收藏!神器 navicat 用法秘籍,你不知道就out啦
  2. 分类网络 VGG16
  3. autocad2015增加字体炸开命令
  4. 卫生统计学 SPSS操作 实验设计与分析傻瓜式操作指南.pdf
  5. nested exception is java.lang.NoSuchFieldError: QUALIFIED
  6. android局域网聊天毕业设计,Android基于wifi模块的局域网聊天以及文件传输app
  7. 客户端安装SSH工具Xshell图解
  8. 在ps中用魔术棒更换证件照背景
  9. HCL Server的基本使用
  10. C++ 拓扑排序算法