Keepalived的作用是检测服务器
的状态,如果有一台web服务器宕机
,或工作出现故障,Keepalived将检
测到,并将有故障的服务器从系统中
剔除,同时使用其他服务器代替该服
务器的工作,当服务器工作正常后
Keepalived自动将服务器加入到服务
器群中,这些工作全部自动完成,不
需要人工干涉,需要人工做的只是修
复故障的服务器。
Keepalived工作流程图:
工作流程图详解:
keepalived主要是模块是VRRP Stack和Cheackers,实现HA集群
中失败切换(Failover)功能。Keepalived通过VRRP功能能再结合LVS负载均
衡软件即可部署一个高性能的负载均衡集群系统。,Cheackers主要实现可
实现对服务器运行状态检测和故障隔离。,其中ipvs和realserver健康状态检
查通过配置文件配置就可以实现,而其他服务高可用则需要通过自己编写脚
本,然后配置keepalived调用来实现。
Keepalived运行有3个守护进程。父进程主要负责读取配置文件初始化
、监控2个子进程等;然后两个子进程,一个负责VRRP,另一个负责
Cheackers健康检查。其中父进程监控模块为WacthDog,工作实现:每个
子进程打开一个接受unix域套接字,父进程连接到那些unix域套接字并向子
进程发送周期性(5s)hello包。
上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)
和内核空间(kernel space)。
内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)
和NETLINK(提供高级路由及其他相关的网络功能)两个部份。
VRRP协议的相关介绍:
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)
可以认为是实现路由器高可用的协议,简单的说,当一个路由器故障时可以
由另一个备份路由器继续提供相同的服务。
VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由
器或Backup路由器)。VRRP优先级的取值范围为0到255(数值越大表明
优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃
Master位置时候使用,255则是系统保留给IP地址拥有者使用。优先级越高
,则越有可能成为Master路由器。当两台优先级相同的路由器同时竞争
Master时,比较接口IP地址大小。接口地址大者当选为Master。
实战演练:实现基于keepalived高可用基于LVS-DR模式的双主架构
一:环境准备:
四台centos虚拟机分别命名为:lvs-master、lvs-backup、realserver1、realserver2
都是双网卡模式:桥接和仅主机
lvs-master: vip1:172.17.250.11
dip:172.17.27.10
lvs-backup:vip2:172.17.250.12
dip:172.17.250.43
realserver1:rip:172.17.0.66
realserver2:rip:172.17.250.41
分别在lvs-master和lvs-backup上安装keepalived
清空防火墙策略:iptables -F,关闭selinux策略
二:配置相关文件
1、修改keepalived主(lvs-server-master)配置文件实现virtual_instance
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 90
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1015
}
virtual_ipaddress {
172.17.250.11
}
}
virtual_server 172.17.250.11 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.255
persistence_timeout 120
protocol TCP
real_server 172.17.0.66 80 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.17.250.41 80 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 93
priority 98
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
172.17.250.12
}
}
virtual_server 172.17.250.12 443 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.255
persistence_timeout 120
protocol TCP
real_server 172.17.0.66 443 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.17.250.41 443 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
2,lvs-backup与lvs-master配置文件大致相同,所以就只列出不同的地方,没列出的都是相同的代码
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 90
priority 98 ###由原来的100改为了98
advert_int 1
authentication {
auth_type PASS
auth_pass 1015
}
virtual_ipaddress {
172.17.250.11
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 93
priority 100 ###由原来的98改为了100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
172.17.250.12
}
}
3,realserver1和realserver2配置都一样
因为realserver使用了443端口,所以说需要进行加密所以应该打开nginx中的https server
cd /etc/pki/tls/certs
生成密钥和证书:make cert.pem
拷贝cert.pem到nginx配置文件中:
cp cert.pem /etc/nginx
cd /etc/nginx
创建一个密钥文件,并把cert.pem中的密钥拷到此文件中
vim cert.key
HTTPS server
server {
listen 443 ssl;
server_name localhost;
root html;
ssl_certificate cert.pem; ###存放证书的文件
ssl_certificate_key cert.key; ####存放密钥的文件
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm;
}
}
}
配置回环网卡:
ifconfig lo:0 172.17.250.11 broadcast 172.17.250.11 netmask 255.255.255.255 up
route add -host 172.17.250.11 lo:0
ifconfig lo:1 172.17.250.12 broadcast 172.17.250.12 netmask 255.255.255.255 up
route add -host 172.17.250.11 lo:0
忽略ip与mac不匹配的问题:
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
三:测试检验高可用的效果
1、配置完成后,观察两侧IP的是情况,看是否虚拟IP在主上配置成功
2、停掉主服务上的keepalived服务,看虚拟IP是否正常转移到从节点上
a,首先查看虚拟ip是否在lvs-master和lvs-backup上配置成功
ipvsadm -L -n
从图中可以看到vip1:172.17.250.11
vip2:172.17.250.12
b,关掉lvs-backup的keepalived服务
systemctl stop keepalived
查看vip2:172.17.250.12是否跑到了lvs-master主机上
图中看出lvs-backup上已经没有了vip2:172.17.250.12
而是出现在了lvs-master上