SLB服务由Keepalived+HAProxy两个软件组成。Keepalived保证了HAProxy的可靠性,HAProxy为后端服务提供负载均衡的功能。

1 安装环境准备

实际地址根据自己的现场情况来定,虚拟地址与物理地址在同一个网段。

机器A物理地址 192.168.48.131
机器B物理地址 192.168.48.132
虚拟地址 192.168.48.140

SLB(HA Keepalived)运维手册 - 图1
部署架构图

2 Keepalived 安装

第一步 选择目录一个解压安装包

tar –zxvf keepalived-2.0.15.tar.gz
解压完后会有一个keepalived_installed的目录

第二步 配置文件Keepalived.conf,放到keepalived_installed/etc/keepalived目录下面

SLB(HA Keepalived)运维手册 - 图2

! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script check_port
{
script “/home/root/slb/Keepalived/keepalived_installed/conf/check_service.sh”
interval 3
weight -2
fall 5
rise 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 55
priority 250
authentication {
auth_type PASS
auth_pass 654321
}
advert_int 2
virtual_ipaddress {
192.168.48.140
}
track_script {
check_port
}

主备机房的配置相同。
注意参数

Script “/keepalived_installed/conf/check_haproxy.sh” 检测HAProxy服务的脚本,这里填写检测脚本所在目录的绝对路径
state BACKUP 节点状态,主机和备机都设置成backup状态
interface ens33 物理机器网卡的名称,根据真实情况而定。
virtual_router_id 55 路由号代表同一组,主备机器路由号相同。
priority 250 优先级,主备优先级设置相同。(与state配合,实现非抢占模式)
virtual_ipaddress{192.168.48.140} 虚拟IP地址,主备机器相同

第三部 配置检测脚本check_service.sh,脚本放在keepalived_installed/conf目录下面

SLB(HA Keepalived)运维手册 - 图3

  1. #!/bin/bash
  2. ##判断进程是否存在
  3. count_process=`ps -ef|grep haproxy}|grep -v grep|wc -l`
  4. #判断端口号是否存在
  5. count_port=`netstat -ano|grep LISTEN|grep 8000|wc -l|wc -l`
  6. ##只需要判断进程名称的情况
  7. if [ -n $count_process ] && [ -z $count_port ] then
  8. if [ $count_process -eq 0 ] then
  9. exit
  10. ##只需要判断端口的情况
  11. if [ -z $count_process ] && [ -n $count_port ] then
  12. if [ $count_port -eq 0 ]
  13. then
  14. exit
  15. ##同时判断进程名称和端口的情况
  16. if [ -n $count_process ] && [ -n $count_port ]then
  17. if [ $count_process -gt 0 ] && [ $count_port -gt 0 ]then
  18. exit

主备机器的检测脚本相同。

第四步 启动keepalived

进入…keepalived_installed/sbin 目录
./keepalived -f /home/root/slb/Keepalived/keepalived_installed/conf/keepalived.conf 配置文件位置使用绝对目录
(1) 两台机器上的Keepalived启动以后会在其中的一台机器上产生一个VIP
类似下图所示
SLB(HA Keepalived)运维手册 - 图4
(2) 查看日志 /var/log/message

更换VIP
(1) 停掉keepalived服务(杀死keepalived进程)
(2) 修改keepalived.conf配置文件
virtual_ipaddress {192.168.48.140}参数
(3) 进入…/keepalived_installed/sbin 目录
执行 ./keepalived -f /home/root/slb/Keepalived/keepalived_installed/conf/keepalived.conf启动服务

3 HAProxy 安装

两台机器上的操作步骤相同

第一步 选择目录解压 安装包

tar –zxvf haproxy-1.9.7.tar.gz
解压完后会产生一个haproxy_installed目录

第二步 配置文件haproxy.cfg,放到目录的haproxy_installed/conf目录中

SLB(HA Keepalived)运维手册 - 图5

参数注意

log 127.0.0.1 local3 配置Haproxy的日志等级为local3类型,相当于error类型
listen stats bind *:8000 HA自带的服务监控统计服务绑定的端口
listen stats stats uri /admin?stats 监控统计页面访问uri
listen stats stats auth admin:admin 访问监控统计页面的账号密码
frontend app0 前端名称 自定义
frontend mode http 前端使用的
frontend bind*:5000 前端绑定5000端口(根据实际情况)
frontend use_backend app0 前端需要转发给后端的名称
backend app0 后端名称 自定义
backend mode http 后端使用协议
cookie 回话保持
blance 负载均衡调度算法
server 后端真实的服务器

其它参数基本上不用动,灰色部分需要现场实际情况而定。

第三步 系统日志配置文件 (可选操作)

(1) 创建文件 /etc/rsyslog.d/haproxy.conf
$ModLoad imudp
$UDPServerRun 514
Local3.* /var/log/haproxy.log #local3接口对应日志输出文件,对应haproxy.cfg中的local3
重启系统日志服务 systemctl restart rsyslog
(2) 修改/etc/sysconfig/rsyslog文件中的參數 sed -i ‘/^SYSLOGD_OPTIONS/c SYSLOGD_OPTIONS=”-r -m 0 -c 2”‘ /etc/sysconfig/rsyslog
(3) 重新启动rsyslog
Systemctl restart rsyslog

第四步 启动HAProxy服务

./haproxy -f /home/root/slb/haproxy_installed/conf/haproxy.cfg 配置文件位置,使用绝对目录

第五步 检测服务启动是否正常

(1) ps –ef|grep haproxy 查看进程是否存在
(2)如果配置了日志可以查看日志中的信息
(3)访问haproxy自身的监控统计页面
监控统计页面 http://ip:8000/admin?stats 账号密码 admin admin
image.png
成功访问空监控页面则说明启动成功
常见问题:
两台高可用的SEE更换了服务器IP地址,如何修改ha的代理配置?
(1) 修改配置文件haproxy.cfg,找到代理配置

frontend app0
mode http
bind *:5000
use_backend app0
backend app0
mode http
cookie app_haproxy insert indirect nocache #使用cookie实现会话保持
balance roundrobin #负载均衡调度算法 轮询算法
server server1 192.168.217.151:8081 cookie server1 check inter 2000 rise 1 fall 2
server server2 192.168.217.152:8081 cookie server2 check inter 2000 rise 1 fall 2

替换192.168.217.151,192.168.217.152为修改后的地址。
(2) 执行
./haproxy -f /home/root/slb/haproxy_installed/conf/haproxy.cfg -sf 进程号
重载服务
如果由两台变成了三台
(1) 修改配置文件haproxy.cfg

frontend app0
mode http
bind *:5000
use_backend app0
backend app0
mode http
cookie app_haproxy insert indirect nocache #使用cookie实现会话保持
balance roundrobin #负载均衡调度算法 轮询算法
server server1 192.168.217.151:8081 cookie server1 check inter 2000 rise 1 fall 2
server server2 192.168.217.152:8081 cookie server2 check inter 2000 rise 1 fall 2
server server3 192.168.217.153:8081 cookie server3 check inter 2000 rise 1 fall 2

(2) 执行
./haproxy -f /home/root/slb/haproxy_installed/conf/haproxy.cfg -sf 进程号
重载服务