LVS+Keepalived

Keepalived

Keepalived概述

  • 调度器出现单点故障,如何解决
  • Keeoalived实现了高可用集群
  • Keepalived最初是为LVS设计的,专门监控哥服务器节点的状态
  • Keepalived后来加入了VRRP功能,防止单点故障

Keepalived运行原理

  • Keepalived检测每个服务器节点状态
  • 服务器节点异常或工作出现故障,Keepalived将故障节点从集群系统中剔除
  • 故障节点恢复后,Keepalived在将其加入到集群系统中
  • 所有工作自动完成,无需人工干预

Keepalived高可用服务器群

问题:

准备三台Linux服务器,其中两台web服务器,并部署Keepalived高可用软件,一台作为客户端主机,实现以下功能

方案:

使用3台虚拟机,2台作为web服务器,不部署Keepalived,1台作为客户端,拓扑如下所示,配置表如下
在这里插入图片描述

主机名网络配置
proxy192.168.4.5
web1192.168.4.100
VIP:192.168.4.80(keepalived会自动配置)
web2192.168.4.200
VIP:192.168.4.80(keepalived会自动配置)

步骤

步骤一:配置网络环境

1)设置web1服务器网络参数,配置web服务

nmcli connection add type ethernet con-name ens192 ifname ens192
nmcli connection modify ens192 ipv4.add 192.168.4.100/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192
yum -y install httpd
echo "web1 我是192.168.4.100" > /var/www/html/index.html
systemctl restart httpd

2)设置web2服务器网络参数,配置web服务

nmcli connection add type ethernet con-name ens192 ifname ens192
nmcli connection modify ens192 ipv4.add 192.168.4.200/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192
yum -y install httpd
echo "web2 我是192.168.4.200" > /var/www/html/index.html
systemctl restart httpd

3)设置proxy主机的网络参数(如果已经设置请忽略)

nmcli connection add type ethernet con-name ens192 ifname ens192
nmcli connection modify ens192 ipv4.add 192.168.4.5/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192
步骤二:安装Keepalived软件

注意:两台web服务器做相同的操作

web1
yum -y install keepalived
web2
yum -y install keepalived
步骤三:部署Keepalived服务

1)修改web1服务器Keepalived配置文件

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
  
global_defs {
   notification_email {
     admin@ceshi.com.cn    #设置报警收件人邮箱,可以不做修改
   }
   notification_email_from ka@localhost     #设置发件人,在实验环境可以不做修改
   smtp_server 127.0.0.1         #定义邮件服务器
   smtp_connect_timeout 30
   router_id web1            #设置路由ID号,修改id以作标识
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state MASTER         #主服务器为master(备服务器需要修改为backup)
    interface ens192     #定义网络接口
    virtual_router_id 51  #主备服务器VRID号必须一致
    priority 100             #服务器优先级,优先级高优先获取VIP
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111   #主备服务器密码必须一致,用密码来区分是否为同一个集群
    }
    virtual_ipaddress {   #谁是主服务器谁获得该VIP(修改为我们需要的IP)
        192.168.4.80
    }
}
目前我们先测试keepalived的vrrp功能,所以下面的配置文件我们可以删除

2)修改web2服务器Keepalived配置文件

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
  
global_defs {
   notification_email {
     admin@ceshi.com.cn    #设置报警收件人邮箱,可以不做修改
   }
   notification_email_from ka@localhost     #设置发件人,在实验环境可以不做修改
   smtp_server 127.0.0.1         #定义邮件服务器
   smtp_connect_timeout 30
   router_id web2            #设置路由ID号,修改id以作标识
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state BACKUP         #主服务器为master(备服务器需要修改为backup)
    interface ens192     #定义网络接口
    virtual_router_id 51  #主备服务器VRID号必须一致
    priority 90            #服务器优先级,优先级高优先获取VIP
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111   #主备服务器密码必须一致,用密码来区分是否为同一个集群
    }
    virtual_ipaddress {   #谁是主服务器谁获得该VIP(修改为我们需要的IP)
        192.168.4.80
    }
}

3)启动服务

web1
systemctl start keepalived
web2
systemctl start keepalived

4)配置防火墙和SELinux

启动keepalived会自动添加一个drop多的防火墙规则,需要清空

web1
iptables -F
setenforce 0
systemctl stop firewalld
web2
iptables -F
setenforce 0
systemctl stop firewalld

步骤四:测试

1)登录两台web服务器查看VIP信息

web1
ip a s
web2
ip a s  #因为是备,所以VIP在正常情况下在web1,当web1出现故障,web2自动获得VIP

2)客户端访问

客户端使用curl命令连接http://192.168.4.80,查看web页面。关闭web1服务器的网卡,客户端再次访问http://192.168.4.80 ,验证是否可以正常访问
在这里插入图片描述

关闭web1的网卡,再次进行测试

这时候可以在web2上看到VIP已经成功转移
在这里插入图片描述

再次测试
在这里插入图片描述

重新激活web1的网卡,web1的优先级比web2高,所以再次访问页面页面应该成为web1的页面
在这里插入图片描述

Keepalived+LVS服务器

问题

使用Keepalived为LVS调度器提供高可用功能,放hi调度器单点故障,为用户提供web服务

  • LVS1调度器真实IP地址为192.168.4.5
  • LVS2调度器真实IP地址为192.168.4.6
  • 服务器VIP地址设置为192.168.4.15
  • 真实web服务器地址分别为192.168.4.100、192.168.4.200
  • 使用加权轮询算法,真实web服务器权重不同

方案:

使用5台web虚拟机,1台作为客户端主机,2台作为LVS调度器,2台作为Real server,实验拓扑如下所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZHvZgt1f-1641196085976)(E:/Typort/image-20211018173032268.png)]

主机名网络配置
client192.168.4.10/24
proxy1192.168.4.5/24
proxy2192.168.4.6/24
web1192.168.4.100/24
web2192.168.4.200/24

注意,所有主机都需要配置IP地址与有效的yum源

步骤:

步骤一:配置网络环境

如果你还是使用上面的web服务器,请关闭刚刚web服务器的keepalived

1)设置web1服务器的网络参数

nmcli connection modify ens192 ipv4.add 192.168.4.100/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192

接下来给web1配置VIP 地址

注意,这里的子网掩码必须为32,网络地址与IP一样,广播地址与IP地址一样

ifconfig lo:10 192.168.4.15 netmask 255.255.255.255 broadcast 192.168.4.15 up

这里因为web1也配置与代理一样的VIP地址,默认肯定会出现地址冲突;sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样也防止地址冲突的问题

web1
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1  #所有网卡
net.ipv4.conf.lo.arp_ignore=1     #lo回环 忽略arp请求包
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
#arp_ignore 忽略掉arp请求包
#arp_announce  声明宣告
#修改内核参数,关闭arp响应
#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播
#本机不要向外宣告自己的lo回环地址是192.168.4.15
sysctl -p   #刷新参数

重启网络服务,设置防火墙与SELinux

systemctl restart NetworkManager
ifconfig
systemctl stop firewalld
setenforce 0

2)设置web2服务器的网络参数

nmcli connection modify ens192 ipv4.add 192.168.4.200/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192

接下来给web2配置VIP 地址

注意,这里的子网掩码必须为32,网络地址与IP一样,广播地址与IP地址一样

ifconfig lo:10 192.168.4.15 netmask 255.255.255.255 broadcast 192.168.4.15 up

这里因为web2也配置与代理一样的VIP地址,默认肯定会出现地址冲突;sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样也防止地址冲突的问题

web2
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1  #所有网卡
net.ipv4.conf.lo.arp_ignore=1     #lo回环 忽略arp请求包
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
#arp_ignore 忽略掉arp请求包
#arp_announce  声明宣告
#修改内核参数,关闭arp响应
#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播
#本机不要向外宣告自己的lo回环地址是192.168.4.15
sysctl -p   #刷新参数

重启网络服务,设置防火墙与SELinux

systemctl restart NetworkManager
ifconfig
systemctl stop firewalld
setenforce 0

3)配置proxy1主机的网络参数(不配置VIP,由keepalived自动配置)

nmcli connection modify ens192 ipv4.add 192.168.4.5/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192

3)配置proxy2主机的网络参数(不配置VIP,由keepalived自动配置)

nmcli connection modify ens192 ipv4.add 192.168.4.6/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual

步骤二:配置后台web服务

1)安装软件,自动逸web页面

web1
yum -y install httpd
echo "web1 我是192.168.4.100" > /var/www/html/index.html
web2
yum -y install httpd
echo "web2 我是192.168.4.200" > /var/www/html/index.html

2)启动web服务器软件

web1
systemctl restart httpd
web2
systemctl restart httpd
步骤三:调度器安装Keepalived与ipvsadm软件
proxy1
yum -y install keepalived
yum -y install ipvsadm
systemctl enable keepalived
ipvsadm -C
proxy2
yum -y install keepalived
yum -y install ipvsadm
systemctl enable keepalived
ipvsadm -C

步骤四:部署keepalived实现LVS-DR模式调度器的高可用

1)LVS1调度器设置keepalived,并启动服务

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
  
global_defs {
   notification_email {
     admin@ceshi.com.cn    #设置报警收件人邮箱,可以不做修改
   }
   notification_email_from ka@localhost     #设置发件人,在实验环境可以不做修改
   smtp_server 127.0.0.1         #定义邮件服务器
   smtp_connect_timeout 30
   router_id lvs1            #设置路由ID号,修改id以作标识
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state MASTER         #主服务器为master(备服务器需要修改为backup)
    interface ens192     #定义网络接口
    virtual_router_id 51  #主备服务器VRID号必须一致
    priority 100             #服务器优先级,优先级高优先获取VIP
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111   #主备服务器密码必须一致,用密码来区分是否为同一个集群
    }
    virtual_ipaddress {   #谁是主服务器谁获得该VIP(修改为我们需要的IP)
        192.168.4.15
    }
}
virtual_server 192.168.4.15 80 {     #设置ipvsadm的VIP规则,这里修改为我们的IP与端口哦
    delay_loop 6
    lb_algo wrr              #设置LVS调度算法为wrr
    lb_kind DR 				#设置LVS的模式为DR
  #  persistence_timeout 50
  #注意这样的作用是保持连接,开启后,客户端在一定时间内始终访问相同的服务器,为了更好的看到实验结果,所以注释掉
    protocol TCP
    real_server 192.168.4.100 80 {   #设置后端web服务器的真实地址
        weight 1      #设置权重
  #健康检查,因为网页十分简单,所以我们这里使用最简单的检查方式TCP_CHECK
        TCP_CHECK {
            connect_timeout 3   #超时时间 
            retry 3  #每隔三秒做一个健康检查
            delay_before_retry 3      #尝试三次     
        }
    }
     real_server 192.168.4.200 80 {   #设置后端web服务器的真实地址
        weight 1      #设置权重
  #健康检查,因为网页十分简单,所以我们这里使用最简单的检查方式TCP_CHECK
        TCP_CHECK {
            connect_timeout 3   #超时时间 
            retry 3  #每隔三秒做一个健康检查
            delay_before_retry 3      #尝试三次     
        }
    }
}

systemctl start keepalived
iptables -F 
ipvsadm -Ln   #查看LVS规则
ip a s

健康检查有三种 TCP_CHECK、HTTP_GET、SSL_GET

TCP_CHECK:只检查端口,不检查网页

HTTP_GET:检查网页与预留md5做哈希校验

SSL_GET:检查网页与预留md5做哈希校验

2)LVS2调度器设置keepalived,并启动服务

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
  
global_defs {
   notification_email {
     admin@ceshi.com.cn    #设置报警收件人邮箱,可以不做修改
   }
   notification_email_from ka@localhost     #设置发件人,在实验环境可以不做修改
   smtp_server 127.0.0.1         #定义邮件服务器
   smtp_connect_timeout 30
   router_id lvs2            #设置路由ID号,修改id以作标识
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {
    state BACKUP         #主服务器为master(备服务器需要修改为backup)
    interface ens192     #定义网络接口
    virtual_router_id 51  #主备服务器VRID号必须一致
    priority 90             #服务器优先级,优先级高优先获取VIP
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111   #主备服务器密码必须一致,用密码来区分是否为同一个集群
    }
    virtual_ipaddress {   #谁是主服务器谁获得该VIP(修改为我们需要的IP)
        192.168.4.15
    }
}
virtual_server 192.168.4.15 80 {     #设置ipvsadm的VIP规则,这里修改为我们的IP与端口哦
    delay_loop 6
    lb_algo wrr              #设置LVS调度算法为wrr
    lb_kind DR 				#设置LVS的模式为DR
  #  persistence_timeout 50
  #注意这样的作用是保持连接,开启后,客户端在一定时间内始终访问相同的服务器,为了更好的看到实验结果,所以注释掉
    protocol TCP
    real_server 192.168.4.100 80 {   #设置后端web服务器的真实地址
        weight 1      #设置权重
  #健康检查,因为网页十分简单,所以我们这里使用最简单的检查方式TCP_CHECK
        TCP_CHECK {
            connect_timeout 3   #超时时间 
            retry 3  #每隔三秒做一个健康检查
            delay_before_retry 3      #尝试三次     
        }
    }
     real_server 192.168.4.200 80 {   #设置后端web服务器的真实地址
        weight 1      #设置权重
  #健康检查,因为网页十分简单,所以我们这里使用最简单的检查方式TCP_CHECK
        TCP_CHECK {
            connect_timeout 3   #超时时间 
            retry 3  #每隔三秒做一个健康检查
            delay_before_retry 3      #尝试三次     
        }
    }
}

systemctl start keepalived
iptables -F 
ipvsadm -Ln   #查看LVS规则
ip a s
步骤四:客户端测试

客户端使用curl命令反复连接http://192.168.4.15 ,查看访问的页面是否会轮询到不同的后端真实服务器
在这里插入图片描述

接下来我们关闭proxy1,这个时候可以看出我们的备份执行成功
在这里插入图片描述

接下来在测试我们关闭web1服务器,看能不能进行健康检查
在这里插入图片描述
由图可以看出以自动为我们删除不可用的web1服务器,实现了健康检查,与高可用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值