• LVS+Keepalived群集部署


    LVS+Keepalived群集部署

    Keepalived概述

    Keepalived是一款专为LVS和HA设计的一款健康检查工具:支持故障自动切换、支持节点健康状态检查

    Keepalived工作原理

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

    Keepalived体系主要模块及其作用

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

    1、core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析

    2、vrrp模块:是来实现VRRP协议的

    3、check模块:负责健康检查,常见的方式有端口检查及URL检查

    Keepalived服务重要功能

    1、管理LVS负载均衡软件

    2、支持故障自动切换(failover)

    3、实现LVS集群中节点的健康检查(Health Checking)

    4、实现LVS负载调度器、节点服务器的高可用性(HA)

    Keepalived高可用故障切换转移原理

    keepalived 高可用服务对集群之间的故障切换转移,是通过 VRRP(虚拟路由器冗余协议)来实现的。
      在 keepalived 服务正常工作时,主(Master)节点会不断地向备(Backup)节点发送(多播的方式)心跳消息,用以告诉备节点自己还活看,当主节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主节点的心跳了,于是调用自身的接管程序,接管主节点的 IP 资源及服务。而当主节点恢复时,备节点又会释放主节点故障时自身接管的 IP 资源及服务,恢复到原来的备用角色。

    部署LVS+Keepalived群集

    实验环境
    主DR 服务器:ens33(20.0.0.55) ipvsadm 、keepalived(热备) 虚拟IP:20.0.0.100  网卡 ens33:0
    备DR 服务器:ens33(20.0.0.59) ipvsadm 、keepalived
    虚拟IP:20.0.0.100  网卡 ens33:0
    Web 服务器1:ens33 20.0.0.56
    lo:0(VIP)20.0.0.100
    Web 服务器2:ens33 20.0.0.57
    lo:0(VIP)20.0.0.100
    vip:20.0.0.100         
    NFS服务器:20.0.0.58
    客户端:20.0.0.10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    配置主负载调度器(主:20.0.0.55)
    关闭防火墙
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    setenforce 0
    
    • 1
    • 2
    • 3
    安装ipvsadm和keepalived
    yum -y install ipvsadm keepalived
    
    • 1
    添加模块并查看
    modprobe ip_vs            #加载ip_vs模块
    cat /proc/net/ip_vs
    
    • 1
    • 2

    image-20220802164620558

    调整proc响应参数,关闭Linux内核的重定向参数响应
    #调整proce响应参数,关闭Linux内核的重定向参数响应
    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
    修改配置文件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 123456
        }
        virtual_ipaddress {				#指定群集vip地址
            20.0.0.100
        }
    }
     
    --36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
    virtual_server 20.0.0.100 80 {
        delay_loop 6					#健康检查的间隔时间(秒)
        lb_algo rr						#指定调度算法,轮询(rr)
    --39行--修改,指定群集工作模式,直接路由(DR)
        lb_kind DR
        persistence_timeout 0			#连接保持时间(秒)
        protocol TCP					#应用服务采用的是 TCP协议
    --43行--修改,指定第一个Web节点的地址、端口
        real_server 20.0.0.56 80 {
            weight 1					#节点的权重
    --45行--删除,添加以下健康检查方式		
            TCP_CHECK {
    			connect_port 80			#添加检查的目标端口
    			connect_timeout 3		#添加连接超时(秒)
    			nb_get_retry 3			#添加重试次数
    			delay_before_retry 3	#添加重试间隔
    		}
    	}
     
    	real_server 20.0.0.57 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
    • 68
    • 69

    image-20220802171638928

    image-20220802172626034

    image-20220802173441178

    配置VIP
    cd /etc/sysconfig/network-scripts
    cp ifcfg-ens33 ifcfg-ens33:0
    vim ifcfg-ens33:0
    NAME=ens33:0
    DEVICE=ens33:0
    ONBOOT=yes
    IPADDR=20.0.0.100
    NETMASK=255.255.255.255
    
    ifup ens33:0
    ifconfig ens33:0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    image-20220802173826177

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

    image-20220802174037509

    配置负载分配策略
    ipvsadm-save > /etc/sysconfig/ipvsadm
    systemctl start ipvsadm
    ipvsadm -C
    ipvsadm -A -t 20.0.0.100:80 -s rr
    ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.56:80 -g      #若隧道模式,-g替换为-i
    ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.57:80 -g
    ipvsadm
    ipvsadm -ln         #查看节点状态,Route代表 DR模式
    #如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived
    systemctl restart keepalived.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    配置负载调度器(备:20.0.0.59)
    关闭防火墙,安装ipvsadm和keepalived服务
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    setenforce 0
    yum install -y ipvsadm keepalived
    
    • 1
    • 2
    • 3
    • 4
    修改配置文件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_02
    --14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
    	#vrrp_strict
    }
     
    vrrp_instance VI_1 {				#定义VRRP热备实例参数
    --20行--修改,指定热备状态,主为MASTER,备为BACKUP
        state BACKUP
    --21行--修改,指定承载vip地址的物理接口
        interface ens33
    --22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
        virtual_router_id 10
    	#nopreempt		#如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
    --23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为90
        priority 90
        advert_int 1					#通告间隔秒数(心跳频率)
        authentication {				#定义认证信息,每个热备组保持一致
    		auth_type PASS				#认证类型
    --27行--修改,指定验证密码,主备服务器保持一致
            auth_pass 123456
        }
        virtual_ipaddress {				#指定群集vip地址
            20.0.0.100
        }
    }
     
    --36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
    virtual_server 20.0.0.100 80 {
        delay_loop 6					#健康检查的间隔时间(秒)
        lb_algo rr						#指定调度算法,轮询(rr)
    --39行--修改,指定群集工作模式,直接路由(DR)
        lb_kind DR
        persistence_timeout 0			#连接保持时间(秒)
        protocol TCP					#应用服务采用的是 TCP协议
    --43行--修改,指定第一个Web节点的地址、端口
        real_server 20.0.0.56 80 {
            weight 1					#节点的权重
    --45行--删除,添加以下健康检查方式		
            TCP_CHECK {
    			connect_port 80			#添加检查的目标端口
    			connect_timeout 3		#添加连接超时(秒)
    			nb_get_retry 3			#添加重试次数
    			delay_before_retry 3	#添加重试间隔
    		}
    	}
     
    	real_server 20.0.0.57 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
    • 68
    调整proc响应参数,关闭Linux内核的重定向参数响应
    vim /etc/sysctl.conf
    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

    image-20220802180541315

    添加模块并查看
    modprobe ip_vs             #加载IP_VS模块
    cat /proc/net/ip_vs        #查看IP_VS版本信息
    
    • 1
    • 2

    image-20220802180716239

    配置负载分配策略
    ipvsadm-save > /etc/sysconfig/ipvsadm
    systemctl start ipvsadm
    ipvsadm -C
    ipvsadm -A -t 20.0.0.100:80 -s rr
    ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.56:80 -g      #若隧道模式,-g替换为-i
    ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.57:80 -g
    ipvsadm
    ipvsadm -ln         #查看节点状态,Route代表 DR模式
    #如没有VIP 的分发策略,则重启 keepalived 服务,systemctl restart keepalived
    systemctl restart keepalived.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    开启keepalived服务,查看虚拟IP
    systemctl start keepalived
    ip addr
    
    • 1
    • 2
    NFS服务器
    关闭防火墙
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    setenforce 0
    
    • 1
    • 2
    • 3
    安装nfs和rpcbind
    yum install nfs-utils rpcbind -y     #安装nfs和rpcbind
    systemctl start nfs.service
    systemctl start rpcbind.service
    systemctl enable nfs.service
    systemctl enable rpcbind.service
    
    • 1
    • 2
    • 3
    • 4
    • 5
    创建共享目录,并设置权限
    mkdir /opt/abc /opt/123             #创建共享目录
    chmod 777 /opt/abc /opt/123         #设置权限
    
    • 1
    • 2
    输入网页内容
    echo "this is abc" > /opt/abc/index.html       #写入网页内容
    echo "this is 123" > /opt/123/index.html
    
    • 1
    • 2
    设置共享目录
    vim /etc/exports     #把/opt/abc和/opt/123共享给20.0.0.0/24网段使用,允许读写
    /opt/abc 20.0.0.0/24(rw,sync)
    /opt/123 20.0.0.0/24(rw,sync)
    ----》 :wq
    
    • 1
    • 2
    • 3
    • 4
    发布共享
    exportfs -rv            #发布共享
    
    • 1
    配置节点服务器Web server1 (20.0.0.56)
    关闭防护墙
    systemctl stop firewalld.service
    systemctl disable firewalld.service
    setenforce 0
    
    • 1
    • 2
    • 3
    安装nfs、rpcbind和httpd服务
    yum install -y nfs-utils rpcbind 
    systemctl start nfs.service
    systemctl start rpcbind.service
    systemctl enable nfs.service
    systemctl enable rpcbind.service
    
    yum install -y httpd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    查看共享目录
    [root@localhost var]# showmount -e 20.0.0.58
    
    • 1
    挂载分享端内容
    mount.nfs 20.0.0.58:/opt/123 /usr/local/nginx/html  
    #将NFS的/opt/123文件挂载到本机的/usr/local/nginx/html
    df -hT
    
    或永久挂载:
    vim /etc/fstab
    20.0.0.58:/opt/123    /usr/local/nginx/html nfs defaults,_netdev 0 0
    mount -a
    
    systemctl restart nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    配置虚拟IP地址(VIP:20.0.0.100)
    cd /etc/sysconfig/network-scripts/
    cp ifcfg-lo ifcfg-lo:0   #添加回环网卡
    vim ifcfg-lo:0
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=20.0.0.100
    NETMASK=255.255.255.255           #注意:子网掩码必须全为 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    重启并查看,添加VIP本地访问路由
    ifup lo:0
    ifconfig lo:0
    route add -host 20.0.0.100 dev lo:0
    
    • 1
    • 2
    • 3
    调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突
    vim /etc/sysctl.conf
    net.ipv4.conf.all.arp_ignore = 1    
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.lo.arp_ignore = 1     #系统只响应目的IP为本地的APP请求
    net.ipv4.conf.lo.arp_announce = 2   #系统不适用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
    sysctl -p
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    配置节点服务器Web server2 (20.0.0.57)
    systemctl stop firewalld
    systemctl disable firewalld.service
    setenforce 0
    
    yum install nfs-utils rpcbind –y
    systemctl start nfs.service
    systemctl start rpcbind.service
    systemctl enable nfs.service
    systemctl enable rpcbind.service
    
    yum -y install httpd
    
    showmount -e 20.0.0.58
    mount.nfs 20.0.0.58:/opt/abc /var/www/html   
    df -hT
    systemctl start httpd
    
    vim /etc/sysconfig/network-scripts/ifcfg-lo:0
    DEVICE=lo:0
    ONBOOT=yes
    IPADDR=20.0.0.100
    NETMASK=255.255.255.255
    
    service network restart 或 systemctl restart network
    ifup lo:0
    ifconfig lo:0
    route add -host 20.0.0.100 dev lo:0
    route
    
    vim /etc/sysctl.conf
    
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    
    sysctl -p
    
    
    • 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
    客户端访问验证结果

    image-20220802182208955

    image-20220802182226580

    断开主DR服务器的keepalived测试
    20.0.0.55:
    systemctl stop keepalived 
    ip addr show dev ens33
    
    • 1
    • 2
    • 3

    image-20220802182443703

    20.0.0.59:
    ip addr show dev ens33
    
    • 1
    • 2

    image-20220802183907658

    image-20220802184018673

    image-20220802184034346

    重启主DR服务器的keepalived测试
    20.0.0.55:
    systemctl start keepalived 
    ip addr show dev ens33
    
    • 1
    • 2
    • 3

    image-20220802184315887

    20.0.0.59:
    ip addr show dev ens33
    虚拟IP消失,备继续担任BACKUP
    
    • 1
    • 2
    • 3

    image-20220802190007547

    =keepalived 配置 日志======
    keepalived默认会把日志打在/var/log/messages。如果不进行配置的话,日志混在一起很难进行调试问题
    vim /etc/sysconfig/keepalived
    
    把KEEPALIVED_OPTIONS="-D" 修改为KEEPALIVED_OPTIONS="-D -d -S 0"
    在/etc/rsyslog.conf 末尾添加
    vim /etc/rsyslog.conf 
    
    local0.*  /var/log/keepalived.log
    
    #重启日志记录服务
    systemctl restart rsyslog 
    systemctl status rsyslog 
    #重启keepalived服务
    systemctl restart keepalived
     /var/log/keepalived.log 日志文件已经有最新的日志记录进来了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    33
    虚拟IP消失,备继续担任BACKUP

    
    [外链图片转存中...(img-12HS0K5Z-1659576413282)]
    
    ##### ===========================keepalived 配置 日志================================
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    keepalived默认会把日志打在/var/log/messages。如果不进行配置的话,日志混在一起很难进行调试问题
    vim /etc/sysconfig/keepalived

    把KEEPALIVED_OPTIONS=“-D” 修改为KEEPALIVED_OPTIONS=“-D -d -S 0”
    在/etc/rsyslog.conf 末尾添加
    vim /etc/rsyslog.conf

    local0.* /var/log/keepalived.log

    #重启日志记录服务
    systemctl restart rsyslog
    systemctl status rsyslog
    #重启keepalived服务
    systemctl restart keepalived
    /var/log/keepalived.log 日志文件已经有最新的日志记录进来了

    
    
    • 1
  • 相关阅读:
    教程五 在Go中使用Energy创建跨平台GUI - 执行开发者工具方法
    FileRun多功能网盘的搭建
    (南京观海微电子)——屏幕材质及优缺点对比
    【leetcode】【剑指offer Ⅱ】065. 最短的单词编码
    drools规则引擎并发结果不准确问题记录
    Win10笔记本开热点后电脑断网的解决方法
    Linux命令(96)之seq
    递归 函数
    mysql锁(全局锁、表锁、行锁、页锁、排他锁、共享锁)
    MySQL语法
  • 原文地址:https://blog.csdn.net/m0_68295979/article/details/126153175