Rabbitmq+Haproxy+Keepalived高可用部署

安装步骤

第一步: 通过介质库介质安装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 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容