Keepalived配置流程
Keepalived配置流程注意事项
[*]使用 Keepalived,主要是为了服务器的高可用性。
[*]当前线上的 Keepalived 主要使用 DR 模式。
[*]针对的主要服务是上传量小,下载量大的服务。
目的
使用Keepalived的主要目的是2个:
[*] 高可用性 * IP 地址主从备份,防止单点故障
[*] 方便扩展 * 早期单台服务器的网络带宽有限,使用 Keepalived的DR模式,可以很容易的扩展服务器的可用带宽。
配置说明
全局定义
主要是定义通知邮件地址和 lvs_id (lvs_id 在failover中会用到)
global_defs {
notification_email {
NNTP.org.163.sa.space@news.163.org
}
notification_email_from keepalived@lvszw2.space.163.org
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
}
}
[*] state 可以设置为MASTER或者BACKUP,同时需要注意这个设置要和priority的设置对应。
[*] interface 指vrrp主要维护的端口,一般是指绑定 virtual_address 的网口。
[*] priority 数字越大,优先级越高。
[*] advert_int 表示协商间隔时间,一般默认是1 sec。
[*] authentication 是服务器间协商的认证色设置。
[*] smtp_alert 是说这个vrrp开启邮件报警。
[*] virtual_ipaddress 就是绑定到这个vrrp的虚拟ip。
[*] 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
}
[*] delay_loop 指server polling的延迟时间。
[*] lb_algo 指负责均衡的策略。主要有 rr|wrr|lc|wlc|lblc|sh|dh 。
[*] lb_kind 指服务器的负载均衡模式。主要有 NAT|DR|TUN 。
3. protocol 当前只有TCP
[*] sorry_server 是指所以后端服务器全部挂掉的时候指向的服务器(主要是用于挂错误页之类的)。
[*] include 导入的是realserver的配置。
real_server
定义一个后端的real_server。
real_server 172.17.0.7 80 {
weight 50
TCP_CHECK {
connect_port 80
connect_timeout 4
}
}
[*] weight 指权重,数字越大接受到的请求越多。
[*] TCP_CHECK 定义了对后端的检测参数
在线配置流程
[*] keepalived服务器要求
[*] keepalived主要要求服务器的网卡对小包转发性能
推荐使用intel系列的网卡。如果是BC家的网卡,请注意高InPPS的数据。如果是早期的无多队列的网卡,一般InPPS最多在5w~7w间。BC家的网卡在高InPPS下会工作异常。在当前的网络环境下,推荐使用多队列的网卡。
[*] 多队列网卡绑定,这个目前只能手工绑定。 提取中断列表脚本
#!/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。
[*] 防火墙设置上开启对应的服务端口。
[*] 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
[*] 后端服务器设置
[*] 开启对应的服务,确保上面的数据和当前在线的服务器一致。
[*] 防火墙上开启对应的服务端口(如果是高版本的shorewall,注意ROUTE_FILTER=Keep)
[*] 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
[*] 修改网络配置,创建 dummy0 设置,将 keepalived 的 virtual_ipaddress 绑定到dummy0上。
[*] 添加后端服务器
[*] 通知相关人员测试后端服务器
[*] 修改 keepalived 的 realserver 配置
[*] 如果是针对相册或者博客的 keepalived 服务器,那么请同时修改后端的 apache 的 rpaf 模块设置。
[*] apache 的 rpaf 配置上线后,再上线 keepalived 配置。
[*] 再次通知相关人员观察线上情况。
Keepalived工具
最主要的工具是ipvsadm。
ipvsadm -ln --rate
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port CPS InPPS OutPPS InBPS OutBPS
-> RemoteAddress:Port
TCP220.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
TCP220.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
[*]keepalive无法工作
使用ipvsadmin检查是否有数据包转发到后端服务器。如果有,那么检查后端服务器的防火墙设置,sysctl设置和dummy0设置。如果没有,那么检查 virtual_ipaddress 是否正常,检查网卡中断是否正常。
延伸阅读文档
Keepalived.conf
smp_affinity说明
页:
[1]