1. HAProxy
RabbitMQ的集群和镜像队列实现了高吞吐量和高可用,现在我们来用HAProxy实现负载均衡功能。
HAProxy是一个使用C语言编写的自由及开放源代码软件,提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy支持从4层至7层的网络交换,即覆盖所有的TCP协议。根据官方数据,其最高极限支持10G的并发。
-
下载地址
HAproxy官网需要翻墙才能访问,这里已经为大家下载好了当前最新版本:HAProxy-2.1.4 密码:21pz -
上传并解压
rz
tar -zxf haproxy-2.1.4.tar.gz
- 安装依赖
yum install -y openssl openssl-devel systemd-devel.x86_64
- 进入haproxy目录编译安装
cd haproxy-2.1.4/
# USE_OPENSSL=1 :开启https,USE_SYSTEMD=1:指定为systemd模式,PREFIX=/usr/local/haproxy:指定安装目录
make TARGET=linux-glibc PREFIX=/usr/local/haproxy USE_OPENSSL=1 USE_SYSTEMD=1 USE_PCRE=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy && make install
- 编辑启动脚本(修改成自己的安装路径)
vim /usr/lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=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
- 开启haproxy日志
vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
#添加
local0.* /var/log/haproxy.log
# 编辑rsyslog
vim /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-r -m 0 -c 2"
- 添加启动用户
useradd -r haproxy
usermod -G haproxy haproxy
- 创建配置文件及启动目录
mkdir -p /var/lib/haproxy
touch /var/lib/haproxy/stats
mkdir /etc/haproxy
vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0 info
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 1020 # See also: ulimit -n
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats.sock mode 600 level admin
stats timeout 2m
defaults
mode tcp
log global
option dontlognull
option redispatch
timeout http-request 10s
retries 3
timeout queue 45s
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 1020
listen stats
mode http
bind 0.0.0.0:8100
stats enable
stats uri /stats
stats realm Haproxy\ Statistics
stats auth fzb:123456
stats admin if TRUE
#绑定配置
listen rabbitmq_cluster
bind 0.0.0.0:5670
#配置TCP模式
mode tcp
#加权轮询
balance roundrobin
#RabbitMQ集群节点配置
server rabbit1 127.0.0.1:5672 check inter 5000 rise 2 fall 3 weight 1
server rabbit2 127.0.0.1:5673 check inter 5000 rise 2 fall 3 weight 1
server rabbit3 127.0.0.1:5674 check inter 5000 rise 2 fall 3 weight 1
- 重启服务和日志
systemctl restart haproxy
systemctl restart rsyslog
- 设置开机启动
systemctl enable haproxy
- 访问控制台输入配置的用户名密码(这里我只配置了一个rabbit应用)
2. Keepalived
HAProxy只提供了对RabbitMQ的负载均衡,假设HAProxy宕机了呢,系统将不能向外提供服务,这里我们就需要引入Keepalived健康检查工具,它能够通过自身健康检查、资源接管功能做高可用(双机热备),实现故障转移。
Keepalived采用VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议),以软件的形式实现服务器热备功能。
通常情况下是将两台Linux服务器组成一个热备组(Master和Backup),同一时间热备组内只有一台主服务器Master提供服务,同时Master会虚拟出一个公用的虚拟IP地址,简称VIP。这个VIP只存在在Master上并对外提供服务。
如果Keepalived检测到Master宕机或者服务故障,备份服务器Backup会自动接管VIP称为Master,Keepalived并将原Master从热备组中移除。当原Master恢复后,会自动加入到热备组,默认再抢占称为Master,起到故障转移的功能。
-
下载
keepalived-2.0.20下载地址 密码: 2ich -
上传并解压
rz
tar -zxf keepalived-2.0.20.tar.gz
- 安装依赖
yum install -y gcc openssl-devel popt-devel
yum -y install libnl libnl-devel
yum install -y libnfnetlink-devel
- 编译安装
cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived
make && make install
- 修改配置文件位置
cp keepalived/etc/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
- 启动命令并设置开机自启
systemctl start keepalived
systemctl enable keepalived
3. 搭建高可用架构
架构图如图所示,两台Keepalived服务器之间通过VRRP进行交互,对外部虚拟出一个VIP为192.168.1.100。Keepalived与HAProxy部署在同一台机器上,两个Keepalived服务实例匹配两个HAProxy服务实例,这样通过Keeaplived实现HAProxy的双机热备。
正常情况下调用路径为实线标示的路径,当master挂掉或者master下haproxy挂掉,会自动切换到backup上也就是虚线路径。
- 修改master配置文件
vim /etc/keepalived/keepalived.conf
#Keepalived配置文件
global_defs {
router_id NodeA #路由ID, 主备的ID不能相同
}
#自定义监控脚本
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 5
weight 2
}
vrrp_instance VI_1 {
state MASTER #Keepalived的角色。Master表示主服务器,从服务器设置为BACKUP
interface eth0 #指定监测网卡
virtual_router_id 1
priority 100 #优先级,BACKUP机器上的优先级要小于这个值
advert_int 1 #设置主备之间的检查时间,单位为s
authentication { #定义验证类型和密码
auth_type PASS
auth_pass root123
}
track_script {
chk_haproxy
}
virtual_ipaddress { #VIP地址,可以设置多个:
192.168.1.100
}
}
- 配置backup配置文件
vim /etc/keepalived/keepalived.conf
#Keepalived配置文件
global_defs {
router_id NodeB #路由ID, 主备的ID不能相同
}
#自定义监控脚本
vrrp_script chk_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval 5
weight 2
}
vrrp_instance VI_1 {
state BACKUP #Keepalived的角色
interface eth0 #指定监测网卡
virtual_router_id 1
priority 50 #优先级
advert_int 1 #设置主备之间的检查时间,单位为s
authentication { #定义验证类型和密码
auth_type PASS
auth_pass root123
}
track_script {
chk_haproxy
}
virtual_ipaddress { #VIP地址,可以设置多个:
192.168.1.100
}
}
- 为了防止HAProxy服务挂了,但是Keepalived却还在正常工作而没有切换到Backup上,所以这里需要编写一个脚本来检测HAProxy服务的状态。当HAProxy服务挂掉之后该脚本会自动重启HAProxy的服务,如果不成功则关闭Keepalived服务,如此便可以切换到Backup继续工作。
vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/etc/init.d/keepalived stop
fi
- 添加权限 并重启
chmod +x /etc/keepalived/chkHaproxy.sh
systemctl restart keepalived
- 客户端用192.168.1.100 IP地址调用即可
春暖花开,想去爬山...
网友评论