在一個系統中,常常存在一些單點服務器,為了提高整個系統的穩定性,我們常常需要對這些單點服務做高可用配置;keepalived即為一種常用的高可用配置服務;
Keepalived的工作模式有以下兩種:
1、 主/備:即單虛擬路徑器,僅配置一個VIP;
2、 主/主:即多個虛擬路徑器,配置多個VIP,每個虛擬路徑器作為其中某個VIP的的master虛擬路徑器;
在CentOS6.4以后,keepalived已經在Base倉庫中提供,安裝keepalived以后,我們可以看到其相關文件如下:
配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
Unit File:/usr/lib/systemd/system/keepalived.service
安裝完成之后,就可以對集群做配置了,但在配置之前,需要確保以下幾點:
? 各節點時間必須同步;
? 確保iptables與SELinux規則不會成為阻礙;
? 各節點之間可通過主機名相互通信(對keepalived非必須);
? 各節點之間的root用戶可以基于密鑰認證的ssh服務完成相互通信(非必須);
首先,我們來看一下keepalived配置文件中各配置選項的意義:
l 虛擬路由器相關配置:
vrrp_instance <STRING> { state MASTER | BACKUP:指定當前節點在此虛擬路由器上的初始狀態;只能有一個為MASTER,余下的都應該為BACKUP; interface IFACE_NAME:綁定為當前虛擬路由器使用的物理接口; virtual_router_id VRID:當前虛擬路由的VRID,為虛擬路由器的唯一標識,范圍為0~255; priority 100:當前主機在此虛擬路徑器中的優先級,范圍為1~254; advert_int 1:vrrp通告的時間間隔; nopreempt:定義工作模式為非搶占模式; preempt_delay NUM:定義在搶占模式下,節點上線后觸發新選舉操作的延遲時長;單位為秒; authentication { auth_type AH | PASS auth_pass <PASSWORD> }:定義認證方法; virtual_ipaddress { <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL> }:定義虛擬路徑器IP地址,一般只需定義IPADDR/MASK dev <STRING>即可; track_interface { IFACE_NAME1 IFACE_NAME2 ... }:配置要監控的網絡接口,一旦接口出現故障,則轉為FAULT狀態; notify_master <STRING> | <QUOTED-STRING>:當前節點成為主節點時觸發的腳本; notify_backup <STRING> | <QUOTED-STRING>:當前節點轉為備用節點時觸發的腳本; notify_fault <STRING> | <QUOTED-STRING>:當前節點轉為fault狀態時觸發的腳本; notify <STRING> | <QUOTED-STRING>:通用格式的通知觸發機制,一個腳本可完成以上三種狀態轉換時的通知;}:定義要配置的虛擬路徑器;
l 虛擬服務器相關配置:
virtual_server IP port | virtual_server fwmark int { delay_loop <INT>:服務輪詢的時間間隔; lb_algo rr | wrr | lc | wlc | lblc | sh | dh:定義virtual_server的調度算法; lb_kind NAT | DR | TUN:定義服務器集群的類型; persistence_timeout <INT>:定義持久連接超時時長; protocol TCP:定義服務協議,僅支持TCP; sorry_server <IPADDR> <PORT>:指定備用服務器地址; real_server <IPADDR> <PORT> { weight <INT>:定義當前真實服務器的權重; nofity_up <STRING> | <QUOTED-STRING>:當前真實服務器上線時觸發的腳本; notify_down <STRING> | <QUOTED-STRING>:當前真實服務器下線時觸發的腳本; HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC_CHECK { url { path <URL_PATH>:定義要監控的URL; status_code <INT>:判斷上述檢測機制為健康狀態的響應碼; digest <STRING>:判斷上述檢測機制為健康狀態的響應的內容的校驗碼; }:定義檢測服務器健康狀態時請求的URL及檢測方法;可以有多個url配置段; nb_get_retry <INT>:定義檢測時的重試次數; delay_before_retry <INT>:定義重試之前的延遲時長; connect_ip <IP_ADDR>:定義向當前RS的哪個IP地址發起健康狀態檢測請求,若未定義,默認為定義RS時的IP地址; connect_port <PORT>:定義向當前RS的哪個端口發起健康狀態檢測請求,若未定義,默認為定義RS時的端口; bindto <IP_ADDR>:定義發出健康狀態檢測請求時使用的源地址; bind_port <PORT>:定義發出健康狀態檢測請求時使用的源端口; connect_timeout <INT>:定義連接請求的超時時長; }:定義當前主機的健康狀態檢測方法; TCP_CHECK { connect_ip <IP_ADDR>:定義向當前RS的哪個IP地址發起健康狀態檢測請求,若未定義,默認為定義RS時的地址; connect_port <PORT>:定義向當前RS的哪個端口發起健康狀態檢測請求,若未定義,默認為定義RS時的端口; bindto <IP_ADDR>:定義發出健康狀態檢測請求時使用的源地址; bind_port <PORT>:定義發出健康狀態檢測請求時使用的源端口; connect_timeout <INT>:定義連接請求的超時時長; }:在傳輸層應用tcp協議對當前主機進行健康狀態檢測; }:定義真實服務器}:定義虛擬主機,可通過IP與端口或防火墻標記來進行定義;
了解了常用配置選項的意義后,我們就可以進行配置了;在網絡拓撲中,我們使用nginx做反向代理以代理后端的httpd服務器;并對nginx做冗余,與keepalived放置在同一個主機上,并用keepalived實現主/主工作模式;其網絡拓撲如下:
下面,我們進行具體的配置:
1、 編輯10.1.2.70的keepalived的配置文件/etc/keepalived/keepalived.conf如下;
vrrp_instance VI_1 { state MASTER interface eno16777736 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.2.74/16 dev eno16777736 } } vrrp_instance VI_2 { state BACKUP interface eno16777736 virtual_router_id 52 priority 98 advert_int 1 preempt_delay 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 10.1.2.75/16 dev eno16777736 } }
2、編輯10.1.2.71的keepalived的配置文件/etc/keepalived/keepalived.conf如下;
vrrp_instance VI_1 { state BACKUP interface eno16777736 virtual_router_id 51 priority 98 advert_int 1 preempt_delay 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.2.74/16 dev eno16777736 } } vrrp_instance VI_2 { state MASTER interface eno16777736 virtual_router_id 52 priority 100 advert_int 1 preempt_delay 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 10.1.2.75/16 dev eno16777736 } }
3、在10.1.2.70與10.1.2.71主機上均安裝nginx;
yum –y install nginx
4、編輯nginx配置文件/etc/nginx/nginx.conf如下:
在http配置段增加如下內容:
upstream test { server 10.1.2.72:80 weight=1; server 10.1.2.73:80 weight=1; }
在server配置段中增減如下內容:
location / { proxy_pass http://test; }
5、配置完成,確保iptables與SELinux規則不會成為阻礙后,啟動服務利用客戶端測試即可;
原創文章,作者:luoliumeng,如若轉載,請注明出處:http://www.www58058.com/56702