Keepalived
Keepalived概述
- 调度器出现单点故障,如何解决
- Keeoalived实现了高可用集群
- Keepalived最初是为LVS设计的,专门监控哥服务器节点的状态
- Keepalived后来加入了VRRP功能,防止单点故障
Keepalived高可用服务器群
问题:
准备三台Linux服务器,其中两台web服务器,并部署Keepalived高可用软件,一台作为客户端主机,实现以下功能
方案:
使用3台虚拟机,2台作为web服务器,不部署Keepalived,1台作为客户端,拓扑如下所示,配置表如下
主机名 | 网络配置 |
---|
proxy | 192.168.4.5 | web1 | 192.168.4.100 | | VIP:192.168.4.80(keepalived会自动配置) | web2 | 192.168.4.200 | | VIP:192.168.4.80(keepalived会自动配置) |
步骤
步骤一:配置网络环境
1)设置web1服务器网络参数,配置web服务
nmcli connection add type ethernet con-name ens192 ifname ens192
nmcli connection modify ens192 ipv4.add 192.168.4.100/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192
yum -y install httpd
echo "web1 我是192.168.4.100" > /var/www/html/index.html
systemctl restart httpd
2)设置web2服务器网络参数,配置web服务
nmcli connection add type ethernet con-name ens192 ifname ens192
nmcli connection modify ens192 ipv4.add 192.168.4.200/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192
yum -y install httpd
echo "web2 我是192.168.4.200" > /var/www/html/index.html
systemctl restart httpd
3)设置proxy主机的网络参数(如果已经设置请忽略)
nmcli connection add type ethernet con-name ens192 ifname ens192
nmcli connection modify ens192 ipv4.add 192.168.4.5/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192
步骤二:安装Keepalived软件
注意:两台web服务器做相同的操作
web1
yum -y install keepalived
web2
yum -y install keepalived
步骤三:部署Keepalived服务
1)修改web1服务器Keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
admin@ceshi.com.cn
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id web1
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens192
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.80
}
}
目前我们先测试keepalived的vrrp功能,所以下面的配置文件我们可以删除
2)修改web2服务器Keepalived配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
admin@ceshi.com.cn
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id web2
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.80
}
}
3)启动服务
web1
systemctl start keepalived
web2
systemctl start keepalived
4)配置防火墙和SELinux
启动keepalived会自动添加一个drop多的防火墙规则,需要清空
web1
iptables -F
setenforce 0
systemctl stop firewalld
web2
iptables -F
setenforce 0
systemctl stop firewalld
步骤四:测试
1)登录两台web服务器查看VIP信息
web1
ip a s
web2
ip a s
2)客户端访问
客户端使用curl命令连接http://192.168.4.80,查看web页面。关闭web1服务器的网卡,客户端再次访问http://192.168.4.80 ,验证是否可以正常访问
关闭web1的网卡,再次进行测试
这时候可以在web2上看到VIP已经成功转移
再次测试
重新激活web1的网卡,web1的优先级比web2高,所以再次访问页面页面应该成为web1的页面
Keepalived+LVS服务器
问题
使用Keepalived为LVS调度器提供高可用功能,放hi调度器单点故障,为用户提供web服务
- LVS1调度器真实IP地址为192.168.4.5
- LVS2调度器真实IP地址为192.168.4.6
- 服务器VIP地址设置为192.168.4.15
- 真实web服务器地址分别为192.168.4.100、192.168.4.200
- 使用加权轮询算法,真实web服务器权重不同
方案:
使用5台web虚拟机,1台作为客户端主机,2台作为LVS调度器,2台作为Real server,实验拓扑如下所示
主机名 | 网络配置 |
---|
client | 192.168.4.10/24 | proxy1 | 192.168.4.5/24 | proxy2 | 192.168.4.6/24 | web1 | 192.168.4.100/24 | web2 | 192.168.4.200/24 |
注意,所有主机都需要配置IP地址与有效的yum源
步骤:
步骤一:配置网络环境
如果你还是使用上面的web服务器,请关闭刚刚web服务器的keepalived
1)设置web1服务器的网络参数
nmcli connection modify ens192 ipv4.add 192.168.4.100/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192
接下来给web1配置VIP 地址
注意,这里的子网掩码必须为32,网络地址与IP一样,广播地址与IP地址一样
ifconfig lo:10 192.168.4.15 netmask 255.255.255.255 broadcast 192.168.4.15 up
这里因为web1也配置与代理一样的VIP地址,默认肯定会出现地址冲突;sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样也防止地址冲突的问题
web1
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
sysctl -p
重启网络服务,设置防火墙与SELinux
systemctl restart NetworkManager
ifconfig
systemctl stop firewalld
setenforce 0
2)设置web2服务器的网络参数
nmcli connection modify ens192 ipv4.add 192.168.4.200/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192
接下来给web2配置VIP 地址
注意,这里的子网掩码必须为32,网络地址与IP一样,广播地址与IP地址一样
ifconfig lo:10 192.168.4.15 netmask 255.255.255.255 broadcast 192.168.4.15 up
这里因为web2也配置与代理一样的VIP地址,默认肯定会出现地址冲突;sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样也防止地址冲突的问题
web2
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
sysctl -p
重启网络服务,设置防火墙与SELinux
systemctl restart NetworkManager
ifconfig
systemctl stop firewalld
setenforce 0
3)配置proxy1主机的网络参数(不配置VIP,由keepalived自动配置)
nmcli connection modify ens192 ipv4.add 192.168.4.5/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192
3)配置proxy2主机的网络参数(不配置VIP,由keepalived自动配置)
nmcli connection modify ens192 ipv4.add 192.168.4.6/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
步骤二:配置后台web服务
1)安装软件,自动逸web页面
web1
yum -y install httpd
echo "web1 我是192.168.4.100" > /var/www/html/index.html
web2
yum -y install httpd
echo "web2 我是192.168.4.200" > /var/www/html/index.html
2)启动web服务器软件
web1
systemctl restart httpd
web2
systemctl restart httpd
步骤三:调度器安装Keepalived与ipvsadm软件
proxy1
yum -y install keepalived
yum -y install ipvsadm
systemctl enable keepalived
ipvsadm -C
proxy2
yum -y install keepalived
yum -y install ipvsadm
systemctl enable keepalived
ipvsadm -C
步骤四:部署keepalived实现LVS-DR模式调度器的高可用
1)LVS1调度器设置keepalived,并启动服务
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
admin@ceshi.com.cn
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lvs1
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens192
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.15
}
}
virtual_server 192.168.4.15 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 192.168.4.100 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.4.200 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
systemctl start keepalived
iptables -F
ipvsadm -Ln
ip a s
健康检查有三种 TCP_CHECK、HTTP_GET、SSL_GET
TCP_CHECK:只检查端口,不检查网页
HTTP_GET:检查网页与预留md5做哈希校验
SSL_GET:检查网页与预留md5做哈希校验
2)LVS2调度器设置keepalived,并启动服务
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
admin@ceshi.com.cn
}
notification_email_from ka@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id lvs2
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.4.15
}
}
virtual_server 192.168.4.15 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
real_server 192.168.4.100 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.4.200 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
systemctl start keepalived
iptables -F
ipvsadm -Ln
ip a s
步骤四:客户端测试
客户端使用curl命令反复连接http://192.168.4.15 ,查看访问的页面是否会轮询到不同的后端真实服务器
接下来我们关闭proxy1,这个时候可以看出我们的备份执行成功
接下来在测试我们关闭web1服务器,看能不能进行健康检查
由图可以看出以自动为我们删除不可用的web1服务器,实现了健康检查,与高可用
|