HA+MySQL高可用負載均衡集羣

系統結構:

主機名 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數據庫:在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章