LVS+Keepalived 高可用群集

发布时间 2023-03-27 17:01:20作者: menglang
 

一、Keepalived工具介绍

专为LVS和HA设计的一款健康检查工具

 

二、Keepalived实现原理剖析

  • Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能

 

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

  • 是针对路由器的一种备份解决方案

  • 由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务

  • 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态

  • 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务

 

三、Keepalived案例讲解

 

  • Keepalived可实现多机热备,每个热备组可有多台服务器

  • 双机热备的故障切换是由虚拟P地址的漂移来实现,适用于各种应用服务器

  • Keepalived配置目录位于/etc/keepalived/

  • 配置Keepalived master服务器

    • keepalived.conf是主配置文件

      1.  
        global_defs {...}区段指定全局参数
      2.  
        vrrp_instance 实例名称{...}区段指定VRRP热备参数
      3.  
        注释文字以"∵"符号开头
      4.  
        目录samples,提供了许多配置样例作为参考
    • 常用配置选项

      1.  
        router_id HA_TEST_R1:本路由器(服务器)的名称、主备名称要不一样
      2.  
        vrrp_instance Vl_1∶定义VRRP热备实例
      3.  
        state MASTER:热备状态,MASTER表示主服务器
      4.  
        interface ens33:承载VIP地址的物理接口
      5.  
        virtual_router_id 1 :虚拟路由器的ID号,每个热备组保持一致
      6.  
        priority 100:优先级,数值越大优先级越高
      7.  
        advert_int 1:通告间隔秒数(心跳频率)
      8.  
        auth_type PASS:认证类型
      9.  
        auth_pass 123456:密码字串
      10.  
        virtual_ipaddress { vip}:指定漂移地址(VIP),可以有多个

 

  • 配置Keepalived slave服务器

    • Keepalived备份服务器的配置与master的配置有三个选项不同

      1.  
        router_id:设为自有名称
      2.  
        state:设为BACKUP
      3.  
        priority:值低于主服务器
    • 其他选项与master相同

  • 测试双机热备的效果

    1.  
      router_id:设为自有名称
    2.  
      state:设为BACKUP
    3.  
      priority:值低于主服务器

 

四、LVS+Keepalived 高可用群集的搭建

  1.  
    环境
  2.  
    主DR 服务器:192.168.59.103
  3.  
    备DR 服务器:192.168.59.118
  4.  
    Web 服务器1:192.168.59.108
  5.  
    Web 服务器2:192.168.59.102

4.1 配置负载调度器(主:192.168.59.103)

  1.  
    ############################ 配置Keepalived master服务器 #################################
  2.  
     
  3.  
    1. #关闭防火墙
  4.  
    systemctl stop firewalld.service
  5.  
    setenforce 0
  6.  
     
  7.  
    2. #安装服务
  8.  
    yum -y install ipvsadm keepalived
  9.  
     
  10.  
    3. #修改配置文件keeplived.conf
  11.  
    cd /etc/keepalived/
  12.  
    cp keepalived.conf keepalived.conf.bak
  13.  
    vim keepalived.conf
  14.  
     
  15.  
    ......
  16.  
    global_defs { #定义全局参数
  17.  
    --10行--修改,邮件服务指向本地
  18.  
    smtp_server 127.0.0.1
  19.  
    --12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
  20.  
    router_id LVS_01
  21.  
    }
  22.  
     
  23.  
    vrrp_instance VI_1 { #定义VRRP热备实例参数
  24.  
    --20行--修改,指定热备状态,主为MASTER,备为BACKUP
  25.  
    state MASTER
  26.  
    --21行--修改,指定承载vip地址的物理接口
  27.  
    interface ens33
  28.  
    --22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
  29.  
    virtual_router_id 10
  30.  
    --23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
  31.  
    priority 100
  32.  
    advert_int 1 #通告间隔秒数(心跳频率)
  33.  
    authentication { #定义认证信息,每个热备组保持一致
  34.  
    auth_type PASS #认证类型
  35.  
    --27行--修改,指定验证密码,主备服务器保持一致
  36.  
    auth_pass 123123
  37.  
    }
  38.  
    virtual_ipaddress { #指定群集vip地址
  39.  
    192.168.59.188
  40.  
    }
  41.  
    }
  42.  
    --36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
  43.  
    virtual_server 192.168.59.188 80 {
  44.  
    delay_loop 6 #健康检查的间隔时间(秒)
  45.  
    lb_algo rr #指定调度算法,轮询(rr)
  46.  
    --39行--修改,指定群集工作模式,直接路由(DR)
  47.  
    lb_kind DR
  48.  
    persistence_timeout 50 #连接保持时间(秒)
  49.  
    protocol TCP #应用服务采用的是 TCP协议
  50.  
    --43行--修改,指定第一个Web节点的地址、端口
  51.  
    real_server 192.168.59.108 80 {
  52.  
    weight 1 #节点的权重
  53.  
    --45行--删除,添加以下健康检查方式
  54.  
    TCP_CHECK {
  55.  
    connect_port 80 #添加检查的目标端口
  56.  
    connect_timeout 3 #添加连接超时(秒)
  57.  
    nb_get_retry 3 #添加重试次数
  58.  
    delay_before_retry 3 #添加重试间隔
  59.  
    }
  60.  
    }
  61.  
     
  62.  
    real_server 192.168.59.102 80 { #添加第二个 Web节点的地址、端口
  63.  
    weight 1
  64.  
    TCP_CHECK {
  65.  
    connect_port 80
  66.  
    connect_timeout 3
  67.  
    nb_get_retry 3
  68.  
    delay_before_retry 3
  69.  
    }
  70.  
    }
  71.  
    }
  72.  
    ##删除后面多余的配置##
  73.  
     
  74.  
    4. #启动服务、查看虚拟网卡vip
  75.  
    systemctl start keepalived
  76.  
    ip addr show dev ens33
  77.  
     
  78.  
    5. #调整proce响应参数,关闭Linux内核的重定向参数响应
  79.  
    vim /etc/sysctl.conf
  80.  
    net.ipv4.ip_forward = 1
  81.  
    net.ipv4.conf.all.send_redirects = 0
  82.  
    net.ipv4.conf.default.send_redirects = 0
  83.  
    net.ipv4.conf.ens33.send_redirects = 0
  84.  
     
  85.  
    6. #刷新一下
  86.  
    sysctl -p
  87.  
     
  88.  
    ############################# 配置ipvsadm #################################
  89.  
     
  90.  
    7. #配置负载分配策略,并启动服务
  91.  
    ipvsadm-save >/etc/sysconfig/ipvsadm
  92.  
    systemctl start ipvsadm.service
  93.  
     
  94.  
    8.
  95.  
    #清空ipvsadm,并做策略
  96.  
    ipvsadm -C
  97.  
    ipvsadm -A -t 192.168.59.188:80 -s rr
  98.  
    ipvsadm -a -t 192.168.59.188:80 -r 192.168.59.102:80 -g
  99.  
    ipvsadm -a -t 192.168.59.188:80 -r 192.168.59.108:80 -g
  100.  
     
  101.  
    9. #保存设置
  102.  
    ipvsadm
  103.  
    ipvsadm -ln
  104.  
    ipvsadm-save >/etc/sysconfig/ipvsadm

关闭防火墙

 

安装服务

 

修改配置文件keeplived.conf

 

 

 

 

 

 

启动服务、查看虚拟网卡vip

 

调整proce响应参数,关闭Linux内核的重定向参数响应

 

刷新一下

 

配置负载分配策略,并启动服务

 

清空ipvsadm,并做策略

 

保存设置

 

 

 

4.2 配置负载调度器(备:192.168.59.118)

  1.  
    ############################ 配置Keepalived master服务器 #################################
  2.  
     
  3.  
    1. #关闭防火墙
  4.  
    systemctl stop firewalld.service
  5.  
    setenforce 0
  6.  
     
  7.  
    2. #安装服务
  8.  
    yum -y install ipvsadm keepalived
  9.  
     
  10.  
    3. #修改配置文件keeplived.conf
  11.  
    cd /etc/keepalived/
  12.  
    cp keepalived.conf keepalived.conf.bak
  13.  
    vim keepalived.conf
  14.  
     
  15.  
    ......
  16.  
    global_defs { #定义全局参数
  17.  
    --10行--修改,邮件服务指向本地
  18.  
    smtp_server 127.0.0.1
  19.  
    --12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
  20.  
    router_id LVS_01
  21.  
    }
  22.  
     
  23.  
    vrrp_instance VI_1 { #定义VRRP热备实例参数
  24.  
    --20行--修改,指定热备状态,主为MASTER,备为BACKUP
  25.  
    state BACKUP
  26.  
    --21行--修改,指定承载vip地址的物理接口
  27.  
    interface ens33
  28.  
    --22行--修改,指定虚拟路由器的ID号,每个热备组保持一致
  29.  
    virtual_router_id 10
  30.  
    --23行--修改,指定优先级,数值越大优先级越高,主为100,备为99
  31.  
    priority 99
  32.  
    advert_int 1 #通告间隔秒数(心跳频率)
  33.  
    authentication { #定义认证信息,每个热备组保持一致
  34.  
    auth_type PASS #认证类型
  35.  
    --27行--修改,指定验证密码,主备服务器保持一致
  36.  
    auth_pass 123123
  37.  
    }
  38.  
    virtual_ipaddress { #指定群集vip地址
  39.  
    192.168.59.188
  40.  
    }
  41.  
    }
  42.  
    --36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
  43.  
    virtual_server 192.168.59.188 80 {
  44.  
    delay_loop 6 #健康检查的间隔时间(秒)
  45.  
    lb_algo rr #指定调度算法,轮询(rr)
  46.  
    --39行--修改,指定群集工作模式,直接路由(DR)
  47.  
    lb_kind DR
  48.  
    persistence_timeout 50 #连接保持时间(秒)
  49.  
    protocol TCP #应用服务采用的是 TCP协议
  50.  
    --43行--修改,指定第一个Web节点的地址、端口
  51.  
    real_server 192.168.59.108 80 {
  52.  
    weight 1 #节点的权重
  53.  
    --45行--删除,添加以下健康检查方式
  54.  
    TCP_CHECK {
  55.  
    connect_port 80 #添加检查的目标端口
  56.  
    connect_timeout 3 #添加连接超时(秒)
  57.  
    nb_get_retry 3 #添加重试次数
  58.  
    delay_before_retry 3 #添加重试间隔
  59.  
    }
  60.  
    }
  61.  
     
  62.  
    real_server 192.168.59.102 80 { #添加第二个 Web节点的地址、端口
  63.  
    weight 1
  64.  
    TCP_CHECK {
  65.  
    connect_port 80
  66.  
    connect_timeout 3
  67.  
    nb_get_retry 3
  68.  
    delay_before_retry 3
  69.  
    }
  70.  
    }
  71.  
    }
  72.  
    ##删除后面多余的配置##
  73.  
     
  74.  
    4. #启动服务、查看虚拟网卡vip
  75.  
    systemctl start keepalived
  76.  
    ip addr show dev ens33
  77.  
     
  78.  
    5. #调整proce响应参数,关闭Linux内核的重定向参数响应
  79.  
    vim /etc/sysctl.conf
  80.  
    net.ipv4.ip_forward = 1
  81.  
    net.ipv4.conf.all.send_redirects = 0
  82.  
    net.ipv4.conf.default.send_redirects = 0
  83.  
    net.ipv4.conf.ens33.send_redirects = 0
  84.  
     
  85.  
    6. #刷新一下
  86.  
    sysctl -p
  87.  
     
  88.  
    ############################# 配置ipvsadm #################################
  89.  
     
  90.  
    7. #配置负载分配策略,并启动服务
  91.  
    ipvsadm-save >/etc/sysconfig/ipvsadm
  92.  
    systemctl start ipvsadm.service
  93.  
     
  94.  
    8.
  95.  
    #清空ipvsadm,并做策略
  96.  
    ipvsadm -C
  97.  
    ipvsadm -A -t 192.168.59.188:80 -s rr
  98.  
    ipvsadm -a -t 192.168.59.188:80 -r 192.168.59.102:80 -g
  99.  
    ipvsadm -a -t 192.168.59.188:80 -r 192.168.59.108:80 -g
  100.  
     
  101.  
    9. #保存设置
  102.  
    ipvsadm
  103.  
    ipvsadm -ln
  104.  
    ipvsadm-save >/etc/sysconfig/ipvsadm

关闭防火墙

 

安装服务

 

修改配置文件keeplived.conf

 

 

 

启动服务、查看虚拟网卡vip

 

调整proce响应参数,关闭Linux内核的重定向参数响应

 

刷新一下

 

配置负载分配策略,并启动服务

 

清空ipvsadm,并做策略

 

保存设置

 

 

4.3 配置节点服务器 web1(192.168.59.108)

  1.  
    1. #关闭防火墙
  2.  
    systemctl stop firewalld
  3.  
    setenforce 0
  4.  
     
  5.  
    2. #安装并开启httpd服务
  6.  
    yum -y install httpd
  7.  
    systemctl start httpd
  8.  
     
  9.  
    3. #配置站点文件
  10.  
    vim /var/www/html/index.html
  11.  
    this is yxp web!
  12.  
     
  13.  
    4. #配置虚拟vip
  14.  
    vim /etc/sysconfig/network-scripts/ifcfg-lo:0
  15.  
    DEVICE=lo:0
  16.  
    ONBOOT=yes
  17.  
    IPADDR=192.168.59.188
  18.  
    NETMASK=255.255.255.255
  19.  
     
  20.  
    5. #重启网络服务,开启虚拟网卡
  21.  
    systemctl restart network
  22.  
    ifup lo:0
  23.  
    ifconfig lo:0
  24.  
     
  25.  
    6. #设置路由
  26.  
    route add -host 192.168.59.188 dev lo:0
  27.  
    route -n
  28.  
     
  29.  
    7. #调整 proc 响应参数
  30.  
    #添加系统只响应目的IP为本地IP的ARP请求
  31.  
    #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
  32.  
    vim /etc/sysctl.conf
  33.  
    net.ipv4.conf.all.arp_ignore = 1
  34.  
    net.ipv4.conf.all.arp_announce = 2
  35.  
    net.ipv4.conf.default.arp_ignore = 1
  36.  
    net.ipv4.conf.default.arp_announce = 2
  37.  
    net.ipv4.conf.lo.arp_ignore = 1
  38.  
    net.ipv4.conf.lo.arp_announce = 2
  39.  
     
  40.  
    8. #刷新proc参数
  41.  
    sysctl -p

关闭防火墙

 

安装并开启httpd服务

 

 

配置站点文件

 

配置虚拟vip

 

重启网络服务,开启虚拟网卡

 

设置路由

 

 

调整 proc 响应参数

 

刷新proc参数

 

 

4.4 配置节点服务器 web2(192.168.59.102)

  1.  
    1. #关闭防火墙
  2.  
    systemctl stop firewalld
  3.  
    setenforce 0
  4.  
     
  5.  
    2. #安装并开启httpd服务
  6.  
    yum -y install httpd
  7.  
    systemctl start httpd
  8.  
     
  9.  
    3. #配置站点文件
  10.  
    vim /var/www/html/index.html
  11.  
    this is dhc web!
  12.  
     
  13.  
    4. #配置虚拟vip
  14.  
    vim /etc/sysconfig/network-scripts/ifcfg-lo:0
  15.  
    DEVICE=lo:0
  16.  
    ONBOOT=yes
  17.  
    IPADDR=192.168.59.188
  18.  
    NETMASK=255.255.255.255
  19.  
     
  20.  
    5. #重启网络服务,开启虚拟网卡
  21.  
    systemctl restart network
  22.  
    ifup lo:0
  23.  
    ifconfig lo:0
  24.  
     
  25.  
    6. #设置路由
  26.  
    route add -host 192.168.59.188 dev lo:0
  27.  
    route -n
  28.  
     
  29.  
    7. #调整 proc 响应参数
  30.  
    #添加系统只响应目的IP为本地IP的ARP请求
  31.  
    #系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
  32.  
    vim /etc/sysctl.conf
  33.  
    net.ipv4.conf.all.arp_ignore = 1
  34.  
    net.ipv4.conf.all.arp_announce = 2
  35.  
    net.ipv4.conf.default.arp_ignore = 1
  36.  
    net.ipv4.conf.default.arp_announce = 2
  37.  
    net.ipv4.conf.lo.arp_ignore = 1
  38.  
    net.ipv4.conf.lo.arp_announce = 2
  39.  
     
  40.  
    8. #刷新proc参数
  41.  
    sysctl -p

关闭防火墙

 

安装并开启httpd服务

 

配置站点文件

 

配置虚拟vip

 

重启网络服务,开启虚拟网卡

 

设置路由

 

调整 proc 响应参数

 

刷新proc参数

 

 

4.5 测试

1)当前使用的为主DR服务器

 

 

2) 断开主DR服务器的Keepalived测试

systemctl stop keepalived.service

 

 

 

 

3)在客户段测试