架构图
简介
keepalived是什么
keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障
keepalived工作原理
- keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router RedundancyProtocol,即虚拟路由冗余协议。
- 将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有–个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip),master会 发组播,当backup收 不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个 backup当master
keeepalived主要有三个模块
- core 为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析
- check 负责健康检查,包括常见的健康检查方式
- vrrp 用来实现VRRP协议的
实战案例
环境
- lvs-server1 192.168.100.10 负载均衡器1 master
- lvs-server2 192.168.100.11 负载均衡器2 backup
- web-server1 192.168.100.12 nginx服务器
- web-server2 192.168.100.13 nginx服务器
- vip 192.168.100.14
lvs-server1配置
安装相应软件
[root@lvs-server1 ~]# yum -y install keepalived ipvsadm
修改配置文件
[root@lvs-server1 ~]# vim /etc/keepalived/keepalived.conf
键入以下配置
! Configuration File for keepalived #配置文件声明,前面不得有空行或者空格
global_defs {
router_id Drector1 #设备在组中的标识,两边不一样
}
vrrp_instance VI_1 { #VI_1。实例名两台路由器相同。注意区分
state MASTER #主或者从状态
interface ens32 #监控网卡
virtual_router_id 51 #虚拟路由编号,主备要一致,注意区分
priority 150 #优先级
advert_int 1 #心跳间隔
authentication { #秘钥认证(1-8位)
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.14/24 dev ens32 #VIP和工作端口
}
}
virtual_server 192.168.100.14 80 { #LVS配置,VIP
delay_loop 3 #服务轮询的时间间隔,每隔三秒检查一次real_server状态
lb_algo rr #LVS调度算法
lb_kind DR #LVS集群模式
protocol TCP
real_server 192.168.100.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3 #健康检查方式,连接超时时间
}
}
real_server 192.168.100.13 80 {
weight 1
TCP_CHECK {
connect_timeout 3 #健康检查方式,连接超时时间
}
}
}
开启服务
[root@lvs-server1 ~]# systemctl enable keepalived
[root@lvs-server1 ~]# reboot //重启服务器
lvs-server2配置
安装相应软件
[root@lvs-server2 ~]# yum -y install keepalived ipvsadm
修改配置文件
[root@lvs-server2 ~]# vim /etc/keepalived/keepalived.conf
键入以下配置
! Configuration File for keepalived #配置文件声明,前面不得有空行或者空格
global_defs {
router_id Drector2 #设备在组中的标识,两边不一样
}
vrrp_instance VI_1 { #VI_1。实例名两台路由器相同。注意区分
state BACKUP #主或者从状态
interface ens32 #监控网卡
virtual_router_id 51 #虚拟路由编号,主备要一致,注意区分
priority 100 #优先级
advert_int 1 #心跳间隔
authentication { #秘钥认证(1-8位)
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.14/24 dev ens32 #VIP和工作端口
}
}
virtual_server 192.168.100.14 80 { #LVS配置,VIP
delay_loop 3 #服务轮询的时间间隔,每隔三秒检查一次real_server状态
lb_algo rr #LVS调度算法
lb_kind DR #LVS集群模式
protocol TCP
real_server 192.168.100.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3 #健康检查方式,连接超时时间
}
}
real_server 192.168.100.13 80 {
weight 1
TCP_CHECK {
connect_timeout 3 #健康检查方式,连接超时时间
}
}
}
开启服务
[root@lvs-server2 ~]# systemctl enable keepalived
[root@lvs-server2 ~]# reboot //重启服务器
web-server两台服务器配置
安装nginx服务
[root@web-server1 ~]# yum -y install nginx
[root@web-server1 ~]# systemctl restart nginx
[root@web-server1 ~]# systemctl enable nginx
配置虚拟IP
[root@web-server1 ~]# cp /etc/sysconfig/network-scripts/{ifcfg-lo,ifcfg-lo:0}
[root@web-server1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
在配置文件中键入如下配置
DEVICE=lo:0
IPADDR=192.168.100.14
NETMASK=255.255.255.255
ONBOOT=yes
其他行注释掉
配置路由
在两台机器(RS)上,添加一个路由,确保如果请求的目标IP是VIP,那么让出去的数据包的源地址也显示为VIP
[root@web-server1 ~]# vim /etc/rc.local
/sbin/route add -host 192.168.100.14 dev lo:0
配置ARP
[root@web-server1 ~]# 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
[root@web-server1 ~]# reboot
测试
浏览器访问http://192.168.100.14