系統結構:
主機名 | IP |
---|---|
MySQL1 | 10.1.1.20 |
MySQL2 | 10.1.1.21 |
HAProxy | 10.1.1.26 |
安裝MySQL雙主,上面有,不多說。
安裝HAProxy:
[root@localhost ~]# yum install -y haproxy #安裝
查看HAProxy的版本等信息
[root@localhost ~]# rpm -qi haproxy.x86_64
Name : haproxy
Version : 1.5.18
Release : 8.el7
Architecture: x86_64
查看HAProxy的配置信息,下面只列出簡要信息:
[root@localhost ~]# rpm -ql haproxy.x86_64
/etc/haproxy
/etc/haproxy/haproxy.cfg #此處爲HAProxy的配置文件位置
/etc/logrotate.d/haproxy
/etc/sysconfig/haproxy
/usr/bin/halog
/usr/bin/iprange
/usr/lib/systemd/system/haproxy.service
/usr/sbin/haproxy
/usr/sbin/haproxy-systemd-wrapper
HAProxy安裝完成後配置文件默認是不存在的,需要先啓動HAProxy,然後纔會生成:
[root@localhost ~]# systemctl start haproxy
[root@localhost ~]# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since 五 2019-05-31 14:03:26 CST; 10min ago
Main PID: 7291 (haproxy-systemd)
啓動HAProxy後再看/etc/haproxy/haproxy.cfg文件已經生成了,此時我們需要根據我們的MySQL來配置負載:
# vim /etc/haproxy/haproxy.cfg
# 全局配置參數
global
#開啓HAProxy的日誌功能
log 127.0.0.1 local0 info
user haproxy
group haproxy
# 一些默認參數
defaults
log global
retries 3
option dontlognull
option redispatch
maxconn 2000
timeout connect 3000
timeout server 5000
timeout client 5000
# 這個是我們定義的負載均衡的配置
listen mysql-lb1
# 綁定的IP和端口 haproxy服務器一個網卡IP
bind 0.0.0.0:3344
# 模式是TCP
mode tcp
# 通過mysql連接去檢測mysql是否可以訪問 創建用戶haproxy_check 密碼爲空,權限usage
option mysql-check user haproxy_check
# 負載均衡算法是 輪詢
balance roundrobin
# 下面兩個就是後端被訪問的server
server mysql_1 10.1.1.20:3306
server mysql_2 10.1.1.21:3306
# 自帶的監控服務器的配置
# 監控服務的端口是 8888
listen stats *:8888
# 監控模式是http
mode http
option httpclose
balance roundrobin
stats uri /
stats realm Haproxy\ Statistics
# 監控的用戶名和密碼
stats auth myadmin:myadmin
以上配置完成後,重啓HAProxy服務會發現服務器不來,通過systemctl status haproxy命令可以看到有如下兩個報錯:
第一個報錯:Starting proxy mysql-lb1: cannot bind socket 0.0.0.0:3344
解決方法:
1,haproxy -f /etc/haproxy/haproxy.cfg -c檢查配置文件
2,bind端口不要衝突
3,先設置haproxy連接策略,執行以下命令即可
setsebool -P haproxy_connect_any=1
4,vim /etc/sysctl.conf
添加:net.ipv4.ip_nonlocal_bind=1
然後執行sysctl -p
第二個報錯:[/usr/sbin/haproxy.main()] Cannot create pidfile /run/haproxy.pid
錯原因:我們再剛安裝完HAProxy時啓動了一次服務,已經產生了/run/haproxy.pid這個文件。
解決方法:
rm -rf /run/haproxy.pid
然後再啓動服務就可以成功了。
開啓HAProxy日誌功能:
服務的日誌默認記錄在/var/log/haproxy/haproxy.log文件中,但此文件默認是不存在的需要手動創建:
[root@localhost ~]# mkdir -p /var/log/haproxy/
[root@localhost ~]# touch /var/log/haproxy/haproxy.log
[root@localhost ~]# chown -R haproxy:haproxy /var/log/haproxy/
然後修改HAProxy的配置文件,在global全局變量中添加一行配置:
global
#local0是設備,對應於 /etc/rsyslog.conf中的配置,默認回收info的日誌級別
log 127.0.0.1 local0 info
開啓rsyslog記錄haproxy日誌功能,編輯“/etc/rsyslog.conf”打開如下配置項:
$ModLoad imudp
$UDPServerRun 514
添加如下內容:
# Save haproxy log,local0是日誌級別對應/etc/haproxy/haproxy.cfg中的日誌配置og
local0.* /var/log/haproxy/haproxy.log
修改“/etc/sysconfig/rsyslog”文件,內容如下:
SYSLOGD_OPTIONS="-r -m 0 -c 2"
驗證是否生效:
重啓服務
systemctl restart haproxy
service rsyslog restart
###查看日誌記錄
tailf /var/log/haproxy/haproxy.log
服務啓動後檢查一下端口監聽情況:
[root@localhost ~]# netstat -tunlp|grep haproxy
可以看到3344端口和8888端口都處於監聽狀態。
測試:
使用Navicat連接10.1.1.26:3344數據庫: