Haproxy是目前比較流行的一種羣集調度工具,同類羣集調度工具備不少,如LVS和Nginx。相比較而言,LVS性能最好,可是搭建相對複雜,搭建LVS羣集能夠參考博文:搭建:LVS+Keepalived高可用Web服務羣集環境;Nginx的upstream模塊支持羣集功能,可是相對羣集節點健康檢查功能不強,性能沒有Haproxy好,更多的是應用在企業內網環境中。Nginx羣集能夠參考博文:centos 7部署Tomcat及其負載均衡配置詳解。html
上述幾個web羣集調度器屬於軟件類型的,還有不少硬件羣集調度器,硬件通常使用比較多的是F5,也有不少公司使用國產的一些產品,如梭子魚、綠盟等。硬件羣集調度器有一些比較顯而易見的缺點,若是說出問題了,還要須要廠家的技術支持,廠家維護時還須要咱們的錯誤日誌,在出現問題到問題解決這段時間,可能一個月的時間都過去了。如果使用軟件型的羣集調度器,那麼只要咱們運維人員技術過硬,發現問題到解決問題,很快的。linux
關於Haproxy經常使用的調度算法、配置文件及參數優化能夠參考博文:centos 7 之haproxy的配置文件詳解及haproxy參數調優web
如今如下面的環境,進行搭建一個keepalived的高可用web羣集(關於高可用存儲服務器,這裏就省略了,將在之後的文章寫出如何搭建高可用的存儲服務器),環境以下:redis
1、準備工做:算法
一、調通網絡,防火牆放行相關流量(我這裏直接將防火牆關閉了);apache
二、準備系統映像,配置本地yum(自行配置)。vim
三、下載haproxy源碼包,能夠從我提供的網盤連接下載使用:haproxy下載連接
提取碼:54iv 。後端
四、web網站使用apache、Nginx、Tomcat搭建均可,只要能夠訪問就行,這裏自行搭建吧,我爲了測試方便,直接使用系統映像自帶的httpd服務,web網站搭建能夠參考:基於Linux搭建Apache網站服務配置詳解;基於centos 7搭建Nginx網站服務器centos
五、我這裏使用的所有是centos 7系統,注意,該環境不是生產環境,如果在生產環境中,確定還有後端存儲來存放網頁文件,web服務器讀取存儲服務器上的網頁返回給客戶端。這樣纔可保證網頁內容的一致性。服務器
2、開始搭建:
一、配置keepalived+haproxy主服務器:
[root@haproxy1 ~]# yum -y install keepalived pcre-devel bzip2-devel #掛載系統映像,安裝相關軟件包 [root@haproxy1 media]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src/ #解包 [root@haproxy1 media]# cd /usr/src/haproxy-1.5.19/ #切換至源碼包目錄 [root@haproxy1 haproxy-1.5.19]# make TARGET=linux26 && make install #編譯安裝,TARGET配置項表示64位系統。haproxy無須./configure配置。 [root@haproxy1 haproxy-1.5.19]# mkdir /etc/haproxy #建立配置文件目錄 [root@haproxy1 haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/ #將源碼包自帶的配置文件目錄複製過來。 [root@haproxy1 haproxy-1.5.19]# cd [root@haproxy1 ~]# vim /etc/haproxy/haproxy.cfg #編輯主配置文件,根據當前環境,將主配置文件修改以下: # this config needs haproxy-1.1.28 or haproxy-1.2.1 global log /dev/log local0 info log /dev/log local0 notice #log loghost local0 info maxconn 4096 #chroot /usr/share/haproxy #將該行註釋掉 uid 99 gid 99 daemon #debug #quiet defaults log global mode http option httplog option dontlognull retries 3 redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen webcluster 0.0.0.0:80 #webcluster爲羣集名稱,可自定義,修改後面的端口號。 option httpchk /index.html balance roundrobin #表示採用輪詢算法。 server inst1 192.168.1.3:80 check inter 2000 fall 3 #web節點1 server inst2 192.168.1.4:80 check inter 2000 fall 3 #web節點2,注意相關端口號 #注意,在配置文件下,有不少listen配置項,找到和咱們須要的差很少的listen項複製到 #defaults配置項下,而後將後面全部的配置項刪除,若不刪除,可能服務啓動時會報錯。 [root@haproxy1 ~]# cd /usr/src/haproxy-1.5.19/examples/ #切換至指定目錄 [root@haproxy1 examples]# cp haproxy.init /etc/init.d/haproxy #複製服務控制腳本 [root@haproxy1 examples]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy #建立軟鏈接 [root@haproxy1 examples]# chmod +x /etc/init.d/haproxy #賦予文件執行權限 [root@haproxy1 examples]# chkconfig --add /etc/init.d/haproxy #添加爲系統服務 [root@haproxy1 examples]# systemctl restart haproxy #啓動haproxy服務 [root@haproxy1 examples]# netstat -anpt | grep 80 #查看是否在監聽 #haproxy服務默認監聽80端口 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12640/haproxy [root@haproxy1 ~]# vim /etc/rsyslog.d/haproxy.conf #配置haproxy日誌,寫入下面內容 if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log & ~ if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log & ~ #寫入後,保存退出便可。 [root@haproxy1 ~]# systemctl restart rsyslog #重啓日誌服務 #如下部分開始配置keepalived,haproxy已經配置完成了。 #如今client能夠訪問該服務器IP地址,看看是否能夠刷到兩個web服務器提供的網頁。 #須要多刷新幾回,web服務器準備不同的網頁纔可看到效果。 [root@haproxy1 ~]# vim /etc/keepalived/keepalived.conf #編輯keepalived配置文件 #只改動如下標註的配置項便可 ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL1 #定義服務器名稱,不可與其餘服務器名稱衝突 } vrrp_instance VI_1 { state MASTER interface ens33 #修改承載漂移IP地址的物理網卡 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100 #指定漂移IP地址 } } #配置項至此保存退出就能夠了,將後面的全部配置項刪除,以避免影響服務啓動。 [root@haproxy1 ~]# systemctl restart keepalived #重啓keepalived服務。
二、配置keepalived+haproxy備份服務器:
[root@haproxy2 ~]# systemctl stop firewalld #關閉防火牆 [root@haproxy2 ~]# yum -y install keepalived pcre-devel bzip2-devel #掛載系統映像,安裝相關軟件包 [root@haproxy2 media]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src #解包 [root@haproxy2 media]# cd /usr/src/haproxy-1.5.19/ [root@haproxy2 haproxy-1.5.19]# make TARGET=linux26 && make install #安裝 [root@haproxy2 haproxy-1.5.19]# cd [root@haproxy2 ~]# mkdir /etc/haproxy #建立配置文件目錄 [root@haproxy2 ~]# scp root@192.168.1.1:/etc/haproxy/haproxy.cfg /etc/haproxy/ #直接將主服務器的haproxy配置文件複製過來 root@192.168.1.1 s password: #輸入主服務器的用戶密碼 haproxy.cfg 100% 566 460.5KB/s 00:00 [root@haproxy2 ~]# scp root@192.168.1.1:/etc/init.d/haproxy /etc/init.d/haproxy root@192.168.1.1s password: haproxy 100% 2553 2.1MB/s 00:00 [root@haproxy2 ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy #建立連接文件 [root@haproxy2 ~]# chkconfig --add /etc/init.d/haproxy #添加爲系統服務 [root@haproxy2 ~]# systemctl start haproxy #啓動服務 [root@haproxy1 examples]# netstat -anpt | grep 80 #查看是否在監聽 #haproxy服務默認監聽80端口 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12640/haproxy [root@haproxy1 ~]# vim /etc/rsyslog.d/haproxy.conf #配置haproxy日誌,寫入下面內容 if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log & ~ if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log & ~ #寫完保存退出便可。 [root@haproxy2 ~]# systemctl restart rsyslog #重啓日誌服務 [root@haproxy2 ~]# scp root@192.168.1.1:/etc/keepalived/keepalived.conf /etc/keepalived/ #將主服務器的keepalived配置文件複製過來 root@192.168.1.1s password: #輸入主服務器的用戶密碼 keepalived.conf 100% 630 622.3KB/s 00:00 [root@haproxy2 ~]# vim /etc/keepalived/keepalived.conf #修改下面三個配置項: ................ router_id LVS_DEVEL2 #將服務器名稱改一下,別和主服務器衝突 .............. state BACKUP #將狀態改成BACKUP ............... priority 90 #修改一下優先級,要比主服務器優先級低 #改完以上三行,保存退出便可。 [root@haproxy2 ~]# systemctl start keepalived #啓動keepalived服務
至此,keepalived+haproxy就配置完成了,可使用client進行訪問測試,模擬主服務器宕機等問題,測試高可用。
[root@haproxy1 ~]# tail -f /var/log/haproxy/haproxy-info.log #查看haproxy訪問日誌