例如:mq主的机器宕机,启动mq备用机,mq无集群,mq服务挂掉,vip也飘移
两台需安装(mq+keepalived+erlang+依赖)
虚拟机 192.168.1.10,192.168.1.11 vip(keepalived的虚拟IP) 192.168.1.100
依赖环境yum -y install openssl-devel openssl perl nmapErlang安装的依赖
yum install unixODBC unixODBC-devel openssl openssl-devel make ncurses-devel gcc gcc-c++ perl
centos 6.5,otp_src_R16B03.tar.gz,rabbitmq_server-3.2.2.tar.gz,keepalived-1.2.7.tar.gz
keepalived安装解压、安装 tar -zxvf keepalived-1.2.7.tar.gz -C ./mq cd keepalived-1.2.7 ./configure make make install 版本号查看,是否安装成功 keepalived -v 修改配置文件 cp /usr/local/etc/keepalived/samples/keepalived.conf.vrrp /etc/keepalived/keepalived.conf 或者直接创建也可 vi /etc/keepalived/keepalived.conf
主配置
! Configuration File for keepalived
# 全局配置
global_defs {
notification_email { #指定keepalived在发生事件时(比如切换)发送通知邮件的邮箱
acassen@firewall.loc#设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc#keepalived在发生诸如切换操作时需要发送email通知地址
smtp_server 127.0.0.1 #指定发送email的smtp服务器
smtp_connect_timeout 30 #设置连接smtp server的超时时间
router_id LVS_DEVEL123 #运行keepalived的机器的一个标识,通常可设为hostname。故障发生时,发邮件时显示在邮件主题中的信息。--当前方案主备最好设置相同
}
cript chk_rabbitmq {# 配置检测脚本
script "/etc/keepalived/mqcheck.sh" #检测脚本的位置
interval 2 #每隔2秒执行一次
weight -5 #权重-5,根据检测脚本的返回值去判断是否要减掉
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {#vip漂移主要配置模块
state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。
#注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是
#这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,
#但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,
#另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER
interface eth0 #监测网络端口,用ifconfig查看
mcast_src_ip 192.168.1.10 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,
#这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,
#如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
virtual_router_id 123 #主备机必须相同
priority 100 #主备机取不同的优先级,主机要大。
advert_int 1 #VRRP Multicast广播周期秒数
authentication {
auth_type PASS #VRRP认证方式
auth_pass 11112 #VRRP口令主备机密码必须相同
}
virtual_ipaddress {#VRRP虚拟地址如果有多个VIP,继续换行填写
192.168.1.100
}
track_script {# 引用检测脚本,因为可以配置多个 vrrp 实例,每个实例都可以使用同一个检测脚本
chk_rabbitmq
}
}
备
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL123
}
cript chk_rabbitmq {
script "/etc/keepalived/mqcheck.sh"
interval 2
weight -5
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
mcast_src_ip 192.168.1.11
virtual_router_id 123
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 11112
}
virtual_ipaddress {
192.168.1.100
}
track_script {
chk_rabbitmq
}
}
vi /etc/keepalived/mqcheck.sh
#!/bin/sh
isopen=`/usr/bin/nmap -sS 127.0.0.1 -p 5672 | grep 5672 | awk '{printf $2}'`
if [ "$isopen"x == "open"x ]; then
echo ${isopen}
exit 0
else
echo ${isopen}
exit 1
fi
启动 keepalived start
停止 keepalived stop或者kill -9 pid
Erlang安装编译并安装erlang cd otp_src_R16B03 ./otp_build autoconf #新版安装方式 ./configure --prefix=/opt/erlang #如需指定安装位置,默认安装不跟 --prefix make make install 指定安装位置需要配置环境变量 vi /etc/profile #配置在文件最下面 export ERL_HOME=/opt/erlang export PATH=$PATH:$ERL_HOME/bin 即可生效命令 source /etc/profile 输入命令查看版本号 erl -versionRabbitMQ安装
解压到指定目录下 tar -zxvf rabbitmq_server-3.2.2.tar.gz -C ./mq/ 配置环境变量 vi /etc/profile 最后面添加内容 export PATH=$PATH:/home/mq/rabbitmq_server-3.2.2/sbin 使配置生效 soucre /etc/profile 启动后操作常用命令 rabbitmq-plugins enable rabbitmq_management --启动web管理插件 rabbitmq-server -detached --后台启动服务 rabbitmqctl start_app --启动服务 rabbitmqctl stop_app --关闭服务 rabbitmqctl add_user zlh zlh --添加用户,密码 rabbitmqctl set_user_tags zlh administrator --设置zlh为administrator权限 rabbitmqctl list_users --查看用户列表 rabbitmq查看版本命令 rabbitmqctl status | grep rabbit 防火墙端口开放 /sbin/iptables -I INPUT -p tcp --dport 15672 -j ACCEPT //加入防火墙规则 /etc/init.d/iptables save //保存修改 service iptables restart //重启防火墙,修改生效 访问web,默认端口15672,默认账号密码 guest/guest mq详细文档参见 https://www.rabbitmq.com/documentation.html
keepalived的vip漂移测试
重启master虚拟主机,或者关闭mq进程
在备用mq主机上输入命令 ip a 可以看到当前主机上多一个vip的ip



