学习Haproxy (八)
Unix套接字命令(Unix Socket commands)
socat是一个多功能的网络工具,名字来由是“Socket CAT”,可以看作是netcat的N倍加强版,socat的官方网站:http://www.dest-unreach.org/socat/ 。
socat是一个两个独立数据通道之间的双向数据传输的继电器。
这些数据通道包含文件、管道、设备(终端或调制解调器等)、插座(Unix,IP4,IP6 - raw,UDP,TCP)、SSL、SOCKS4客户端或代理CONNECT。
socat支持广播和多播、抽象Unix sockets、Linux tun/tap、GNU readline和PTY。
它提供了分叉、记录和进程间通信的不同模式。多个选项可用于调整socat和其渠道,Socat可以作为TCP中继(一次性或守护进程),作为一个守护进程基于socksifier,
作为一个shell Unix套接字接口,作为IP6的继电器,或面向TCP的程序重定向到一个串行线。
socat的主要特点就是在两个数据流之间建立通道;且支持众多协议和链接方式:ip, tcp, udp, ipv6, pipe,exec,system,open,proxy,openssl,socket等。
使用socat可以查看和设置HAProxy状态,首先得让HAProxy产生出一个sock出来(hatop ,socat都是基于这个的,没这个什么都做不了)。
设置配置文件开启unix socket
在global 下面 加一行:
stats socket /usr/local/haproxy/stats #路径和名字随意
然后重启服务就可以了。
配置文件加入socket这行
权限600,级别admin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
[root@linux-node1 ~] # cat /etc/haproxy/haproxy.cfg global chroot /var/lib/haproxy daemon group haproxy user haproxy log 127.0.0.1:514 local3 info stats socket /var/lib/haproxy/haproxy .sock mode 600 level admin stats timeout 2m defaults log global mode http option httplog option dontlognull timeout client 50000 timeout server 50000 timeout connect 5000 frontend http_front mode http bind *:80 stats uri /haproxy ?stats default_backend http_back backend http_back option forwardfor header X-REAL-IP #option httpchk GET /index.html balance roundrobin server linux-node1 10.0.1.105:8080 # check inter 2000 rise 3 fall 3 weight 1 server linux-node2 10.0.1.106:8080 # check inter 2000 rise 3 fall 3 weight 1 [root@linux-node1 ~] # |
重启服务
1
2
3
4
5
6
7
8
|
[root@linux-node1 ~] # /etc/init.d/haproxy restart Restarting haproxy (via systemctl): [ 确定 ] [root@linux-node1 ~] # [root@linux-node1 ~] # [root@linux-node1 ~] # lsof -i:80 COMMAND PID USER FD TYPE DEVICE SIZE /OFF NODE NAME haproxy 28420 haproxy 5u IPv4 216721 0t0 TCP *:http (LISTEN) [root@linux-node1 ~] # |
查看有没有生成socket
1
2
3
|
[root@linux-node1 ~] # ls /var/lib/haproxy/ haproxy.sock [root@linux-node1 ~] # |
1
2
3
|
[root@linux-node1 ~] # yum list | grep socat socat.x86_64 1.7.2.2-5.el7 base [root@linux-node1 ~] # yum install -y socat |
利用管道查看帮助命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
[root@linux-node1 ~] # echo "help" | socat stdio /var/lib/haproxy/haproxy.sock Unknown command . Please enter one of the following commands only : clear counters : clear max statistics counters (add 'all' for all counters) clear table : remove an entry from a table help : this message prompt : toggle interactive mode with prompt quit : disconnect show backend : list backends in the current running config show info : report information about the running process show pools : report information about the memory pools usage show stat : report counters for each proxy and server show errors : report last request and response errors for each proxy show sess [ id ] : report the list of current sessions or dump this session show table [ id ]: report table usage stats or dump this table's contents show servers state [ id ]: dump volatile server information ( for backend < id >) get weight : report a server's current weight set weight : change a server's weight set server : change a server's state, weight or address set table [ id ] : update or create a table entry's data set timeout : change a timeout setting set maxconn : change a maxconn setting set rate-limit : change a rate limiting value disable : put a server or frontend in maintenance mode enable : re- enable a server or frontend which is in maintenance mode shutdown : kill a session or a frontend (eg:to release listening ports) show acl [ id ] : report avalaible acls or dump an acl's contents get acl : reports the patterns matching a sample for an ACL add acl : add acl entry del acl : delete acl entry clear acl < id > : clear the content of this acl show map [ id ] : report avalaible maps or dump a map's contents get map : reports the keys and values matching a sample for a map set map : modify map entry add map : add map entry del map : delete map entry clear map < id > : clear the content of this map set ssl <stmt> : set statement for ssl [root@linux-node1 ~] # |
上面把支持的命令都显示出来了
下面就把页面监控上的东西都列出来了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
[root@linux-node1 ~] # echo "show info" | socat stdio /var/lib/haproxy/haproxy.sock Name: HAProxy Version: 1.6.3 Release_date: 2015 /12/25 Nbproc: 1 Process_num: 1 Pid: 28420 Uptime: 0d 0h09m43s Uptime_sec: 583 Memmax_MB: 0 Ulimit-n: 4031 Maxsock: 4031 Maxconn: 2000 Hard_maxconn: 2000 CurrConns: 0 CumConns: 2 CumReq: 2 Maxpipes: 0 PipesUsed: 0 PipesFree: 0 ConnRate: 0 ConnRateLimit: 0 MaxConnRate: 0 SessRate: 0 SessRateLimit: 0 MaxSessRate: 0 CompressBpsIn: 0 CompressBpsOut: 0 CompressBpsRateLim: 0 Tasks: 5 Run_queue: 1 Idle_pct: 100 node: linux-node1.example.com description: [root@linux-node1 ~] # |
通过disable或者enable可以关闭或者启动某台主机
准备把linux-node2关闭了
这里的主机名和页面显示的以及配置文件配置的一致
1
2
|
[root@linux-node1 ~] # echo "disable server linux-node2" | socat stdio /var/lib/haproxy/haproxy.sock Require 'backend/server' . |
1
2
3
|
[root@linux-node1 ~] # echo "disable server http_back/linux-node2" | socat stdio /var/lib/haproxy/haproxy.sock [root@linux-node1 ~] # |
1
|
[root@linux-node1 ~] # echo "enable server http_back/linux-node2" | socat stdio /var/lib/haproxy/haproxy.sock |
haproxy调优的地方
1
2
3
|
1、不设置进程,默认就是1,单进程 2、网卡可能跑慢,换成万兆网卡,或者拆业务,拆成不同集群 3、haproxy的端口可能被用光,因为linux提供端口最多65535。 |
1
2
3
|
[root@linux-node1 ~] # cat /proc/sys/net/ipv4/ip_local_port_range 32768 60999 [root@linux-node1 ~] # |
1
2
3
|
[root@linux-node1 ~] # cat /proc/sys/net/ipv4/tcp_tw_reuse 0 [root@linux-node1 ~] # |
1
2
3
|
[root@linux-node1 ~] # cat /proc/sys/net/ipv4/tcp_fin_timeout 60 [root@linux-node1 ~] # |