1、Keepalived
①keepalived是专为LVS和HA设计的一款健康检查工具,支持故障自动切换和节点健康状态检查,可判断LVS负载调度器和节点服务器的可用性,构建高可用性的LVS负载均衡群集
②官方网站:http://www.keepalived.org/
2、VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)
①VRRP是由IETF提出的解决局域网中配置静态网关出现单点失效现象的路由协议,其工作原理与CISCO的HSRP类似,即由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务,每个热备组内同一时刻只有一台主路由器(master)提供服务,其他路由器处于冗余状态(backup),若当前主路由器失效,则处于冗余状态的路由器会自动接替虚拟IP地址,继续提供服务
②VRRP与HSRP主要区别在于:HSRP是CISCO私有,而VRRP是公有的,目前厂商都支持;HSRP中不允许虚拟IP地址使用HSRP组内设备的真实IP地址,而VRRP中允许使用VRRP组内设置的IP地址
③虚拟IP地址,即虚拟路由器的IP地址可以在热备组内的路由器之间进行转移,因此也称为漂移IP地址,其不需要手动配置,Keepalived会自动建立进行配置管理
3、keepalived主配置文件/etc/keepalived/keepalived.conf
全局设置:global_defs { ... }
热备设置:vrrp_instance 实例名称 { ... }
样例文件位于:/etc/keepalived/samples/...
state:设置本节点状态,MASTER、SLAVE
priority:设置竞选优先级,数值越大优先级越高
virtual_ipaddress { ... }:设置漂移IP地址
实验一:使用Keepalived实现双机热备
一、基本配置
1、配置各Linux主机名
vi /etc/sysconfig/network
HOSTNAME=master.benet.com
vi /etc/hosts
172.16.16.173 master.benet.com
2、配置IP地址、关闭iptables
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.16.173
NETMASK=255.255.255.0
rm -f /etc/udev/rules.d/70-persistent-net.rules
reboot --------重新启动虚拟机,其他虚拟机配置与之类似
二、配置主服务器
1、安装支持软件
yum -y install kernel-devel openssl-devel popt-devel
2、编译安装Keepalived
tar zxf keepalived-1.2.2.tar.gz -C /usr/src
cd /usr/src/keepalived-1.2.2/
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-131.0.15.el6.i686/
------将keepalived安装到根目录,同时指定Linux内核位置
make & make install
chkconfig --add keepalived ----将keepalived添加为系统服务,方便管理
chkconfig keepalived on
3、修改主配置文件/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
global_defs {
router_id master.benet.com -----指定本服务器的主机名
}
vrrp_instance VI_1 { -----定义VRRP实例
state MASTER ---- MASTER为主路由器,SLAVE为备用路由器
interface eth0 -----承载VIP地址的物理接口
virtual_router_id 51 -----热备组ID号,每个组应保持一致
priority 100 -----优先级,越大优先级越高
advert_int 1 -----心跳频率
authentication { -----认证信息
auth_type PASS -----认证类型为密码
auth_pass 123456 ----密码字符串
}
virtual_ipaddress { -----指定漂移IP地址
172.16.16.172
}
}
service keepalived start
ip addr show dev eth0 -----通过ip命令查看自动添加的虚拟IP地址
三、配置备用服务器
备用服务器的配置与主服务器基本类似,只有主配置文件keepalived.conf的部分配置项有所不同
1、安装支持软件
yum -y install kernel-devel openssl-devel popt-devel
2、编译安装Keepalived
tar zxf keepalived-1.2.2.tar.gz -C /usr/src
cd /usr/src/keepalived-1.2.2/
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-131.0.15.el6.i686/
------将keepalived安装到根目录,同时指定Linux内核位置
make & make install
chkconfig --add keepalived ----将keepalived添加为系统服务,方便管理
chkconfig keepalived on
3、修改主配置文件/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
global_defs {
router_id backup.benet.com
}
vrrp_instance VI_1 {
state SLAVE ----- SLAVE表示备用路由器
priority 90 -----优先级数值应小于主服务器
authentication {
auth_type PASS
auth_pass 123456 ----密码字符串与主服务器相同
}
virtual_ipaddress {
172.16.16.172 -----指定漂移IP地址
}
}
service keepalived start
ip addr show dev eth0
四、测试双机热备
Keepalived的日志消息保存在/var/log/messages中,可查看此日志文件观察热备状态的变化
1、连通性测试
步骤:在客户机上持续ping虚拟IP地址====>禁用主服务器的eth0网卡===>启用主服务器的eth0网卡,观察变化
ping -t 172.16.16.172
2、访问Web服务测试
步骤:在主服务器和备用服务器上分别安装httpd服务,并提供不同的web页面====>禁用主服务器的eth0网卡===>启用主服务器的eth0网卡,访问测试
http://172.16.16.172
3、查看日志文件
观察日志文件的变化
more /var/log/messages
实验二:构建LVS+Keepalived高可用性群集
本实验案例以DR模式的LVS群集为基础,通过LVS+Keepalived实现Web站点的负载均衡和高可用性,其中包括两台热备的负载调度器、两台Web节点服务器、一台NFS服务器、一台客户机
一、基本配置
配置各Linux主机名、关闭iptables等
二、配置主调度器
1、为eth0、eth1、eth0:0配置IP地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.16.253
NETMASK=255.255.255.0
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.7.253
NETMASK=255.255.255.0
vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=172.16.16.172
NETMASK=255.255.255.0
rm -f /etc/udev/rules.d/70-persistent-net.rules
reboot --------重新启动虚拟机
2、调整/proc内核参数,关闭重定向响应
由于负载调度器和各节点共用VIP地址,为避免ARP解析异常,故关闭内核的重定向响应
vi /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0
sysctl –p
3、加载模块、安装LVS群集管理工具
modprobe ip_vs
rpm -ivh /mnt/iso/Packages/ipvsadm-1.25-9.el6.i686.rpm
yum -y install vsftpd -----配置yum仓库,方便安装软件包
vi /etc/vsftpd/vsftpd.conf
anon_root=/mnt
service vsftpd start
chkconfig vsftpd on
4、编译安装Keepalived
yum -y install kernel-devel openssl-devel popt-devel
tar zxvf keepalived-1.2.2.tar.gz -C /usr/src
cd /usr/src/keepalived-1.2.2/
./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-131.0.15.el6.i686/
-----将keepalived安装到根目录,同时指定Linux内核位置
make & make install
chkconfig --add keepalived ----将keepalived添加为系统服务,方便管理
chkconfig keepalived on
5、修改主配置文件/etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
global_defs {
router_id master.benet.com -----指定本服务器的主机名
}
vrrp_instance VI_1 { -----定义VRRP实例
state MASTER ----- MASTER为主路由器,SLAVE为备用路由器
interface eth0 -----承载VIP地址的物理接口
virtual_router_id 51 -----热备组ID号,每个组应保持一致
priority 100 -----优先级,越大优先级越高
advert_int 1 -----心跳频率
authentication { -----认证信息
auth_type PASS -----认证类型为密码
auth_pass 123456 ----密码字符串
}
virtual_ipaddress { -----指定漂移IP地址
172.16.16.172
}
}
virtual_server 172.16.16.172 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 172.16.16.21 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.16.22 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
service keepalived start
三、配置从调度器
从调度器折配置与主调度器基本相同,不同之处主要在于router_id、state、priority参数
vi /etc/keepalived/keepalived.conf
global_defs {
router_id master.benet.com
}
vrrp_instance VI_1 {
state SLAVE
priority 90
}
service keepalived start
四、配置NFS服务器
1、为eth0配置IP地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.7.250
NETMASK=255.255.255.0
rm -f /etc/udev/rules.d/70-persistent-net.rules
reboot
2、安装ntf-utils、rpcbind软件包
yum -y install nfs-utils rpcbind
3、设置共享目录
mkdir -p /opt/wwwroot
vi /etc/exports
/opt/wwwroot 192.168.7.0/24(rw,sync,no_root_squash)
4、启动服务并查看发布的共享目录
service rpcbind start
service nfs start
chkconfig rpcbind on
chkconfig nfs on
netstat -anpt | grep rpcbind -----使用111端口
showmount -e 127.0.0.1
五、配置节点服务器
1、为eth0、eth1、lo:0配置IP地址,并添加路由记录
①配置IP地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.16.16.21
NETMASK=255.255.255.0
vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.7.21
NETMASK=255.255.255.0
vi /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=172.16.16.172 -----此地址仅用作响应数据包的源地址
NETMASK=255.255.255.255 -----子网掩码必须全为1
rm -f /etc/udev/rules.d/70-persistent-net.rules
reboot -------重新启动虚拟机,节点2的配置与之类似
②添加VIP本地访问路由
vi /etc/rc.local
/sbin/route add -host 172.16.16.172 dev lo:0
route add -host 172.16.16.172 dev lo:0
2、调整/proc内核参数,关闭重定向响应
vi /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
3、安装rpcbind软件包以实现访问NFS共享资源
yum -y install nfs-utils rpcbind
service rpcbind start
chkconfig rpcbind on
showmount -e 192.168.7.250
4、挂载NFS共享目录
mkdir -p /var/www/html
mount 192.168.7.250:/opt/wwwroot /var/www/html
vi /etc/fstab
192.168.7.250:/opt/wwwroot /var/www/html nfs defaults,_netdev 0 0
5、安装httpd软件包并创建测试页面
yum –y install httpd
echo welcome to web! > /var/www/html/index.html
service httpd start
chkconfig httpd on
六、测试LVS群集
在外网客户机中访问http://172.16.16.172可以看到Web页面内容
当主调度器失效时Web站点仍可以访问(可能需要刷新或重新打开浏览器),实现高可用性;只要有两台或以上Web节点服务器可用,则可实现负载均衡
只要保持至少一个Web节点服务器可用,则整个站点依然可用
more /var/log/messages ----查看日志,跟踪故障切换过程
ipvsadm -Ln -----查看节点状态
ipvsadm -Lnc -----查看负载连接情况
补充:启用邮件通知功能(主、从调度器)
当节点状态异常时发送通知
notification_email:设置收信人地址
notification_email_from:设置发信人地址
smtp_server:指定SMTP发信服务器
smtp_connect_timeout:SMTP连接超时
1、安装sendmail软件包
yum -y install sendmail
service sendmail start
chkconfig sendmail on
2、为Keepalived添加邮件通过设置
vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
}
notification_email_from ftp [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id master.benet.com
}
3、停止某个节点的Web服务,过几分钟再恢复,查看通知邮件内容