美文网首页
Rabbitmq+Haproxy+Keepalived高可用部署

Rabbitmq+Haproxy+Keepalived高可用部署

作者: 久伴我还是酒伴我 | 来源:发表于2023-08-06 16:31 被阅读0次

    安装步骤

    第一步: 通过介质库介质安装erlang
    第二步: 通过介质库介质安装socat
    第三步: 通过介质库介质安装rabbitmq-server
    第四步: 高可用集群部署及配置
    第五步: Haproxy安装配置
    第六步: Keepalived安装配置

    1:Erlang安装

    RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写,即需要先安装部署Erlang环境再安装RabbitMQ环境,安装Erlang和RabbitMQ版本需要相对应。

    ####安装
    rpm -ivh erlang-22.3.2-1.el8.x86_64.rpm
    ####检查是否安装成功
    输入 erl 并用 halt() . 函数退出
    

    2:Socat安装

    rpm -ivh socat-1.7.3.2-5.el7.lux.x86_64.rpm
    

    3:Rabbitmq 安装

    #### 安装
    rpm -ivh  rabbitmq-server-3.8.3-1.el8.noarch.rpm
    #### 启动服务:
    systemctl start rabbitmq-server
    #### 列出用户列表:
    sudo rabbitmqctl list_users
    #### 添加网站管理插件
    sudo rabbitmq-plugins enable rabbitmq_management
    #### 添加用户 ******指的是密码,由项目组自己设定,应规避弱密码
    sudo rabbitmqctl add_user admin ******
    #### 给用户添加角色 并查看用户信息
    sudo rabbitmqctl set_user_tags admin administrator
    #### 给用户权限赋值
    sudo rabbitmqctl add_vhost nmup
    sudo rabbitmqctl set_permissions -p nmup admin '.*' '.*' '.*'
    #### 删除原有的 guest 用户
    sudo rabbitmqctl delete_user guest
    #### rabbitmq普通用户不能开放防火墙,使用root提前开放5672,15672端口
    firewall-cmd --zone=public --add-port=5672/tcp --permanent
    firewall-cmd --zone=public --add-port=15672/tcp --permanent
    firewall-cmd --reload
    

    在浏览器中输入服务器IP:15672 就可以看到RabbitMQ的WEB管理页面了

    4 高可用集群部署

    4.1 修改主机名称
    vi /etc/hosts  在三台机器上分别添加如下内容
    192.168.217.128 basic
    192.168.217.136 basic02
    192.168.217.135 basic03
    
    4.2 在生产环境需要开端口

    4369 Erlang端口
    25672 集群通信端口
    15672 Rabbitmq管理控制台端口
    5672 Rabbitmq服务端口
    8100 HAProxy 配置监控页面绑定端口
    5671 HAProxy rabbitmq_cluster集群通信端口

    4.3 关闭 selinux
    vim /etc/selinux/config
    #### 修改 SELINUX=enforcing为SELINUX=disabled
    reboot 重启服务
    ####查看selinux状态
    getenforce
    
    4.4 共享Erlang Cookie

    先将三台RabbitMQ服务关闭,将basic上的 .erlang.cookie文件拷贝到其他两台
    主机上(basic02,basic03) ,cookie文件相当于密钥令牌,集群中的RabbitMQ节点
    需要通过交换密钥令牌以获得相互认证,否则在搭建过程中会出现Authentication
    Fail错误。拷贝完毕后,三台的.erlang.cookie保持一致

    .erlang.cookie文件目录 默认的存储路径 /var/lib/rabbitmq/.erlang.cookie

    4.5 集群配置

    执行该步骤前,请确保三台服务器rabbitmq服务为启动状态
    RabbitMQ 集群的搭建需要选择其中任意一个节点为基准,将其它节点逐步加入,这里我们以basic为基准节点将basic02 和 basic03 加入集群,在basic02 和 basic03 上执行以下命令

    第1步:在basic02 上执行
    # .停止服务(如已停止请忽略)
    rabbitmqctl stop_app
    # .重置状态
    rabbitmqctl reset
    # .节点加入
    rabbitmqctl join_cluster --disc rabbit@basic
    # .启动服务
    rabbitmqctl start_app
    
    第2步:在basic03 上执行
    # .停止服务(如已停止请忽略)
    rabbitmqctl stop_app
    # .重置状态
    rabbitmqctl reset
    # .节点加入
    rabbitmqctl join_cluster --ram rabbit@basic02
    # .启动服务
    rabbitmqctl start_app
    
    #此时一个普通集群就搭建起来了,在任意一个节点查看集群状态
    rabbitmqctl cluster_status
    
    
    4.6 开启镜像集群

    以上部署的这种集群,是无法在各个节点之间保存数据的,数据只会保存在接受到消息的节点上当 ram 的节点挂了之后 数据会丢失;这里我们为所有队列开启镜像配置,高可用策略。

    ####表示开启HA模式 适用于所有的队列
    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'  
    
    ####给默认的 所有的 添加高可用策略
    rabbitmqctl set_policy ha-two "^" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
    
    ####给指定的 /MSA 添加高可用策略
    rabbitmqctl set_policy ha-two "/MSA" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
    

    5 HAProxy安装

    5.1 安装haproxy
    #解压haproxy包
    tar -zxvf haproxy-2.4.8.tar.gz -C /usr/local
    进入解压后根目录,执行下面的编译命令:
    cd /usr/local
    mkdir haproxy
    cd haproxy-2.4.8
    make TARGET=linux-glibc  PREFIX=/usr/local/haproxy
    make install PREFIX=/usr/local/haproxy
    
    5.2 配置环境变量
    vim /etc/profile
    export HAPROXY_HOME=/usr/local/haproxy
    export PATH=$PATH:$HAPROXY_HOME/sbin
    source /etc/profile
    
    5.3 新建配置文件

    在位置/etc/haproxy/目录下创建文件haproxy.cfg,Haproxy下内容配置如下,
    注意:另一台也需配置

    # 全局配置
    global
        # 日志输出配置、所有日志都记录在本机,通过 local0 进行输出
        log 127.0.0.1 local0 info
        # 最大连接数
        maxconn 4096
        # 改变当前的工作目录
        chroot /usr/local/haproxy
        # 以指定的 UID 运行 haproxy 进程
        uid 99
        # 以指定的 GID 运行 haproxy 进程
        gid 99
        # 以守护进行的方式运行
        daemon
        # 当前进程的 pid 文件存放位置
        pidfile /usr/local/haproxy/haproxy.pid
    
    # 默认配置
    defaults
        # 应用全局的日志配置
        log global
        # 使用4层代理模式,7层代理模式则为"http"
        mode tcp
        # 日志类别
        option tcplog
        # 不记录健康检查的日志信息
        option dontlognull
        # 3次失败则认为服务不可用
        retries 3
        # 每个进程可用的最大连接数
        maxconn 2000
        # 连接超时
        timeout connect 5s
        # 客户端超时
        timeout client 120s
        # 服务端超时
        timeout server 120s
    # 绑定配置
    listen rabbitmq_cluster
        bind :5671
        # 配置TCP模式
        mode tcp
        # 采用加权轮询的机制进行负载均衡
        balance roundrobin
        # RabbitMQ 集群节点配置
        server node1 basic:5672 check inter 5000 rise 2 fall 3 weight 1
        server node2 basic02:5672 check inter 5000 rise 2 fall 3 weight 1
        server node3 basic03:5672 check inter 5000 rise 2 fall 3 weight 1
    
    # 配置监控页面
    listen monitor
        bind :8100
        mode http
        option httplog
        stats enable
        stats uri /stats
        stats refresh 5s
    
    5.4 启动服务
    #启动服务
    haproxy -f /etc/haproxy/haproxy.cfg
    #查看Haproxy 启动状态
    ps -ef|grep haproxy
    

    浏览器打开:haproxy的机器 IP:8100/stats,查看当前的 RabbitMQ 节点的状态
    节点1:http://xxx.xxx.xxx.xxx:8100/stats
    节点2:http:///xxx.xxx.xxx.xxx:8100/stats

    6 Keepalived安装

    6.1 安装
    #创建目录
    tar -zxvf keepalived-1.3.5.tar.gz
    #进入解压包
    cd keepalived-1.3.5
    #执行配置安装目录
    ./configure --prefix=/usr/local/keepalived --sysconf=/etc
    #编译并安装
    make && make install
    
    #创建目录
    mkdir /etc/keepalived
    #拷贝配置文件到/etc/keepalived目录下
    cp /rabbitmq/app/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    #复制keepalived脚本到/etc/init.d/ 目录(可忽略)
    cp /rabbitmq/app/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    #拷贝keepalived脚本到/etc/sysconfig/ 目录
    cp/rabbitmq/app/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    
    6.2 环境配置

    第1步:修改配置文件
    修改第1台Keepalived服务器上文件:vim /etc/keepalived/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 ens32
        # 虚拟路由的id,主备节点需要设置为相同
        virtual_router_id 1
        # 优先级,主节点的优先级需要设置比备份节点高
        priority 100 
        # 设置主备之间的检查时间,单位为秒 
        advert_int 2 
        # 定义验证类型和密码
        authentication { 
            auth_type PASS
            auth_pass w123456
        }
    
        # 调用上面自定义的监控脚本
        track_script {
            chk_haproxy
        }
    
        virtual_ipaddress {
            # 虚拟IP地址,可以设置多个
            192.168.217.200  
        }
    }
    

    修改第2台keepalive 节点配置文件

    global_defs {
       # 路由id,主备节点不能相同    
       router_id node3  
    }
    
    vrrp_script chk_haproxy {
        script "/etc/keepalived/haproxy_check.sh" 
        interval 5 
        weight 10
    }
    
    vrrp_instance VI_1 {
        # BACKUP 表示备份节点
        state BACKUP 
        interface ens32
        virtual_router_id 1
        # 优先级,备份节点要比主节点低
        priority 50 
        advert_int 2
        authentication { 
            auth_type PASS
            auth_pass w123456
        }
        
        track_script {
            chk_haproxy
        }
    
        virtual_ipaddress {
            192.168.217.200  
        }
    }
    
    6.3 脚本编写

    cd /etc/keepalived/ 进入文件夹分别在 basic 和 basic03 机器的 /etc/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
    
    6.4:脚本授权

    创建后为其赋予执行权限
    chmod +x /etc/keepalived/haproxy_check.sh

    6.5 启动服务
    #开启服务
    service keepalived start     
    #关闭服务
    systemctl stop keepalived  
    #查看到虚拟 IP 的情况
     ip a 
    

    相关文章

      网友评论

          本文标题:Rabbitmq+Haproxy+Keepalived高可用部署

          本文链接:https://www.haomeiwen.com/subject/cbfwpdtx.html