haproxy的Linux系统参数配置及相关工具

运行环境:haproxy1.5.18 + centos7.4
--1. cat /etc/sysctl.conf 
### 系统中所允许的文件句柄的最大数目
fs.file-max = 12553500
### 单个进程所允许的文件句柄的最大数目
fs.nr_open = 12453500
### 内核允许使用的共享内存大 Controls the maximum number of shared memory segments, in pages
kernel.shmall = 4294967296
###单个共享内存段的最大值 Controls the maximum shared segment size, in bytes
kernel.shmmax = 68719476736
### 内核中消息队列中消息的最大值 Controls the maximum size of a message, in bytes
kernel.msgmax = 65536
### 系统救援工具
kernel.sysrq = 0
### 在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到缓存队列的数据包的最大数目
net.core.netdev_max_backlog = 2000000
### 默认的TCP数据接收窗口大小(字节)
net.core.rmem_default = 699040
### 最大的TCP数据接收窗口(字节)
net.core.rmem_max = 50331648
### 默认的TCP数据发送窗口大小(字节)
net.core.wmem_default = 131072
### 最大的TCP数据发送窗口(字节)
net.core.wmem_max = 33554432
### 定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数
net.core.somaxconn = 65535

### TCP/UDP协议允许使用的本地端口号
net.ipv4.ip_local_port_range = 15000 65000
net.ipv4.ip_nonlocal_bind = 1
### 对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间(秒)
net.ipv4.tcp_fin_timeout = 7
### TCP发送keepalive探测消息的间隔时间(秒),用于确认TCP连接是否有效
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_max_orphans = 3276800
### 对于还未获得对方确认的连接请求,可保存在队列中的最大数目
net.ipv4.tcp_max_syn_backlog = 655360
net.ipv4.tcp_max_tw_buckets = 6000000
### 确定TCP栈应该如何反映内存使用,每个值的单位都是内存页(通常是4KB)
### 第一个值是内存使用的下限;第二个值是内存压力模式开始对缓冲区使用应用压力的上限;第三个值是内存使用的上限.
net.ipv4.tcp_mem = 94500000 915000000 927000000
### 为自动调优定义socket使用的内存。
### 第一个值是为socket接收缓冲区分配的最少字节数;
### 第二个值是默认值(该值会被rmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;
### 第三个值是接收缓冲区空间的最大字节数(该值会被rmem_max覆盖)
net.ipv4.tcp_rmem = 32768 699040 50331648
### 为自动调优定义socket使用的内存。
### 第一个值是为socket发送缓冲区分配的最少字节数;
### 第二个值是默认值(该值会被wmem_default覆盖),缓冲区在系统负载不重的情况下可以增长到这个值;
### 第三个值是发送缓冲区空间的最大字节数(该值会被wmem_max覆盖)
net.ipv4.tcp_wmem = 32768 131072 33554432
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_synack_retries = 2
### 表示是否打开TCP同步标签(syncookie),同步标签可以防止一个套接字在有过多试图连接到达时引起过载
### 内核必须打开了CONFIG_SYN_COOKIES项进行编译,
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_syn_retries = 2
### 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_tw_recycle = 1
### 允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_reuse = 1
### 启用RFC 1323定义的window scaling,要支持超过64KB的TCP窗口,必须启用该值(1表示启用),
### TCP窗口最大至1GB,TCP连接双方都启用时才生效,默认为1
net.ipv4.tcp_window_scaling = 1
### 最大限度使用物理内存
vm.swappiness = 0


--1.1 针对短连接的系统调整(红色部分比较重要)
用来建立连接的本地端口范围,越大越好,默认"32768 61000",推荐"1024 65024"   
net.ipv4.ip_local_port_range  = 1025 65534
 
支持高连接率,默认"1024",推荐"100000"
net.ipv4.tcp_max_syn_backlog = 100000
net.core.netdev_max_backlog = 100000
 
对于向外建立的连接,允许重复使用同一个本地源端口,默认"0",推荐"1"
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
 
每个socket所能允许的尚未被haproxy接受或处理的未完成连接请求数量,默认"128",推荐"65534"
net.core.somaxconn = 65534
 
增大文件句柄数
# cat /proc/sys/fs/file-nr
fs.file-max = 65535
 
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_syncookies = 0
 
--1.2 针对长连接的系统调整
用来建立连接的本地端口范围,越大越好,默认"32768 61000",推荐"1025 65534"   
net.ipv4.ip_local_port_range  = 1025 65534
 
每个TCP连接分配的接收和发送缓冲
# memory allocation min/pressure/max.
# read buffer, write buffer, and buffer space
net.ipv4.tcp_rmem = 10000000 10000000 10000000
net.ipv4.tcp_wmem = 10000000 10000000 10000000
net.ipv4.tcp_mem = 10000000 10000000 10000000
 
net.core.rmem_max = 11960320
net.core.wmem_max = 11960320
net.core.rmem_default = 11960320
net.core.wmem_default = 11960320
net.core.optmem_max = 11960320
net.core.netdev_max_backlog = 300000
 
# turn off selective ACK and timestamps
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0
 
#默认情况下,此参数为1,将大幅削减空闲连接时的CWnd,对长连接如SSL产生负面影响。将其设置为0,可以显著提高性能。


--2.网卡设置:
调大网卡Ring buffer
查看:ethtool -g eth0
设置Ring buffer到上限:ethtool -G eth0 rx 4096;ethtool -G eth0 tx 4096
--生产:
# ethtool -g net1
Ring parameters for net1:
Pre-set maximums:
RX:4096
RX Mini:0
RX Jumbo:0
TX:4096
Current hardware settings:
RX:512
RX Mini:0
RX Jumbo:0
TX:512


--3.根据haproxy官方文档,将Haproxy和网卡中断绑定在同一个cpu,不同的core上能获得最佳性能。
例如: 网卡绑定在CPU0的core0,则haproxy进程绑定在CPU0的core1上效果最佳。因为他们可以尽可
能的利用CPU cycle,同时可以共享CPU L3内存。可以使用如下方法确认同在一个物理CPU的内核:
# cat /sys/bus/cpu/devices/cpu0/topology/core_siblings_list 
0-11,24-35
core0-11,24-35在同一个物理CPU上,共享CPU L3内存。

--4.haproxy 测试配套的工具:
4.1压测工具 apache bench
4.2 监控工具 Ganglia
4.3 负载测试工具: Vegeta https://github.com/tsenart/vegeta

--5.系统命令:
5.1 TCP计数器ListenOverflows大量增加
cat /proc/net/netstat | awk '/TcpExt/ { print $21,$22 }'
5.2 CPU负载查看:
mpstat  -P ALL 1命令查看cpu 都用在哪里
通过 strace -p pid -c 查看HAProxy 进程那个系统调用占用cpu 最多

 

你可能感兴趣的:(Linux)