.net core RabbitMQ docker方式部署 keepalived + haproxy + rabbitmq 高可用集群(九)

 

三台机器

- rabbitmq1:192.168.0.191
- rabbitmq2:192.168.0.110
- rabbitmq3:192.168.0.122

每台机器集群需要通信所以保证能ping通 

如果ping不同 看看防火墙关闭了么

systemctl stop firewalld

我这选择的centeros的系统

每台机器拉镜像

docker pull rabbitmq:management

 

 如果拉取的慢的需要查看docker镜像源

vim /etc/docker/daemon.json

替换国内镜像源

{"registry-mirrors":
[
"https://docker.mirrors.ustc.edu.cn",
"https://cr.console.aliyun.com/",
"https://reg-mirror.qiniu.com",
"https://6kx4zyno.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"https://cr.console.aliyun.com/",
"https://reg-mirror.qiniu.com",
"https://hub-mirror.c.163.com/"
]
}
View Code

重启docker

systemctl restart docker  

查看镜像源更换是否成功

docker info

==============================

192.168.0.191 机器 docker-compose

 

 

 对 文件加权限

chmod +777 /home/admin1/yyx/rabbitmq/
chmod +777 /home/admin1/yyx/rabbitmq/data
chmod +777 /home/admin1/yyx/rabbitmq/log

 

 

 rabbitmq 映射文件夹

docker-compose.yaml

docker-compose.yaml 内容

 

version: '3'
services:
  rabbitmq:
    container_name: mcst-rabbitmq
    image: rabbitmq:management
    restart: always
    ports:
      - 4369:4369
      - 5671:5671
      - 5672:5672
      - 15672:15672
      - 25672:25672
    environment:
      - TZ=Asia/Shanghai
      - RABBITMQ_ERLANG_COOKIE=rabbitmq
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin123
      - RABBITMQ_DEFAULT_VHOST=mcst_vhost
    hostname: rabbitmq1
    extra_hosts:
      - rabbitmq1:192.168.0.191
      - rabbitmq2:192.168.0.110
      - rabbitmq3:192.168.0.122
    volumes:
      - /home/admin1/yyx/rabbitmq/data:/var/lib/rabbitmq/mnesia
      - /home/admin1/yyx/rabbitmq/log:/var/log/rabbitmq

 

这里如果不这么映射 会出现 docker rabbit启动失败,报错:erlang.cookie must be accessible by owner only

- /home/admin1/yyx/rabbitmq/data:/var/lib/rabbitmq/mnesia
- /home/admin1/yyx/rabbitmq/log:/var/log/rabbitmq

问题解决 参考 docker rabbit启动失败,报错:erlang.cookie must be accessible by owner only - JAs1mple - 博客园 (cnblogs.com)

 

执行 docker-compose up -d 

 

192.168.0.110 机器

文件夹

 与191一样的 加权限

chmod +777 /home/admin1/yyx/rabbitmq/
chmod +777 /home/admin1/yyx/rabbitmq/data
chmod +777 /home/admin1/yyx/rabbitmq/log

 

docker-compose

docker-compose.yaml 内容

设置了hostname 以及 ip 映射

hostname: rabbitmq2
extra_hosts:
- rabbitmq1:192.168.0.191
- rabbitmq2:192.168.0.110
- rabbitmq3:192.168.0.122

version: '3'
services:
  rabbitmq:
    container_name: mcst-rabbitmq
    image: rabbitmq:management
    restart: always
    ports:
      - 4369:4369
      - 5671:5671
      - 5672:5672
      - 15672:15672
      - 25672:25672
    environment:
      - TZ=Asia/Shanghai
      - RABBITMQ_ERLANG_COOKIE=rabbitmq
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin123
      - RABBITMQ_DEFAULT_VHOST=mcst_vhost
    hostname: rabbitmq2
    extra_hosts:
      - rabbitmq1:192.168.0.191
      - rabbitmq2:192.168.0.110
      - rabbitmq3:192.168.0.122
    volumes:
      - /home/admin1/yyx/rabbitmq.sh:/home/rabbitmq.sh
      - /home/admin1/yyx/rabbitmq/data:/var/lib/rabbitmq/mnesia
      - /home/admin1/yyx/rabbitmq/log:/var/log/rabbitmq     

 

rabbitmq.sh 脚本内容

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
rabbitmqctl start_app

如果 脚本没成功 就直接进入容器中 执行 脚本内容

 

192.168.0.122  机器 

 

 

 与191一样的 加权限

chmod +777 /home/admin1/yyx/rabbitmq/
chmod +777 /home/admin1/yyx/rabbitmq/data
chmod +777 /home/admin1/yyx/rabbitmq/log

docker-compose 内容

 

version: '3'
services:
  rabbitmq:
    container_name: mcst-rabbitmq
    image: rabbitmq:management
    restart: always
    ports:
      - 4369:4369
      - 5671:5671
      - 5672:5672
      - 15672:15672
      - 25672:25672
    environment:
      - TZ=Asia/Shanghai
      - RABBITMQ_ERLANG_COOKIE=rabbitmq
      - RABBITMQ_DEFAULT_USER=admin
      - RABBITMQ_DEFAULT_PASS=admin123
      - RABBITMQ_DEFAULT_VHOST=mcst_vhost
    hostname: rabbitmq3
    extra_hosts:
      - rabbitmq1:192.168.0.191
      - rabbitmq2:192.168.0.110
      - rabbitmq3:192.168.0.122
    volumes:
      - /home/admin1/yyx/rabbitmq.sh:/home/rabbitmq.sh
      - /home/admin1/yyx/rabbitmq/data:/var/lib/rabbitmq/mnesia
      - /home/admin1/yyx/rabbitmq/log:/var/log/rabbitmq      

 

 

rabbitmq.sh

 

 

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
rabbitmqctl start_app

 

 

 

脚本与上面一样

如果不好用 处理也是 进入容器内 逐条执行脚本语句

查看是否成功

 

HAProxy 负载均衡

192.168.0.122 机器上部署  其实是部署的一个haproxy 备份

拉取 2.3.10 版本 的haproxy 高版本 或者latest 可能会出现

我拉取的高版本 出现内存不足的情况

docker pull haproxy:2.3.10

192.168.0.122 机器上haproxy文档目录

 

 

docker-compose 文件内容

注意 haproxy 映射了keepalived 文件夹 - /home/admin1/yyx/keepalived:/etc/keepalived

version: '3'
services:
  haproxy:
    container_name: mcst-haproxy
    image: haproxy:2.3.10
    restart: always
    ports:
      - 8100:8100
      - 15670:5670
    environment:
      - TZ=Asia/Shanghai
    extra_hosts:
      - rabbitmq1:192.168.0.191
      - rabbitmq2:192.168.0.110
      - rabbitmq3:192.168.0.122
    volumes:
      - /home/admin1/yyx/haproxy/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
      - /home/admin1/yyx/keepalived:/etc/keepalived

 haproxy.cfg 配置文件内容

 

global
    log 127.0.0.1 local0 info
    maxconn 2096
    daemon
defaults
    log     global
    mode    tcp
    option  tcplog
    retries 3
    option  redispatch
    maxconn 4096
    timeout connect 5s
    timeout client 120s
    timeout server 120s
    
# ssl for rabbitmq
# frontend ssl_rabbitmq
    # bind *:5673 ssl crt /root/rmqha_proxy/rmqha.pem
    # mode tcp
    # default_backend rabbitmq
    
# web 管理界面
listen stats
    bind *:8100
    mode http
    stats enable
    stats realm Haproxy\ Statistics
    stats uri /
    stats auth admin:admin123    
# 配置负载均衡
listen rabbitmq
    bind *:5670
    mode tcp
    balance roundrobin
    server  rabbitmq1 rabbitmq1:5672  check inter 5s rise 2 fall 3
    server  rabbitmq2 rabbitmq2:5672  check inter 5s rise 2 fall 3
    server  rabbitmq3 rabbitmq3:5672  check inter 5s rise 2 fall 3

  

haproxy 配置文件内容 可能会出现 报错

parsing [/usr/local/etc/haproxy/haproxy.cfg:37]: Missing LF on last line, file might have been truncated at position 67

出现这种问题 查看行37 回车就行

192.168.0.191 机器上部署 与上面的 192.168.0.122 机器部署一样 

docker-compose 文件内容 一样

haproxy 配置文件内容 一样

 

也就是说两台机器部署文件内容都一样的

查看haproxy 部署成功么

192.168.0.122 的

 192.168.0.191 的

 keepalived 2.0.20 构建haproxy 主备

 192.168.0.191   192.168.0.122 备份

keepalived 文件夹 已经在 haproxy docker-compose.yml文件中映射了

 

 keepalived.conf 内容

 

global_defs {
   # 路由id,主备节点不能相同
   router_id node1
}

# 自定义监控脚本
vrrp_script chk_haproxy {
    # 脚本位置
    script "/etc/keepalived/haproxy_check.sh" 
    # 脚本执行的时间间隔
    interval 5 
    weight 10
}

vrrp_instance VI_1 {
    # Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点
    state MASTER  
    # 指定监测的网卡,可以使用 ifconfig 进行查看
    interface ens33
    # 虚拟路由的id,主备节点需要设置为相同
    virtual_router_id 1
    # 优先级,主节点的优先级需要设置比备份节点高
    priority 100 
    # 设置主备之间的检查时间,单位为秒 
    advert_int 1 
    # 定义验证类型和密码
    authentication { 
        auth_type PASS
        auth_pass 123456
    }

    # 调用上面自定义的监控脚本
    track_script {
        chk_haproxy
    }

    virtual_ipaddress {
        # 虚拟IP地址,可以设置多个
        192.168.0.200  
    }
}

 

 

 

 

 

haproxy_check.sh 内容

#!/bin/bash
# 判断haproxy是否已经启动
if [ `ps -C haproxy --no-header | wc -l` -eq 0 ] ; then
    #如果没有启动,则启动
    haproxy -f /etc/haproxy/haproxy.cfg
fi

#睡眠3秒以便haproxy完全启动
sleep 3

#如果haproxy还是没有启动,此时需要将本机的keepalived服务停掉,以便让VIP自动漂移到另外一台haproxy
if [ `ps -C haproxy --no-header | wc -l` -eq 0 ]; then
    systemctl stop keepalived
fi

 

 

 

需要 进入 haproxy 容器中 安装 keepalived

 

进入 191 的 haproxy 容器

 

执行 命令

更新update,安装keepalived
apt-get update
apt-get install keepalived
 
安装vim 安装ifconfig命令 安装ping
apt-get install net-tools    
apt-get install iputils-ping

最后在容器内启动  keepalived

service keepalived start

 

 

192.168.0.122 备份 上配置 keepalived

文档结构

 

 haproxy_check.sh 内容

 

 

#!/bin/bash
# 判断haproxy是否已经启动
if [ `ps -C haproxy --no-header | wc -l` -eq 0 ] ; then
    #如果没有启动,则启动
    haproxy -f /etc/haproxy/haproxy.cfg
fi

#睡眠3秒以便haproxy完全启动
sleep 3

#如果haproxy还是没有启动,此时需要将本机的keepalived服务停掉,以便让VIP自动漂移到另外一台haproxy
if [ `ps -C haproxy --no-header | wc -l` -eq 0 ]; then
    systemctl stop keepalived
fi

 

  

 

 keepalived.conf 内容 与 主 不同的 是 全局 路由id 名称 router_id node2 角色 为 state MASTER   其他都一样

 

global_defs {
   # 路由id,主备节点不能相同
   router_id node2
}
# 自定义监控脚本
vrrp_script chk_haproxy {
    # 脚本位置
    script "/etc/keepalived/haproxy_check.sh" 
    # 脚本执行的时间间隔
    interval 5 
    weight 10
}
vrrp_instance VI_1 {
    # Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点
    state MASTER  
    # 指定监测的网卡,可以使用 ifconfig 进行查看
    interface ens33
    # 虚拟路由的id,主备节点需要设置为相同
    virtual_router_id 1
    # 优先级,主节点的优先级需要设置比备份节点高
    priority 100 
    # 设置主备之间的检查时间,单位为秒 
    advert_int 1 
    # 定义验证类型和密码
    authentication { 
        auth_type PASS
        auth_pass 123456
    }
    # 调用上面自定义的监控脚本
    track_script {
        chk_haproxy
    }
    virtual_ipaddress {
        # 虚拟IP地址,可以设置多个
        192.168.0.200  
    }
}

进入 122 的haproxy 容器 安装 keepalived

 

更新update,安装keepalived
apt-get update
apt-get install keepalived
 
安装vim 安装ifconfig命令 安装ping
apt-get install net-tools    
apt-get install iputils-ping

最后在容器内启动  keepalived

service keepalived start

 

  

 

到这里  keepalived + haproxy +  rabbitmq 高可用集群已经部署完毕

接下来 测试一下 明天在测试 。。。

 

参考 docker下用keepalived+Haproxy实现高可用负载均衡集群_docker haproxy keepalived_布偶猫爸爸的博客-CSDN博客

参考 快速搭建高可用 RabbitMQ 集群和 HAProxy 软负载 - 知乎 (zhihu.com)

posted on 2023-08-19 00:36  是水饺不是水饺  阅读(96)  评论(0)    收藏  举报

导航