• LVS+Keepalived高可用群集部署


    LVS+Keepalived高可用群集部署

    一、keepalived概述

    1.1、什么是keepalived?

    Keepalived 是一个用 C 语言编写的路由软件。主要目标是为 Linux 系统和基于 Linux 的基础设施提供简单而强大的负载平衡和高可用性方案。

    基本功能:心跳检测、资源接管、检测集群中的服务、在集群节点转移共享IP地址的所有者。

    Keepalive起初是为LVS(Linux Virtual Server虚拟的服务器集群负载均衡系统)设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,需要人工完成的只是修复出现故障的服务节点。后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决网关设备出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有高可用集群的功能。

    1.2、keepalived工作原理

    在一个LVS服务集群中通常有主服务器(MASTER)和备份服务器(BACKUP)两种角色的服务器,但是对外表现为一个虚拟IP,主服务器会发送VRRP通告信息给备份服务器,当备份服务器收不到VRRP消息的时候,即主服务器异常或网络中断的时候,备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。

    在Keepalived服务之间,只有作为主的服务器会一直发送VRRP Advertisement报文,VRRP Advertisement报文中包含主服务器的一些基本信息,从设备会监听主设备发出的报文,以此来判断主设备是否存活。当主不可用时,即备监听不到主发送的Advertisement报文时,就会启动相关服务接管资源,保证业务的连续性。接管速度最快可以小于1秒。

    1.3、keepalived体系主要模块及其作用

    keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

    • core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。
    • vrrp模块:是来实现VRRP协议的。
    • check模块:负责健康检查,常见的方式有端口检查及URL检查

    1.4、keepalived三个主要功能

    • 管理LVS
    • 对LVS集群节点检查(check)
    • 作为其他网络服务的高可用功能

    二、部署LVS+Keepalived集群

    2.1、部署规划

    服务规划表:

    服务名MasterBackupserver1server2server3
    Keepalived
    LVS
    NFS
    HTTPD

    IP划分表:

    设备名IP地址
    Master(主LVS调度器)192.168.10.10/24
    Backup(备LVS调度器)192.168.10.14/24
    server2(节点服务器1)192.168.10.12/24
    server3(节点服务器2)192.168.10.13/24
    server1(NFS服务器)192.168.10.11/24
    客户端PC192.168.10.111/24
    vip地址192.168.10.110/32

    2.2、配置Master服务器

    1、关闭防火墙
    systemctl stop firewalld.service
    setenforce 0
    
    • 1
    • 2

    image-20220801191141154

    2、安装ipvsadm喝keepalived
    yum -y install ipvsadm keepalived
    
    • 1

    image-20220802162155113

    3、添加模块并查看
    modprobe ip_vs            #加载ip_vs模块
    cat /proc/net/ip_vs
    
    • 1
    • 2

    image-20220802162442564

    补modprobe命令:

    modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

    语法
        modprobe 选项 参数
    
    • 1
    • 2
    4、调整内核空间的arp响应参数
    vim /etc/sysctl.conf
    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.ens33.send_redirects = 0
    
    sysctl -p 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20220801193442802

    image-20220802163833088

    5、配置keepalived.conf文件
    #修改配置文件keeplived.conf
    cd /etc/keepalived/
    cp keepalived.conf keepalived.conf.bak
     
    vim keepalived.conf
    ......
    global_defs {						#定义全局参数
    --10--修改,邮件服务指向本地
    	smtp_server 127.0.0.1
    --12--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
    	router_id LVS_01
    --14--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
    	#vrrp_strict
    }
     
    vrrp_instance VI_1 {				#定义VRRP热备实例参数
    --20--修改,指定热备状态,主为MASTER,备为BACKUP
        state MASTER
    --21--修改,指定承载vip地址的物理接口
        interface ens33
    --22--修改,指定虚拟路由器的ID号,每个热备组保持一致	
        virtual_router_id 10
    	#nopreempt		#如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
    --23--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
        priority 100
        advert_int 1					#通告间隔秒数(心跳频率)
        authentication {				#定义认证信息,每个热备组保持一致
    		auth_type PASS				#认证类型
    --27--修改,指定验证密码,主备服务器保持一致
            auth_pass admin123
        }
        virtual_ipaddress {				#指定群集vip地址
            192.168.10.110
        }
    }
     
    --36--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
    virtual_server 192.168.10.110 80 {
        delay_loop 6					#健康检查的间隔时间()
        lb_algo rr						#指定调度算法,轮询(rr)
    --39--修改,指定群集工作模式,直接路由(DR)
        lb_kind DR
        persistence_timeout 0			#连接保持时间()
        protocol TCP					#应用服务采用的是 TCP协议
    --43--修改,指定第一个Web节点的地址、端口
        real_server 192.168.10.12 80 {
            weight 1					#节点的权重
    --45--删除,添加以下健康检查方式		
            TCP_CHECK {
    			connect_port 80			#添加检查的目标端口
    			connect_timeout 3		#添加连接超时()
    			nb_get_retry 3			#添加重试次数
    			delay_before_retry 3	#添加重试间隔
    		}
    	}
     
    	real_server 192.168.10.13 80 {		#添加第二个 Web节点的地址、端口
            weight 1
            TCP_CHECK {
    			connect_port 80
    			connect_timeout 3
    			nb_get_retry 3
    			delay_before_retry 3
    		}
    	}
    ##删除后面多余的配置##
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67

    image-20220802172550654

    image-20220802173020542

    6、开启keepalived服务,查看虚拟IP
    systemctl start keepalived
    ip addr
    
    • 1
    • 2

    image-20220802174248109

    7、配置LVS负载策略
    ipvsadm-save > /etc/sysconfig/ipvsadm
    
    ipvsadm -C
    ipvsadm -A -t 192.168.10.110 -s rr
    ipvsadm -a -t 192.168.10.110:80 -r 192.168.10.12:80 -g      #若隧道模式,-g替换为-i
    ipvsadm -a -t 192.168.10.1100:80 -r 192.168.10.13:80 -g
    ipvsadm
    ipvsadm -ln         #查看节点状态,Route代表 DR模式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20220801195650820

    image-20220802175154744

    2.3、配置Backup服务器

    1、关闭防火墙
    systemctl stop firewalld.service
    setenforce 0
    
    • 1
    • 2

    image-20220802175403145

    2、安装keepalived和ipvsadm服务
    yum -y install ipvsadm keepalived
    
    • 1

    image-20220802175517609

    3、调整内核空间的arp响应参数
    vim /etc/sysctl.conf
    net.ipv4.ip_forward = 0
    net.ipv4.conf.all.send_redirects = 0
    net.ipv4.conf.default.send_redirects = 0
    net.ipv4.conf.ens33.send_redirects = 0
    
    sysctl -p 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    image-20220802175712633

    image-20220802175726736

    4、添加模块
    modprobe ip_vs
    cat /proc/net/ip_vs
    
    • 1
    • 2

    image-20220802175808712

    5、配置keepalived.conf文件

    注:可以重新配置,也可以通过复制Master的配置文件进行部分修改。

    image-20220802181011083

    image-20220802181217690

    6、开启keepalive查看vip
    systemctl start keepalived
    ip addr
    
    • 1
    • 2

    image-20220802181956475

    7、配置LVS负载策略
    ipvsadm-save > /etc/sysconfig/ipvsadm
    
    ipvsadm -C
    ipvsadm -A -t 192.168.10.110 -s rr
    ipvsadm -a -t 192.168.10.110:80 -r 192.168.10.12:80 -g      #若隧道模式,-g替换为-i
    ipvsadm -a -t 192.168.10.110:80 -r 192.168.10.13:80 -g
    ipvsadm
    ipvsadm -ln         #查看节点状态,Route代表 DR模式
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    image-20220802182228440

    2.4、配置server1服务器

    1、安装服务应用
    yum install nfs-utils rpcbind -y
    systemctl start nfs.service
    systemctl start rpcbind.service
    systemctl enable nfs.service
    systemctl enable rpcbind.service
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20220801201203629

    2、创建共享目录和设置权限
    mkdir /opt/setting /opt/test
    chmod 777 /opt/setting /opt/test
    
    • 1
    • 2

    image-20220801201435536

    image-20220801201442416

    3、配置NFS共享
    /opt/setting 192.168.10.0/24(rw,sync)
    /opt/test 192.168.10.0/24(rw,sync)
        
        exportfs -rv //发布共享
        showmount -e //查看共享目录
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20220801201517858

    image-20220801201523792

    2.5、配置server2、server3服务器

    1、关闭防火墙
    systemctl stop firewalld
    setenforce 0
    
    • 1
    • 2
    2、配置VIP(192.168.10.110)

    此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。

    cd /etc/sysconfig/network-scripts/
    cp ifcfg-lo ifcfg-lo:0   #添加虚拟的换回网卡
    vim ifcfg-lo:0
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=192.168.10.110
    NETMASK=255.255.255.255           
        
        ifup ifcfg-lo:0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20220801202241976

    image-20220801202304683

    3、添加vip访问ens33的静态路由
    ifup lo:0
    ifconfig lo:0
    route add -host 192.168.10.110 dev lo:0
    
    • 1
    • 2
    • 3

    image-20220801204503893

    4、调整内核空间的arp响应参数
    vim /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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20220801204839850

    image-20220801204859216

    5、挂载NFS共享目录
    systemctl star rpcbind
    systemctl enable rpcbind
        showmount -e 192.168.10.11
    mount.nfs 192.168.10.11/opt/setting /var/www/html
        echo 'this is setting !' > /var/www/html/index.html
    
    • 1
    • 2
    • 3
    • 4
    • 5

    image-20220801204957647

    image-20220801205004104

    image-20220801205149591

    注:所有real server配置一致。只有挂载的内容不同。

    real server2配置如下:

    image-20220801205353364

    三、验证

    1、Mater为主,测试

    image-20220802190136105

    image-20220802190110240

    2、关闭Master的keepalived服务,查看Backup的vip是否启动

    Master:
    systemctl stop keepalived
    
    • 1
    • 2

    image-20220802190412007
    image-20220802190323085
    image-20220802190625902
    image-20220802190641419

    四、总结

    keepalived一开始就是为了LVS设计的,在配置LVS-DR模式的情况下,需要注意的是,调度器的VIP地址交由keepalived的vrrp模块来启动,所以不在需要在出口网卡上配置虚拟子接口来配置VIP,如果配置了将会出现一个问题就是VIP服务器迁移。主要原因就是VRRP的优先级机制,默认优先级为100,但当VIP与本地ip地址相同那么这个设备的优先级将默认为255,且无法被修改。

    keepalived给LVS提供了主备的功能,为了浪费资源,其实还有双活双主模式,让两台lvs当前都进行工作,采用dns轮询方式,当用户访问域名通过dns轮询每台lvs,双主结构需要两个vip,这两个vip要绑定域名。

  • 相关阅读:
    python解析mdf或mf4文件利器---asammdf
    超越GPT-3,DeepMind推出新宠Gato,却被质疑“换汤不换药”?
    nodejs+vue+python+PHP+微信小程序南七街道志愿者服务平台的设计与实现-计算机毕业设计推荐
    山东大学单片机原理与应用实验 4.7 7279键盘扫描及动态LED显示实验
    利用Qt实现可视化科学计算器
    php 实现websocket服务
    K8S安装过程七:Kubernetes 节点配置调整
    【LeetCode热题100】【多维动态规划】编辑距离
    低功耗引擎Cliptrix为什么可以成为IOT的高效能工具
    【C】青蛙跳台阶和汉诺塔问题(递归)
  • 原文地址:https://blog.csdn.net/weixin_46514551/article/details/126201732