前言
此前实现的LVS-DR集群都有一个人很大的问题,Director是一个单点故障,一旦出现故障,对外服务将不可用。Keepalived就很好的解决了这一问题,实现VIP自动流动,一定程度上实现了负载均衡的效果(DNS解析负载均衡)。
环境:
- OS:CentOS 7
- LVS:DR模型,两台
- Real Server:两台
一、配置两台LVS调度服务器
(1). 地址配置
LVS-1:
HOSTNAME:node1
DIP:172.16.20.10
#配置过程不用多说
LVS-2:
HOSTNAME:node2
DIP:172.16.20.20
如下图:
(2). 配置keepalived
第一步需要安装以下软件:
yum install keepalived ipvsadm -y
这两个包是必须的,一个提供高可用服务,一个提供集群服务;
lvs-1的keepalived配置
配置文件修改:
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
#提示邮件发给谁
}
notification_email_from kpadmin@localhost #邮件发送者
smtp_server 127.0.0.1
#邮件服务地址
smtp_connect_timeout 30
router_id node1
#和刚刚设置的主机名一致(建议一致),唯一标识
vrrp_skip_check_adv_addr
#vrrp_strict
#此项一定要注释,否则vip不通
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_mt {
script "/etc/keepalived/down.sh"
interval 1
weight -2
} #手动下线脚本,后面会贴出
vrrp_instance VI_1 {
#定义vrrp实例,名称为VI_1
state MASTER
#定义为主服务
interface ens33
#物理网卡接口
virtual_router_id 51
#虚拟路由id
priority 100
#优先级
advert_int 1
#心跳时间
authentication {
auth_type PASS
#认证机制,普通字符认证
auth_pass 32acb08d
#pass
}
track_script {
chk_mt
} #调用手动下线脚本
virtual_ipaddress {
172.16.123.123/32 dev ens33 label ens33:0
#定义VIP地址以及绑定的接口
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
#当状态变更时,发送邮件的脚本,后文会给出
}
virtual_server 172.16.123.123 80 {
#定义虚拟主机/Director(IP PORT)
delay_loop 6
#如果六次检测失败,就定义为失效Real
lb_algo wrr
#调度算法
lb_kind DR
#类型,DR类型
#persistence_timeout 50
#持久连接,测试的时候暂时关闭
protocol TCP
#使用TCP协议
sorry_server 127.0.0.1 80
#定义sorry_server(IP PORT)
real_server 172.16.10.10 80 {
#定义real server(IP PORT)
weight 1
#定义权重
HTTP_GET {
#健康检测机制,HTTP_GET
url {
path /
#digest ff20ad2481f97b1754ef3e12ecd3a9cc
status_code 200
#健康检测,检测为跟,状态码为200即为正常
}
connect_timeout 3
#检测超时时长
nb_get_retry 3
#检测等待时长
delay_before_retry 3
}
}
real_server 172.16.10.20 80 {
#定义第二个Real Server
weight 2
HTTP_GET {
url {
path /
#digest ff20ad2481f97b1754ef3e12ecd3a9cc
status_code 200
#健康检测,只看状态
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
lvs-2的keepalived配置
将lvs-1
的配置文件拷贝到lvs-2
上,修改以下配置:
router_id node1 --> router_id node2 #改为lvs-2的主机名
state MASTER --> state BACKUP #改为备用主机
priority 100 --> priority 99 #降低优先级
配置文件中的脚本down.sh
: 手动下线脚本
#!/bin/bash
#
if [ -f /etc/keepalived/down ];then
exit 1
else
exit 0
fi
notify.sh
: 邮件通知脚本
#!/bin/bash
#
vip=172.16.100.1
contact='root@localhost'
#定义收件人
notify(){
mailsubject="`hostname` to be $1:$vip floating"
#主题
mailbody="`date '+%F %H:%M:%S'`:vrrp transition,`hostname` changed to be $1"
#主体
echo ${mailbody} | mail -s "$mailsubject" $contact
}
case "$1" in
master)
notify master
exit 0
;;
backup)
notify backup
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo "Usage:`basename $0` {master|backup|fault}"
exit 1
;;
esac
(3). 启动服务
systemctl start keepalived
systemctl enable keepalived
启动服务,开机自动启动服务
二、配置两台Real Server
(1). 地址配置
Real-1:172.16.10.10
Real-2:172.16.10.20
(2). 启动httpd
systemctl start httpd
(3). 编辑文档首页
内容分别如下:
real-1:Httpd Server-1
real-2:Httpd Server-2
(4). 配置vip
#!/bin/bash
#
VIP=172.16.123.123
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ip addr add ${VIP}/32 dev lo:0
;;
stop)
ip addr del ${VIP}/32 dev lo:0
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
esac
再两台Real Server分别运行此脚本
~]# script_name start
两台Real Server的地址详情
三、进行测试
测试主机:CentOS6
~]# for i in {1..30};do curl http://172.16.123.123;do
正常结果是这样的
可以停掉主的keepalived服务,检测是否生效
<center>END</center>