天天看點

Linux叢集(keepalived介紹,Keepalived配置高可用叢集,Keepa+mysql

一、Linux叢集概述

根據功能劃分為兩大類:高可用和負載均衡

(1)高可用叢集通常為兩台伺服器,台工作,另外一台作為準備,當提供服務的機器當機,另外一台将接替繼續提供服務。

實作高可用的開源軟體有:heartbeat,keepalived

(2)負載均衡叢集:需要有一台伺服器作為分發器,它負責吧使用者的請求分發給後端的伺服器處理,在這個叢集裡,除了分發器外,就是給使用者提供服務的伺服器了,這些伺服器數量最少為2

實作負載均衡的開源軟體有LVS,keepalived,haproxy,nginx,商業的有F5,Netscaler

二、keepalived介紹

heartbeat在centos6上有一些bug,影響實驗效果。是以我們不介意使用heartbeat。

keepalived通過VRRP(虛拟路由備援協定)來實作高可用。

在這個協定裡會将多台功能相同的路由器組成一個小組,這個小組裡會有一個master角色和N(N>=1)個backup角色。

工作原理:mster會通過多點傳播的形式向各個backup發送VRRP協定的資料包,當backup收不到master發來的VRRP資料包時,就會認為master當機了,此時就需要根據哥哥backup的優先級來決定誰成為新的mater。

keepalived要有三個子產品,分别是core,check,vrrp。其中core子產品為keepalived的核心,負責主程序的啟動,維護以及全局配置檔案的加載和解析,check子產品負責健康檢查,vrrp子產品是用來實作VRRP協定的。

三、keepalived配置高可用叢集

安裝keepalived,配置環境

master:192.168.52.101

backip:192.168.52.100

master和backip上都要安裝keepalived

yum install keepalived -y

2.keepalived+nginx實作web高可用

Keepalived的作用是檢測伺服器的狀态,如果有一台web伺服器當機,或工作出現故障,Keepalived将檢測到,并将有故障的伺服器從系統中剔除,同時使用其他伺服器代替該伺服器的工作,當伺服器工作正常後Keepalived自動将伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的隻是修複故障的伺服器。

(一)我們用nginx來搭建高可用平台。

(1)101的機器之前我們已經搭建Lnmp,安裝過nginx,100的機器我們需要安裝Nginx。yum install keepalived -y

(2)配置master上的keepalived配置檔案

[root@zhuji ~]# vim /etc/keepalived/keepalived.conf 

global_defs {

   notification_email {            (出現問題發郵件的郵箱)

    [email protected]

   } 

   notification_email_from [email protected]         (由哪一個郵箱位址發出,可以引用第三方)   

   smtp_server 127.0.0.1                         

   smtp_connect_timeout 30 

   router_id LVS_DEVEL

}  

vrrp_script chk_nginx {                     (檢測服務是否正常,還記得之前說過的keepalived的check子產品嗎?)

    script "/usr/local/sbin/check_ng.sh"         (需要寫一個檢測腳本,可以自定義)

    interval 3                           (檢測間斷3秒)

}   

vrrp_instance VI_1 {

    state MASTER                         (定義角色,是master還是backup)

    interface ens33                       (通過哪一個網卡想backup發送VRRP協定資料包)

    virtual_router_id 51                    (定義路由器的id,master要和backup保持一緻)

    priority 100                          (權重,master和backup的權重是不一樣的)

    advert_int 1

    authentication {                        (認證相關的配置)

        auth_type PASS                       (認證的類型是PASS密碼)

        auth_pass litongyao123                 (定義密碼是多少)

    }   

    virtual_ipaddress {  (定義VIP,也就是虛拟IP,這個IP是由keepalived給伺服器配置的,伺服器靠這個VIP對外提供服務)

        192.168.52.200

    track_script {                         (加載檢查腳本)

        chk_nginx                  

(3)配置keepalived檢查腳本,路徑就是在上面配置檔案裡寫的。

[root@zhuji ~]# vim /usr/local/sbin/check_ng.sh

#!/bin/bash

#時間變量,用于記錄日志

d=`date --date today +%Y%m%d_%H:%M:%S`

#計算nginx程序數量

n=`ps -C nginx --no-heading|wc -l`

#如果程序為0,則啟動nginx,并且再次檢測nginx程序數量,

#如果還為0,說明nginx無法啟動,此時需要關閉keepalived

if [ $n -eq "0" ]; then

        /etc/init.d/nginx start

        n2=`ps -C nginx --no-heading|wc -l`

        if [ $n2 -eq "0"  ]; then

                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log

                systemctl stop keepalived

        fi

fi

[root@zhuji ~]# chmod 755 /usr/local/sbin/check_ng.sh               (給執行腳本755的權限)

[root@zhuji ~]# ll !$

ll /usr/local/sbin/check_ng.sh

-rwxr-xr-x. 1 root root 567 1月   1 15:28 /usr/local/sbin/check_ng.sh

重新啟動keepalived,關閉Nginx,看看Keeplived是否會執行腳本,重新開機Nginx。

[root@zhuji ~]# systemctl restart keepalived 

[root@zhuji ~]# ps aux |grep nginx

root     22598  0.0  0.1  45852  1248 ?        Ss   15:44   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/ngin/conf/nginx.conf

............

[root@zhuji ~]# /etc/init.d/nginx stop

Stopping nginx (via systemctl):                            [  确定  ]

root     22809  0.0  0.1  45852  1244 ?        Ss   15:45   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/ngin/conf/nginx.conf

..........

結果是可以,在這裡我們要注意,如果有問題。他的錯誤日志在/var/log/messages裡。要關閉防火牆和selinux,或者更改規則。

配置從機backup:(檢查主從機子的防火牆和selinux的規則。虛拟環境下我們就關閉它)

[root@congji ~]# vim /etc/keepalived/keepalived.conf

   notification_email {

     [email protected]

   }

   notification_email_from [email protected]

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

}

vrrp_script chk_nginx {

    script "/usr/local/sbin/check_ng.sh"

    interval 3

    state BACKUP                           (這裡和主不一樣,角色為backup)

    interface ens33

    virtual_router_id 51                      (這裡要和主保持一樣)

    priority 90                            (權重要比主低)

    authentication {

        auth_type PASS

        auth_pass litongyao123                    (密碼要和主一樣)

    }

    virtual_ipaddress {

        192.168.52.99                          (虛拟vip要和主一樣)

    track_script {

        chk_nginx

編寫監控nginx服務的腳本:

[root@congji ~]# vim /usr/local/sbin/check_ng.sh

        systemctl start nginx                (這裡和主的差別,因為我們從機是Yum安裝的)

更改監控腳本的權限

[root@congji ~]# chmod 755 !$

chmod 755 /usr/local/sbin/check_ng.sh

檢查Keeplived是否會監控Nginx的狀态:

[root@congji ~]# systemctl start keepalived

[root@congji ~]# ps aux |grep nginx

root      4112  0.0  0.2 122908  2108 ?        Ss   16:19   0:00 nginx: master process /usr/sbin/nginx

....

[root@congji ~]# systemctl stop nginx

root      4226  0.0  0.2 122908  2112 ?        Ss   16:19   0:00 nginx: master process /usr/sbin/nginx

修改兩台機子的通路首頁,為後面的實驗做基礎:

master:

[root@zhuji ~]# echo master.master > /data/wwwroot/default/index.html       

backup:

[root@congji ~]# echo backup.backup > /usr/share/nginx/html/index.html (因為backup的Nginx是yum安裝,他的預設路徑如此)

測試keepalived高可用

關閉master上的keepalived服務。觀察vip100和首頁的變化。

主機Master: (ip addr我們發現99的vip不見了)

[root@zhuji ~]# systemctl stop keepalived

[root@zhuji ~]# ip addr

ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:95:aa:42 brd ff:ff:ff:ff:ff:ff

    inet 192.168.52.101/24 brd 192.168.52.255 scope global ens33

       valid_lft forever preferred_lft forever

    inet6 fe80::f8ec:e89c:1608:bfc5/64 scope link 

從機(backup):

[root@zhuji ~]# ip addr            (vip99已經到了從機上)

    link/ether 00:0c:29:83:d1:17 brd ff:ff:ff:ff:ff:ff

    inet 192.168.52.100/24 brd 192.168.52.255 scope global ens33

    inet 192.168.52.99/32 scope global ens33

本文轉自 小新銳 51CTO部落格,原文連結:http://blog.51cto.com/13407306/2067515,如需轉載請自行聯系原作者

繼續閱讀