一、Keepalived
二、keepalived高可用LVS
keepalived能夠根據配置檔案生成ipvs規則,同時可以對後端各RS做健康狀态檢測
1、實驗清單
director1: node1 192.168.0.40
director2: Nginx 192.168.0.108
Vip:192.168.0.80
RS1(httpd):192.168.0.100
RS2(httpd):192.168.0.101
2、配置檔案
<code>[root@Nginx ~]</code><code># cd /etc/keepalived/</code>
<code>[root@Nginx keepalived]</code><code># vim keepalived.conf</code>
<code>! Configuration File </code><code>for</code> <code>keepalived</code>
<code>global_defs {</code>
<code> </code><code>notification_email {</code>
<code> </code><code>root@localhost</code>
<code> </code><code>}</code>
<code> </code><code>notification_email_from kaadmin@localhost</code>
<code> </code><code>smtp_server 127.0.0.1</code>
<code> </code><code>smtp_connect_timeout 30</code>
<code> </code><code>router_id LVS_DEVEL</code>
<code>}</code>
<code>vrrp_script chk_mt {</code>
<code> </code><code>script </code><code>"[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"</code>
<code> </code><code>interval 1</code>
<code> </code><code>weight -2</code>
<code>vrrp_instance VI_1 {</code>
<code> </code><code>state MASTER </code><code>#node1須修改為BACKUP</code>
<code> </code><code>interface eth0</code>
<code> </code><code>virtual_router_id 51</code>
<code> </code><code>priority 100 </code><code>#node1降低優先級</code>
<code> </code><code>advert_int 1 </code>
<code> </code><code>authentication {</code>
<code> </code><code>auth_type PASS</code>
<code> </code><code>auth_pass 71988d704dcae985</code>
<code> </code><code>}</code>
<code> </code><code>virtual_ipaddress {</code>
<code> </code><code>192.168.0.80</code><code>/32</code>
<code> </code><code>track_script {</code>
<code> </code><code>chk_mt </code>
<code> </code><code>notify_master </code><code>"/etc/keepalived/notify.sh master"</code>
<code> </code><code>notify_backup </code><code>"/etc/keepalived/notify.sh backup"</code>
<code> </code><code>notify_fault </code><code>"/etc/keepalived/notify.sh fault"</code>
<code>virtual_server 192.168.0.80 80 {</code>
<code> </code><code>delay_loop 6 </code><code>#伺服器輪詢6次逾時 </code>
<code> </code><code>lb_algo rr </code><code>#LVS排程算法</code>
<code> </code><code>lb_kind DR </code><code>#LVS轉發方法</code>
<code> </code><code>nat_mask 255.255.255.0 </code><code>#掩碼</code>
<code> </code><code>persistence_timeout 50 </code><code>#長連結時間</code>
<code> </code><code>protocol TCP </code><code>#tcp協定</code>
<code> </code><code>ha_suspend </code><code>#在無vip情形下,不再進行健康狀态檢測</code>
<code> </code><code>sorry_server 127.0.0.1 80 </code><code>#當RS全當機時,sorry_server提供錯誤頁面</code>
<code> </code><code>real_server 192.168.0.100 80 { </code><code>#RS的ip,端口</code>
<code> </code><code>weight 1 </code><code>#權重</code>
<code> </code><code>HTTP_GET { </code><code>#檢測類型,這裡是HTTP_GET</code>
<code> </code><code>url { </code><code>#檢測請求的類型,這裡是狀态檢測</code>
<code> </code><code>path /</code>
<code> </code><code>status_code 200</code>
<code> </code><code>}</code>
<code> </code><code>connect_timeout 3 </code><code>#連接配接逾時時間</code>
<code> </code><code>nb_get_retry 3 </code><code>#重試次數</code>
<code> </code><code>delay_before_retry 3 </code><code>#重試前延遲時間</code>
<code> </code><code>}</code>
<code> </code><code>real_server 192.168.0.101 80 {</code>
<code> </code><code>weight 2</code>
<code> </code><code>HTTP_GET {</code>
<code> </code><code>url {</code>
<code> </code><code>status_code 200</code>
<code> </code><code>connect_timeout 3</code>
<code> </code><code>nb_get_retry 3</code>
<code> </code><code>delay_before_retry 3</code>
3、定義狀态轉變後發郵件的notify腳本(來自馬哥文檔)
<code>#!/bin/bash</code>
<code># </code>
<code>vip=192.168.0.80</code>
<code>contact=</code><code>'root@localhost'</code>
<code>notify() {</code>
<code> </code><code>mailsubject=</code><code>"`hostname` to be $1: $vip floating"</code>
<code> </code><code>mailbody=</code><code>"`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"</code>
<code> </code><code>echo</code> <code>$mailbody | mail -s </code><code>"$mailsubject"</code> <code>$contact</code>
<code>case</code> <code>"$1"</code> <code>in</code>
<code> </code><code>master)</code>
<code> </code><code>notify master</code>
<code> </code><code>exit</code> <code>0</code>
<code> </code><code>;;</code>
<code> </code><code>backup)</code>
<code> </code><code>notify backup</code>
<code> </code><code>fault)</code>
<code> </code><code>notify fault</code>
<code> </code><code>*)</code>
<code> </code><code>echo</code> <code>'Usage: `basename $0` {master|backup|fault}'</code>
<code> </code><code>exit</code> <code>1</code>
<code>esac</code>
二、高可用Nginx
1、在Nginx主機上配置反向代理upstream
<code>http區段配置 </code>
<code> </code><code>upstream nodeserver{</code>
<code> </code><code>server 192.168.0.30;</code>
<code> </code><code>server 192.168.0.40;</code>
<code>server區段配置</code>
<code> </code><code>location / {</code>
<code> </code><code>proxy_pass http:</code><code>//nodeserver</code><code>;</code>
<code> </code><code>proxy_set_header Host $host;</code>
<code> </code><code>proxy_set_header X-Real-IP $remote_addr;</code>
<code> </code><code>add_header X-Cache $upstream_cache_status;</code>
<code> </code><code>}</code>
2、配置keepalived,加入如下配置
<code>vrrp_script chk_nginx {</code>
<code> </code><code>script </code><code>"killall -0 nginx &> /dev/null"</code>
<code> </code><code>weight -10</code>
<code> </code><code>state MASTER</code>
<code> </code><code>priority 100</code>
<code> </code><code>advert_int 1</code>
<code> </code><code>chk_nginx </code>
本文轉自 元嬰期 51CTO部落格,原文連結:http://blog.51cto.com/jiayimeng/1896884