RabbitMQ_Cluster+HA(haproxy+keepalived)热备
更新时间:2023-05-10 05:55:01 阅读量: 实用文档 文档下载
- rabbitmqcli推荐度:
- 相关推荐
RabbitMQ_Cluster+HA(haproxy+keepalived)热备
--------------时间:2014-8-15 -------------------四海道达运维组 -----------系统版:Ubutnu Server 14.04
目录
RabbitMQ_Cluster+HA(haproxy+keepalived)热备 ............................................... 1
1. 网络拓扑图 ............................................................................................ 3 2. 修改主机名\dns记录\较对时间 ................................................................ 4
2.1 Rabbit1主机 ................................................................................ 4 2.2 Rabbit2主机 ................................................................................ 5 2.3 Rabbit3主机 ................................................................................ 5 3. 安装配置Rabbit_Cluster 集群 .................................................................. 6
3.1 Rabbit1主机 ................................................................................ 6 3.2 Rabbit2主机 ................................................................................ 8 3.3 Rabbit3主机 .............................................................................. 10 3.4 添加Rabbit_Cluster管理用户 ..................................................... 11 3.5 设置用户tags ............................................................................ 12 3.6 设置用户权限 ............................................................................. 12 4. 设置高可用策略 ................................................................................... 12
4.1 方法一(命令): ....................................................................... 12 4.2 方法二(web页面): ................................................................. 13 5. 安装配置 Haproxy+Keeplived ................................................................ 15
5.1 Rabbit2主机 .............................................................................. 15
5.2 Rabbit3主机 .............................................................................. 18 5.3 登录Haproxy的管理端页面 .......................................................... 20 6. 较验Rabbit_Cluster集群服务 ................................................................ 21 7. 较验Haproxy+Keepalived主备服务 ....................................................... 22
7.1 首先查看一下Haproxy和Keepalived的进程 ................................. 22 7.2 模拟故障1:主节点Haproxy进程死掉,进程自动恢复 ................... 22 7.3 模拟故障2:主节点Haproxy进程死掉,进程无法恢复 ................... 23 7.4 模拟故障3:主节点Haproxy恢复正常。 ....................................... 25
1. 网络拓扑图
RabbitMQ_Cluster集群:
Rabbit1:192.168.100.191 (disc) Rabbit2:192.168.100.192 (ram) Rabbit3:192.168.100.193 (ram) Rabbit集群中,必须有一个节点是disc模式。
Haproxy+Keeplived 热备 Master:192.168.100.192 Backup:192.168.100.193 VIP: 192.168.100.195
2. 修改主机名\dns记录\较对时间
注意:所有操作均是root权限,如若不是请sudo -s切换成root
2.1 Rabbit1主机
在/etc/network/interfaces中不要配置dns记录
vim 01_rabbit1_hostname.sh #!/bin/bash
echo "rabbit1" >/etc/hostname
echo "192.168.100.191 rabbit1" >> /etc/hosts echo "192.168.100.192 rabbit2" >> /etc/hosts echo "192.168.100.193 rabbit3" >> /etc/hosts
echo "nameserver 8.8.8.8" >/etc/resolvconf/resolv.conf.d/base
ntpdate -s apt-get -y install ntp service ntp reload reboot exit
2.2 Rabbit2主机
在/etc/network/interfaces中不要配置dns记录
vim 01_rabbit2_hostname.sh #!/bin/bash
echo "rabbit2" >/etc/hostname
echo "192.168.100.191 rabbit1" >> /etc/hosts echo "192.168.100.192 rabbit2" >> /etc/hosts echo "192.168.100.193 rabbit3" >> /etc/hosts
echo "nameserver 8.8.8.8" >/etc/resolvconf/resolv.conf.d/base
ntpdate -s apt-get -y install ntp service ntp reload reboot exit
2.3 Rabbit3主机
在/etc/network/interfaces中不要配置dns记录
vim 01_rabbit3_hostname.sh #!/bin/bash
echo "rabbit3" >/etc/hostname
echo "192.168.100.191 rabbit1" >> /etc/hosts echo "192.168.100.192 rabbit2" >> /etc/hosts echo "192.168.100.193 rabbit3" >> /etc/hosts
echo "nameserver 8.8.8.8" >/etc/resolvconf/resolv.conf.d/base
ntpdate -s apt-get -y install ntp service ntp reload
reboot exit
3. 安装配置Rabbit_Cluster 集群
因为类同重复性工作较多,所以直接采用《shell脚本+人工操作》搭配方式进行搭建,脚本执行过程中需要在rabbit1和rabbit2交互进行。
3.1 Rabbit1主机
vim 02_rabbit1_install.sh #!/bin/bash
apt-get install -y erlang ##安装rabbitmq所依赖的工具erlang
##添加rabbitmq源
echo "deb /debian/ testing main" > /etc/apt/sources.list.d/rabbitmq.list
wget /rabbitmq-signing-key-public.asc apt-key add rabbitmq-signing-key-public.asc apt-get update
##安装rabbitmq-server服务
apt-get install -y rabbitmq-server
##方法二
echo “CHDCGETPYWOWREASJUAZ” > /var/lib/rabbitmq/.erlang.cookie
service rabbitmq-server start
# 配置rabbitmq
rabbitmq-plugins enable rabbitmq_management
##停止rabbit服务 rabbitmqctl stop
##查看rabbit状态 rabbitmqctl status
##此处交互,请在rabbit2服务器执行脚本02_rabbit2_install.sh echo "Please run 02_rabbit2_install.sh in the rabbit2 server"
echo "After completion ! ! !"
echo "Press "Enter" to continue .........." read
##因为做rabbitmq_cluster需要确保.erlang.cookie一致性,所以rabbit2和rabbit3上面的.erlang.cookie均需要从rabbit1上面scp复制过去,可以参见如下(方法一),但因为是全新的,其实完全可以写一段相同的内容更省事,参见上文中(方法二见上文),方法一我只做介绍(见下文)在这里,我注释掉,因为脚本中直接使用方法二。
##方法一
#安装expect工具,以实现自动交互上传文件。 #apt-get -y install tcl tk expect #在bash中调用expect命令
#rabbit1第一次向rabbit2机器scp文件 #/usr/bin/expect <<EOF #set timeout 5
#spawn scp /var/lib/rabbitmq/.erlang.cookie #stone@192.168.100.192:/home/stone/cookit/ #set timeout 3 #expect "(yes/no)" #send "yes\r" #expect "password:" #send "lance!@#\r" #expect eof #EOF
# rabbit1第二次或以上向rabbit2机器scp文件 #/usr/bin/expect <<EOF #set timeout 10
#spawn scp /var/lib/rabbitmq/.erlang.cookie #stone@192.168.100.192:/home/stone/cookit/ #set timeout 3 #expect "password:" #send "lance!@#\r" #expect eof #EOF
#echo "Press "Enter" to continue .......... in the rabbit2 server" #echo "After completion ! ! !"
#echo "Press "Enter" to continue .........." #read
##启动rabbitma服务
rabbitmq-server -detached
echo "Press "Enter" to continue .......... in the rabbit2 server" echo "After completion ! ! !"
echo "Press "Enter" to continue .........."
read
##查看Rabbit_Cluster集群的状态 rabbitmqctl cluster_status
echo "Press "Enter" to continue ....Rabbit_Cluster Install is End...." read
exit
3.2 Rabbit2主机
vim 02_rabbit2_install.sh #!/bin/bash
apt-get install -y erlang
useradd -d /var/lib/rabbitmq rabbitmq
echo "deb /debian/ testing main" > /etc/apt/sources.list.d/rabbitmq.list
wget /rabbitmq-signing-key-public.asc apt-key add rabbitmq-signing-key-public.asc apt-get update
apt-get install -y rabbitmq-server
##方法二
echo “CHDCGETPYWOWREASJUAZ” > /var/lib/rabbitmq/.erlang.cookie
service rabbitmq-server start
# Configure Setup
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl stop
rabbitmqctl status
##以下是对应rabbit1脚本中的方法一,因为采用的方法二,所以我注释掉它。 #rm -rf /var/lib/rabbitmq/.erlang.cookie
#mkdir -p /home/stone/cookit &&chown stone.stone /home/stone/cookit
#echo "Press "Enter" to continue .......... in the rabbit1 server" #echo "After completion ! ! !"
#echo "Press "Enter" to continue .........." #read
#mv /home/stone/cookit/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie #chown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie
##以正常模式启动rabbitmq-server服务 rabbitmq-server -detached
echo "Press "Enter" to continue .......... in the rabbit1 server" echo "After completion ! ! !"
echo "Press "Enter" to continue .........." read
##rabbit2加入集群rabbit
## If you need to join the cluster rabbitmqctl stop_app
#If you use a hard disk (permanent), such as: #rabbitmqctl join_cluster rabbit@rabbit1 #If you use a memory, such as: ##rabit2是ram模式
rabbitmqctl join_cluster --ram rabbit@rabbit1 rabbitmqctl start_app
##如何改变rabbit的模式为ram或disc
#=================================================== #We can Changing node types #rabbit2$ rabbitmqctl stop_app
#rabbit2$ rabbitmqctl change_cluster_node_type disc #or
#rabbit2$ rabbitmqctl change_cluster_node_type ram #rabbit2$ rabbitmqctl start_app
#===================================================
##到此,rabbit2加入集群成功
echo "Please run 03_rabbit3_install.sh in the rabbit3 server" echo "After completion ! ! !"
echo "Press "Enter" to continue .........." read
##查看Rabbit_Cluster集群的状态 rabbitmqctl cluster_status
#=============================== #If you need from the cluster #rabbitmqctl stop_app #rabbitmqctl reset #rabbitmqctl start_app
#===============================
echo "Press "Enter" to continue ....Rabbit_Cluster Install is End...."
read exit
3.3 Rabbit3主机
vim 03_rabbit3_install.sh #!/bin/bash
apt-get install -y erlang
useradd -d /var/lib/rabbitmq rabbitmq
echo "deb /debian/ testing main" > /etc/apt/sources.list.d/rabbitmq.list
wget /rabbitmq-signing-key-public.asc apt-key add rabbitmq-signing-key-public.asc apt-get update
apt-get install -y rabbitmq-server
##方法二
echo “CHDCGETPYWOWREASJUAZ” > /var/lib/rabbitmq/.erlang.cookie
service rabbitmq-server start
# Configure Setup
rabbitmq-plugins enable rabbitmq_management
rabbitmqctl stop
rabbitmqctl status
##以正常模式启动rabbitmq-server服务 rabbitmq-server -detached
##rabbit3加入集群rabbit
## If you need to join the cluster rabbitmqctl stop_app
#If you use a hard disk (permanent), such as: #rabbitmqctl join_cluster rabbit@rabbit1 #If you use a memory, such as:
##rabit3是ram模式,直接加入到rabbit2,其实都是一个意思 rabbitmqctl join_cluster --ram rabbit@rabbit2 rabbitmqctl start_app
##如何改变rabbit的模式为ram或disc
#=================================================== #We can Changing node types
#rabbit2$ rabbitmqctl stop_app
#rabbit2$ rabbitmqctl change_cluster_node_type disc #or
#rabbit2$ rabbitmqctl change_cluster_node_type ram #rabbit2$ rabbitmqctl start_app
#===================================================
##到此,rabbit3加入集群成功
echo "Please run 02_rabbit2_install.sh in the rabbit2 server" echo "After completion ! ! !"
echo "Press "Enter" to continue .........." read
##查看Rabbit_Cluster集群的状态 rabbitmqctl cluster_status
#=============================== #If you need from the cluster #rabbitmqctl stop_app #rabbitmqctl reset #rabbitmqctl start_app
#===============================
echo "Press "Enter" to continue ....Rabbit_Cluster Install is End...." read exit
3.4 添加Rabbit_Cluster管理用户
执行完以上的步骤集群中各个节点基本配置完毕了,现在要做的是添加用户和设置权限,请在主节点(rabbit2)上执行: 添加用户,设置密码。在这里需要提醒一下,新版本(3.3.0)的RabbitMQ为了安全性考虑仅允许localhost使用
guest账户,所以最好根据应用需要建立自己的账户。因为要使用web页面管理,所以我建立了两个账户['web_admin','mgmt_admin']: 账号1:web_admin 密码:admin 账号2:mgmt_admin 密码:admin1
/usr/sbin/rabbitmqctl add_user web_admin admin
/usr/sbin/rabbitmqctl add_user mgmt_admin admin1
3.5 设置用户tags
a) 前一步创建的两个用户tag分别设为
['monitoring','administrator'],设置完之后可以使用rabbitmqctl list_users查看 /usr/sbin/rabbitmqctl set_user_tags web_admin monitoring /usr/sbin/rabbitmqctl set_user_tags mgmt_admin administrator
3.6 设置用户权限
下面命令的意义是对mgmt_admin用户赋予所有虚拟主机vhost(/),配置、写、读的权限(.*,正则表达式)
/usr/sbin/rabbitmqctl set_permissions -p / mgmt_admin ".*" ".*" ".*"
注:web_admin没有配置,默认是只读权限。
4. 设置高可用策略
为了使用HAProxy做负载均衡,必须将整个RabbitMQ集群的状态设置为镜像模式,具体方式是通过以下命令,注意策略的设置也是在3.x版本中添加的功能,2.x版本是没有的。
4.1 方法一(命令):
/usr/sbin/rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
注:这里是设置消息均在所有节点进行同步,也即,Rabbit_Cluster任一节点出问题均不影响访问。
4.2 方法二(web页面):
http://192.168.100.192:15672
用管理员权限(账号:mgmt_admin 密码:admin1)
举例,再添加一个my_ha策略
a) 点击admin菜单-->右侧的Policies选项-->左侧最下下边的Add / update a policy b) 按照图中的内容根据自己的需求填写
c) 点击Add policy添加策略
此时你就会来你的两台rabbitmq服务器的网页管理端amind菜单下看见刚才创建的队列了.
d) 下面我们来添加一个queues队列来看看效果,这里只是测试结果,其它的先不填写
注意红框中的 x-ha-policy = all 这个,网上说没有这个不会进行复制,但是我测试的时候好像可以复制的,至少queues队列是可以的,先添上吧.
在这里边添加的时候你是可以指定Node选项也就是把这个queues放在哪个node节点上,不过做镜像的时候就没有必要了,呵呵
至此,RabbitMQ的安装配置部分结束,可以访问
http://192.168.100.192:15672 (191和193也可访问)用户名web_admin,密码admin。看看一些基本信息
5. 安装配置 Haproxy+Keeplived 5.1 Rabbit2主机
vim 03_rabbit2_ha+keep.sh #!/bin/bash ##安装配置Haproxy
apt-get -y install haproxy ##配置Haproxy
cat <<EOF > haproxy.cfg global
defaults
log mode
global http
log 127.0.0.1 log 127.0.0.1
local0
local1 notice
chroot /var/lib/haproxy user haproxy group haproxy daemon
maxconn 4096
option httplog option dontlognull
retries 3
option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 timeout check 5s
listen admin_stat
bind *:8888 ##Haproxy管理页面 mode http
stats refresh 30s
stats uri /haproxy_stats
stats realm Haproxy\ Statistics stats auth admin:admin ##登录名和密码 stats hide-version
##监听5670端口,并转发给三个节点的5672端口,采用轮询策略
listen rabbitmq_cluster *:5670
balance roundrobin
server rabbitmq-1 192.168.100.191:5672 check inter 2000 rise 2 fall server rabbitmq-2 192.168.100.192:5672 check inter 2000 rise 2 fall server rabbitmq-3 192.168.100.193:5672 check inter 2000 rise 2 fall EOF
##安装Keepalived
apt-get –y install keepalived ##配置Keepalived
cat <<EOF >/etc/keepalived/keepalived.conf vrrp_script chk_haproxy {
script "/etc/keepalived/scripts/haproxy_check.sh" interval 2 }
vrrp_instance VI_1 {
state MASTER interface eth0
errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http
virtual_router_id 51
priority 101 ##高优先级,主节点 authentication {
auth_type PASS auth_pass rabbitmq }
track_script {
chk_haproxy }
virtual_ipaddress {
192.168.100.195 } EOF
##创建监控Haproxy进程的脚本
mkdir -p /etc/keepalived/scripts/
cat <<EOF > /etc/keepalived/scripts/haproxy_check.sh #!/bin/bash
LOGFILE="/var/log/keepalived-ha-state.log"
pid1=\`ps aux|grep /etc/haproxy/haproxy.cfg | grep -v grep | grep -v bash | wc –l\`
if [ "\$pid1" = "0" ]; then
echo "===========================================" >> \$LOGFILE date +%Y%m%d-%H:%M:%S >> \$LOGFILE
echo "Ready to start haproxy....." >> \$LOGFILE
haproxy -f /etc/haproxy/haproxy.cfg –D ##启动Haproxy
pid2=\`ps aux|grep /etc/haproxy/haproxy.cfg | grep -v grep | grep -v bash |wc –l\`
if [ "\$pid2" = "0" ]; then
echo "Haproxy failed to start !!! So,stop keepalived!!!" >> \$LOGFILE
/etc/init.d/keepalived stop else
echo "Haproxy start success........." >> \$LOGFILE fi fi EOF
##启动keepalived服务,Haproxy服务也会一起启动的。 service keepalived restart
5.2 Rabbit3主机
vim 03_rabbit2_ha+keep.sh #!/bin/bash ##安装配置Haproxy
apt-get -y install haproxy ##配置Haproxy
cat <<EOF > haproxy.cfg global
defaults
log mode
global http
log 127.0.0.1 log 127.0.0.1
local0
local1 notice
chroot /var/lib/haproxy user haproxy group haproxy daemon
maxconn 4096
option httplog option dontlognull
retries 3
option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 timeout check 5s
listen admin_stat
bind *:8888 ##Haproxy的管理端口 mode http
stats refresh 30s
stats uri /haproxy_stats
errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http
stats realm Haproxy\ Statistics stats auth admin:admin stats hide-version
##监听5670端口,并转发给三个节点的5672端口,采用轮询策略
listen rabbitmq_cluster *:5670
balance roundrobin
server rabbitmq-1 192.168.100.191:5672 check inter 2000 rise 2 fall server rabbitmq-2 192.168.100.192:5672 check inter 2000 rise 2 fall server rabbitmq-3 192.168.100.193:5672 check inter 2000 rise 2 fall EOF
##安装Keepalived
apt-get –y install keepalived ##配置Keepalived
cat <<EOF >/etc/keepalived/keepalived.conf vrrp_script chk_haproxy {
script "/etc/keepalived/scripts/haproxy_check.sh" interval 2 }
vrrp_instance VI_1 {
state MASTER interface eth0 virtual_router_id 51
priority 100 ##低优先级,备节点 authentication {
auth_type PASS auth_pass rabbitmq }
track_script {
chk_haproxy }
virtual_ipaddress {
192.168.100.195 } EOF
##创建监控Haproxy进程的脚本
mkdir -p /etc/keepalived/scripts/
cat <<EOF > /etc/keepalived/scripts/haproxy_check.sh
#!/bin/bash
LOGFILE="/var/log/keepalived-ha-state.log"
pid1=\`ps aux|grep /etc/haproxy/haproxy.cfg | grep -v grep | grep -v bash | wc –l\`
if [ "\$pid1" = "0" ]; then
echo "===========================================" >> \$LOGFILE date +%Y%m%d-%H:%M:%S >> \$LOGFILE
echo "Ready to start haproxy....." >> \$LOGFILE
haproxy -f /etc/haproxy/haproxy.cfg –D ##启动Haproxy
pid2=\`ps aux|grep /etc/haproxy/haproxy.cfg | grep -v grep | grep -v bash |wc –l\`
if [ "\$pid2" = "0" ]; then
echo "Haproxy failed to start !!! So,stop keepalived!!!" >> \$LOGFILE
/etc/init.d/keepalived stop else
echo "Haproxy start success........." >> \$LOGFILE fi fi EOF
##启动keepalived服务,Haproxy服务也会一起启动的。 service keepalived restart
5.3 登录Haproxy的管理端页面
http://192.168.100.192:8888/haproxy_stats http://192.168.100.193:8888/haproxy_stats http://192.168.100.195:8888/haproxy_stats
可以查看到Haproxy的一些基本信息。
6. 较验Rabbit_Cluster集群服务
##前提条件,必须确保有一个Rabbit节点是正常运行的,下面只举一个例。 ##关闭Rabbitmqctl服务节点,基其他节点上查看集群信息 root@rabbit1:~# rabbitmqctl stop
##在Rabbit2节点上查看集群信息
root@rabbit2:~# rabbitmqctl cluster_status
##在Rabbit3节点上查看集群信息
root@rabbit3:~# rabbitmqctl cluster_status
##现在,重新启动Rabbit1节点,并查看集群信息 root@rabbit1:~# rabbitmq-server –detached
##在Rabbit2节点上查看集群信息
root@rabbit2:~# rabbitmqctl cluster_status
##在Rabbit3节点上查看集群信息
root@rabbit3:~# rabbitmqctl cluster_status
正在阅读:
RabbitMQ_Cluster+HA(haproxy+keepalived)热备05-10
设施设备日常巡检表03-08
MACH3接口板使用说明 - 图文10-03
我看冯仑的《野蛮生长》08-06
在2021年首批校企合作签约仪式上的讲话08-23
英语跟我学Follow,me02-16
浅论电分析化学在生命科学中的应用12-11
苏教版五年级数学《小数加法和减法》说课稿10-06
GridView的19种操作05-02
星耀关岛03-08
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- keepalived
- RabbitMQ
- Cluster
- haproxy
- HA
- 2012三生教育实施方案
- 合成润滑油基础知识
- MIT 信号与系统 Lecture 18
- 大学生的社会比较与情绪健康
- 中国农业大学校史英文介绍CAU History (brief)-fn
- 谈谈如何做好信息工作
- 基于PLC的风机控制系统设计
- 2019教科小学科学四下《3.7.食物包装上的信息》word教案(2)
- 化工原理 第三版陈敏恒 课后答案
- 第5讲 对数与对数函数(学生)
- 第十一单元:盐和化学肥料
- 精校版--山东省济南市2015届高三下学期第一次模拟考试英语试题 Word版含答案
- 18岁美女被爷爷蹂躏了整整10年
- 汽车产品型号编制规则
- 教你高效绘制价值流图(VSM)
- 风电齿轮箱系统扭转振动固有特性计算分析
- PM-ERP-008 附录10.2_武汉市燃气管理条例(2013-3-1)
- 2019年全国初中应用物理知识竞赛试题及答案(九)
- 鸭食盐中毒的症状及解救方法
- 正压氧气呼吸器校验方法