LVS健康检查
我们前面做的那些LVS的各种模式部署,都没有健康检查这一功能,就是说在我们搭建的负载均衡集群中,如果后端服务器RS全部宕掉了,客户端就无法访问到服务端的数据,这时我们应该给客户端一些提示,说明服务器暂时无法访问。
配置(搭建好LVS-DR模式负载均衡的前提下)
在调度机server1中
1:下载并安装监控软件(下载地址:http://rpm.pbone.net/index.php3/stat/4/idpl/23860919/dir/centos_6/com/ldirectord-3.9.5-3.1.x86_64.rpm.html)
ldirectord-3.9.5-3.1.x86_64.rpm
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
2:rpm -ql ldirectord #查找配置文件
我们需要把上图中红框中的文件复制到/etc/ha.d目录下
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d
cd /etc/ha.d
vim ldirectord.cf
3:编辑配置文件
virtual=172.25.66.100:80 #vip指定
real=172.25.66.2:80 gate #RS指定
real=172.25.66.3:80 gate
fallback=127.0.0.1:80 gate #server2、3服务down后,访问本机80端口
service=http
scheduler=rr #轮询
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80 #端口
request="index.html" #访问文件
#receive="Test Page"
#virtualhost=www.x.y.z
/etc/init.d/ldirectord start #开启服务
4:修改server1的apache默认发布文件内容
#注意:当安装 php 模块后,默认优先读取 index.php,应将index.php删除
5:不支持端口转发,修改httpd默认端口80.
因为之前做过varnish实验,varnish默认端口为80,所以我们可能修改过httpd的默认端口,现在我们将他改回80
/etc/init.d/httpd start
#若无法重启查看是否关闭了varnish(端口冲突,varnish之前端口为80)
/etc/init.d/varnish stop
6:在调度机server1进行测试。
curl localhost
测试
1:关闭所有后端服务器的httpd服务
[root@server2 ~]# /etc/init.d/httpd stop
[root@server3 ~]# /etc/init.d/httpd stop
2:在调度机server1中查看ipvs规则
3:用客户端访问VIP172.25.66.100
高可用集群的搭建
一台RS挂掉后,它不会将挂掉的那台机器踢除,而是继续向那台机器发送请求,而keepalived刚好能解决这个问题.keepalived同样可以对lvs后端主机实现健康检查,同样也可以实现调度器高可用,架设多个keepalived可以实现高可用。
应该注意的是ldirectord和keepalived只能开启一个,开启两个会冲突。
keepalived原理
keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器 从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成
实验环境
1:同样在搭建好LVS-DR模式的前提下
2:新增一台虚拟机server4,作为调度机备机
机器及软件:
server1: 172.25.66.1 VS(虚拟主机) 主 ipvsadm keepalived
server4: 172.25.66.4 VS(虚拟主机) 备 ipvsadm keepalived
server2: 172.25.66.2 RS(真正主机) arptables
server3: 172.25.66.3 RS(真正主机) arptables
3:软件包
keepalived软件包下载:
1.2.24版本本次实验所用版本
其他版本下载地址
配置
一、在主调度机server1中
1:停用ldirectord
/etc/init.d/ldirectord stop
chkconfig ldirectord off
2:下载keepalived-1.2.24.tar.gz包
3:源码安装keepalived
解压安装包
tar zxf keepalived-1.2.24.tar.gz
cd keepalived-1.2.24
解决依赖性
yum install gcc openssl-devel -y
4:源码编译三部曲(依次执行)
制定安装位置
(1):./configure --prefix=/usr/local/keepalived
(2):make
(3):make install
5:编译结束后,对keepalived进行配置
cd /usr/local/keepalived/etc/rc.d/init.d/
chmod +x keepalived
生成软链接
ln -s /usr/local/keepalived/etc/keepalived/ /etc
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
6:修改keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost ##接受警报的 email 地址,可以添加多个
}
notification_email_from keepalived@server1 ##设置邮箱的发送地址
smtp_server 127.0.0.1 ##设置 smtp server 地址
smtp_connect_timeout 30 ##设置连接smtp服务器超时时间
router_id LVS_DEVEL ##load balancer 的标识 ID,用于 email 警报
}
vrrp_instance VI_1 {
state MASTER ##备机改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去 MASTER 状态
interface eth0 #HA 监测网络接口
virtual_router_id 66 #主、备机的 virtual_router_id 必须相同,取值 0-255
priority 100 ##主机的优先级,备份机改为 50,主机优先级一定要大于备机
advert_int 1 #主备之间的通告间隔秒数
authentication { #主备切换时的验证
auth_type PASS #设置验证类型,主要有 PASS 和 AH 两种
auth_pass 1111 #设置验证密码,在一个 vrrp_instance 下,MASTER 与 BACKUP 必须使用相同的密码才能正常通信
}
virtual_ipaddress { #设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个
172.25.66.100/24
}
}
virtual_server 172.25.66.100 80 { #定义虚拟服务器
delay_loop 3 #每隔 3 秒查询 realserver 状态
lb_algo rr #lvs 调度算法,这里使用轮叫
lb_kind DR #LVS 是用 DR 模式
# persistence_timeout 50
protocol TCP #指定转发协议类型,有 tcp 和 udp 两种
real_server 172.25.66.2 80 { #配置服务节点
weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源
TCP_CHECK { #realserve 的状态检测设置部分,单位是秒
connect_timeout 3 #3 秒无响应超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
}
}
real_server 172.25.66.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
7:删除vip,开启服务
ip addr del 172.25.66.100/24 dev eth0
/etc/init.d/keepalived start #开气后会自动添加VIP到eth0
8:将主调度机server1的配置文件复制给备调度机server4
scp -r /usr/local/keepalived/ server4:/usr/local/
scp -r /etc/keepalived/keepalived.conf server4:/etc/keepalived/
二、在备调度机server4中
1:安装ipvsadm服务
将server1中的yum源文件复制给server4
yum install ipvsadm -y
2:配置keepalived服务。
同样先生成相同的软链接
ln -s /usr/local/keepalived/etc/keepalived/ /etc
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
3:修改keepalived配置文件
其他不变,修改此段:
vrrp_instance VI_1 {
state BACKUP ###状态为备用
interface eth0
virtual_router_id 66
priority 50 ###修改优先级
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.66.100
}
}
4:开启服务
/etc/init.d/keepalived start
5:查看日志server1
cat /var/log/message
可以看到,开启服务后,server1成为master
在server4中查看日志
server4为backup备机
测试
高可用负载均衡测试
1:停止 master (server1)上的 keepalived 服务,看 backup 是否接管(客户端测试是否会出现轮询)
在server1中:
/etc/init.d/keepalived stop
在server4中查看日志,可以看到,server4已经切换到master状态,并且VIP会自动转移到server4
然后到客户端使用curl命令访问VIP172.25.66.100
当我们将server1上的keepalived服务重新打开后,server1可以直接切换为master,因为server1的优先级比server4的高
故障切换测试
任意关闭 RS 上的 httpd 服务,Keepalived 监控模块是否能及时发现,然后屏蔽故障节点,同时将服务转移到正常节点来执行。
关闭server2上的httpd服务
在客户端curl访问VIP
可以看到,keepalived已经自动将宕掉的RS踢除集群当中,当我们将server2的httpd服务打开后,server2会自动被加进集群中