如何解决LVS群集的单点故障——LVS和keepalived实现高可用群集

一、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状态。
查看备用的日志记录:
在这里插入图片描述

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值