问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Keepalived 进阶秘籍:全方位配置优化

创作时间:
作者:
@小白创作中心

Keepalived 进阶秘籍:全方位配置优化

引用
CSDN
1.
https://m.blog.csdn.net/qq_40477248/article/details/144957698

Keepalived是一种用于实现服务器高可用性的软件,广泛应用于负载均衡和故障切换场景。本文将详细介绍Keepalived的高级配置优化,包括内核参数优化、资源限制优化以及Keepalived核心模块的配置说明。此外,还将对比Keepalived与Heartbeat、Corosync在集群管理方面的异同,帮助读者更好地理解这三种工具的特点和适用场景。

1. sysctl.conf参数优化

为了确保Keepalived服务器在生产环境中的稳定运行,需要对内核参数进行合理的优化。以下是一些关键参数的配置建议:

# /etc/sysctl.conf

# timewait的数量,默认是180000。
net.ipv4.tcp_max_tw_buckets = 6000
# 支持更大的TCP窗口,如果TCP窗口超过65535(64K)必须设置为1
net.ipv4.tcp_window_scaling = 1
# 允许系统打开的端口范围。
net.ipv4.ip_local_port_range = 1024 65000
# 启用timewait 快速回收。
net.ipv4.tcp_tw_recycle = 1
# 开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接。
net.ipv4.tcp_tw_reuse = 1
# 开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理。
net.ipv4.tcp_syncookies = 1
# 函数的backlog 默认会给我们内核参数的net.core.somaxconn 限制到128,而,所以有必要调整这个值。
net.core.somaxconn = 32768
# 表示当每个网络接口 接受数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目,一般默认值128。
net.core.netdev_max_backlog = 32768
# 记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M 内存的系统而言,缺省值是1024,小内存的系统则是128。
net.ipv4.tcp_max_syn_backlog = 65535
# 系统中最多有多少个TCP 套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS 攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。
net.ipv4.tcp_max_orphans = 262144
# 时间戳可以避免序列号的卷绕。一个1Gbps 的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉。
net.ipv4.tcp_timestamps = 0
# 为了打开对端的连接,内核需要发送一个SYN 并附带一个回应前面一个SYN 的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK 包的数量。
net.ipv4.tcp_synack_retries = 1
# 在内核放弃建立连接之前发送SYN 包的数量。
net.ipv4.tcp_syn_retries = 1
# 如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2 状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180 秒,3你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2 的危险性比FIN-WAIT-1 要小,因为它最多只能吃掉1.5K 内存,但是它们的生存期长些。
net.ipv4.tcp_fin_timeout = 1
# 当keepalive 起用的时候,表示保活时间是 60 秒(默认2小时),也就60秒内如果没有任何连接相关的活动,则会启动保活机制。
net.ipv4.tcp_keepalive_time = 60
# 表示检测 2 次无响应,认为对方是不可达的,从而中断本次的连接。
net.ipv4.tcp_keepalive_probes = 2
# 表示每次检测间隔 2秒。
net.ipv4.tcp_keepalive_intvl = 2

2. limits参数优化

为了支持高并发连接,需要调整系统资源限制。以下是在/etc/security/limits.d/limits.conf中的配置示例:

# 设置宿主机接受高并发连接数nproc
*       soft    nofile  65536
*       hard    nofile  65536
*       soft    nproc   163840
*       hard    nproc   163840

3. global_defs模块区域

global_defs模块用于定义全局参数,主要包括:

  • notification_email:故障发生时给谁发邮件通知。
  • notification_email_from:通知邮件从哪个地址发出。
  • smtp_server:通知邮件的smtp地址。
  • smtp_connect_timeout:连接smtp服务器的超时时间。
  • router_id:标志本节点的字符串,通常为ip地址,故障发生时邮件会通知到。

4. vrrp_script模块区域

vrrp_script模块用于健康检查,当检查失败时会将vrrp_instance的priority减少相应的值。实际生产中通常会配置如下:

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight 2
}

5. vrrp_instance VI_1实例定义配置模块区域

vrrp_instance模块用于定义VRRP实例,以下是一个示例配置:

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1234
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_nginx
    }
}

6. virtual_server模块区域

virtual_server模块用于定义虚拟服务器,以下是一个示例配置:

virtual_server 192.168.1.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
    real_server 192.168.1.101 80 {
        weight 1
        SSL_GET {
            url {
                path /
                digest 123456
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.102 80 {
        weight 1
        SSL_GET {
            url {
                path /
                digest 123456
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

7. Keepalived与Heartbeat、Corosync比较

在选择集群组件时,Keepalived、Heartbeat和Corosync各有优劣:

特征
Keepalived
Heartbeat
Corosync
通信协议
使用VRRP协议
使用心跳协议
使用心跳协议
应用场景
前端高可用
服务高可用
服务高可用
共享存储
不需要
需要
需要
节点数量
适合两节点
适合多节点
适合多节点
常见组合
LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived
Heartbeatv+Pacemaker+NFS
Corosync+Pacemaker+NFS
部署复杂度
简单
复杂
类似Heartbeat
性能
满足生产需求
需要共享存储
需要共享存储
应用场景
应用广泛
主要为后端服务提供高可用
类似Heartbeat

在实际生产环境中,Keepalived因其部署简单、前端高可用使用多、不需要共享存储、性能完全满足生产需求等特点,成为更受欢迎的选择。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号