目录
- 一、keepalived的介绍
- 二、案例实操
- 2.1 案例环境
- 2.2 配置主LVS
- 2.3 配置备LVS
- 2.4 配置NFS服务器
- 2.5 配置节点服务器
- 2.6 单点故障效果验证
一、keepalived的介绍
传统LVS-DR模型,是单调度器,那么当调度器出现故障的时候,就会出现单点故障问题,这时需要keepalived,实现双机热备(主从模式)。
- 支持故障自动切换(Failover)。
- 支持节点健康状态检查(Health Checking)
- 官方网站:http://www.keepalived.org/
Keepalived实现原理
1、Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
2、VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务;
每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态;
若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务。
二、案例实操
Keepalived可实现多机热备,每个热备组可有多台服务器
双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
2.1 案例环境
热备组里只用两台调度器进行模拟
共六台主机:
都处于同一网段,VMnet1模式
客户机访问的虚拟IP: 192.168.10.200
两台LVS:一台作为主LVS,另一台为从LVS, 优先级最大的为主调度服务器,其余为备用服务器。IP:192.168.10.30(主)和192.168.10.180(备)
两台节点服务器: 提供web服务,IP:192.168.10.140 和 192.168.10.150
主机5: 部署nfs共享存储服务,给节点服务器提供网页等资源,IP:192.168.10.160
主机6: 客户机,用于访问虚拟服务器(192.168.10.200),测试轮询的访问效果。IP:192.168.10.170
2.2 配置主LVS
加载LVS内核
[root@lvs ~]# modprobe ip_vs
[root@lvs ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
安装管理软件ipvsadm,不需要启动
[root@lvs ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm
警告:/mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:ipvsadm-1.27-7.el7 ################################# [100%]
安装keepalived,修改配置文件提供LVS服务,和web节点服务器池的添加。
[root@Server1 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@Server1 ~]# tar zxf keepalived-2.0.13.tar.gz
[root@Server1 ~]# cd keepalived-2.0.13/
[root@Server1 keepalived-2.0.13]# ./configure --prefix=/
[root@Server1 keepalived-2.0.13]# make && make install
[root@Server1 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d ###加入系统管理服务
[root@Server1 keepalived-2.0.13]# systemctl enable keepalived.service ###设置开机自启动
[root@Server1 ~]# vi /etc/keepalived/keepalived.conf ###编辑配置文件
global_defs { #全局参数
router_id LVS_01 #指定名称,各个服务器名称要不一样
}
vrrp_instance VI_1 { #指定vrrp热备参数
state MASTER #服务器角色是master,备份服务器设置为BACKUP
interface ens33 #修改物理网卡名称,默认是centos6的eth0
virtual_router_id 51 #组号相同
priority 110 #优先级,主服务器设置要大于备服务器
authentication {
auth_type PASS #验证类型和密码,不建议修改
auth_pass 1111
}
virtual_ipaddress {
192.168.10.200 #虚拟IP,漂移地址(VIP)地址,可以有多个
}
}
virtual_server 192.168.10.200 80 { #配置虚拟服务器
delay_loop 6
lb_algo rr #调度算法为轮询
lb_kind DR #LVS的工作模式为DR(直连路由)
persistence_timeout 6 #连接保持时间
protocol TCP #传输协议为TCP协议
##################web节点服务器池###############
real_server 192.168.10.140 80 { #真实节点1的IP
weight 1
TCP_CHECK { #健康检查参数
connect_port 80 #检查80端口连接是否正常
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.10.150 80 { ##真实节点1的IP
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
################web节点服务器池################
}
开启服务
systemctl enable keepalived
systemctl start keepalived
关闭防火墙
2.3 配置备LVS
关闭防火墙
与主调度器的配置过程一样,只有配置文件的区别
复制粘贴主的配置文件,修改配置文件的开头(3处):
global_defs {
router_id LVS_02 #备用换成02
}
vrrp_instance VI_1 {
state BACKUP #备份服务器设置为BACKUP
interface ens33
virtual_router_id 51
priority 105 #优先级小于主服务器
......
2.4 配置NFS服务器
[root@nfs ~]# yum -y install nfs-utils rpcbind
[root@nfs ~]# systemctl start nfs-utils
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# mkdir /opt/web1 /opt/web2 #建立测试网页
[root@nfs ~]# cd /opt/web1
[root@nfs web1]# echo "server1" > index.html #给web1服务器使用
[root@nfs web1]# cd /opt/web2
[root@nfs web2]# echo "server2" > index.html #给web2服务器使用
[root@nfs web2]# vi /etc/exports
/opt/web1 192.168.10.140 (ro,sync)
/opt/web2 192.168.10.150 (ro,sync)
[root@nfs web2]# systemctl restart nfs
[root@nfs web2]# systemctl restart rpcbind
#关闭防火墙核心防护
[root@nfs web2]# systemctl stop firewalld
[root@nfs web2]# setenforce 0
2.5 配置节点服务器
以web1为例
安装httpd网页服务
[root@web1 ~]# yum -y install httpd
查看nfs服务器的发布
#关闭防火墙核心防护
[root@web1 ~]# systemctl stop firewalld
[root@web1 ~]# setenforce 0
[root@web1 ~]# showmount -e 192.168.10.160
Export list for 192.168.10.160:
/opt/web2 (everyone)
/opt/web1 (everyone)
挂载使用nfs服务器的网页
[root@web1 ~]# mount 192.168.10.160:/opt/web1 /var/www/html
[root@web1 ~]# systemctl start httpd #开启网络服务
节点2用/opt/web2
DR模式配置:编辑脚本执行,两节点服务器一样,都需要配置
#!/bin/bash
#添加虚拟IP,必须用lo网卡
ifconfig lo:0 192.168.10.200 broadcast 192.168.10.200 netmask 255.255.255.255 up
route add -host 192.168.10.200 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
systctl -p &> /dev/null
2.6 单点故障效果验证
当主调度器正常工作,虚拟IP在主调度器网卡上
[root@lvs ~]# ip addr
客户机1、2、3,轮流访问虚拟服务器时(192.168.10.200),节点1、2轮流提供网页服务。(轮询算法效果)
客户机1
客户机2
客户机3
模拟主调度器故障,关闭keepalived服务
[root@lvs ~]# systemctl stop keepalived.service
虚拟地址漂移到备用调度器上,同时也可以在日志文件里查看到迁移的状态变化。备用调度器日志:
[root@lvs2 ~]# tail -f /var/log/messages
虚拟地址漂移结果:到备用上
[root@lvs2 ~]# ip addr
备用调度器继续提供调度服务。客户机轮流访问虚拟IP,两个节点服务器轮流提供服务。当再开启主调度器,由于优先级的原因,MASTER状态自动迁移到主上,备用回到BACKUP状态。
查看备用的日志记录: