部署LVS-DR+Keepalived搭建高可用web群集

匿名 (未验证) 提交于 2019-12-03 00:38:01
  • 实现LVS的DR模式

    一. 实验环境

  • 三台机器:

    • Director节点: (ens33 192.168.10.53 vip ens33:0 192.168.10.80)

    • Real server1: (ens33 192.168.10.51 vip lo:0 192.168.10.80)

    • Real server2: (ens33 192.168.10.52 vip lo:0 192.168.10.80)

    二. 安装和配置

    1. 配置两个real server服务器

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

    VIP地址仅用作发送Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器Director监听并分发)。因此使用虚接口lo:0来承载VIP地址。

    cd /etc/sysconfig/network-scripts/ cp ifcfg-lo ifcfg-lo:0 vim ifcfg-lo:0  DEVICE=lo:0  IPADDR=192.168.10.80  NETMASK=255.255.255.255   #子网掩码必须全为1  ONBOOT=yes 1 ifup lo:0     #开启虚拟接口 


    (2)安装httpd,创建测试网页

    #安装httpd yum install httpd -y
    #real server1创建测试网页 echo "Server 192.168.10.51" > /var/www/html/index.html #real server2创建测试网页 echo "Server 192.168.10.52" > /var/www/html/index.html

    (3)启动httpd服务,关闭防火墙和安全性策略

    #启动httpd服务 systemctl start httpd.service  systemctl enable httpd.service 
    #关闭防火墙和安全性策略 systemctl stop  firewalld.service  systemctl disable firewalld.service setenforce 0

    (4)在两台real server上配置启动脚本

    vim /etc/init.d/rs.sh   #!/bin/bash   VIP=192.168.10.80         case "$1" in         start)                 ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP                 /sbin/route add -host $VIP dev lo:0      #为本机添加一条路由记录                 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 $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 Stopd"                 ;;         *)                 echo "Usage: $0 {start|stop}"                 exit 1         esac         exit 0

    这里需要注意的是避免ARP通信紊乱,解决方案是:修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。

    • arp_ignore=1表示系统只响应目的IP为本地IP的ARP请求。

    • arp_announce=2表示系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。
      (5)运行启动脚本
      chmod +x rs.sh service rs.sh start

      最后在本机上自测访问网站服务

      2. 配置Director server服务器

      (1)配置虚拟IP地址,以便响应群集访问

      cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens33:0 vim ifcfg-ens33:0 DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.10.80 NETMASK=255.255.255.0 ifup ens33:0 


      (2)安装ipvsadm管理工具

      yum install ipvsadm -y  

      (3)开启路由功能

      vim /etc/sysctl.conf net.ipv4.ip_forward=1 sysctl -p     #保存

      (4)调整/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 #保存

      (5)配置Director启动脚本

      vim /etc/init.d/dr.sh #!/bin/bash GW=192.168.10.1 VIP=192.168.10.80 RIP1=192.168.10.51 RIP2=192.168.10.52 case "$1" in     start)     /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm     systemctl start ipvsadm     /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up     /sbin/route add -host $VIP dev ens33:0     /sbin/ipvsadm -A -t $VIP:80 -s rr     /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g     /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g     echo "ipvsadm starting --------------------[ok]"     ;;     stop)     /sbin/ipvsadm -C     systemctl stop ipvsadm     ifconfig ens33:0 down     route del $VIP     echo "ipvsamd stoped----------------------[ok]"      ;;     status)     if [ ! -e /var/lock/subsys/ipvsadm ];then     echo "ipvsadm stoped---------------"     exit 1             else             echo "ipvsamd Runing ---------[ok]"     fi     ;;     *)     echo "Usage: $0 {start|stop|status}"     exit 1 esac exit 0

      (6)启动脚本,添加两个Real Server节点服务器

      chmod +x /etc/init.d/dr.sh service dr.sh start

      (7)#关闭防火墙和安全策略

      systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0

      三.测试LVS群集

      用Windows客户端直接访问http://192.168.10.80/, 将能够看到由真实服务器提供的网页内容。

    第一次访问:

    Real Server连接次数查看:

    刷新一次:

    Real Server连接次数查看:

    • LVS结合keepalive

      LVS可以实现负载均衡,但是不能够故障切换和健康检查,也就是当一个rs服务器出现故障时,LVS仍然会把请求转发给故障的rs服务器,这样就会导致请求无效。keepalive软件可以解决 LVS 单点故障的问题,能同时实现 LVS 的高可用性。这里以LVS-DR模式为例。

    一.实验环境

    五台机器:

    • Keepalived1 + lvs1(Director1):192.168.10.53 (主)
    • Keepalived2 + lvs2(Director2):192.168.10.54 (从)
    • Real server1:192.168.10.51
    • Real server2:192.168.10.52
    • NFS Server: 192.168.10.55
    • VIP: 192.168.10.80

    二.安装配置

    在实现LVS的DR模式前提下,在两个Director Server 节点服务器部署keepalived服务。

    (1)安装keepalive软件

    yum install keepalived -y

    (2)主keepalived节点配置(lvs1)

    #主节点( MASTER )配置文件 vim /etc/keepalived/keepalived.conf  global_defs {   ...    #省略部分   smtp_server 127.0.0.1           #指向本地   router_id LVS_01               #指定名称,备份服务器不同名称   ...    #省略部分           }   vrrp_instance VI_1 {        #定义VRRP热备实例     state MASTER            #MASTER表示主调度器     interface ens33         #承载VIP地址的物理接口     virtual_router_id 51    #虚拟路由器的ID号,每个热备组保持一致     priority 100            #主调度器优先级     advert_int 1            #通告间隔秒数     authentication {        #认证信息         auth_type PASS      #认证类型         auth_pass 1111      #字码密串     }     virtual_ipaddress {     #指定群集VIP地址,也就是漂移地址         192.168.10.80     } }  virtual_server 192.168.10.80 80 {  #虚拟服务器VIP地址     delay_loop 6                   #健康检查的间隔时间     lb_algo rr                     #轮询rr的调度算法     lb_kind DR                     #直接路由工作模式     persistence_timeout 0          #连接保持时间     protocol TCP                   #应用服务采用的是TCP协议      real_server 192.168.10.51 80 {                            #第一个web节点的服务器地址、端口         weight 1         TCP_CHECK {             connect_timeout 10             nb_get_retry 3             delay_before_retry 3             connect_port 80                }     }      real_server 192.168.10.52 80 {                           #第二个web节点的服务器地址、端口  router_id LVS_01         weight 1         TCP_CHECK {             connect_timeout 10             nb_get_retry 3             delay_before_retry 3             connect_port 80         }     } } 

    (3)从keepalived节点配置(lvs2)
    拷贝主节点的配置文件keepalived.conf,然后修改如下内容:

    router_id LV ->  router_id LVS_02 #从调度器名称 state MASTER -> state BACKUP  #从调度器 priority 100 -> priority 90   #从调度器优先级

    (4)启动keepalive

    #先主后从分别启动keepalive systemctl start keepalived

    三.测试 keepalived 的HA特性

    (1)虚拟IP地址漂移

    首先在master(lvs1)上执行命令 ip addr ,可以看到vip在master节点上的;

    这时如果在master上执行 systemctl stop keepalived 命令,这时vip已经不在master上,在slave节点上执行 ip addr 命令可以看到 vip 已经正确漂到slave节点。

    这时客户端去访问 http://192.168.10.80 访问依然正常。

    (2)连通性

    在客户机执行“ping 192.168.10.80 -t”,能够正常ping通。
    禁用master(lvs1)的ens33网卡,发现还是能正常ping通。

    (3)web访问测试

    禁用master(lvs1)的ens33网卡,再次访问上述web服务,网页文档显示正常。


    原文:http://blog.51cto.com/11134648/2133893

    标签
    易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
    该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!