RabbitMQ——异宿主docker搭建RabbitMQ镜像集群

网上扒的一张图。 我这里没有keepalived这一层。

成功的命令 用--net host模式 与宿主共享网段  --hostname 分别用 rmq1 rmq2 rmq3

在三台机器 192.168.1.20  192.168.1.21  192.168.1.22

以rmq1为磁盘节点,rmq2、rmq3为内存节点,加入集群

rabbitmqctl  reset:从管理数据库中移除所有数据,例如配置过的用户和虚拟宿主, 删除所有持久化的消息(这个命令要在rabbitmqctl stop_app之后使用)

--ram 表示设置为内存节点,忽略此参数默认为磁盘节点

最后设置镜像策略。完成。

docker run -d --name rmqnode \
              --net host \
              --hostname rmq3 \
              --add-host="rmq1":192.168.1.20 \
              --add-host="rmq2":192.168.1.21 \
              --add-host="rmq3":192.168.1.22 \
              -e RABBITMQ_DEFAULT_USER=admin \
              -e RABBITMQ_DEFAULT_PASS=Fire001  \
              -e RABBITMQ_ERLANG_COOKIE='blaze_rmq_cookie' \
              -e RABBITMQ_VM_MEMORY_HIGH_WATERMARK=0.8 \
              -m 500M --memory-swap 500M \
              rabbitmq:3.8.16-management

以下为相关辅助命令

 docker exec -it rmqnode rabbitmqctl stop_app
 docker exec -it rmqnode rabbitmqctl reset
 docker exec -it rmqnode rabbitmqctl start_app

rmq2 rmq3 以--ram形式加入集群 在stop_app reset之后执行 docker exec
-it rmqnode rabbitmqctl join_cluster --ram rabbit@rmq1

若要以disc方式加入,命令为

   docker exec -it rmqnode rabbitmqctl join_cluster --disc rabbit@rmq1

  注意, 最后面的rabbit@rmq1是已在集群中的disc节点,

          执行rabbitmqctl命令的是当前待加入的新节点,且执行时进在,新节点在执行stop_app 和 reset之后、start_app之前。

   移了一个节点命令(移除rabbit@rmq2, 其中rabbit@rmq1为集群中的disc节点):

   docker exec -it rmqnode rabbitmqctl -n rabbit@rmq1  forget_cluster_node rabbit@rmq2



查看、设置镜像策略 docker exec
-it rmqnode rabbitmqctl list_policies docker exec -it rmqnode rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' docker exec -it rmqnode cat /etc/hosts docker exec -it rmqnode cat ~/.erlang.cookie docker logs rmqnode docker stop rmqnode docker rm rmqnode docker ps -a

效果

查看 --net host 模式启动时, rabbit的端口占用情况

netstat -tpln | grep bean

netstat -tpln | grep beam
tcp        0      0 0.0.0.0:25672       0.0.0.0:*        LISTEN      28092/beam.smp      
tcp        0      0 0.0.0.0:15692       0.0.0.0:*        LISTEN      28092/beam.smp      
tcp        0      0 0.0.0.0:15672       0.0.0.0:*        LISTEN      28092/beam.smp      
tcp6       0      0 :::5672             :::*             LISTEN      28092/beam.smp

 netstat -tpln | grep 4369

netstat -tpln | grep 4369
tcp        0      0 0.0.0.0:4369        0.0.0.0:*        LISTEN      70749/epmd          
tcp6       0      0 :::4369             :::*             LISTEN      70749/epmd   

 

镜像集群已成,下面部署HAProxy

yum list | grep haproxy

yum install -y haproxy.x86_64

haproxy -f  /etc/haproxy/haproxy.cfg

service haproxy start

service haproxy status

检查配置文件

haproxy -f /etc/haproxy/haproxy.cfg -p /root/data/soft/haproxy/haproxy.pid -c

haproxy -f /etc/haproxy/haproxy.cfg -p /root/data/soft/haproxy/haproxy.pid -c
Configuration file is valid

在/etc/haproxy/haproxy.cfg中加入以下配置,HAProxy监控、rabbitmq服务负载均衡、rabbitmq控制台负载均衡。

#haproxy monitor
listen monitor
        bind 0.0.0.0:7100
        mode http
        option httplog
        stats enable
        maxconn 10
        stats uri /stats
        stats refresh 5s
        stats   realm haproxy  #认证时的realm,作为提示用的
        stats   auth admin:Fire001  #认证用户名和密码
        stats   hide-version  #隐藏HAProxy版本号
        stats   admin if TRUE  #管理界面只有认证通过后才能在ui上进行管理



#rabbitmq cluster
listen rabbitmq_cluster
        bind 0.0.0.0:7107
        #配置TCP模式
        mode tcp
        #简单的轮询
        balance roundrobin
        #RabbitMQ集群节点配置
        server rabbitmq_node1 192.168.1.20:5672 check inter 5000 rise 2 fall 3 weight 1
        server rabbitmq_node2 192.168.1.21:5672 check inter 5000 rise 2 fall 3 weight 1
        server rabbitmq_node3 192.168.1.22:5672 check inter 5000 rise 2 fall 3 weight 1

#rabbitmq console
listen rabbitm1_console
   bind 0.0.0.0:17107
   mode http
   balance roundrobin
   server rabbitmq_console1 192.168.1.20:15672
   server rabbitmq_console2 192.168.1.21:15672
   server rabbitmq_console3 192.168.1.22:15672

service haproxy start && service haproxy status

总是启不来的问题,解决办法,

删除

/run/haproxy.pid后,再执行  service haproxy start 

 

 

 

运行时内存修改,0.8 * 500M = 400M

docker exec -it rmqnode rabbitmqctl set_vm_memory_high_watermark 0.8

 

运行时修改最低磁盘警戒线

docker exec -it rmqnode rabbitmqctl set_disk_free_limit 1G

docker exec -it rmqnode rabbitmqctl set_disk_free_limit 1G
Setting disk free limit on rabbit@rmq1 to 1G bytes ...

 

 

 

 

端口映射方式部署

docker run -d --name rmqnode \
              -p 7107:5672 \
              -p 17107:15672 \
              -e RABBITMQ_DEFAULT_USER=admin \
              -e RABBITMQ_DEFAULT_PASS=admin  \
              -e RABBITMQ_ERLANG_COOKIE='blaze_rmq_cookie' \
              -e RABBITMQ_VM_MEMORY_HIGH_WATERMARK=0.8 \
              -m 500M --memory-swap 500M \
              rabbitmq:3.8.16-management

 

设置参数

tcp_listeners 设置rabbitmq的监听端口,默认为 5672

disk_free_limit 磁盘低水位线,若磁盘容量低于指定值则停止接收数据,默认值为{mem_relative, 1.0}, 即与内存相关联1:1,也可定制为多少byte.

vm_memeory_high_watemark, 设置内存低水位线,若低于该水位线,则开启流控机制,默认值为0.4,即内存总量的40%

hipe_compile将部分rabbitmq代码用High Performance Erlang compiler编译,可提升性能,该参数是实验性,若出现erlang vm segfaults,应关掉

force_fine_statistics,该参数属于rabbitmq_mamagement,若为true这进行精细化统计,但会影响性能

集群节点模式:Disk为磁盘模式存储/Ram为内存模式存储

//修改端口
RABBITMQ_NODE_PORT=5672

 

posted @ 2021-05-24 17:45  会飞的斧头  阅读(177)  评论(0编辑  收藏  举报