文章目录
- 1.sysctl.conf参数优化
- 2. limits参数优化
- 3. global_defs模块区域
- 4.vrrp_script模块区域
- 5.vrrp_instance VI_1实例定义配置模块区域
- 6. virtual_server模块区域
- 7.Keepalived与Heartbeat、Corosync比较
前言:
作为一台Keepalived服务器,有必要对内核配置进行合理的参数优化,优化目的是在生产环境使用过程中,尽量避免应自身配置出现问题导致业务问题,降低用户体验,进而影响全局,给公司造成不必要的损失。
1.sysctl.conf参数优化
/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参数优化
设置宿主机接受高并发连接数nproc/etc/security/limits.d/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 163840
* hard nproc 163840Keepalived.conf 配置说明
以最新的Keepalived.2.2.7的官方配置文件为例,包括以下几个配置区域,分别:
global_defs 模块区域
vrrp_script 模块区域
vrrp_instance VI_1 模块区域
virtual_server 模块区域
3. global_defs模块区域
notification_email 故障发生时给谁发邮件通知。
notification_email_from 通知邮件从哪个地址发出。
smtp_server 通知邮件的smtp地址。
smtp_connect_timeout 连接smtp服务器的超时时间。
router_id 标志本节点的字符串,通常为ip地址,故障发生时邮件会通知到。
4.vrrp_script模块区域
用来做健康检查的,当检查失败时会将vrrp_instance的priority减少相应的值。
实际生产都作如下配置:
5.vrrp_instance VI_1实例定义配置模块区域
vrrp_instance VI_1
定义一个vrrp_install实例,名称为VI_1。
state MASTER
表示该实例的角色状态,有AMSTER和BACKUP主备状态。
virtual_router_id
虚拟路由标志。同组的virtual_router_id应该保持一致。它将决定多播的MAC地址。
Priority
设置本节点的优先级,优先级高的为master。
advert_int
MASTER与BACKUP同步检查的时间间隔。
authentication
权限认证配置,包括认证类型和认证密码。
virtual_ipaddress
配置虚拟ip,即为VIP。
6. virtual_server模块区域
virtual_server
定义一个虚拟服务器,这个ip是virtual_address中定义的其中一个。语法格式:ip+空格+服务端口。
delay_loop 6
健康检查时间间隔,单位:秒。
lb_algo rr
调度算法为轮询,不考虑机器性能,每台均衡调度。
lb_kind NAT
转发模式为NAT模式。
persistence_timeout 50
与客户端保持互话粘性。
protocol TCP
转发协议,分为TCP和UDP两种。
real_server
真实服务器IP和端口,可以定义多个。
weight 1
设置权重默认为1,0为失效。
SSL_GET
健康检测方式,可选有 SSL_GET、TCP_CHECK、HTTP_GET。
url
检查url,可以指定多个。
Path
检查的url路径。
digest
需要检查到的内容。检查后的摘要信息。
connect_timeout 3
服务连接超时时长,单位:秒。
retry 3
服务连接失败重试次数。
delay_before_retry 3
检测的时间间隔, 单位:秒。
7.Keepalived与Heartbeat、Corosync比较
Heartbeat、Corosync、Keepalived这三个集群组件我们到底选哪个好,可以作个对比。
项目 | Keepalived | Heartbeat | Corosync |
---|---|---|---|
比较 | 1、Keepalived使用的vrrp协议进行通信和选举方式 2、Keepalived中一般用于前端高可用 3、且不需要共享存储, 4、一般常用于两个节点的高可用。 5、常用的组合有LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived 6、部署简单、前端高可用使用多,不需要共享存储,性能完全满足生产需求,实际生活环境多选择Keepalived | 1、Heartbeat使用心跳进行通信和选举方式 2、Heartbeat一般用于服务的高可用 3、需要共享存储 4、一般用于多节点的高可用 5、常见的组合有Heartbeatv+Pacemaker+NFS 6、部署较为复杂,主要为后端服务提供高可用,需要共享存储,如mysql,应用场景不如Keepalived广泛 | 1、 Corosync使用心跳进行通信和选举方式 2、Corosync一般用于服务的高可用 3、需要共享存储 4、一般用于多节点的高可用 5、常见的组合有Corosync+Pacemaker+NFS 6、Corosync类同Hearbeat |