TiDB配置HAProxy負載均衡


1、簡介

HAProxy是一個C語言編寫的免費的負載均衡軟件,可以運行於大部分主流的Linux操作系統上。

HAProxy提供了L4(TCP)和L7(HTTP)兩種負載均衡能力,具備豐富的功能。


2、配置使用

2.1、下載安裝

https://www.haproxy.org/download/1.9/src/

此處使用的是1.9版本

解壓安裝:
tar
-xzf haproxy-1.9.8.tar.gz
make PREFIX=/home/ha/haproxy TARGET=linux2628
make install PREFIX=/home/ha/haproxy

2.2、配置

創建配置文件:
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

2.3、啟停

啟動:

./sbin/haproxy -f conf/haproxy.cfg

重啟:

./sbin/haproxy -f conf/haproxy.cfg -p conf/haproxy.pid -sf $(cat conf/haproxy.pid)

2.4、[日志配置]

 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 :
service rsyslog restart
haproxy:
./sbin/haproxy -f conf/haproxy.cfg -p conf/haproxy.pid -sf $(cat conf/haproxy.pid)

2.5、配置高可用

可使用keepalive配置高可用,具體自查資料

2.6、更多配置

參考官方文檔:http://cbonte.github.io/haproxy-dconv/1.9/configuration.html

3、參考

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配置:

  • add proxy-protocol in HAProxy
  • add proxy_protocol_networks to my.cnf and set it to the proxy’s IP
  • bind mysql to its IPv4 IP

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





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM