LVS健康检查及keepalived实现高可用集群

LVS健康检查

我们前面做的那些LVS的各种模式部署,都没有健康检查这一功能,就是说在我们搭建的负载均衡集群中,如果后端服务器RS全部宕掉了,客户端就无法访问到服务端的数据,这时我们应该给客户端一些提示,说明服务器暂时无法访问。

配置(搭建好LVS-DR模式负载均衡的前提下)

在调度机server1中
1:下载并安装监控软件(下载地址:http://rpm.pbone.net/index.php3/stat/4/idpl/23860919/dir/centos_6/com/ldirectord-3.9.5-3.1.x86_64.rpm.html)
ldirectord-3.9.5-3.1.x86_64.rpm
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
在这里插入图片描述
2:rpm -ql ldirectord #查找配置文件
在这里插入图片描述
我们需要把上图中红框中的文件复制到/etc/ha.d目录下
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d
cd /etc/ha.d
vim ldirectord.cf
在这里插入图片描述
3:编辑配置文件

virtual=172.25.66.100:80              #vip指定
        real=172.25.66.2:80 gate      #RS指定
        real=172.25.66.3:80 gate
        fallback=127.0.0.1:80 gate   #server2、3服务down后,访问本机80端口
        service=http
        scheduler=rr         #轮询
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80         #端口
        request="index.html"          #访问文件
        #receive="Test Page"
        #virtualhost=www.x.y.z

在这里插入图片描述
/etc/init.d/ldirectord start #开启服务
在这里插入图片描述
4:修改server1的apache默认发布文件内容
#注意:当安装 php 模块后,默认优先读取 index.php,应将index.php删除
在这里插入图片描述
5:不支持端口转发,修改httpd默认端口80.
因为之前做过varnish实验,varnish默认端口为80,所以我们可能修改过httpd的默认端口,现在我们将他改回80
在这里插入图片描述
/etc/init.d/httpd start
#若无法重启查看是否关闭了varnish(端口冲突,varnish之前端口为80)
/etc/init.d/varnish stop
6:在调度机server1进行测试。
curl localhost
在这里插入图片描述

测试

1:关闭所有后端服务器的httpd服务
[root@server2 ~]# /etc/init.d/httpd stop
[root@server3 ~]# /etc/init.d/httpd stop
2:在调度机server1中查看ipvs规则
在这里插入图片描述
3:用客户端访问VIP172.25.66.100
在这里插入图片描述

高可用集群的搭建

一台RS挂掉后,它不会将挂掉的那台机器踢除,而是继续向那台机器发送请求,而keepalived刚好能解决这个问题.keepalived同样可以对lvs后端主机实现健康检查,同样也可以实现调度器高可用,架设多个keepalived可以实现高可用。
应该注意的是ldirectord和keepalived只能开启一个,开启两个会冲突

keepalived原理

keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器 从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成

实验环境

1:同样在搭建好LVS-DR模式的前提下
2:新增一台虚拟机server4,作为调度机备机
机器及软件:
server1: 172.25.66.1 VS(虚拟主机) 主 ipvsadm keepalived
server4: 172.25.66.4 VS(虚拟主机) 备 ipvsadm keepalived
server2: 172.25.66.2 RS(真正主机) arptables
server3: 172.25.66.3 RS(真正主机) arptables
3:软件包
keepalived软件包下载:
1.2.24版本本次实验所用版本
其他版本下载地址

配置

一、在主调度机server1中
1:停用ldirectord
/etc/init.d/ldirectord stop
chkconfig ldirectord off
在这里插入图片描述
2:下载keepalived-1.2.24.tar.gz包
3:源码安装keepalived
解压安装包
tar zxf keepalived-1.2.24.tar.gz
cd keepalived-1.2.24
在这里插入图片描述
解决依赖性
yum install gcc openssl-devel -y
4:源码编译三部曲(依次执行)
制定安装位置
(1):./configure --prefix=/usr/local/keepalived
(2):make
(3):make install
在这里插入图片描述
5:编译结束后,对keepalived进行配置
cd /usr/local/keepalived/etc/rc.d/init.d/
chmod +x keepalived
生成软链接
ln -s /usr/local/keepalived/etc/keepalived/ /etc
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
在这里插入图片描述
6:修改keepalived配置文件
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   notification_email {
        root@localhost          ##接受警报的 email 地址,可以添加多个
   }
   notification_email_from keepalived@server1 ##设置邮箱的发送地址
   smtp_server 127.0.0.1    ##设置 smtp server 地址
   smtp_connect_timeout 30  ##设置连接smtp服务器超时时间
   router_id LVS_DEVEL      ##load balancer 的标识 ID,用于 email 警报
}

vrrp_instance VI_1 {
    state MASTER            ##备机改为 BACKUP,此状态是由 priority 的值来决定的,当前priority 的值小于备机的值,那么将会失去 MASTER 状态
    interface eth0          #HA 监测网络接口
    virtual_router_id 66   #主、备机的 virtual_router_id 必须相同,取值 0-255
    priority 100            ##主机的优先级,备份机改为 50,主机优先级一定要大于备机
    advert_int 1            #主备之间的通告间隔秒数
    authentication {        #主备切换时的验证
        auth_type PASS      #设置验证类型,主要有 PASS 和 AH 两种
        auth_pass 1111      #设置验证密码,在一个 vrrp_instance 下,MASTER 与 BACKUP 必须使用相同的密码才能正常通信
    }
    virtual_ipaddress {     #设置虚拟 IP 地址,可以设置多个虚拟 IP 地址,每行一个
        172.25.66.100/24
    }
}

virtual_server 172.25.66.100 80 {   #定义虚拟服务器
    delay_loop 3                    #每隔 3 秒查询 realserver 状态
    lb_algo rr                      #lvs 调度算法,这里使用轮叫
    lb_kind DR                      #LVS 是用 DR 模式
#    persistence_timeout 50
    protocol TCP                    #指定转发协议类型,有 tcp 和 udp 两种

    real_server 172.25.66.2 80 {    #配置服务节点
        weight 1                    #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值的大小可以为不同性能的服务器分配不同的负载,可以对性能高的服务器设置较高的权值,而对性能较低的服务器设置相对较低的权值,这样就合理的利用和分配了系统资源
        TCP_CHECK {                 #realserve 的状态检测设置部分,单位是秒
            connect_timeout 3       #3 秒无响应超时
            nb_get_retry 3          #重试次数
            delay_before_retry 3    #重试间隔
        }
    }
    real_server 172.25.66.3 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7:删除vip,开启服务
ip addr del 172.25.66.100/24 dev eth0
/etc/init.d/keepalived start #开气后会自动添加VIP到eth0
8:将主调度机server1的配置文件复制给备调度机server4
scp -r /usr/local/keepalived/ server4:/usr/local/
scp -r /etc/keepalived/keepalived.conf server4:/etc/keepalived/
二、在备调度机server4中
1:安装ipvsadm服务
将server1中的yum源文件复制给server4
yum install ipvsadm -y
2:配置keepalived服务。
同样先生成相同的软链接
ln -s /usr/local/keepalived/etc/keepalived/ /etc
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
3:修改keepalived配置文件
在这里插入图片描述

其他不变,修改此段:
vrrp_instance VI_1 {
    state BACKUP        ###状态为备用
    interface eth0
    virtual_router_id 66
    priority 50        ###修改优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.66.100
    }
}

在这里插入图片描述
4:开启服务
/etc/init.d/keepalived start
5:查看日志server1
cat /var/log/message
在这里插入图片描述
可以看到,开启服务后,server1成为master
在server4中查看日志
在这里插入图片描述
server4为backup备机

测试

高可用负载均衡测试

1:停止 master (server1)上的 keepalived 服务,看 backup 是否接管(客户端测试是否会出现轮询)
在server1中:
/etc/init.d/keepalived stop
在server4中查看日志,可以看到,server4已经切换到master状态,并且VIP会自动转移到server4
在这里插入图片描述
在这里插入图片描述
然后到客户端使用curl命令访问VIP172.25.66.100
在这里插入图片描述
当我们将server1上的keepalived服务重新打开后,server1可以直接切换为master,因为server1的优先级比server4的高
在这里插入图片描述

故障切换测试

任意关闭 RS 上的 httpd 服务,Keepalived 监控模块是否能及时发现,然后屏蔽故障节点,同时将服务转移到正常节点来执行。
关闭server2上的httpd服务
在客户端curl访问VIP
在这里插入图片描述
可以看到,keepalived已经自动将宕掉的RS踢除集群当中,当我们将server2的httpd服务打开后,server2会自动被加进集群中
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/gd0306/article/details/84108203