HAProxy是一个C语言编写的免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上。
HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。
https://www.haproxy.org/download/1.9/src/
此处使用的是1.9版本
解压安装:tar
创建配置文件:mkdir -p /home/ha/haproxy/conf vi /home/ha/haproxy/conf/haproxy.cfg haproxy.cfg: global #全局属性 daemon #以daemon方式在后台运行 maxconn 256 #最大同时256连接 pidfile /home/ha/haproxy/conf/haproxy.pid #指定保存HAProxy进程号的文件 #log 127.0.0.1 local0 info #配置log,需要设置 syslog #log 127.0.0.1 local1 warning #配置log defaults #默认参数 #mode http #http模式 mode tcp #log global #配置log #option tcplog #配置log timeout connect 5000ms #连接server端超时5s timeout client 50000ms #客户端响应超时50s timeout server 50000ms #server端响应超时50s frontend http-in #前端服务http-in bind *:8080 #监听8080端口 default_backend tidbs #请求转发至名为"servers"的后端服务 backend tidbs #后端服务servers server server1 127.0.0.1:4000 maxconn 32 #backend servers中只有一个后端服务,名字叫server1,起在本机的8000端口,HAProxy同时最多向这个服务发起32个连接 #server server2 ip:port [params] #如有多个TiDB可继续配置,默认权重为1
启动:
./sbin/haproxy -f conf/haproxy.cfg
重启:
./sbin/haproxy -f conf/haproxy.cfg -p conf/haproxy.pid -sf $(cat conf/haproxy.pid)
2.4.1、设置haproxy.cfg
取消haproxy.cfg 里 配置log 的注释
2.4.2、设置rsyslog
为rsyslog添加haproxy日志的配置
vi /etc/rsyslog.d/haproxy.conf $ModLoad imudp $UDPServerRun 514 $FileCreateMode 0644 #日志文件的权限 $FileOwner ha #日志文件的owner local0.* /var/log/haproxy.log #local0接口对应的日志输出文件 local1.* /var/log/haproxy_warn.log #local1接口对应的日志输出文件
修改rsyslog的启动参数
vi /etc/default/rsyslog # Options for rsyslogd # Syslogd options are deprecated since rsyslog v3. # If you want to use them, switch to compatibility mode 2 by "-c 2" # See rsyslogd(8) for more details SYSLOGD_OPTIONS="-c 2 -r -m 0"
2.4.3、重启
rsyslog :
haproxy:./sbin/haproxy -f conf/haproxy.cfg -p conf/haproxy.pid -sf $(cat conf/haproxy.pid)
可使用keepalive配置高可用,具体自查资料
参考官方文档:http://cbonte.github.io/haproxy-dconv/1.9/configuration.html
https://www.jianshu.com/p/c9f6d55288c0
===================================分割线========================================
2019-11-5更新:
遇到新的问题,按上面的配置客户端可以通过haproxy访问tidb,但是tidb识别到的IP是haproxy服务器的IP,并不是客户端的真实IP。
可能会报错:
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 0
解决这个问题需要修改haproxy配置和tidb配置:
1、haproxy增加send-proxy:
server server1 127.0.0.1:4000 maxconn 32 send-proxy
2、tidb 增加networks:
[proxy-protocol]
networks="127.0.0.1"
参考:
https://www.percona.com/blog/2015/10/15/proxy-protocol-percona-xtradb-cluster-quick-guide/
https://asktug.com/t/haproxy-ip/1507
手机扫一扫
移动阅读更方便
你可能感兴趣的文章