Keepalived配置流程

Keepalived配置流程

注意事项

  • 使用 Keepalived,主要是为了服务器的高可用性。
  • 当前线上的 Keepalived 主要使用 DR 模式。
  • 针对的主要服务是上传量小,下载量大的服务。

目的

使用Keepalived的主要目的是2个:

  1. 高可用性  * IP 地址主从备份,防止单点故障

  2. 方便扩展  * 早期单台服务器的网络带宽有限,使用 Keepalived的DR模式,可以很容易的扩展服务器的可用带宽。

配置说明

全局定义

主要是定义通知邮件地址和 lvs_id (lvs_id 在failover中会用到)

 global_defs {

   notification_email {

     [email protected]

   }

   notification_email_from [email protected]

   smtp_server 127.0.0.1

   smtp_connect_timeout 4

   lvs_id BLOG_LVSZW2

 }

vrrp实例定义

定义一个vrrp实例(如果一个局域网内,有多个lvs,注意vrrp实例里面的 virtual_router_id 不要冲突)。

vrrp_instance VI_179 {

  state BACKUP

  interface eth0

  virtual_router_id 179

  priority 75

  advert_int 1

  smtp_alert

  authentication {

    auth_type AH

    auth_pass keep@lived

  }

  virtual_ipaddress {

    220.181.31.179/24

  }

  track_interface {

    eth0

    eth1

  }

}

  1. state 可以设置为MASTER或者BACKUP,同时需要注意这个设置要和priority的设置对应。

  2. interface 指vrrp主要维护的端口,一般是指绑定 virtual_address 的网口。

  3. priority 数字越大,优先级越高。

  4. advert_int 表示协商间隔时间,一般默认是1 sec。

  5. authentication 是服务器间协商的认证色设置。

  6. smtp_alert 是说这个vrrp开启邮件报警。

  7. virtual_ipaddress 就是绑定到这个vrrp的虚拟ip。

  8. track_interface 设置检测的网口(下面实例配置中,如果eth0或者eth1 down掉,就会触发一次vrrp迁移)

virtual_server设置

定义一个虚拟服务器设置。

virtual_server 220.181.31.179 80 {

  delay_loop 8

  lb_algo wrr

  lb_kind DR

  protocol TCP



  sorry_server 127.0.0.1 80



  include conf.d/blog-china-tele.conf

}

  1. delay_loop 指server polling的延迟时间。

  2. lb_algo 指负责均衡的策略。主要有 rr|wrr|lc|wlc|lblc|sh|dh 。

  3. lb_kind 指服务器的负载均衡模式。主要有 NAT|DR|TUN 。

3. protocol 当前只有TCP

  1. sorry_server 是指所以后端服务器全部挂掉的时候指向的服务器(主要是用于挂错误页之类的)。

  2. include 导入的是realserver的配置。

real_server

定义一个后端的real_server。

real_server 172.17.0.7 80 {

  weight 50

  TCP_CHECK {

    connect_port 80

    connect_timeout 4

  }

}

  1. weight 指权重,数字越大接受到的请求越多。

  2. TCP_CHECK 定义了对后端的检测参数

在线配置流程

  1. keepalived服务器要求

  2. keepalived主要要求服务器的网卡对小包转发性能

    推荐使用intel系列的网卡。如果是BC家的网卡,请注意高InPPS的数据。如果是早期的无多队列的网卡,一般InPPS最多在5w~7w间。BC家的网卡在高InPPS下会工作异常。在当前的网络环境下,推荐使用多队列的网卡。

  3. 多队列网卡绑定,这个目前只能手工绑定。 提取中断列表脚本

    #!/bin/bash
    
    for i in `ls /proc/irq/*/eth*TxRx*`;do echo $i;done |sed -e s:\\/:\ :g|awk '{print "/"$1"/"$2"/"$3"/smp_affinity"}'
    
    

    然后手动生成类似

     echo "00000400" > /proc/irq/133/smp_affinity
    
     echo "00000800" > /proc/irq/134/smp_affinity
    
     echo "00001000" > /proc/irq/135/smp_affinity
    
     echo "00002000" > /proc/irq/136/smp_affinity
    
     echo "00004000" > /proc/irq/137/smp_affinity
    
     echo "00008000" > /proc/irq/138/smp_affinity
    
    ...
    
    

    这样的shell语句到/etc/rc.local。

  4. 防火墙设置上开启对应的服务端口。

  5. sysctl调整

    fs.file-max = 3145728
    
    kernel.printk = 4 4 1 7
    
    kernel.shmmax = 1073741824
    
    net.ipv4.ip_local_port_range = 8192 65535
    
    net.ipv4.ip_nonlocal_bind = 1
    
    net.ipv4.netfilter.ip_conntrack_max = 1048576
    
    net.ipv4.tcp_max_tw_buckets = 1048576
    
    net.ipv4.tcp_syncookies = 1
    
    net.ipv4.tcp_rmem = 4096 87380 4120576
    
    net.ipv4.tcp_wmem = 4096 16384 4120576
    
    
  6. 后端服务器设置

  7. 开启对应的服务,确保上面的数据和当前在线的服务器一致。

  8. 防火墙上开启对应的服务端口(如果是高版本的shorewall,注意ROUTE_FILTER=Keep)

  9. sysctl调整

    主要需要修改arp和rp_filter的设置。

    net.ipv4.conf.all.arp_announce = 2
    
    net.ipv4.conf.default.arp_announce = 2
    
    net.ipv4.conf.eth0.arp_announce = 2
    
    net.ipv4.conf.eth1.arp_announce = 2
    
    net.ipv4.conf.lo.arp_announce = 2
    
    net.ipv4.conf.all.arp_ignore = 1
    
    net.ipv4.conf.default.arp_ignore = 1
    
    net.ipv4.conf.eth0.arp_ignore = 1
    
    net.ipv4.conf.eth1.arp_ignore = 1
    
    net.ipv4.conf.lo.arp_ignore = 1
    
    net.ipv4.conf.all.rp_filter = 0
    
    net.ipv4.conf.default.rp_filter = 0
    
    net.ipv4.conf.eth0.rp_filter = 0
    
    net.ipv4.conf.eth1.rp_filter = 0
    
    net.ipv4.conf.lo.rp_filter = 0
    
    net.ipv4.ip_local_port_range = 8192 65535
    
    net.ipv4.ip_nonlocal_bind = 1
    
    net.ipv4.netfilter.ip_conntrack_max = 4194304
    
    net.ipv4.tcp_max_tw_buckets = 1048576
    
    net.ipv4.tcp_syncookies = 1
    
    net.ipv4.tcp_rmem = 4096 87380 4120576
    
    net.ipv4.tcp_wmem = 4096 16384 4120576
    
    
  10. 修改网络配置,创建 dummy0 设置,将 keepalived 的 virtual_ipaddress 绑定到dummy0上。

  11. 添加后端服务器

  12. 通知相关人员测试后端服务器

  13. 修改 keepalived 的 realserver 配置

  14. 如果是针对相册或者博客的 keepalived 服务器,那么请同时修改后端的 apache 的 rpaf 模块设置。

  15. apache 的 rpaf 配置上线后,再上线 keepalived 配置。

  16. 再次通知相关人员观察线上情况。

Keepalived工具

最主要的工具是ipvsadm。

ipvsadm -ln --rate

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port                 CPS    InPPS   OutPPS    InBPS   OutBPS

  -> RemoteAddress:Port

TCP  220.181.31.152:80                   8       74        0    14739        0

  -> 172.19.0.56:80                      3       25        0     4343        0

  -> 172.19.0.114:80                     3       24        0     5187        0

  -> 172.19.0.133:80                     3       25        0     5208        0

TCP  220.181.31.153:80                   0        0        0        0        0

  -> 172.19.0.56:80                      0        0        0        0        0

  -> 172.19.0.114:80                     0        0        0        0        0

  -> 172.19.0.133:80                     0        0        0        0        0

TroubleShoot

  1. keepalive无法工作

使用ipvsadmin检查是否有数据包转发到后端服务器。如果有,那么检查后端服务器的防火墙设置,sysctl设置和dummy0设置。如果没有,那么检查 virtual_ipaddress 是否正常,检查网卡中断是否正常。

延伸阅读文档

Keepalived.conf

smp_affinity说明

 

你可能感兴趣的:(keepalived)