安装

yum install -y haproxy

配置

vim /etc/haproxy/haproxy.cfg

配置一个状态检查接口和流量代理接口

  1. #---------------------------------------------------------------------
  2. # Example configuration for a possible web application. See the
  3. # full configuration options online.
  4. #
  5. # http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
  6. #
  7. #---------------------------------------------------------------------
  8. #---------------------------------------------------------------------
  9. # Global settings
  10. #---------------------------------------------------------------------
  11. global
  12. # to have these messages end up in /var/log/haproxy.log you will
  13. # need to:
  14. #
  15. # 1) configure syslog to accept network log events. This is done
  16. # by adding the '-r' option to the SYSLOGD_OPTIONS in
  17. # /etc/sysconfig/syslog
  18. #
  19. # 2) configure local2 events to go to the /var/log/haproxy.log
  20. # file. A line like the following can be added to
  21. # /etc/sysconfig/syslog
  22. #
  23. # local2.* /var/log/haproxy.log
  24. #
  25. ## 定义全局的syslog服务器,最多可以定义2个
  26. ## local0 是日志设备,到时候对应 /etc/rsyslog.conf 中的配置,默认回收 info 的日志级别
  27. log 127.0.0.1 local0 info
  28. # log 127.0.0.1 local2 info
  29. ## 修改 HaProxy 的工作目录到指定的目录,
  30. ## 并且在放弃权限之前执行 chroot() 操作,可以提升 haproxy 的安全级别
  31. chroot /var/lib/haproxy
  32. ## 进程文件(默认路径 /var/run/haproxy.pid
  33. pidfile /var/run/haproxy.pid
  34. ## 设定每个 haproxy 进程所接受的最大并发连接数
  35. ## 其等同于命令行选项 -n,"ulimit n" 自动计算的结果正式参照从参数设定的
  36. maxconn 4000
  37. ## uid, 此处用 user 名代替,需要 useradd -g haproxy haproxy
  38. user haproxy
  39. ## gid, 此处用 group 名代理,需要 groupadd haproxy
  40. group haproxy
  41. ## 作为后台守护进程形式运行
  42. daemon
  43. ## 指定启动的 haproxy 进程个数
  44. ## --->作为守护进程形式时候,仅能设置一个
  45. nbproc
  46. ########################################################
  47. ### 多节点部署时 node 、 description 的值要 做相应调整。
  48. ########################################################
  49. ## 定义当前节点的名称,用于 HA 场景中多 haproxy 进程共享同一个 IP 地址时
  50. node mycat-proxy-1
  51. ## 当前实例的描述信息
  52. description mycat-proxy-1
  53. # turn on stats unix socket
  54. stats socket /var/lib/haproxy/stats
  55. #---------------------------------------------------------------------
  56. # common defaults that all the 'listen' and 'backend' sections will
  57. # use if not designated in their block
  58. #---------------------------------------------------------------------
  59. ## defaults 用于为所有其他配置段提供默认参数,这默认配置参数可由下一个 " 所重新设定
  60. defaults
  61. ## 所处理的模式 (tcp四层 , http七层 , health状态检查 只会返回 OK)
  62. ### tcp: 实例运行于纯 tcp 模式,在客户端和服务器端之间将建立一个全双工的连接,
  63. ######## 且不会对 7 层报文做任何类型的检查,此为默认模式
  64. ### 实例运行于 http 模式,客户端请求在转发至后端服务器之前将被深度分析,
  65. ######## 所有不与 RFC 模式兼容的请求都会被拒绝
  66. ### health :实例运行于 health 模式 ,其对入站请求仅响应 OK ”信息并关闭连接
  67. ######## 且不会记录任何日志信息 ,此模式将用于相应外部组件的监控状态检测请求
  68. mode http
  69. ## 继承 global 中 log 的定义
  70. log global
  71. # 日志格式
  72. option httplog
  73. # 日志中不记录负载均衡的心跳检测机制
  74. option dontlognull
  75. #option http-server-close
  76. #option forwardfor except 127.0.0.0/8
  77. ## serverId 对应的服务器挂掉后 强制定向到其他健康的服务器
  78. option redispatch
  79. #retries 3
  80. #timeout http-request 10s
  81. #timeout queue 1m
  82. ##连接超时 默认是毫秒 单位可以设置 us,ms,s,m,h,d)
  83. timeout connect 5000
  84. # 客户端超时,默认ms,可添加时间单位
  85. timeout client 50s
  86. # 服务器超时,默认 ms,可添加时间单位
  87. timeout server 5s
  88. #timeout http-keep-alive 10s
  89. #timeout check 10s
  90. ## 前端的最大并发连接数(默认为 2000)
  91. ### 其不能用于 backend 区段,对于大型站点来说,可以尽可能提高此值以便让 haproxy 管理连接队列,
  92. ### 从而避免无法应答用户请求。 当然,此最大值不能超过“ global ”段中的定义。
  93. ### 此外,需要留心的是, haproxy 会为每个连接维持两个缓冲,每个缓存的大小为 8KB
  94. ### 再加上其他的数据,每个连接将大约占用 17KB 的 RAM 空间,这意味着经过适当优化后
  95. ### 有着 1GB 的可用 RAM 空间时将维护 40000 50000 并发连接。
  96. ### 如果指定了一个过大值,极端场景中,其最终所占据的空间可能会超过当前主机的可用内存,
  97. ### 这可能会带来意想不到的结果,因此,将其设定一个可接受值放为明智绝对,其默认为 2000
  98. maxconn 3000
  99. ## listen 名称可自定义
  100. ## 用于定义通过关联“前端”和“后端”一个完整的代理,通常只对 TCP 流量有用
  101. ## HAProxy 的状态信息统计页面
  102. listen admin_stats
  103. # 绑定的ip及监听的端口
  104. bind 0.0.0.0:4001
  105. # 访问协议
  106. mode http
  107. # URI 相对地址
  108. stats uri /show
  109. # 统计报告格式
  110. stats realm Global\ statistics
  111. ## 启用日志记录 HTTP 请求
  112. # option httplog
  113. # 用于登录监控界面的账户密码
  114. stats auth admin:abc666666
  115. # 数据库负载均衡配置
  116. listen proxy-mysql
  117. # 绑定的ip及监听的端口
  118. bind 0.0.0.0:3306
  119. # 访问协议
  120. mode tcp
  121. # 负载均衡算法
  122. # roundrobin:轮询
  123. # static-rr:权重
  124. # leastconn:最少连接
  125. # source:请求源ip
  126. balance roundrobin
  127. # 记录 tcp 请求日志
  128. option tcplog
  129. ## 允许向 server 和 client 发送 keepalive 检测死链
  130. option tcpka
  131. ### 向后端服务器的 48700 端口(端口值在后端服务器上通过 xinetd 配置)发送 OPTIONS 请求
  132. ### 原理请参考 HTTP 协议 ) HAProxy 会根据返回内容来判断后端服务是否可用
  133. ### 2xx 和 3xx 的响应码表示健康状态,其他响应码或无响应表示服务器故障。
  134. option httpchk OPTIONS * HTTP/1.1 r nHost: www ## 后端服务状态检测
  135. # 需要被负载均衡的主机
  136. ## 格式: server <name> <address>[:[port]] [param*]
  137. ### serser 在后端声明一个 server ,只能用于 listen 和 backend 区段。
  138. ### <name> 为此服务器指定的内部名称,其将会出现在日志及警告信息中
  139. ### <address> 此服务器的 IPv4 地址,也支持使用可解析的主机名,但要在启动时需要解析主机名至响应的 IPV4 地址
  140. ### [:[port]] 指定将客户端连接请求发往此服务器时的目标端口,此为可选项
  141. ### [param*[ 为此 server 设定的一系列参数,均为可选项,参数比较多,下面仅说明几个常用的参数:
  142. ###### weight: 权重,默 认为 1 ,最大值为 256 0 表示不参与负载均衡
  143. ###### backup: 设定为备用服务器,仅在负载均衡场景中的其他 server 均不可以启用此 server
  144. ###### check: 启动对此 server 执行监控状态检查,其可以借助于额外的其他参数完成更精细的设定
  145. ###### inter: 设定监控状态检查的时间间隔,单位为毫秒,默认为 2000
  146. ########## 也可以使用 fastinter 和 downinter 来根据服务器端专题优化此事件延迟
  147. ###### rise: 设置 server 从离线状态转换至正常状态需要检查的次数(不设置的情况下,默认值为 2
  148. ###### fail: 设置 server 从正常状态转换至离线状态需要检查的次数(不设置的情况下,默认值为 3
  149. ###### cookie: 为指定 server 设定 cookie 值,此处指定的值将会在请求入站时被检查,
  150. ########## 第一次为此值挑选的 server 将会被后续的请求所选中,其目的在于实现持久连接的功能
  151. ###### maxconn: 指定此服务器接受的最大并发连接数,如果发往此服务器的连接数目高于此处指定的值
  152. ########## 其将被放置于请求队列,以等待其他连接被释放
  153. # server mycat_01 192.168.1.211:8066 check port 8066 weight 1 maxconn 2000
  154. server mycat_02 192.168.1.212:8066 check port 8066 weight 1 maxconn 2000

运行

  • 根据以上 HAProxy 配置文件要求做以下配置
  1. 添加 haproxy 用 户 组 和用户

    groupadd haproxy useradd g haproxy haproxy

  2. 创建 chroot 运行的路径

    mkdir /usr/share/haproxy

  3. 防火墙中打开 3306 端口 和 4001 端口

  4. 运行

    systemctl start haproxy

查看状态

  • 浏览器键入 http://<ip>:4001/show ,键入配置文件中的账号密码即可查看

    端口

  • 可自行配置

    • 这里为了将 MyCat 后面的 db 集群当成黑盒,将转发接口设置为 3306,让应用当成一个 db 来使用 | 端口 | 作用 | | —- | —- | | 3306 | TCP/IP 转发端口 | | 4001 | 监控界面端口 |

下面是未经过实验的

开启 rsyslog 的 haproxy 日志记录功能

  • 默认情况下 haproxy 是 不记录日志的,如果需要记录日志,还需要配置 系 统的 syslog 在 linux 系统中是 rsyslog 服 务。 syslog 服务器可以用作一个网络中的日志监控中心, rsyslog 是一个开源工具,被广泛用于 Linux 系统以通过 TCP/UDP 协议转发或接收日志消息

安装配置 rsyslog 服务

  • 安装和配置

    yum install rsyslog # 没安装的情况下执行安装 vim /etc/rsyslog.conf

  1. # 允许 514 端口接收使用 UDP 和 TCP 协议转发过来的日志,
  2. # provides UDP syslog reception
  3. module(load="imudp")
  4. input(type="imudp" port="514")
  5. # provides TCP syslog reception
  6. module(load="imtcp")
  7. input(type="imtcp" port="514")
  8. # -------------------
  9. ###########################
  10. #### GLOBAL DIRECTIVES ####
  11. ###########################
  12. # ------------------
  13. #
  14. # Include all config files in /etc/rsyslog.d/
  15. #
  16. $IncludeConfig /etc/rsyslog.d/*.conf
  • 创建 haproxy 的 日志配置文件
    • 看上面文件的注释,rsyslog 服务会来此目录加载配置

      cd /etc/rsyslog.d/ touch haproxy.conf vim /etc/rsyslog.d/haproxy.conf

  1. local0.* /var/log/haproxy.log
  2. &~
  • 如果不加上面的的 配置则除了在 /var/log/haproxy.log 中写入日志外,也会写入 /var/message 文件中配置
    • 保存后重启 rsyslog 服 务

配置系统内核 的 IP 包转 发功能

vim /etc/sysctl.conf

  1. net.ipv4.ip_forward = 1
  • 使配置生效

    sysctl p