环境准备:
前面已经部署好了RabbitMq集群,https://www.jianshu.com/p/47391a5805b1
- 192.168.47.145 ----zabbix
- 192.168.47.147 ----zabbix1
- 192.168.47.129 ----zabbix2
测试环境:centos7.6 两台虚拟机,部署软件:Haproxy+Keepalived | 关闭防火墙和Selinux(注意:如果是云服务器。需要购买付费产品SLB,由于rabbitmq负载是在程序中连接,故需要配置内网的SLB即可,不过要记得安全组放开端口)
- 192.168.47.150 ----master
- 192.168.47.151 ----slave
架构图:
1.首先在两台机器上面安装haproxy代理(两台都要部署)
yum install -y haproxy
cd /etc/haproxy/
cp haproxy.cfg haproxy.cfg.bak
vim haproxy.cfg
#--------------------------------------------------------------------
global # 全局配置
log 127.0.0.1 local2 # 日志输出配置
chroot /var/lib/haproxy # haproxy工作目录
pidfile /var/run/haproxy.pid # haproxy的pid目录
maxconn 4000 # 最大连接数(默认配置)
user haproxy # 运行haproxy的用户
group haproxy # haproxy所属组
nbproc 4 # 启动的haproxy进程个数,只能用于守护进程模式的haproxy;默认只启动一个进程,鉴于调试困难等多方面的原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;
daemon # 后台启动
# turn on stats unix socket
stats socket /var/lib/haproxy/stats # 用户访问统计数据的接口目录
#--------------------------------------------------------------------
defaults # 默认配置
mode http # 默认模式(mode{tcp\http\health})
log global # 日志系统与global段一样
retries 3 # 3次连接服务器失败后确定服务器不可用
timeout connect 10s # 默认连接超时时间(可优化)
timeout client 1m # 默认客户端超时时间(可优化)
timeout server 1m # 默认服务器超时时间(可优化)
timeout check 10s # 默认心跳检测超时时间(可优化)
maxconn 2048 # 最大连接数,不要超过全局配置最大连接数
#--------------------------------------------------------------------
##监控查看本地状态##
listen admin_stats
bind *:80 # 绑定监控页面监听端口
mode http
option httplog # 日志类别采用httplog
option httpclose # 每次请求完毕后主动关闭http通道
log 127.0.0.1 local0 err # 定义日志发往的位置,级别为error,所有等于或高于此级别的日志信息将会被发送;
stats uri /haproxy # haproxy监控页面,可以自定义,如http://192.168.47.150/haproxy
stats auth zludon:123 # 配置监控页面账号密码登录
stats refresh 30s # 页面刷新间隔
####################################
##反代监控##
frontend server # frontrend前端配置
bind *:5672
log global
mode tcp
#option forwardfor
default_backend rabbitmq # 定义匹配规则,请求转发至名为"rabbitmq"的后端服务
maxconn 3
backend rabbitmq # 后端服务配置,当frontend请求中名为"rabbitmq"跳转到此配置规则
mode tcp
log global
balance roundrobin # 定义负载均衡算法,此处为轮叫(轮询)
# 为后端声明server,格式为:server <name> <address> [:port] [param*]
# <name>:为此服务器指定的主机名,其将出现在日志及警告信息中;
# <address>为此服务器的的IPv4地址,也支持使用可解析的主机名;
# [:port]:指定将连接请求所发往的此服务器时的目标端口;
# [param*]:为此服务器设定的一系参数,其可用的参数非常多,具体请参考官方文档中的说明(http://cbonte.github.io/haproxy-dconv/2.1/configuration.html)
# check:启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定,如:inter <delay>:设定健康状态检查的时间间隔,单位为毫秒,默认为2000;也可以使用fastinter和down
# rise <count>:设定健康状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数;
# fall <count>:确认server从正常状态转换为不可用状态需要检查的次数;
server zabbix 192.168.47.145:5672 check inter 2000s rise 2 fall 3
server zabbix1 192.168.47.147:5672 check inter 2000s rise 2 fall 3
server zabbix2 192.168.47.129:5672 check inter 2000s rise 2 fall 3
#--------------------------------------------------------------------
2、加载配置文件并重启
haproxy -f haproxy.cfg
systemctl start haproxy
systemctl enable haproxy
查看端口是否启动:ss -atunlp |grep haproxy
我们来测试访问:
http://192.168.47.150/haproxy
http://192.168.47.151/haproxy
需要账号密码,还记得我们配置文件中
stats auth
后面的账号密码么?没错就是这个账号密码,登录。3、部署keepalived(两台都要部署)
yum -y install ipvsadm keepalived
cd /etc/keepalived/
cp keepalived.conf{,.bak}
vim keepalived.conf
master:
! Configuration File for keepalived
global_defs {
router_id haproxy1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 80
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.47.222/24 dev ens33
}
}
slave:
! Configuration File for keepalived
global_defs {
router_id haproxy2
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface ens33
virtual_router_id 80
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.47.222/24 dev ens33
}
}
启动服务并查看IP:
systemctl restart keepalived
systemctl enable keepalived
master上:ip a
ip a
master上:
systemctl stop haproxy
systemctl stop keepalived
slave上:
浏览器访问:
http://192.168.47.222/haproxy
测试宕掉rabbitmq中的服务器:
zabbix上:
systemctl stop rabbitmq-server