Centos 7+RabbitMQ+镜像集群之集群环境搭建

阅读这篇文章的前提是你已经实现了单机版RabbitMQ服务的安装配置,并且能够正常访问了。如果还没有准备好?
请参考:
Centos 7+RabbitMQ+镜像集群之基础环境搭建

rabbitmq_img_09.png

1、准备几台Centos服务器

我这里演示的是5台centos7虚拟机,如果你有这个条件的话,使用物理机器当然也可以。

  • Centos 7 64 130 安装了Rabbitmq服务
  • Centos 7 64 131 安装了Rabbitmq服务
  • Centos 7 64 132 安装了Rabbitmq服务
  • Centos 7 64 133 安装了Haproxy、Keepalived 设置了虚拟ip:172.16.255.135
  • Centos 7 64 134 安装了Haproxy、Keepalived 设置了虚拟ip:172.16.255.135

这里先简单的说一下集群实现思路,在多台centos服务器上按照Rabbitmq服务(如果是使用虚拟机的话,可以先安装一台,然后通过镜像的方式再克隆几台出来。),Haproxy用来实现tcp层的负载均衡,而Keepalived用来创建虚拟ip实现负载均衡的高可用。Haproxy、Keepalived、Rabbitmq服务可以在同一台centos虚拟机中。

2、集群环境搭建

2.1、停掉所有机器中的Rabbitmq服务

#方式1
service rabbitmq-server stop
#方式2
rabbitmqctl stop_app

2.2、从安装了Rabbitmq的centos中选择一个作为master节点,并将其/var/lib/rabbitmq/.erlang.cookie 文件拷贝到其他安装了Rabbitmq的centos中。(如果是克隆镜像的话,这步可以省略)

2. 3、启动master节点的Rabbitmq服务

service rabbitmq-server start

2.4、将其他几个安装了rabbitmq的非master节点加入到master节点中

如下命令在非master节点中执行

rabbitmqctl join_cluster rabbit@server130  #server130是我master节点的机器名称,如果你没有设置机器名称的话,这里可以使用master节点的ip地址

2.4.1、如果master节点的防火墙打开了,需要允许4369、25672端口通过

1. 允许通过指定端口:firewall-cmd --zone=public --add-port=4369/tcp --permanent、firewall-cmd --zone=public --add-port=25672/tcp --permanent
2. 重启防火墙:firewall-cmd --reload
3. 查看允许通过防火墙的端口:firewall-cmd --list-ports

2.5、启动非master节点的所有rabbitmq服务

# 方式1
service rabbitmq-server start
# 方式2
rabbitmqctl start_app

2.6、设置集群名称,在任意一个节点上执行即可

 rabbitmqctl set_cluster_name pingwazi_rabbitmq_cluster

2.7、设置为镜像队列,在任意一个节点上执行即可

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

3、集群的负载均衡环境搭建

3.1、Haproxy安装配置

3.1.1、下载并安装

#到官网下载Haproxy的合适包(一般选择次新版),文件默认是下载到当前目录的
curl -O  https://www.haproxy.org/download/2.0/src/haproxy-2.0.15.tar.gz
#解压文件
tar -zxvf haproxy-2.0.15.tar.gz
#按照依赖
yum install -y openssl openssl-devel systemd-devel.x86_64
#进入haproxy的解压目录
cd haproxy-2.0.15
#执行安装
make TARGET=linux-glibc   USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1  USE_ZLIB=1  && make install 

开启https
USE_OPENSSL=1
指定为systemd模式
USE_SYSTEMD=1
可指定安装目录
PREFIX=/usr/local/haproxy
默认为/usr/local/sbin/

3.1.2、配置系统服务

# 1、创建haproxy.service文件
vi /usr/lib/systemd/system/haproxy.service
# 2、haproxy.service 内容如下
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/local/sbin/haproxy -f /etc/haproxy/haproxy.cfg   -c -q
ExecStart=/usr/local/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg  -p /run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
#3、重载系统服务
systemctl daemon-reload
#4、加入开机自启动
systemctl enable haproxy.service
#5、启动、停止等操作
systemctl start/restart/stop/status haproxy

3.1.3、覆盖Haproxy的配置文件

里面的ip地址要换成自己安装了rabbitmq服务器的centos的机器的ip地址

vi /etc/haproxy/haproxy.cfg 
# 在命令行模式下输入d+G,目的是清空当前内容
# 填写以下内容

#绑定配置
listen rabbitmq_cluster
        bind 0.0.0.0:5672
        #配置TCP模式
        mode tcp
        #简单的轮询
        balance roundrobin
        #RabbitMQ集群节点配置
        server rmq_node0 172.16.255.130:5672 check inter 5000 rise 2 fall 3 weight 1
        server rmq_node1 172.16.255.131:5672 check inter 5000 rise 2 fall 3 weight 1
        server rmq_node2 172.16.255.132:5672 check inter 5000 rise 2 fall 3 weight 1

listen rabbitmq_cluster_webmanager
        bind 0.0.0.0:15672
        #配置TCP模式
        mode tcp
        #简单的轮询
        balance roundrobin
        #RabbitMQ集群节点配置
        server rmq_node0 172.16.255.130:15672 check inter 5000 rise 2 fall 3 weight 1
        server rmq_node1 172.16.255.131:15672 check inter 5000 rise 2 fall 3 weight 1
        server rmq_node2 172.16.255.132:15672 check inter 5000 rise 2 fall 3 weight 1

#haproxy监控页面地址
listen monitor
        bind 0.0.0.0:8100
        mode http
        option httplog
        stats enable
        stats uri /stats
        stats refresh 5s

如果按照Haproxy机器的防火墙是打开的话,要允许通过5672、15672、8100接口

# 通过指定端口
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=8100/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 查看是否添加成功
firewall-cmd --list-ports

浏览器输入http://haproxy的ip:15627/、http://haproxy的ip:8100/stats

rabbitmq_img_10.png

3.1.4、另外一台服务器也是同样的步骤(当然也可以克隆镜像的方式再创建一个机器,但是ip地址要记得修改哦)

3.2、keepalived安装配置

3.2.1、下载并安装

#到官网下载合适的安装包(一般选择次新版)
curl -O https://www.keepalived.org/software/keepalived-2.0.20.tar.gz
#解压
tar -zxvf keepalived-2.0.20.tar.gz
#进入解压目录
cd keepalived-2.0.20
#执行配置,指定路径
./configure --prefix=/usr/local/keepalived
# 编译并安装
make && make install

3.2.2、配置系统服务

# 拷贝源码中的keepalived-2.0.20/keepalived/etc/init.d/keepalived 到 /etc/init.d/
cp /usr/local/src/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d/

# 拷贝编译后的keepalived/etc/sysconfig/keepalived 到 /etc/sysconfig/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
 
# 创建文件夹
mkdir /etc/keepalived
 
# 把配置文件移到文件夹中
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
 
# 把执行文件移动到/usr/sbin/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

#安装系统自动启动
systemctl enable keepalived

3.2.3、覆盖配置文件

vi /etc/keepalived/keepalived.conf

#全局定义
global_defs {
   router_id keepalived_133  #唯一的值,也可以改成IP
}

#检测脚本定义
vrrp_script chk_haproxy {
    script "/etc/keepalived/scripts/haproxy_check.sh"
    interval 2   # 检测脚本执行的间隔
}

#虚拟实例定义
vrrp_instance VI_1 {
    state MASTER   #主机为MASTER,备用机为BACKUP
    interface ens33   #网卡名,用ifconfig查看
    virtual_router_id 133   #主、备机的virtual_router_id必须相同
    priority 100   #主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1         #心跳,每隔1秒钟检测一下服务器是否还活着
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        172.16.255.135   # 暴露给外界的虚拟IP地址,切记要与实际服务器处于同一网段
    }
    track_script {
        chk_haproxy
    }
}

3.2.4、编写检查服务指定服务是否存活的脚本

vi /etc/keepalived/scripts/haproxy_check.sh

#!/bin/bash
num=`ps -C haproxy --no-header |wc -l`
if [ $num -eq 0 ]
then
    echo "尝试重启haproxy">>/etc/keepalived/scripts/haproxy_check.log
    systemctl restart haproxy
    sleep 3
    if [ `ps -C haproxy --no-header |wc -l` -eq 0 ]
    then
        echo "重启haproxy失败,停止keepavlied服务">>/etc/keepalived/scripts/haproxy_check.log
        systemctl stop keepalived
    fi
fi

3.2.5、配置防火墙(如果防火墙没有打开,可以跳过)

Keepalived是一个轻量级的HA集群解决方案,但开启防火墙后各节点无法感知其它节点的状态,各自都绑定了虚拟IP。网上很多文章讲要配置防火墙放过tcp/112,在CentOS7下是无效的,正确的做法是配置放过vrrp协议,方法如下:

firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter OUTPUT 0 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
firewall-cmd --reload

Keepalived使用vrrp组播,默认地址是224.0.0.18,因此要配置防火墙放过。 完成后再用ip addr查看,集群已经正常了,只有主节点绑定虚拟IP,备份节点不会绑定了。

3.2.6、另外一台服务器keepalived的安装配置也是同理,只是conf文件中需要将state指定为BACKUP,同时将优先级设置得比MASTER小50

3.2.7、浏览器中输入地址进行测试

http://虚拟ip:15627/、http://虚拟ip:8100/


rabbitmq_img_11.png

3.2.8、将MASTER的haproxy服务停掉,在BACKUP中执行ip addr查看虚拟ip是否漂移过来。

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