keepalived
keepalived的工作原理是VRRP(虛擬路由冗余協議),保證當前主機的下一跳路由出現故障時由另外一台路由器來代理出現故障的路由器進行工作,而默認工作的路由以及備用路由都是根據優先級來確定主
|從,這里簡單搭建一下實現基本功能。
配置框架:這里使用了四台centos7.3,大概拓撲圖這樣,keepalived雙主模型+兩個高可用nginx 代理兩個Apache 實現負載均衡;
需要四台服務器,配置之前首先每台服務器需要
配置好防火牆並且selinux要關閉。
##臨時關閉selinux~]# setenforce 0
兩個Apache:每台服務器需要安裝httpd,每個服務器一個網卡;
圖片服務器centos 1:192.168.150.149 (需要單獨安裝一個lrzsz來導入圖片使用)文檔服務器centos 3:192.168.150.152
兩個nginx :每台服務器需要安裝nginx 以及keepalived,每個服務器兩個網卡一個連接內網一個連接外網;
centos 2:內網:192.168.150.154外網:172.16.251.68centos 4:內網:192.168.150.155外網:172.16.251.162
----------------------------------------------------------------------------------------------------------------------
centos 1 httpd配置
~]#cd /var/www/html(拖一個圖片文件到這個目錄)##查看目錄下內容文件已經存在~l]# lsup.png##啟動服務~]# systemctl start httpd##查看80端口已經啟用~]# ss -tanlState Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 128 *:22 *:*LISTEN 0 100 127.0.0.1:25 *:*LISTEN 0 128 :::80 :::*LISTEN 0 128 :::22 :::*LISTEN 0 100 ::1:25 :::*
----------------------------------------------------------------------------------------------------------------------
centos 3 httpd配置
##這里使用默認目錄以及默認文件。vim /var/www/html/index.html<h1>centos7.3</h1>##啟動服務~]# systemctl start httpd##查看80端口已經啟用~]# ss -tanlState Recv-Q Send-Q Local Address:Port Peer Address:PortLISTEN 0 128 *:22 *:*LISTEN 0 100 127.0.0.1:25 *:*ISTEN 0 128 :::80 :::*LISTEN 0 128 :::22 :::*LISTEN 0 100 ::1:25 :::*
----------------------------------------------------------------------------------------------------------------------
centos 2:nginx配置
##文件是自己創建的,沒有修改原配置文件,但是創建的文件必須在conf.d目錄下以.conf結尾,因為在nginx.conf文件中有設定;vim /etc/nginx/conf.d/ap.conf##給服務器配置緩存功能;三級目錄,定義緩存關鍵字以及大小,磁盤上用於緩存數據的上限;proxy_cache_path /data/web levels=1:1:1 keys_zone=pxycache:20m max_size=1g;##配置一個server;server {##監聽在本機所有IP 的80端口;listen 80;##給反代的web服務器配置的域名;server_name www.myue.com;##設置網站根目錄;root /var/www/html;##指明要調用的緩存;proxy_cache pxycache;##設置緩存的key;proxy_cache_key $request_uri;##定義狀態碼203、302、304緩存多久;proxy_cache_valid 200 302 304 1h;##定義除了以上的狀態碼另外的狀態緩存多久;proxy_cache_valid any 1m;##文檔訪問IP ;location / {proxy_pass http://192.168.150.149:80;}##圖片訪問IP,用正則匹配。因為我只配置了一個圖片所以只匹配.png的圖片,可以根據自己需要進行配置;location ~* \.png$ {proxy_pass http://192.168.150.152:80;}}##手動創建緩存目錄;~]#mkdir /data/web -pv##測試配置文件語法;~]# nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful##注意keepalived重啟不穩定,如果需要重啟需要stop 然后在start,雙主模式下只能啟動不能停止;~]# systemctl stop keepalived~]# systemctl start keepalived
----------------------------------------------------------------------------------------------------------------------
centos 2:keepalived配置
~]# vim /etc/keepalived/keepalived.conf##默認起始行! Configuration File for keepalived##全局配置;global_defs {##故障出現是發送的郵箱地址,這里設置為本主機;notification_email {root@localhost}##表示發送郵件的源地址;notification_email_from keepalived@localhost##發送有限的smtp服務器地址;smtp_server 127.0.0.1##超時時長smtp_connect_timeout 30##組廣播地址vrrp_mcast_group4 224.1.100.100}##keepalived從服務器定義;vrrp_instance VI_1 {##定義為從,可選項MASTER|BACKUP;state BACKUP##使用的網卡;interface ens33##定義組ID;virtual_router_id 51##定義優先級,從服務器的優先級要比主服務器低;priority 96##多久在組里廣播一下自己的心跳信息,默認單位為秒s;advert_int 1##通信時認證;authentication {##使用簡單字符串方式,不能超過8個字符,超過部分不予理會;auth_type PASS##主從兩個服務器的字符串要設定為相同的;auth_pass YN9jd93d}##檢測網卡狀態;track_interface {ens33}##給keepalived配置的虛擬IP;virtual_ipaddress {172.16.100.100/16}}vrrp_instance VI_2 {##主服務器,因為是雙主模式,所以一個服務器可以即為主又為從,可在網站PV量較大的時候 兩個服務器同時工作提高效率;state MASTERinterface ens33##組ID和上面配置不能相同,但是和需要相同組內的ID要保持一致;virtual_router_id 41##優先級定義100,本組內的從服務器優先級要低於這個數字;priority 100advert_int 1authentication {auth_type PASS##這里要和本組內的字符串保持一致;auth_pass YN98d93d}track_interface {ens33}virtual_ipaddress {172.16.100.101/16}}##啟動nginx 以及keepalived;~]# systemctl start nginx~]# systemctl stop keepalived~]# systemctl start keepalived
----------------------------------------------------------------------------------------------------------------------
centos 4 nginx配置與 centos 2 完全相同 這里省略
----------------------------------------------------------------------------------------------------------------------
centos 4:keepalived配置
##大致配置相同,只有幾處地方不同,上文已經指出,並且下面已經用紅顏色標注,這里不過多介紹;! Configuration File for keepalivedglobal_defs {notification_email {root@localhost}notification_email_from keepalived@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30vrrp_mcast_group4 224.1.100.100}vrrp_instance VI_1 {state MASTERinterface ens33virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass YN9jd93d}track_interface {ens33}virtual_ipaddress {172.16.100.100/16}}vrrp_instance VI_2 {state BACKUPinterface ens33virtual_router_id 41priority 96advert_int 1authentication {auth_type PASSauth_pass YN98d93d}track_interface {ens33}virtual_ipaddress {172.16.100.101/16}}##啟動nginx 以及keepalived~]# systemctl start nginx~]# systemctl stop keepalived~]# systemctl start keepalived
----------------------------------------------------------------------------------------------------------------------
測試配置結果
##抓包組IP試一下看到兩個服務器都為主並且都每隔1s在組內發送一下自己的心跳~]# tcpdump -i ens33 -nn host 224.1.100.100tcpdump: verbose output suppressed, use -v or -vv for full protocol decodelistening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes10:17:27.566889 IP 172.16.251.68 > 224.1.100.100: VRRPv2, Advertisement, vrid 41, prio 100, authtype simple, intvl 1s, length 2010:17:27.951391 IP 172.27.35.8 > 224.1.100.100: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 2010:17:28.567182 IP 172.16.251.68 > 224.1.100.100: VRRPv2, Advertisement, vrid 41, prio 100, authtype simple, intvl 1s, length 2010:17:28.952235 IP 172.27.35.8 > 224.1.100.100: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20^C13 packets captured13 packets received by filter0 packets dropped by kernel
因為並沒有中間路由轉發所以測試的時候需要在自己的Windows主機解析一下域名
C:\Windows\System32\drivers\etc\HOSTS ##文件最下面添加兩行解析
##把兩個IP解析為相同域名,實現簡單的輪詢效果, 保存退出
172.16.100.100 www.myue.com
172.16.100.101 www.myue.com
訪問域名已經可以訪問,訪問圖片內容;

訪問文檔內容;
##停止一個nginx 或者停止一個keepalived同樣可以訪問
~]# systemctl stop nginx
~]# systemctl stop keepalived
##並且緩存目錄中已經有內容,並且三級目錄。
~]# ls /data/web/9/d/7/6666cd76f96956469e7be39d750cc7d9
/data/web/9/d/7/6666cd76f96956469e7be39d750cc7d
----------------------------------------------------------------------------------------------------------------------
實驗結束