一、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