zoukankan      html  css  js  c++  java
  • 学习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 ~]#
     
    通过socat和socket通信,它是cocket cat的缩写,安装
    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'.

      

    格式如下。 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)改local的端口范围。
    1
    2
    3
    [root@linux-node1 ~]# cat /proc/sys/net/ipv4/ip_local_port_range
    32768   60999
    [root@linux-node1 ~]#
    (2)改tcp的tw端口的复用,启用reuse,禁用recycle,改成1 
    1
    2
    3
    [root@linux-node1 ~]# cat /proc/sys/net/ipv4/tcp_tw_reuse
    0
    [root@linux-node1 ~]#
    (3)可以缩短tw的时间,默认是60秒。
    1
    2
    3
    [root@linux-node1 ~]# cat /proc/sys/net/ipv4/tcp_fin_timeout
    60
    [root@linux-node1 ~]#
    (4)使用多个IP

     

     

  • 相关阅读:
    webpack入坑之旅(五)加载vue单文件组件
    webpack入坑之旅(四)扬帆起航
    webpack入坑之旅(三)webpack.config入门
    webpack入坑之旅(二)loader入门
    模块的总结
    项目中的bug
    详解懒汉模式和饿汉模式以及他们的改进
    感悟(岁月)
    浅谈js中的this的用法
    图解http协议(一章了解web及其网络基础h)
  • 原文地址:https://www.cnblogs.com/wuhg/p/11452963.html
Copyright © 2011-2022 走看看