keepalived+haproxy搭建web群集
- 2019 年 10 月 6 日
- 筆記
haproxy配置文件詳解參考:haproxy
環境如下:

一、準備:
1、下載haproxy 軟體包,haproxy 提取碼: 9it6
2、web 網站可以使用Apache、Nginx、搭建都可以,這裡為了方便我就直接使用系統盤帶的httpd服務了。
web網站的搭建可參考:基於 Linux 安裝 web 服務及基本配置;基於 Centos 7 搭建Nginx;
3、配置防火牆放行流量
4、我這裡使用的全部是centos 7系統,注意,該環境不是生產環境,若是在生產環境中,肯定還有後端存儲來存放網頁文件,web伺服器讀取存儲伺服器上的網頁返回給客戶端。這樣才可保證網頁內容的一致性。
二、開始搭建:
1、配置主伺服器:
[root@haproxy1 /]# yum -y install pcre-devel bzip2-devel keepalived # 安裝相關的依賴包和軟體包 [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 TARHET=linux26 && make install # 編譯安裝,TARGET表示64位作業系統 [root@haproxy1 haproxy-1.5.19]# mkdir /etc/haproxy # 創建用來存放主配文件的目錄 [root@haproxy1 haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/ # 將編譯包中的主配文件複製到配置文件目錄,注意啊:這個配置文件是在編譯包中,注意看路徑 [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 # 將埠號修改為80,webcluster為群集名稱,可修改 option httpchk GET /index.html balance roundrobin # 表示採用輪詢演算法 server web1 192.168.1.20:80 check inter 2000 fall 3 # 兩個web節點 server web2 192.168.1.30:80 check inter 2000 fall 3 [root@haproxy1 /]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy # 複製服務控制腳本 [root@haproxy1 /]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy # 創建鏈接使命令使用更方便 [root@haproxy1 /]# chmod +x /etc/init.d/haproxy # 添加執行許可權 [root@haproxy1 /]# chkconfig --add /etc/init.d/haproxy # 添加為系統服務 [root@haproxy1 /]# /etc/init.d/haproxy start # 啟動 Starting haproxy (via systemctl): [ OK ] [root@haproxy1 /]# vim /etc/rsyslog.d/haproxy.conf # 配置日誌文件,寫入如下內容 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.service # 重啟日誌服務
配置 keepalived :
[root@haproxy1 /]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { [email protected] [email protected] [email protected] } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS1 # 主從調度器名稱區分開 } vrrp_instance VI_1 { state MASTER interface ens33 # 修改網卡名稱 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100 # 填寫漂移地址 } } [root@haproxy1 /]# systemctl restart keepalived # 重啟服務使配置生效
2、配置從伺服器:
[root@haproxy2 /]# yum -y install pcre-devel bzip2-devel keepalived [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]# mkdir /etc/haproxy [root@haproxy2 haproxy-1.5.19]# scp [email protected]:/etc/haproxy/haproxy.cfg /etc/haproxy/ # 圖個方便直接複製 [email protected]'s password: haproxy.cfg 100% 570 0.6KB/s 00:00 [root@haproxy2 /]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy # 複製服務控制腳本 [root@haproxy2 /]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy [root@haproxy2 /]# chmod +x /etc/init.d/haproxy [root@haproxy2 /]# chkconfig --add /etc/init.d/haproxy [root@haproxy2 /]# /etc/init.d/haproxy start Starting haproxy (via systemctl): [ OK ] [root@haproxy2 /]# scp [email protected]:/etc/rsyslog.d/haproxy.conf /etc/rsyslog.d/ [email protected]'s password: haproxy.conf 100% 226 0.2KB/s 00:00 [root@haproxy2 /]# systemctl restart rsyslog.service # 重啟服務使配置生效 [root@haproxy2 haproxy-1.5.19]# scp [email protected]:/etc/keepalived/keepalived.conf /etc/keepalived/ [email protected]'s password: keepalived.conf 100% 3511 3.4KB/s 00:00 [root@haproxy2 /]# vim /etc/keepalived/keepalived.conf # 修改主配置文件,修改如下幾個部分 ....................... 省略部分 router_id LVS2 # 主從調度器區分ID } vrrp_instance VI_1 { state BACKUP # 狀態修改為 BACKUP interface ens33 virtual_router_id 51 priority 90 # 優先順序調低 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100 # 漂移地址 } } [root@haproxy2 /]# systemctl restart keepalived
兩個web節點配置(兩個配置相同):
[root@web2 /]# yum -y install httpd
[root@web2 /]# echo server2.com > /var/www/html/index.html # 創建測試網頁
[root@web2 /]# systemctl start httpd
[root@web2 /]# systemctl enable httpd


當然,在實際生產環境中網頁是一樣的,這裡我為了驗證出效果,所以做了兩個不同的測試文件。