• RocketMq部署-二主二从异步集群(安装实践)(未完成)


     一、前言

    RocketMQ 二主二从异步集群部署

    RocketMQ web控制台2.0.0版本源码方式安装 

    是根据上面这两篇文章部署的。不同的是我是单机安装集群:

    有以下不同的地方:

    1.1 二主二从安装在不同的目录:

    • rocketmq_0
    • rocketmq_1

     

     1.2 namesrv的端口

    第一个namesrv端口是9876,第二个端口是9877。

    1.3 broker端口

    rocketmq_0:

    • broker-a    端口:10910
    • broker-b-s  端口:10921

    rocketmq_1:

    • broker-b    端口:11920
    • broker-a-s 端口: 11911

    1.4 创建目录

    创建rocketmq_0:

    mkdir -p /usr/local/soft/rocketmq_0/store/broker-a /usr/local/soft/rocketmq_0/store/broker-a/consumequeue /usr/local/soft/rocketmq_0/store/broker-a/commitlog /usr/local/soft/rocketmq_0/store/broker-a/index /usr/local/soft/rocketmq_0/logs /usr/local/soft/rocketmq_0/store/broker-b-s /usr/local/soft/rocketmq_0/store/broker-b-s/consumequeue /usr/local/soft/rocketmq_0/store/broker-b-s/commitlog /usr/local/soft/rocketmq_0/store/broker-b-s/index

     创建rocketmq_1:

    mkdir -p /usr/local/soft/rocketmq_1/store/broker-a-s /usr/local/soft/rocketmq_1/store/broker-a-s/consumequeue /usr/local/soft/rocketmq_1/store/broker-a-s/commitlog /usr/local/soft/rocketmq_1/store/broker-a-s/index /usr/local/soft/rocketmq_1/logs /usr/local/soft/rocketmq_1/store/broker-b /usr/local/soft/rocketmq_1/store/broker-b/consumequeue /usr/local/soft/rocketmq_1/store/broker-b/commitlog /usr/local/soft/rocketmq_1/store/broker-b/index

     1.45主要命令和配置

    1.5.1 namesrv

    1. nohup sh /usr/local/soft/rocketmq_0/bin/mqnamesrv >/usr/local/soft/rocketmq_0/logs/mqnamesrv.log 2>&1 &
    2. nohup sh /usr/local/soft/rocketmq_1/bin/mqnamesrv -c /usr/local/soft/rocketmq_1/conf/namesrv.properties >/usr/local/soft/rocketmq_1/logs/mqnamesrv.log 2>&1 &

    /usr/local/soft/rocketmq_1/conf/namesrv.properties文件指定了namesrv端口:

    listenPort=9877

    1.5.2 broker

    1. nohup sh /usr/local/soft/rocketmq_0/bin/mqbroker -c /usr/local/soft/rocketmq_0/conf/2m-2s-async/broker-a.properties > /usr/local/soft/rocketmq_0/logs/broker-a.log 2>&1 &
    2. nohup sh /usr/local/soft/rocketmq_1/bin/mqbroker -c /usr/local/soft/rocketmq_1/conf/2m-2s-async/broker-a-s.properties > /usr/local/soft/rocketmq_1/logs/broker-a-s.log 2>&1 &
    3. nohup sh /usr/local/soft/rocketmq_1/bin/mqbroker -c /usr/local/soft/rocketmq_1/conf/2m-2s-async/broker-b.properties > /usr/local/soft/rocketmq_1/logs/broker-b.log 2>&1 &
    4. nohup sh /usr/local/soft/rocketmq_0/bin/mqbroker -c /usr/local/soft/rocketmq_0/conf/2m-2s-async/broker-b-s.properties > /usr/local/soft/rocketmq_0/logs/broker-b-s.log 2>&1 &

    1.5.3 broker配置

    broker-a:

    1. brokerClusterName=qwx-cluster
    2. brokerName=broker-a
    3. brokerId=0
    4. deleteWhen=04
    5. fileReservedTime=48
    6. brokerRole=ASYNC_MASTER
    7. flushDiskType=ASYNC_FLUSH
    8. #Broker 对外服务的监听端口
    9. listenPort=10910
    10. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    11. autoCreateTopicEnable=true
    12. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    13. autoCreateSubscriptionGroup=true
    14. #nameServer地址,分号分割
    15. namesrvAddr=127.0.0.0.1:9876;127.0.0.0.1:9877
    16. #存储路径
    17. storePathRootDir=/usr/local/soft/rocketmq_0/store/broker-a
    18. #commitLog 存储路径
    19. storePathCommitLog=/usr/local/soft/rocketmq_0/store/broker-a/commitlog
    20. #消费队列存储路径存储路径
    21. storePathConsumeQueue=/usr/local/soft/rocketmq_0/store/broker-a/consumequeue
    22. #消息索引存储路径
    23. storePathIndex=/usr/local/soft/rocketmq_0/store/broker-a/index
    24. #checkpoint 文件存储路径
    25. storeCheckpoint=/usr/local/soft/rocketmq_0/store/broker-a/checkpoint
    26. #abort 文件存储路径
    27. abortFile=/usr/local/soft/rocketmq_0/store/broker-a/abort

    broker-a-s:

    1. brokerClusterName=qwx-cluster
    2. brokerName=broker-a
    3. brokerId=1
    4. deleteWhen=04
    5. fileReservedTime=48
    6. brokerRole=SLAVE
    7. flushDiskType=ASYNC_FLUSH
    8. #Broker 对外服务的监听端口
    9. listenPort=11911
    10. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    11. autoCreateTopicEnable=true
    12. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    13. autoCreateSubscriptionGroup=true
    14. #nameServer地址,分号分割
    15. namesrvAddr=127.0.0.0.1:9876;127.0.0.0.1:9877
    16. #存储路径
    17. storePathRootDir=/usr/local/soft/rocketmq_1/store/broker-a-s
    18. #commitLog 存储路径
    19. storePathCommitLog=/usr/local/soft/rocketmq_1/store/broker-a-s/commitlog
    20. #消费队列存储路径存储路径
    21. storePathConsumeQueue=/usr/local/soft/rocketmq_1/store/broker-a-s/consumequeue
    22. #消息索引存储路径
    23. storePathIndex=/usr/local/soft/rocketmq_1/store/broker-a-s/index
    24. #checkpoint 文件存储路径
    25. storeCheckpoint=/usr/local/soft/rocketmq_1/store/broker-a-s/checkpoint
    26. #abort 文件存储路径
    27. abortFile=/usr/local/soft/rocketmq_1/store/broker-a-s/abort

    broker-b:

    1. brokerClusterName=qwx-cluster
    2. brokerName=broker-b
    3. brokerId=0
    4. deleteWhen=04
    5. fileReservedTime=48
    6. brokerRole=ASYNC_MASTER
    7. flushDiskType=ASYNC_FLUSH
    8. #Broker 对外服务的监听端口
    9. listenPort=11920
    10. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    11. autoCreateTopicEnable=true
    12. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    13. autoCreateSubscriptionGroup=true
    14. #nameServer地址,分号分割
    15. namesrvAddr=127.0.0.0.1:9876;127.0.0.0.1:9877
    16. #存储路径
    17. storePathRootDir=/usr/local/soft/rocketmq_1/store/broker-b
    18. #commitLog 存储路径
    19. storePathCommitLog=/usr/local/soft/rocketmq_1/store/broker-b/commitlog
    20. #消费队列存储路径存储路径
    21. storePathConsumeQueue=/usr/local/soft/rocketmq_1/store/broker-b/consumequeue
    22. #消息索引存储路径
    23. storePathIndex=/usr/local/soft/rocketmq_1/store/broker-b/index
    24. #checkpoint 文件存储路径
    25. storeCheckpoint=/usr/local/soft/rocketmq_1/store/broker-b/checkpoint
    26. #abort 文件存储路径
    27. abortFile=/usr/local/soft/rocketmq_1/store/broker-b/abort

    broker-b-s:

    1. brokerClusterName=qwx-cluster
    2. brokerName=broker-b
    3. brokerId=1
    4. deleteWhen=04
    5. fileReservedTime=48
    6. brokerRole=SLAVE
    7. flushDiskType=ASYNC_FLUSH
    8. #Broker 对外服务的监听端口
    9. listenPort=10921
    10. #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    11. autoCreateTopicEnable=true
    12. #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    13. autoCreateSubscriptionGroup=true
    14. #nameServer地址,分号分割
    15. namesrvAddr=127.0.0.0.1:9876;127.0.0.0.1:9877
    16. #存储路径
    17. storePathRootDir=/usr/local/soft/rocketmq_0/store/broker-b-s
    18. #commitLog 存储路径
    19. storePathCommitLog=/usr/local/soft/rocketmq_0/store/broker-b-s/commitlog
    20. #消费队列存储路径存储路径
    21. storePathConsumeQueue=/usr/local/soft/rocketmq_0/store/broker-b-s/consumequeue
    22. #消息索引存储路径
    23. storePathIndex=/usr/local/soft/rocketmq_0/store/broker-b-s/index
    24. #checkpoint 文件存储路径
    25. storeCheckpoint=/usr/local/soft/rocketmq_0/store/broker-b-s/checkpoint
    26. #abort 文件存储路径
    27. abortFile=/usr/local/soft/rocketmq_0/store/broker-b-s/abort

    二、搭建namesrv集群和broker集群遇到的问题

    2.1 同一台机器启动两个namesrv,第二个namesrv要改端口

    默认是9876端口,第二个namesrv需要改成9877:

    1.新建namesrv.propeties文件,在此文件新增以下内容:

    listenPort=9877

    如下图: 

     2.以此配置文件启动namesrv:

    nohup sh /usr/local/soft/rocketmq_1/bin/mqnamesrv -c /usr/local/soft/rocketmq_1/conf/namesrv.properties >/usr/local/soft/rocketmq_1/logs/mqnamesrv.log 2>&1 &

    2.2 启动broker,在虚拟机中可能由于内存不够导致无法启动

    这个问题前言中的【RocketMQ 二主二从异步集群部署】第八节有写,引述以下:

    在虚拟机中可能由于内存不够导致无法启动,日志文件中出现如下错误:

    1. nohup: ignoring input
    2. Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000005c0000000, 8589934592, 0) failed; error='Cannot allocate memory' (errno=12)
    vim /usr/local/soft/rocketmq/bin/runbroker.sh

    把8g和4g改成512m和256m

    JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

     再次启动。

    2.2.1 补充

    启动报错:

     解决方法:

    除了要修改runbroker.sh,还要修改runserver.sh、tools.sh,一共要修改三个文件:

    • runbroker.sh
    • runserver.sh
    • tools.sh

    参考链接:RocketMQ启动报错Please set the JAVA_HOME variable in your environment, We need java(x64)_奔跑吧邓邓子的博客-CSDN博客_rocketmq启动报错

    2.3 启动报错-jdk路径问题

    报错:

    这里是因为jdk路径与启动脚本中的jdk路径不一致导致的。在此前我已经安装了jdk。
    还是报错,但是目录改成功了。
    在回来看上图,提示没有.../bin/java问题,那么就有可能是jdk的安装的问题;

    查看java安装路径:/usr/lib/jvm/java...

     确实没有jdk目录。

    用javac可以运行通过,而用javac -version运行不通过:

     到这里,可以确定是java安装的问题了,原因是:openjdk默认安装是没有bin目录的,要选择开发版本安装。

    记得安装完成后,做以下操作:

    1.yum install java-1.8.0-openjdk-devel.x86_64

    2.vim /etc/profile文件,添加以下内容:

    1. #set java environment
    2. export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-0.el8_3.x86_64
    3. export JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-0.el8_3.x86_64/jre
    4. export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
    5. export PATH=$PATH:$JRE_HOME/bin:$JAVA_HOME/bin

    3.让环境变量生效

    source etc/profile

    解决问题拓展链接:解决linux安装新版JDK时,Java文件夹下没有lib、bin等文件,只有jre的问题_掐住命运的脚脖子的博客-CSDN博客_linux只安装了jre

     linux系统yum install jdk后,如何查找安装目录进行环境变量配置 - 弦歌雅意 - 博客园

    2.3.1 yum卸载jdk

     装了默认的openjdk,要卸载了装开发版,链接附上:

    CentOS 7.x 通过yum安装和卸载 JDK1.8_菜鸟也疯狂_的博客-CSDN博客_yum 卸载jdk1.8

    解决linux安装新版JDK时,Java文件夹下没有lib、bin等文件,只有jre的问题_掐住命运的脚脖子的博客-CSDN博客_linux只安装了jre

    2.4 再次执行,依然报错 

            出现如下问题 是因为我们在集群中master和slave共用一个storePath造成的,这个时候 我们要启动的每一个broker要指定不一样的storePath 路径就行,也就是在我们的配置文件中修改即可。

    broker-a.properties、broker-a-s.properties、broker-b.properties、broker-b-s.properties配置文件增加以下内容,把共用的路径全部分开:

    netstat -an|grep 10920

    2.5 启动broker-b,启动报错:

            上面broker-a启动成功了。启动broker-b,报了地址已使用的错误:

     这个错误一般就是端口被占用。

    原因分析:

            broker-b之前我启动过一次,后来kill掉了,猜测是没kill干净,后来我发现,每一次kill都不干净(不知道是什么原因,以后再探究),都需要找到关联端口的进程号,在kill掉这个进程号:

    1.查看端口是否在运行,【netstat -an|grep 10920】:

     2.查找端口运行目录,【lsof -i 10920】:

    3. 找不到lsof命令,安装:

    yum install lsof

    4.继续: lsof -i:10920

    5.查询5731是什么程序?

    暂时不知道是什么原因,先kill掉。

    6.启动broker-b,正常

    2.6 发现broker-b启动后,broker-a的服务又没了

    启动broker-a,报错:

    怀疑是端口问题,现在给rocketmq_1服务的端口全换掉;

    把broker-b,和broker-a-s端口换成了11920、11911

     2.7 然后我怀疑,必须要先启动master,再启动slaver

    启动顺序:broker-a——>broker-a-s——>broker-b——>broker-b-s

     查看服务,顺利启动了四个:

    2.8 测试集群是否有效

    用代码测试,报错:

    暂时没有解决,以后有机会再解决....

    三、搭建rocket管理界面

    RocketMQ web控制台2.0.0版本源码方式安装

            最初搭建管理界面的初衷是为了查看我的namesrv是否能在界面查得到。但搭建完成后发现集群信息里没有搭建的broker集群信息:

     查看rocketmq-web端日志:

    心跳注册中心是成功的,所以我觉得有可能是brocker集群没成功注册到nameserver。 

    四、问题还是没找到,以后有空再找把

     

  • 相关阅读:
    面试官:Redis 过期删除策略和内存淘汰策略有什么区别?
    van-cascader 异步加载
    flink 技术总结待续
    模板学堂丨DataEase用户操作日志分析大屏
    Solana链上应用Crema因黑客攻击停运
    【揭秘】那些你可能没发现的高质量免费学习资源网站
    云原生系列二:如何实现跨数百个K8s集群的管理
    【办公类-16-07-04】合并版“2023下学期 中班户外游戏(有场地和无场地版,一周一次)”(python 排班表系列)
    Go 学习笔记(87) — 函数式选项,初始化结构体对象可变参数
    【日更】 基本算法_冒泡排序
  • 原文地址:https://blog.csdn.net/moneywenxue/article/details/126331640