运维企业专题(8)LVS高可用与负载均衡后篇——LVS健康检查与高可用详解

实验准备

1.下面的实验使用的是rhel6系列(rhel6.5)的虚拟机,因此你需要有对应的镜像和yum源
2.准备三台虚拟机,为了区分主机名与IP分别为
server1 172.25.6.1
server2 172.25.6.2
server3 172.25.6.3
3.我们将server1(172.25.6.1)作为调度器,server2、server3作为后端服务器,物理机作为客户端

1.为什么要进行健康检查?

像前面配置好了,整个集群开始工作,但如果某些Real Server出现问题,不能正常访问,但依旧会执行调度。因此我们就要使Director的ipvs配置做出相应改变,删除出问题的Real Server;当Real Server又能正常访问时,也要把其添加回ipvs的调度列表,这就需要实时检查各Real Server的健康状态,以此来保证整个集群能够提供稳定可用的服务。

2.配置过程(在调度器server1上进行)

1)修改yum源(使其获得高可用源)

vim /etc/yum.repos.d/rhel-source.repo 
[LoadBalancer]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.8.250/rhel6.5/HighAvailability
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

2)获得ldirectord-3.9.5-3.1.x86_64.rpm软件包,并进行安装

yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm

在这里插入图片描述

3)将模板文件进行复制,进行编写

cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
vim /etc/ha.d/ldirectord.cf
 11 # Global Directives			#“ 全局 ” 设置
 12 checktimeout=3			#指定定real server出错的时间间隔
 13 checkinterval=1			#指定ldirectord在两次检查之间的时间间隔
 16 autoreload=yes			#自动重载配置文件,选yes时,当配置文件发生变化,自动载入配置信息
 22 quiescent=no			#当一个节点在 checktimeout 设置的时间周期内没有响应时它是 “ 静止的 ” (它的权重为0),当你设置了这个选项后,ldirectord 将 会从 IPVS 表中移除真实服务器而不是 “ 停止 ” 它,从 IPVS 表移除节点将中断现有的客户端连接,并使 LVS 丢掉所有的连接跟踪记录和持续连接模板,如果 你不将这个选项设置为 no,当某个节点崩溃时,对某些客户端计算机而言可能会显示为集群关闭了,因为在这个节点崩溃前这些客户端计算机被分配给它了,而连接跟踪记录和程序连接模板仍然保留在Director上。
logfile="/var/log/ldirectord.log"   #设定ldirectord日志输出文件路径
# Sample for an http virtual service
virtual=172.25.6.100:80              	#VIP 地址和端口号
        real=172.25.6.2:80 gate     	#指定RealServer地址和端口,同时设定LVS工作模式,gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。
        real=172.25.6.3:80 gate      	#当所有的real server节点不能工作时,web服务重定向的地址
        fallback=127.0.0.1:80 gate     	#当所有的real server节点不能工作时,web服务重定向的地址
        service=http            	#指定服务类型,对http服务做负载均衡
        scheduler=rr           		#指定调度算法,这里是rr(轮叫)算法
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp                    #指出该服务使用的协议:tcp、udp 或 fwm
        checktype=negotiate             #指定Ldirectord的检测类型,默认为negotiate
        checkport=80                    #健康检查使用的端口是 80
        request="index.html"
        #receive="Test Page"            #指定请求和应答字串
        #virtualhost=www.x.y.z          #虚拟服务器的名称

在这里插入图片描述

4)清除手动编写的规则,让文件的规则生效

ipvsadm -C
/etc/init.d/ldirectord start
ipvsadm -l

在这里插入图片描述

5)添加IP

ip addr add 172.25.6.100/24 dev eth0  ##server1上添加24位IP,server2,server3上应该添加32位IP,如下图

在这里插入图片描述

在这里插入图片描述

6)编写默认发布文件

cd /var/www/html
vim index.html

在这里插入图片描述
6.测试

1)客户端进行检查看是否采用轮循

在这里插入图片描述
在这里插入图片描述

2)将后端服务器server2的httpd服务关掉,测试调度器是否会调度挂掉的服务器
在这里插入图片描述
仅调度server3上的资源

在这里插入图片描述
在这里插入图片描述
3)当两台后端的服务器都宕机,会如何?
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述


3.LVS高可用(画重点)

具体概念在前篇已经都说过了,这里简单说一下

我们实现LVS高可用将使用到keepalived,它是集群管理中保证集群高可用的一个服务软件;它能够保证当个别节点宕机时,整个网络可以不间断地运行,所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能

目的:防止单点故障(ld)
vrrp:虚拟路由冗余协议
keepalived:基于vrrp的路由器的高可用(1个master 多个backup vip)

具体配置详情如下

1)新建虚拟机,主机名和IP分别为

主机名:server4
IP:172.25.6.4
qemu-img create -f qcow2 -b peng.qcow2 peng4			##利用之前的快照

2)将server1上的yum源文件发送给server4

scp /etc/yum.repos.d/rhel-source.repo [email protected]:/etc/yum.repos.d/

在这里插入图片描述
3)官网下载获得keepalived-2.0.6.tar.gz,解压并安装

tar zxf keepalived-2.0.6.tar.gz 		##对资源包进行解压
cd keepalived-2.0.6						##进入到解压好的目录下,安装服务需要的软件
yum install openssl-devel -y
yum install libnl libnl-devel -y

4)获得libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm资源包,进行安装

yum install libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm -y

5)进入解压好的keepalived-2.0.6目录下,进行源码编译

yum install gcc -y					##源码编译需要用到
cd keepalived-2.0.6
./configure --with-init=SYSV --prefix=/usr/local/keepalived
./configure --with-init=SYSV --prefix=/usr/local/keepalived

注意:因为源码是C,需要安装gcc;出现Use IPVS Framework : Yes成功,继续执行下一步

在这里插入图片描述

make && make install

6)查看编译完成后的目录

cd /usr/local/
ls
cd keepalived/
ls

在这里插入图片描述

7)将server4上编译好的keepalived发送给server1,检查是否一致

scp -r /usr/local/keepalived/ [email protected]:/usr/local/
du -sh keepalived/

在这里插入图片描述
在这里插入图片描述

7)在server1和server4上赋予执行权限,添加链接(操作命名完全相同)

chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived 
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

8)server4上安装调度器软件

yum install ipvsadm -y

9)编辑server1、server4上的keepalived配置文件——server1作为主机、server4作为备机

vim /etc/keepalived/keepalived.conf
  3 global_defs {		##全局定义块
  4    notification_email {	##邮件通知
  5      root@localhost
  6    }
  7    notification_email_from keepalived@localhost	#设置邮件的发送地址
  8    smtp_server 127.0.0.1				#设置 smtp server 地址
  9    smtp_connect_timeout 30				#设置连接 smtp 服务器超时时间
 10    router_id LVS_DEVEL				#load balancer 的标识 ID,用于 email 警报
 11    vrrp_skip_check_adv_addr
 12    #vrrp_strict
 13    vrrp_garp_interval 0
 14    vrrp_gna_interval 0
 15 }
 16 
 17 vrrp_instance VI_1 {
 18     state MASTER				#备机改BACKUP,此状态是由 priority 的值来决定的,当前
 19     interface eth0				#HA 监测网络接口
 20     virtual_router_id 59			#主、备机的 virtual_router_id 必须相同,取值 0-255
 21     priority 100				#主机的优先级,备份机改为 50,主机优先级一定要大于备机
 22     advert_int 1				#主备之间的通告间隔秒数
 23     authentication {
 24         auth_type PASS			#设置验证类型,主要有 PASS 和 AH 两种
 25         auth_pass 1111
 26     }
 27     virtual_ipaddress {			##指定漂移地址(VIP),即切换到MASTER时,这些IP会被添加,切换到BACKUP时,这些IP会被删除(传给ip addr命令),所以每台服务器可以不用绑定任何的虚拟地址。
 28         172.25.6.100
 29     }
 30 }
 31 ## 虚拟服务配置
 32 virtual_server 172.25.6.100 80 {		#定义虚拟服务器
 33     delay_loop 3		#定义虚拟服务器
 34     lb_algo rr		#lvs 调度算法,这里使用轮叫
 35     lb_kind DR		#LVS 是用 DR 模式
 36     #persistence_timeout 50	#注释掉(像lftp等连接性服务,会有连接时间,此处用httpd做实验)
 37     protocol TCP		#指定转发协议类型,有 tcp 和 udp 两种
 38 
 39     real_server 172.25.6.2 80 {	#配置服务节点
 40         TCP_CHECK {			##TCP方式的健康检查,realserve 的状态检测设置部分,单位是秒
 41             weight 1		##默认为1,0为失效
 42             connect_timeout 3 	#3 秒无响应超时
 43             retry 3			#重试次数
 44             delay_before_retry 3	#重试间隔
 45         }
 46     }
 47 
 48     real_server 172.25.6.3 80 {
 49         TCP_CHECK {
 50             weight 1
 51             connect_timeout 3
 52             retry 3
 53             delay_before_retry 3
 54         }
 55     }
 56 }

10)将上一个实验中的健康检查服务关掉,开机启动关闭;并将server1上的IP删除

/etc/init.d/ldirectord stop
chkconfig ldirectord off
ipvsadm -l
ipvsadm -C
ip addr del 172.25.6.100/24 dev eth0
ip addr show

在这里插入图片描述

11)调度器主备机上安装邮件服务

yum install mailx -y

12)server1和server4同时启动

/etc/init.d/keepalived start

可以使用日志方式查看

tail -f /var/log/messages

在这里插入图片描述

测试:

测试1:此时MASTER主机自动被分配172.25.6.100/32这个ip,并开启调度器;但是BACKUP是新的

在这里插入图片描述
在这里插入图片描述

测试2:将MASTER的keepalived下线,此时BACKUP工作

 /etc/init.d/httpd stop

在这里插入图片描述

客户端依然能正常访问
在这里插入图片描述

测试2:将后端apache关闭,模拟故障

在这里插入图片描述
调度器调度三次无响应后,直接将server2踢出工作集群

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/meltsnow/article/details/89389911