1. 程式人生 > >Linux下安裝配置使用 Keepalived

Linux下安裝配置使用 Keepalived

1.下載
http://www.keepalived.org/download.html

wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz

2.安裝
tar -zxvf keepalived-1.2.2.tar.gz
cd keepalived-1.2.2
./configure --prefix=/home/wangpl/mine/soft/keepalived-1.2.2
make && make install

3.方式,以下兩種方式可選其一
3.1安裝到系統,預設的啟動腳本里寫的是系統路徑,所以需要拷貝一些檔案到系統目錄下
    $ cp /home/wangpl/mine/soft/keepalived-1.2.2/etc/rc.d/init.d/keepalived /etc/init.d/
    $ cp /home/wangpl/mine/soft/keepalived-1.2.2/sbin/keepalived /usr/sbin/
    $ cp /home/wangpl/mine/soft/keepalived-1.2.2/etc/sysconfig/keepalived /etc/sysconfig/
    $ mkdir -p /etc/keepalived/
    $ cp /home/wangpl/mine/soft/keepalived-1.2.2/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
3.2綠色方式(推薦學習使用)

    不用拷貝到系統檔案,只需要修改下啟動指令碼即可,將原來的寫死的系統路徑改為相對路徑就好了,我的配置如下:

a.將二進位制的keepalived放到了bin目錄

b.將keepalived.conf放到了conf目錄

c.將指令碼(啟動停止等)放到了根目錄

結構如下圖:

4.試用

啟動:sh keepalived start

停止:sh keepalived stop

重啟:sh keepalived restart

5.其實真正起作用的是那個keepalived二進位制檔案,它可以通過 -f 引數指定配置檔案引數,停止的時候直接 kill 或 pkill 或killall掉就可以,如果直接使用keepalived二進位制檔案啟動和停止的話可以方便地更換配置檔案。

PS:需要 Root許可權

執行keepalived

6.(主從模式)配置keepalived.conf

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server localhost
   smtp_connect_timeout 30
   router_id  NodeA
} 
預設的配置檔案中,使用第三方smtp伺服器,但這在現實中幾乎沒有意義(需要驗證的原因),我們將其指定為localhost, 將通知資訊的傳送交給本地sendmail服務處理。查閱說明文件得知route_id配置是為了標識當前節點,我將其設定為NodeA。當然兩個節點的此項設定可相同,也可不相同。
vrrp_instance VI_1 {
    state MASTER   #指定A節點為主節點 備用節點上設定為BACKUP即可
    interface eth0   #繫結虛擬IP的網路介面
    virtual_router_id 51  #VRRP組名,兩個節點的設定必須一樣,以指明各個節點屬於同一VRRP組
    priority 100   #主節點的優先順序(1-254之間),備用節點必須比主節點優先順序低
    advert_int 1   #組播資訊傳送間隔,兩個節點設定必須一樣
    authentication {   #設定驗證資訊,兩個節點必須一致
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {   #指定虛擬IP, 兩個節點設定必須一樣
        192.168.200.16/24
        192.168.200.17 /24
        192.168.200.18 /24
    }
} 

按同樣的方法配置節點B並修改配置檔案,可將A節點的配置檔案複製到B節點,並修改以下幾項:
router_id  NodeB

state   BACKUP

priority   99

其它項不必修改。

測試及驗證:

執行命令 ip a (注意ifconfig命令無法檢視到配置的虛擬IP),可以看到節點A已經綁定了16/17/18的ip,此時,拔掉節點A的網線,在節點B上上執行ip a就發現虛擬IP已經繫結到節點B上,再恢復A節點的網線,虛擬IP又繫結回節點A之上。 

7.(主從模式)腦裂問題

上述主從配置方式存在腦裂的可能,即兩個節點實際都處於正常工作狀態,但是無法接收到彼此的組播通知,這時兩個節點均強行繫結虛擬IP,導致不可預料的後果。
這時就需要設定仲裁,即每個節點必須判斷自身的狀態(應用服務狀態及自身網路狀態),要實現這兩點可使用自定義shell指令碼實現,通過週期性地檢查自身應用服務狀態,並不斷ping閘道器(或其它可靠的參考IP)均可。當自身服務異常、或無法ping通閘道器,則認為自身出現故障,就應該移除掉虛擬IP(停止keepalived服務即可)。主要藉助keepalived提供的vrrp_scripttrack_script實現:

在keepalived的配置檔案最前面加入以下程式碼,定義一個跟蹤指令碼: 

vrrp_script check_local { #定義一個名稱為check_local的檢查指令碼
    script "/usr/local/keepalived/bin/check_local.sh" #shell指令碼的路徑
    interval 5  #執行間隔
}
再在vrrp_instance配置中加入以下程式碼使用上面定義的檢測指令碼:
track_script {
  check_local
} 

我們在/usr/local/keepalived/bin/check_local.sh定義的檢測規則可以是:

a.自身web服務故障(超時,http返回狀態不是200)

b.無法ping通閘道器

c.產生以上任何一個問題,均應該移除本機的虛擬IP(停止keepalived例項即可)

但這裡有個小問題,如果本機或是閘道器偶爾出現一次故障,那麼我們不能認為是服務故障。更好的做法是如果連續N次檢測本機服務不正常或連線N次無法ping通閘道器,才認為是故障產生,才需要進行故障轉移。另一方面,如果指令碼檢測到故障產生,並停止掉了keepalived服務,那麼當故障恢復後,keepalived是無法自動恢復的。我覺得利用獨立的指令碼以秒級的間隔檢查自身服務及閘道器連線性,再根據故障情況控制keepalived的執行或是停止。

這裡提供一個思路,具體指令碼內容請大家根據自己的需要編寫即可。

8.(示例)nginx + keepalived 實現HA 主從模式

vi /etc/keepalived/keepalived.conf

編輯檔案(主):

global_defs {
   router_id nginx_master
}
#監控服務.NGINX mysql等
vrrp_script chk_nginx {
    script "/usr/local/nginx/check_nginx.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.254
    }
    track_script {
        chk_nginx  #檢測指令碼 上面配置的
    }
}

vi /etc/keepalived/keepalived.conf

編輯檔案(從):

global_defs {
   router_id nginx_backup
}
#監控服務.NGINX mysql等
vrrp_script chk_nginx {
    script "/usr/local/nginx/check_nginx.sh"
    interval 2
    weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.254
    }
    track_script {
        chk_nginx  #檢測指令碼 上面配置的
    }
}

指令碼/usr/local/nginx/check_nginx.sh"內容:
#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
/usr/local/nginx/sbin/nginx
sleep 5
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ]
then
killall keepalived
fi
fi

啟動並測試:

1.啟動兩臺機器上的nginx

2.啟動兩臺機器上的keepalived

此時使用命令 ip addr 檢視虛擬IP繫結 可以看到主 有,從沒有,將主機的keepalived關掉,可以看到vip繫結到了從的上面

使用其他機器訪問使用wget進行訪問:vip:xx/wget ?userid=20003829

檢視是否能夠訪問,然後讓本機的nginx關掉,繼續使用wget看是否能夠訪問,如果能夠訪問則HA配置成功。


http://www.linuxidc.com/Linux/2012-08/69383.htm

http://www.68idc.cn/help/buildlang/ask/20150616370229.html

相關推薦

Linux安裝配置使用 Keepalived

1.下載 http://www.keepalived.org/download.html 或 wget http://www.keepalived.org/software/keepalived-1.2.2.tar.gz 2.安裝 tar -zxvf keepalived-

Java學習筆記——Linux安裝配置MySQL

code names 刪掉 set 影響 per install nod 設置 山重水復疑無路,柳暗花明又一村               ——遊山西村 系統:Ubuntu 16.04LTS 1\官網下載mysql-5.7.18-linux-glibc2.5-x86

Linux安裝配置SNMP服務

ip地址 .com 設備節點 1.4.1 linux下 檢查 linu sof href 一、安裝snmp服務 1、檢查系統是否已經安裝snmp的rpm包 以下是安裝snmp服務需要的rpm包: libsensors3-2.10.6-55.el5.i386.rpm

Linux安裝配置DNS

linux dns yum install -y bind (安裝DNS服務)vim /etc/named.conf (編輯DNS配置文件,添加一個zone,如下) zone "123.com" IN { type master; fil

Linux安裝配置Jenkins

linux安裝Jenkins前面簡單介紹了下CentOS7下安裝配置nuxus和CentOS7下防火墻的配置,今天繼續介紹CentOS7下jenkins的安裝配置。下載 我在安裝配置時,用的是jenkins的rpm包,下載地址如下: https://jenkins.io/

Linux安裝配置LIDS系統

LIDSLIDS全稱為Linux Intrusion Detection System,是一種基於Linux內核補丁模式的入侵檢測系統,它也是一種基於主機的入侵檢測系統。它集成在Linux內核中,來進一步加強Linux內核的安全性,為Linux內核提供實現一種安全模式、參考模式和強制存取控制模式。雖然,網絡防

linux安裝配置jdk(解壓版)

生效 測試 linu 文件 info img url www 技術 在linux下登錄oracle官網,下載解壓版jdk 傳送門 系統默認下載到“下載”目錄中 創建要將該文件解壓的文件夾: 其中 -p 參數代表遞歸創建文件夾(可以創建多級目錄) 進

Linux安裝配置JDK

exp lin tar.gz spa www. bin jdk1.8 VM mod 一.下載JDK到甲骨文官網下載JDK(www.oracle.com) 二.解壓安裝在/usr下新建目錄/java1.cd /usr2.sudo mkdir java通過cd命令進入到下載的J

linux安裝配置nginx

nginx這裏以nginx-1.13.12版本為例子 1、首先去官網下載nginx-1.13.12.tar.gz安裝包並上傳到linux服務器並解壓縮安裝包 tar -zxvf nginx-1.13.12.tar.gz 2、在安裝ngxin之前我們首先要保證linux的防火墻是關閉狀態 systemct

Linux安裝配置 http ,修改本機中http伺服器主頁,自定義顯示內容。

HTTP(Hyper Text Transfer Protocol) 超文字傳輸協議,位於osi模型中的應用層。               安裝:可以使用yum等多種方式安裝,最方便的自然是yum安裝(Redhat需

Linux安裝配置JDK和Tomcat操作步驟

下面以JDK7和Tomcat7為例,介紹CentOS7.5下安裝配置JDK和Tomcat的操作步驟。 1、安裝JDK 1.1、檢視yum庫中都有哪些jdk版本 yum search java|grep jdk1.2、選擇指定的版本安裝 yum install java-1.7.0-openj

Centons7安裝配置Flume、Linux安裝配置Flume、Flume的簡單使用示例、Flume整合Kafka使用

本篇文章主要介紹在windows下使用vmware虛擬機器中的Linux(Centons7)下配置安裝Flume。 目前Flume 的最新版本為1.8,筆者安裝的是1.6,是Flume的一個經典版本,通常在生產環境中使用的就是這個版本,在安裝Flume前,看先它的前置條件  (1)

linux安裝配置rabbitMQ

1.安裝Erlang 由於RabbitMQ依賴Erlang, 所以需要先安裝Erlang Erlang的安裝方式大概有兩種: 1.從Erlang Solution安裝(推薦) # 新增erlang solutions源 $ wget https://packages.erlang-solutions

Centons7安裝配置Kafka、Linux安裝配置Kafka

本篇文章主要介紹在windows下使用vmware虛擬機器中的Linux(Centons7)下配置安裝Kafka。 簡要步驟: ①、下載Kafka解壓包 ②、解壓Kafka ③、修改配置檔案 ④、啟動Kafka ⑤、建立topic   詳細步驟:

linux安裝配置redis服務

linux下安裝配置redis服務 2016年03月25日 15:39:31 coding_everyday 閱讀數:3530更多 個人分類: redis          最近專案需要用到r

linux安裝配置nginx(tomcat)

一,安裝nginx 有問題一步步來 nginx下載地址: http://nginx.org/en/download.html 把下載好的nginx版本放到/usr/local中 1.1 解壓 [[email protected] ~]# cd /usr

linux安裝配置mysql

首先檢查自己的linux系統是32位還是64位,到官網下載相應版本的mysql, 並將.tar.gz壓縮包傳到/usr 目錄下 不會傳的同學, 看一下另一篇講解怎麼從windows給linux傳檔案: 傳完不在/usr資料夾,百度一下搜尋指令,和移動檔案指令, 放到/

linux安裝配置tomcat

先確定自己的linux是32位還是64位, 下載相應版本的tomcat壓縮包並傳輸到linux系統上,  不會從winsdows傳檔案到linux的參考另一部落格: TOMCAT需要JDK環境, 沒裝的參考裝JDK教程: 這篇部落格從把壓縮包放在/usr/loc

linux安裝配置mongodb

一:下載 下載地址: 二:安裝 2.1 解壓 [[email protected] download]# ls -ltr total 71552 -rw-r--r-- 1 root root 32979820 Jun 15 10:01 mysql-5.6.2

新手學Linux(四)----Linux安裝配置MongoDB資料庫

    最近在學習研究linux,今天就教教大家怎麼在linux上安裝配置MongoDB資料庫 一、安裝步驟     1、下載及解壓     下載完成後用WinSCP複製到/us