LVS+Keepalived高可用群集(无论头上是怎样的天空,我准备着承受任何风暴)

目录

前言

一、Keepalived实现原理剖析

1.1 VRRP(虚拟路由冗余协议)

1.2 Keepalived 原理

1.3 Keepalived 工具介绍

1.4 Keepalived 模块

二、LVS+Keepalived群集部署

2.1 配置负载均衡器(主备相同)

1.下载相应的软件包

2.修改keepalived配置文件

扫描二维码关注公众号,回复: 14218032 查看本文章

3.调整 proc 响应参数

2.2 http服务器配置

(1)配置虚拟IP地址(VIP:192.168.109.188)

(2)调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突

 2.3 客户端测试

总结


前言

企业应用中,单台服务器承担应用存在单点故障的危险,单点故障一旦发生,企业服务将发生中断,造成极大的危害,所以我们需要配置高可用群集。

群集的特点:

  1. 负载均衡
  2. 健康检查(高可用)
  3. 故障切换

一、Keepalived实现原理剖析

1.1 VRRP(虚拟路由冗余协议)

  1. 是针对路由器的一种备份解决方案,由多台路由器组成一个热备组,通过共用虚拟IP地址对外提供服务;
  2. 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态;
  3. 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
  4. 通过优先级决定主节点

1.2 Keepalived 原理

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

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

主服务器作用:转发数据;发送报文告诉备服务器自己在线

备服务器作用:监听主服务器发来的数据;收不到消息的时候就接替主服务器

1.3 Keepalived 工具介绍

  • 支持故障自动切换(Failover)
  • 支持节点健康状态检查(Health Checking)

是专为LVS和HA设计的一款健康检查工具,判断LVS负载调度器、节点服务器的可用性,当master 主机出现故障及时切换到backup节点保证业务正常,当master故障主机恢复后将其重新加入群集并且业务重新切换回master节点。

官方网站:http://www.keepalived.org/

1.4 Keepalived 模块

Keepalived体系主要模块及其作用:

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

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

二、LVS+Keepalived群集部署

实验拓扑

主DR服务器:7-4 192.168.109.134

备DR服务器:7-5 192.168.109.135

web1:7-2 192.168.109.132

web2:7-3 192.168.109.133

客户端:w7 192.168.109.200

#每台机子关闭防火墙和selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.1 配置负载均衡器(主备相同)

主DR服务器:7-4 192.168.109.134

备DR服务器:7-5 192.168.109.135

1.下载相应的软件包

yum install -y ipvsadm keepalived

2.修改keepalived配置文件

#找到配置文件位置
[root@localhost ~]# rpm -qc keepalived 
/etc/keepalived/keepalived.conf
/etc/sysconfig/keepalived
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# ls
keepalived.conf

#备份配置文件
[root@localhost keepalived]# cp keepalived.conf keepalived.conf.bak 
[root@localhost keepalived]# ls
keepalived.conf  keepalived.conf.bak

#修改配置文件
[root@localhost keepalived]# vim  keepalived.conf 
  ! Configuration File for keepalived
  #全局配置
  global_defs {
     notification_email {
       [email protected]
       [email protected]
       [email protected]
     }
     notification_email_from [email protected]
     smtp_server 127.0.0.1  #将邮箱地址改为本地
     smtp_connect_timeout 30
     router_id LVS_01    #设置名称,便于区分
     #vrrp_skip_check_adv_addr  #将四行vrrp的配置删掉 
     #vrrp_strict
     #vrrp_garp_interval 0
     #vrrp_gna_interval 0
  }
  
  vrrp_instance VI_1 {
    state MASTER   #主备服务器的名称,但真正区分主备是用优先级区分
    interface ens33    #改为ens33,跟自己的机子对应
    virtual_router_id 51   #主备保持一致,默认51
    nopreempt #添加这行,意味着非抢占模式,抢占模式下宕机后恢复的主服务器会将备服务器挤掉继续自己执行,
    #来回切换会造成脑裂,出现网络波动现象
    priority 100   #优先级越大就是主
    advert_int 1  #报文间隔时间
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.109.188 
    }
}

    #配置虚拟服务器实例
#virtual_server 192.168.200.100 443 {
#指定虚拟IP和端口号,443是https协议,80是http协议
virtual_server  192.168.109.188 80 { 
    delay_loop 6   #健康检查的时间,检查节点服务器
    lb_algo rr  #调度算法,默认轮询算法
    lb_kind DR  #LVS工作模式,默认是NAT,我们实验用DR
    persistence_timeout 0   #长连接,默认50s,不想这么长改成0
    protocol TCP  #健康检查的协议
#配置真实服务器
    real_server 192.168.109.132 80 {
        weight 1  #权重,采用加权轮询算法时要改
       # SSL_GET {  #健检查的方式,默认SSL_GET ,我们采用TCP_CHECK
            #url {
             # path /
             # digest ff20ad2481f97b1754ef3e12ecd3a9cc
           # }
           # url {
            #  path /mrtg/
             # digest 9b3a0c85a887a256d6939da88aabd8cd
           # }
         TCP_CHECK{
            connect_port  80#指定端口号
            connect_timeout 3 #超时时间
            nb_get_retry 3  #重试次数
            delay_before_retry 3  #间隔时间
         }
    }
    #再添加一台真实服务器配置
    real_server 192.168.109.133 80 {
        weight 1
        TCP_CHECK {
            connect_port  80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }   
    }   
}


#下面其余的内容全部删掉
#保存后重启
[root@localhost keepalived]# systemctl restart keepalived.service

#传给备服务器
[root@localhost keepalived]# scp keepalived.conf 192.168.109.135:`pwd`

#开启ipvsadm工具(两台一样)
[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl start ipvsadm
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.109.188:80 rr
  -> 192.168.109.132:80           Route   1      0          0         
  -> 192.168.109.133:80           Route   1      0          0       

主要改的地方:

邮箱地址

router_id

状态:主MASTER 备BACKUP

网卡名称

 

keepalived是通过ip命令生成VIP,使用ip命令查看

 

 

 

 

3.调整 proc 响应参数

#调整 proc 响应参数,关闭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

2.2 http服务器配置

web服务器1centos7-2 192.168.109.132

web服务器2centos7-3 192.168.109.133

#下载http服务并开启
yum install -y httpd
systemctl start httpd
systemctl enable httpd


#web1加入这行网页内容
echo "<h1>web1</h1>" > /var/www/html/index.html

#web2加入这行网页内容
echo "<h1>web2</h1>" > /var/www/html/index.html

(1)配置虚拟IP地址(VIP:192.168.109.188)

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

[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.109.188
NETMASK=255.255.255.255  #注意:子网掩码必须全为1

[root@web1 network-scripts]# ifup lo:0   #开启虚拟网卡
[root@web1 network-scripts]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.109.188  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
#临时添加路由
[root@web1 network-scripts]# route add -host 192.168.109.188 dev lo:0
#-host 添加一个主机
#-net添加一个网段
#dev代表出站网卡
[root@web1 network-scripts]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.109.2   0.0.0.0         UG    100    0        0 ens33
192.168.109.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.109.188 0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

#开机自动加入路由
[root@web1 network-scripts]# vim /etc/rc.local
[root@web1 network-scripts]# cat /etc/rc.local |grep route
/sbin/route add -host 192.168.109.188 dev lo:0
[root@web1 network-scripts]# chmod +x /etc/rc.d/rc.local

 

 

(2)调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突

vim /etc/sysctl.conf 
......
net.ipv4.conf.lo.arp_ignore=1   #系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce=2  #系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
......
sysctl -p

 2.3 客户端测试

 

 

 

 

 

 

 

总结

Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以解决静态路由出现的单点故障问题。

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

猜你喜欢

转载自blog.csdn.net/qq_42327944/article/details/124828083