1、Keepalived概述
1.1、为什么要用Keepalived
■ 企业应用中,单台服务器承担应用存在单点故障的危险
■ 单点故障一旦发生,企业服务将发生中断,造成极大的危害
1.2、Keepalived工具介绍
■ 专为LVS和HA设计的一款健康检查工具
● 支持故障自动切换(Failover)
● 支持节点健康状态检查(Health Checking)
1.3、Keepalived实现原理剖析
■ Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
■ VRRP (虚拟路由冗余协议) 是针对路由器的一种备份解决方案
● 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
● 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
● 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
■ Keepalived可实现多机热备,每个热备组可有多台服务器
■ 双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
1.4、Keepalived安装与启动
■ 在LVS群集环境中应用时,也需用到ipvsadm管理工具
■ YUM安装Keepalived
■ 启用Keepalived服务
1.5、配置Keepalived master服务器
■ Keepalived配置目录位于F/etc/keepalived/
■ keepalived.conf是主配置文件
● global_defs {…}区段指定全局参数
● vrrp_instance 实例名称{…}区段指定VRRP热备参数
● 注释文字以"!”符号开头
● 目录samples,提供了许多配置样例作为参考
■ 常用配置选项
● router_id HA_TEST_R1:本路由器(服务器)的名称
● vrrp instance VI_1 :定义VRRP热备实例
● state MASTER:热备状态,MASTER表示主服务器
● interface ens33 :承载VIP地址的物理接口
●virtual_router_id 1 :虚拟路由器的ID号,每个热备组保持一致
■ 常用配置选项
● priority 100:优先级数值越大优先级越高
●advert_int 1:通告间隔秒数(心跳频率)
●auth_type PASS:认证类型
●auth_pass 123456:密码字串
●virtual_ipaddress { vip}:指定漂移地址(VIP),可以有多个
1.6、配置Keepalived slave服务器
■ Keepalived备份服务器的配置与master的配置有三个选项不同
● router_id: 设为自有名称
● state:设为BACKUP
● priority:值低于主服务器
■ 其他选项与master相同
1.7、Keepalived双机热备效果测试
■ 测试双机热备的效果
● 主、备机均启用Web服务,设置不同内容
● 先后禁用、启用主服务器的网卡
2、实例:使用Keepalived搭建双机热备测试
测试设备配置:
调度器两台(双机热备)
IP地址:192.168.74.10(主)
IP地址:192.168.74.20(备)
web服务器两台
IP地址:192.168.74.30(WEB1)
IP地址:192.168.74.40(WEB2)
NFS服务器
IP地址:192.168.74.50
客户端电脑一台
IP地址:192.168.74.60
2.1、进入NFS服务器查看服务是否安装,并开启
[root@nfs ~]# rpm -qa | grep nfs #查看是否安装NFS
[root@nfs ~]# rpm -qa | grep rpcbind #查看是否安装rpcbind
[root@nfs ~]# systemctl start nfs #开启NFS
[root@nfs ~]# systemctl start rpcbind #开启rpcbind
[root@nfs ~]# systemctl status nfs #查看NFS状态
[root@nfs ~]# systemctl status rpcbind #查看rpcbind状态
2.2、创建挂载源目录并编辑查看共享情况
[root@nfs ~]# mkdir /web1
[root@nfs ~]# mkdir /web2
[root@nfs ~]# echo "<h1>This is server1.</h1>" > /web1/index.html
[root@nfs ~]# echo "<h1>This is server2.</h1>" > /web2/index.html
[root@nfs ~]# vi /etc/exports
[root@nfs ~]# showmount -e #查看共享状况
2.3、进入web1和web2安装apache服务,开启,并挂载
[root@web1 ~]# yum -y install httpd
[root@web2 ~]# yum -y install httpd
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# netstat -napt | grep 80
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# netstat -anpt | grep 80
[root@web1 ~]# mount 192.168.74.50:/web1 /var/www/html #进行挂载
[root@web1 ~]# df -Th #查看挂载
[root@web2 ~]# mount 192.168.74.50:/web2 /var/www/html
[root@web2 ~]# df -Th
2.4 、查看web服务器是否挂载成功
[root@web1 ~]# showmount -e 192.168.74.50
[root@web1 ~]# curl http://localhost #本地访问
[root@web2 ~]# showmount -e 192.168.74.50
[root@web2 ~]# curl http://localhost
2.5、服务器上编辑脚本
[root@web1 ~]# vi web1.sh
#!/bin/bash
#lvs web1
ifconfig lo:0 192.168.74.100 broadcast 192.168.74.100 netmask 255.255.255.255 up
route add -host 192.168.74.100 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
sysctl -p &> /dev/null
[root@web1 ~]# sh web1.sh
[root@web1 ~]# ifconfig
[root@web1 ~]# route -n
[root@web2 ~]# vi web2.sh
[root@web2 ~]# sh web2.sh
[root@web2 ~]# ifconfig
[root@web2 ~]# route -n
2.6、配置调度器
[root@lvs1 ~]# modprobe ip_vs
[root@lvs1 ~]# cat /proc/net/ip_vs
[root@lvs1 ~]# yum -y install ipvsadm
[root@lvs2 ~]# modprobe ip_vs #加载modprobe ip_vs模块
[root@lvs2 ~]# cat /proc/net/ip_vs
[root@lvs2 ~]# yum -y install ipvsadm
2.61、放入keepalived压缩包,安装编译工具与插件
[root@lvs1 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@lvs2 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
[root@lvs1 ~]# tar zxvf keepalived-2.0.13.tar.gz
[root@lvs2 ~]# tar zxvf keepalived-2.0.13.tar.gz
[root@lvs1 ~]# cd keepalived-2.0.13/
[root@lvs1 keepalived-2.0.13]# ls -lh
2.63、进行文件配置
[root@lvs1 keepalived-2.0.13]# ./configure --prefix=/ #配置
[root@lvs1 keepalived-2.0.13]# make && make install #编译与安装
[root@lvs1 keepalived-2.0.13]# cd keepalived/
[root@lvs1 keepalived]# cd etc/init.d
[root@lvs1 init.d]# cp keepalived /etc/init.d/
[root@lvs1 ~]# systemctl enable keepalived.service #设置开机自启动
2.64、编写脚本
[root@lvs1 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lvs_01
}
vrrp_instance vi_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 6666
}
virtual_ipaddress {
192.168.74.100
}
}
virtual_server 192.168.74.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.74.30 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.74.40 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@lvs1 ~]# systemctl start keepalived.service #启动服务
[root@lvs1 ~]# ipvsadm -Ln
[root@lvs2 ~]# cd keepalived-2.0.13/
[root@lvs2 keepalived-2.0.13]# ./configure --prefix=/
[root@lvs2 keepalived-2.0.13]# make && make install
[root@lvs2 keepalived-2.0.13]# cp keepalived/etc/init.d/keepalived /etc/init.d/
[root@lvs2 keepalived-2.0.13]# systemctl enable keepalived.service
2.7、免密登录web2复制脚本
[root@lvs1 ~]# ssh-keygen -t rsa
[root@lvs1 ~]# ssh-copy-id 192.168.74.20
[root@lvs1 ~]# scp /etc/keepalived/keepalived.conf root@192.168.74.20:/etc/keepalived/
[root@lvs2 keepalived-2.0.13]# cd
[root@lvs2 ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lvs_01 #本服务器名称
}
vrrp_instance vi_1 { #定义VRRP热备实例
state MASTER #热备状态MASTER表示主服务器,backup表示从服务器
interface ens33 #承载VIP地址的物理接口
virtual_router_id 51 #虚拟路由器的ID号,每个热备组保持一致
priority 110 #优先级,数值越大,优先级越高
advert_int 1 #报告间隔秒数(心跳频率)
authentication { #热备认证信息,每个热备组保持一致
auth_type PASS #认证类型
auth_pass 6666 #密码字符串
}
virtual_ipaddress { #指定漂移地址VIP,可以有多个
192.168.74.100
! Configuration File for keepalived
global_defs {
router_id lvs_02
}
vrrp_instance vi_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass 6666
}
virtual_ipaddress {
192.168.74.100
}
}
virtual_server 192.168.74.100 80 { #虚拟服务器地址,端口
delay_loop 6 #健康检查的间隔时间秒数
lb_algo rr #轮询rr调度算法
lb_kind DR #直接路由群集群集工作模式
persistence_timeout 6 #链接保持时间
protocol TCP #应用服务器采用的TCP协议
real_server 192.168.74.30 80 { #第一个web服务器节点的地址,端口
weight 1 #节点的权重
TCP_CHECK { #健康检查方式
connect_port 80 #检查的目标端口
connect_timeout 3 #连接超时
nb_get_retry 3 #重试次数
delay_before_retry 3 #重试间隔
}
}
real_server 192.168.74.40 80 { #第二个web服务器节点的地址,端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@lvs2 ~]# systemctl start keepalived.service
[root@lvs2 ~]# systemctl status keepalived.service
2.8查看虚拟地址漂移
[root@lvs1 ~]# ip addr
[root@lvs2 ~]# ip addr
[root@lvs2 ~]# ipvsadm -Ln
2.9、查看主备LVS转换
[root@lvs1 ~]# systemctl stop keepalived.service #断掉主LVS
[root@lvs2 ~]# tail -f /var/log/messages
[root@lvs2 ~]# ip addr
2.91、再次在LVS1上开启keepalived.service ,查看效果
[root@lvs1 ~]# systemctl start keepalived.service
[root@lvs1 ~]# ip addr
2.10、打开网页查看调度