天天看点

keepalived高可用LVS与Nginx

一、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 ]] &amp;&amp; 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 &amp;&gt; /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

继续阅读