負載均衡最大的作用就是0宕機,可以做到宕機秒切換。Haproxy 會將多個服務器線路進行負載均衡整合,也即用 haproxy 宿主機一個線路,代替了原來多個服務器線路,這樣就不用手動切換了。筆者把Haproxy安裝在阿里雲服務器(ubuntu系統)上,建議使用國內的雲服務器:一方面延時低,另一方面不容易掛掉。
使用haproxy進行多服務器負載均衡的兩個前提條件:
(1)所有的服務器線路的密碼、端口必須一致。
(2)加密方式、協議/混淆也必須一致。
1、更新apt的資源列表
sudo apt-get update
2、安裝haproxy
sudo apt-get install haproxy
3、編輯haproxy文件
sudo vi /etc/haproxy/haproxy.cfg
然後輸入以下配置信息:
global
log 127.0.0.1 local2
chroot /usr/bin
pidfile /var/run/haproxy.pid
maxconn 4000
user nobody
daemon
defaults
mode tcp
log global
option tcplog
option dontlognull
option http-server-close
#option forwardfor except 127.0.0.0/8
option redispatch
retries 2
timeout http-request 10s
timeout queue 1m
timeout connect 3s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen admin_status
bind 0.0.0.0:1111 #管理頁面的登錄端口
mode http
stats refresh 30s
stats uri /
stats auth fzjh:fzjh #管理頁面的賬號密碼
#stats hide-version
stats admin if TRUE
resolvers mydns
nameserver dns1 119.29.29.29:53
nameserver dns2 114.114.114.114:53
resolve_retries 3
timeout retry 2s
hold valid 10s
listen shadowscoks_balance_load
bind 0.0.0.0:63052
mode tcp
balance roundrobin
server serA_name 100.2.14.1:63052 weight 200 rise 2 fall 3 check inter 2000 resolvers mydns #主力服務器
server serB_name 103.2.14.1:63052 weight 50 rise 2 fall 3 check inter 2000 resolvers mydns backup #備用服務器
server serC_name 150.2.14.1:63052 weight 8 rise 2 fall 3 check inter 2000 resolvers mydns backup #備用服務器
server serD_name 120.2.14.1:63052 weight 8 rise 2 fall 3 check inter 2000 resolvers mydns backup #備用服務器
server serE_name 100.4.14.1:63052 weight 3 rise 2 fall 3 check inter 2000 resolvers mydns backup #備用服務器
server serF_name 107.2.14.1:63052 weight 1 rise 2 fall 3 check inter 2000 resolvers mydns backup #備用服務器
server serH_name 108.2.34.1:63052 weight 1 rise 2 fall 3 check inter 2000 resolvers mydns backup #備用服務器
使用vim語法時需要注意:
按esc鍵可以在【只讀】和【輸入】 兩種狀態之間切換。ndd:n爲數字,刪除光標所在的向下 n 列,例如 20dd 則是刪除 20 列
輸入完畢後想退出vim可以輸入:wq!,然後按enter鍵
這裏詳細說一下這個配置裏面的各項作用:
3.1 listen admin_status段的參數分析
bind 0.0.0.0:1111是指通過端口1111可以訪問管理頁面,訪問形式是在瀏覽器輸入ip:1111,這裏的ip是指haproxy宿機的ip
stats auth後面是管理頁面的賬號密碼,在stats auth fzjh:fzjh中,賬號是fzjh,密碼也是fzjh
特別注意:如果租用阿里雲服務器,必須要在服務器控制檯裏對防火牆添加如下規則才能訪問63052端口。
在瀏覽器地址欄輸入haproxy宿主機ip:1111就能看到haproxy的管理頁面了:
3.2 listen shadowscoks_balance_load段的參數分析
serA_name:server後面首先跟名字,名字隨便起唄,自己能夠區分就行。緊接着跟這臺機器的公網IP+端口。
check:是檢測的意思,這段配置很重要。
inter:單位毫秒,我配置的2000,即2000毫秒檢測一次目標服務器。
rise2:設定健康狀態檢查中,某離線的服務器從離線狀態轉換至正常狀態需要成功檢查的次數,這裏我設置的2次。
fall3:確認服務器從正常狀態轉換爲不可用狀態需要檢查的次數,這裏是3次。
weight:權重,值越大代表這臺機器工作的機會越多,這裏我們可以把一臺線路較好的機器的權重設置高一些。
backup:備用服務器,當所有主力服務器掛掉後就會馬上啓用備用服務器
bind 0.0.0.0:63052,指需要使用服務器的63052端口
特別注意:如果租用阿里雲服務器,必須要在服務器控制檯裏對防火牆添加如下規則才能訪問63052端口。
4、重啓haproxy
sudo service haproxy restart
5、其它命令
sudo service haproxy status #查看haproxy的狀態
sudo service haproxy stop #停止運行haproxy
卸載方法:
apt-get -y remove haproxy
然後刪掉haproxy的配置文件目錄:
rm -rf /etc/haproxy
啓動:/etc/init.d/haproxy start
停止:/etc/init.d/haproxy stop
重啓:/etc/init.d/haproxy restart
重載:/etc/init.d/haproxy reload
狀態:/etc/init.d/haproxy status