• LVS+keepalive


    LVS+keepalive

    什么是keepalive

        Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行;狭义的来讲就是指主机的冗余和接管。它与HeartBeat、RoseHA实现类似的功能,都可以实现服务或者网络的高可用,但是又有差别。HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能。比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦。与HeartBeat相比,Keepalived主要是通过虚拟路由冗余(VRRP)来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。   

        keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的

    实验环境

    关闭selinux和iptables

    主机centos7.6
    192.168.47.47 VIP
    192.168.47.191 lvs-master
    192.168.47.193 lvs-slave
    192.168.47.189 RealServer02
    192.168.47.188 RealServer01

    1、在LVS上:

    yum install ipvsadm keepalived -y

    Master节点配置文件

    [root@lvs ~]# cat /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived

    global_defs {
      router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
    }
    vrrp_instance VI_1 {
      state MASTER       #指定Keepalived的角色,MASTER为主,BACKUP为备
      interface ens33   # 绑定的网卡名
      virtual_router_id 51 #虚拟路由编号,主备要一致
      priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
      advert_int 1 #检查间隔,默认为1s
      authentication {
          auth_type PASS
          auth_pass 1111
      }
      virtual_ipaddress {
           192.168.47.16 #定义虚拟IP(VIP),可多设,每行一个
      }
    }
    # 定义对外提供服务的LVS的VIP以及port
    virtual_server 192.168.47.47 80 {
      delay_loop 6 # 设置健康检查时间,单位是秒
      lb_algo wrr # 设置负载调度的算法为wrr
      lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
      nat_mask 255.255.255.0
      persistence_timeout 0
      protocol TCP
      real_server 192.168.47.188 80 {  # 指定real server1的IP地址
          weight 3   # 配置节点权值,数字越大权重越高
          TCP_CHECK {
          connect_timeout 10
          TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 80
          }
      }
      real_server 192.168.47.189 80{  # 指定real server2的IP地址
          weight 3 # 配置节点权值,数字越大权重越高
          TCP_CHECK {
          connect_timeout 10
          nb_get_retry 3
          delay_before_retry 3
          connect_port 80
          }
        }
    }

     Slave 配置

    No.1处:把“state MASTER”修改为“state BACKUP” #即备用服务器;

    No.2处:把“priority 100”修改为“priority 90” #优先级为90。

    2、配置RealServer(我安装的是httpd,也可以用nginx或者其他的)

    [root@t1 ~]# cat realserver.sh 
    #add for chkconfig
    #chkconfig: 2345 70 30  
    #description: RealServer's script  
    #processname: realserver.sh
    #!/bin/bash
    VIP=192.168.47.47
    source /etc/rc.d/init.d/functions
    case "$1" in
    start)
    #绑定VIP,抑制ARP广播
          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
          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 Stoped"
          ;;
          *)
          echo "Usage: $0 {start|stop}"
          exit 1
    esac
    exit 0

    3、启动httpd服务、运行脚本

    [root@t1 ~]# systemctl start httpd
    [root@t1 ~]# ./realserver.sh start

    4、启动keeplived,查看lvs规则

    [root@lvs ~]# systemctl restart keepalived
    #可以看到已经成功添加了DR、WRR的规则
    [root@lvs ~]# 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.47.47:80 wrr
     -> 192.168.47.188:80           Route   3      0          0        
     -> 192.168.47.189:80           Route   3      0          0

    5、验证

    [root@lvs ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.189”
    [root@lvs ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.188”
    [root@lvs ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.189”
    [root@lvs ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.188”
    [root@lvs ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.189”
    [root@lvs ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.188”

    6、将后端的realserver其中一个节点服务停掉,并测试

    #停了192.168.47.188的节点
    [root@t1 ~]# systemctl stop httpd
    #可以看到LVS规则中,已经没有了192.168.47.188的节点
    [root@lvs ~]# 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.47.47:80 wrr
     -> 192.168.47.189:80           Route   3      0          0
    #再把他起来
    [root@t1 ~]# systemctl start httpd
    #可以看到LVS规则中,又有了
    [root@lvs ~]# 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.47.47:80 wrr
     -> 192.168.47.188:80           Route   3      0          0        
     -> 192.168.47.189:80           Route   3      0          0

    7、把keepalived、master节点宕掉。看看是否能切换到slave

    [root@lvs ~]# systemctl stop keepalived

    可以看到VIP漂移了过来

    再测试是否能正常访问

    [root@lvss ~]# 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.47.47:80 wrr
     -> 192.168.47.188:80           Route   3      0          0        
     -> 192.168.47.189:80           Route   3      0          0    
    [root@lvss ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.189”
    [root@lvss ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.188”
    [root@lvss ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.189”
    [root@lvss ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.188”
    [root@lvss ~]# curl 192.168.47.47
    ”I am RealServer1 192.168.47.189”

     

  • 相关阅读:
    小故事
    设计模式
    git分支
    git简单操作
    ab命令压力测试
    libcheck ARM交叉编译
    libxml2 ARM 交叉编译
    I.MX6 安装LTIB
    为ARM编译Glib
    QT 4.8 中文显示问题
  • 原文地址:https://www.cnblogs.com/hsyw/p/13298257.html
Copyright © 2020-2023  润新知