Keepalived工作原理:
keepalived是以VRRP协议为基础实现的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。
实验过程如下:
master和backup:keepalived,ipvsadm
4.配置IP地址(不需要网关)
客户机:110.110.110.1
Master:110.110.110.5
Backup:110.110.110.6
Web1:110.110.110.254
(需添加lo:0网卡,配置IP为VIP地址,即配置虚拟IP地址)
Web2:110.110.110.253
(需添加lo:0网卡,配置IP为VIP地址,即配置虚拟IP地址)
5.调整web节点配置(两台配置相同)
Vim /etc/sysctl.conf
写入:
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce=2
Sysctl -p 是内核参数生效
Cd /etc/sysconfig/network-scripts/
Cp ifcfg-lo ifcfg-lo:0
Vim ifcfg-lo:0
写入:
DEVICE=lo:0
IPADDR=110.110.110.10 #虚拟IP地址,可按照具体情况更改
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback:0
Route add -host 110.110.110.10/32 dev lo:0 #添加的为虚拟VIP地址
Route -n 查看一下是否已经添加上
#若无法使用route命令,可以使用yum -y install net-tools,该软件包含各种网络工具
web1:echo "this is the web1 " >/var/www/html/index.html
web2:echo "this is the web2 " >/var/www/html/index.html
# /var/www/html/index.html 在Web服务器配置中,当用户访问网站的域名或IP地址时,默认会查找并显示这个文件的内容,此处用来测试
6.加载master和backup内核模块
modprobe ip_vs
cat /proc/net/ip_vs
7.配置关闭master和backup的icmp重定向,以便于路由器能够帮助主机优化网络流量路径。
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
cat /proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/ens33/send_redirects
8.更改keepalived主配置文件的配置
主要更改以下字段:
global_defs {
router_id LVS_DEVEL1
}
#此字段只保留这两行
vrrp_instance VI_1 { #实例号,必须和backup保持一致
state MASTER #当前服务器在VRRP(Virtual Router Redundancy Protocol)中的角色,如果是备服务器,请更改成BACKUP,必须大写
interface ens33 # 请替换为实际使用的网络接口,eth0是CentOS6及以下版本的网卡名称
virtual_router_id 51 #定义一个虚拟路由器ID,必须和backup保持一致,以便两台服务器能够正常协商主从关系
priority 100 # 设置备份服务器较低的优先级,主优先级高于备
advert_int 1 #定义VRRP通告间隔,即每隔多久发送一次VRRP通告消息。在此例中,设定为每秒发送一次
authentication {
auth_type PASS
auth_pass password #设置VRRP通信的认证方式。在这个例子中,采用明文密码认证方式,密码是password
}
virtual_ipaddress {
110.110.110.10 # 定义一个或多个虚拟IP地址(VIP),以防止一个VIP失效或与其他IP地址冲突时,可使用其他VIP地址。客户端可以通过这个VIP访问LVS负载均衡器提供的服务 (注:要跟master以及backup在同一网段)
}
}
virtual_server 110.110.110.10 80 { #定义一个虚拟服务器,IP地址为虚拟IP地址,监听端口为80。当定义多个虚拟IP时,需要定义多个virtual_server
delay_loop 6 #LVS每隔6秒检查一次后端Real Server的状态
lb_algo rr #负载均衡算法选择轮询,可按照需求更改
lb_kind DR #负载均衡方式选择直接路由
persistence_timeout 50 #会话保持超时时间为50秒。在此时间内,来自同一客户端的请求会被发送到同一个后端服务器
protocol TCP #使用的协议是TCP
real_server 110.110.110.252 80 { #定义后端真实服务器,如此实验中有两个web服务器,则需要配置两个real_server
weight 1 #权重设置为1。当所有后端服务器健康状态正常时,根据权重比例进行负载均衡。
HTTP_GET { #定义使用HTTP GET方法来检查后端服务器的健康状况
url {
path / #指定要访问的URL路径为根目录(/)
}
connect_timeout 3 #连接后端服务器的超时时间为3秒
nb_get_retry 3 #尝试重试获取响应的最大次数为3次
delay_before_retry 3 #在每次重试之前等待3秒
}
}
real_server 110.110.110.253 80 {
weight 1
HTTP_GET {
url {
path /
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
可以使用scp将keepalived.conf复制到Backup上,具体操作如下:
Master:scp keepalived.conf 110.110.110.6:/opt/
Backup:cp /opt/keepalived.conf /etc/keepalived/
然后更改backup中的keepalived.conf配置文件的state BACKUP字段和priority 90字段即可
9.master和backup启动ipvsadm
Systemctl start ipvsadm
如果软件无法正常启动,可查看Vim /usr/lib/systemd/system/ipvsadm.service (ipvsadm启动文件)
在/etc/sysconfig下创建一个ipvsadm空文件,ipvsadm启动时会去此文件读取配置,停止时会将配置保存在此文件中,所以若没有必须创建一个echo > /etc/sysconfig/ipvsadm
10.master和backup启动keepalived
systemctl restart keepalived.service
11.ipvsadm -Ln查看是否有被keepalived分配到节点
12.web下载启动httpd
Yum -y install httpd
Ssystemctl start httpd
13.测试
可用客户机curlVIP地址查看是否能到web服务器
验证keepalived的高可用性:
停掉master的keepalived的服务
systemctl stop keepalived
通过客户端继续访问(curl)VIP ,查看是否可以正常访问web服务器
脑裂现象:如果客户机无法正常访问web节点,有可能出现了脑裂现象,即在master和backup中都被漂移到了VIP(backup认为master失效,实则master仍在运行),出现此现象有可能是因为节点失效,网络中断等问题,可检查网络互通性,keepalived配置文件等检查。