高性能高可用服务器 LVS + KeepAlived Centos8

高性能高可用服务器 LVS + KeepAlived

网络拓扑

网络拓扑

关闭防火墙

注意 192.168.1.220 / 221 / 223 / 224都需要关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

WEB服务器

安装配置nginx

yum -y install nginx # 192.168.1.223和224一样

cd /usr/share/nginx/html/
cp index.html index.html.backup
echo "192.168.1.223" > index.html #注意这里,主备分别配置其各自ip地址,为了在下面的演示中方便辨认结果

创建虚拟网卡

Lvs采用DR工作模式 ,web服务器将结果直接返回给客户端,但是这时数据包的源IP地址是web服务器的IP地址,客户端接收到数据包后,发现回包的IP地址不是自己请求的IP地址,就会把包丢弃掉,这会导致web请求失败,所以需要将web的IP地址伪装成为客户端访问的VIP地址,这里使用web服务器的环回口地址进行伪装。

  1. arp_announce :定义不同级别:当ARP请求通过某个端口进来是否利用这个接口来回应。
    • 0 - 利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
    • 1 - 避免使用另外一个接口上的mac地址去响应ARP请求;
    • 2 - 尽可能使用能够匹配到ARP请求的最佳地址。
  2. arp_ignore:当ARP请求发过来后发现自己正是请求的地址是否响应;
    • 0 - 利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
    • 1 - 哪个接口上接受ARP请求,就从哪个端口上回应。
cd /etc/init.d
vim realserver

#添加以下内容,根据情况修改之后保存
SNS_VIP=192.168.1.225 #VIP 定义为自己指定的vip
/etc/rc.d/init.d/functions
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       # 下面4行是防止本机vip和LVS的VIP冲突
       echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0

设置可执行权限

chmod +x realserver functions

启动脚本

注意两台web服务器都需要上面的配置以及启动该脚本

./realserver start

如果出现红框中的表示成功
启动结果

LVS+Keepalived服务器

安装ipvsadm keepalived

注意lvs已经集成到linux的kernel中了,不需要安装,而ipvsadm是lvs的管理工具

# 安装lvs管理器 安装keepalived
yum -y install vim ipvsadm keepalived # 192.168.1.220和221一样

配置keepalived

Keepalived配置文档

# 配置192.168.1.220-LVS主机 192.168.1.221-LVS备机 
# 主备有三处配置不一样,我已经在相关配置选项注释中说明,按照其配置即可

cd /etc/keepalived
cp keepalived.conf keepalived.conf.backup

vim keepalived.conf

# 将下面内容复制
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc

   #【主备】设置lvs的id,在一个网段内唯一 主LVS_DEVEL_220 备LVS_DEVEL_221
   router_id LVS_DEVEL_220 
   vrrp_skip_check_adv_addr
   #vrrp_strict

   #注意这里,如果使用默认值0,使用keepalived -t检测配置文件时会有下面的警告
   #(Line 15) number '0' outside range [1e-06, 4294]
   #(Line 15) vrrp_garp_interval '0' is invalid
   vrrp_garp_interval 0.001 
   #注意这里,如果使用默认值0,使用keepalived -t检测配置文件时会有下面的警告
   #(Line 16) number '0' outside range [1e-06, 4294]
   #(Line 16) vrrp_gna_interval '0' is invalid
   vrrp_gna_interval 0.000001
}

vrrp_instance VI_1 {
    #【主备】主LVS配置MASTER 备LVS配置BACKUP
    state MASTER
    interface ens33 # 注意ens33是本机网卡名
    virtual_router_id 51 #虚拟路由编号,主备要一致

    #【主备】优先级,主设置100,备设置50
    priority 100 
    advert_int 1 #检查间隔,默认为1s
    authentication {
        auth_type PASS

        #主备必须一样,防止其他keepalived连接,仅使用前8个字符,就意味着你配置超过8位也只有前8位生效
        auth_pass 0513315 
    }
    virtual_ipaddress {
        192.168.1.225 #vip,可以配置多个,下一个换行书写
    }
}

virtual_server 192.168.1.225 80 { #此处配置vip和端口 http-80 https-443
    delay_loop 6
    lb_algo wrr #调度算法,使用加权轮询
    lb_kind DR #工作模式,使用DR(Director Router)
    #persistence_timeout 50
    protocol TCP

    real_server 192.168.1.224 80 { # 真实服务器ip和端口
        weight 1 #权重,值越大,权重越高
        TCP_CHECK { #检查真实主机的健康配置模块,可以有多种检测机制,详情参考配置文档
            connect_timeout 3
            #注意这里,新版本使用retry命令
            retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.223 80 { # 真实服务器ip和端口
         weight 2
         TCP_CHECK {
             connect_timeout 3
             retry 3
             delay_before_retry 3
         }
    }
}
#保存退出

启动Keepalived

注意:每次启动前应该先使用如下命令清除之前配置,这是因为lvs的配置是通过keepalived设置好的,就是上面那不得realserver那些,所以重启时清除下之前配置

ipvsadm -C

启动,停止,重启

systemctl start keepalived
systemctl stop keepalived
systemctl restart keepalived

查看结果,出现如下图所示结果表示成功

ps -ef|grep keepalived
ipvsadm -Ln

启动结果

模拟故障

测试web服务器故障

  1. 使用浏览器访问 192.168.1.225,看到界面显示192.168.1.223,多次刷新可以交替看到224
  2. 模拟故障,停掉223
    ifdown ens33
    多次刷新浏览器发现只能看到192.168.1.224
  3. 查看lvs负载的结果ipvsadm -Ln
    lvs的路由少了223
  4. 故障恢复,启动223
    ifup ens33
    发现lvs的路由中又有223了,多次刷新浏览器也可以看到223了
  5. 整个web服务器模拟故障已经完成

测试LVS主节点故障

  1. 模拟主LVS故障
    systemctl stop keepalived

  2. vip从220漂移到221上,如下两图可知结果正确
    主lvs
    从lvs

  3. 模拟主LVS故障恢复systemctl start keepalived
    vip又从221飘回到220上,说明结果正确,这里就不再贴图了。

LVS的扩展知识

LVS工作模式

工作模式原理优缺点
NAT调度时:目的IP改成RIP(DNAT)返回时:源IP改成VIP(SNAT)由于来回都需要经过调度器,性能不太好,一般用的少
TUN增加一个IP头部。通过IP隧道进行通信由于调度器LB只处理入站请求的报文。因此,此集群系统的吞吐量可以提高10倍以上,但隧道模式也会带来一定得系统开销;所有的RS服务器都要绑定VIP,抑制ARP,配置复杂;WLAN下使用该模式,不过一般在WLAN下不使用LVS,一般用Nginx
DR通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器将响应后的处理结果直接返回给客户端用户LAN下使用该模式;要求调度器LB与正式服务器RS节点都有一块网卡连在同一物理网段上,即必须在同一个局域网环境;调度器仅进行了目的MAC地址的改写,因此,调度器LB无法改变请求的报文的目的端口;配置复杂
LVS调度算法
算法算法说明
固定调度rr轮循调度,它将请求依次分配不同的RS节点,也就是在RS节点中均摊请求。这种
固定调度wrr权重轮循,它将依据不同RS节点的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值较低的RS节点更多。相同权值的RS得到相同数目的连接数
固定调度dh目的地址哈希调度,以目的地址为关键字查找一个静态hash表来获得需要的RS
固定调度sh源地址哈希调度,以源地址为关键字查找一个静态hash表来获得需要的RS
动态调度wlc加权最小连接数调度,实际连接数除以权值,最小的RS作为分配的RS
动态调度lc最小连接数调度,连接数最小的RS作为分配的RS
动态调度lblc基于地址的最小连接数调度,将来自同一目的地址的请求分配给同一台RS节点
动态调度lblcr基于地址带重复最小连接数调度。(略)
动态调度SED最短的期望的延迟(不成熟)
动态调度NQ最小队列调度(不成熟)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值