日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

CentOS6.5环境使用keepalived实现nginx服务的高可用性及配置详解

發布時間:2025/5/22 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CentOS6.5环境使用keepalived实现nginx服务的高可用性及配置详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

keepalived基礎概念
? ?Keepalived是一個基于VRRP協議來實現的WEB服務高可用方案,可以利用其來避免單點故障。一個WEB服務至少會有2臺服務器運行Keepalived,一臺為主服務器(MASTER),一臺為備份服務器(BACKUP),但是對外表現為一個虛擬IP,主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候,即主服務器宕機的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。


? ?keepalived最初的誕生就是為ipvs提供高可用性的,它可以自己調用ipvs來生成規則,并且可以自動實現把用戶設定好的ip地址轉移動別的節點上去的,還可以實現后端服務器的健康狀態檢測,說白了就是對vrrp的實現而已,那vrrp是什么呢:它叫虛擬冗余路由協議;vrrp可以把兩個網關虛擬成一個網關來使用,當一個網關不可以用了,另一個會取而代之,keepalived其實就是linux操作系統上實現vrrp的,keepalived就是這樣來實現vip地址轉移的,也是實現的地址的高可用性;


? ?在VRRP協議中,有兩組重要的概念:VRRP路由器和虛擬路由器,主控路由器和備份路由器。 VRRP路由器是指運行VRRP的路由器,是物理實體,虛擬路由器是指VRRP協議創建的,是邏輯概念。一組VRRP路由器協同工作,共同構成一臺虛擬路由器。該虛擬路由器對外表現為一個具有唯一固定IP地址和MAC地址的邏輯路由器。處于同一個VRRP組中的路由器具有兩種互斥的角色:主控路由器和備份路由器,一個VRRP組中有且只有一臺處于主控角色的路由器,可以有一個或者多個處于備份角色的路由器。VRRP協議使用選擇策略從路由器組中選出一臺作為主控,負責ARP相應和轉發IP數據包,組中的其它路由器作為備份的角色處于待命狀態。當由于某種原因主控路由器發生故障時,備份路由器能在幾秒鐘的時延后升級為主路由器。由于此切換非常迅速而且不用改變IP地址和MAC地址,故對終端使用者系統是透明的。


keepalived的核心組成:
? ?1、vrrp(Virtual Redundancy Router Protocol)的實現,虛擬冗余路由協議,它可以把兩個或多個網關虛擬成一個網關來使用,就是在兩個或多個路由之前用一種協議,讓兩個或多個路由通過選舉不決定哪個是活動的路由,當活動的不再提供服務了,另一個將取而代之.
? ?2、virtual server虛擬服務器
? ?3、vrrp_script


keepalived配置文件分為三段:
? ?第一段:Global configuration全局配置段;
? ? ? ?Global definitions ? ?全局定義;
? ? ? ?Static route ? ?靜態路由;


? ?第二段:VRRP configuration配置段;
? ? ? ?VRRP synchronization groups同步組,假如在一個節點上配置兩個IP要把VIP同時轉移出去,也就是說這兩個VIP要同步工作,定義成一個組,而后當也一個資源來轉移;
? ? ? ?VRRP instances實例,定義虛擬路由器的;要實現虛擬路由轉移時要轉移IP地址;


? ?第三段:LVS configuration配置段;
? ? ? ?virtual server groups,虛擬路由服務器組,把多個路由定義在一起同時使用;
? ? ? ?virtual servers虛擬服務器,一般都是單獨定義的;

環境準備:


ansible server:192.168.8.40
node2.chinasoft.com:192.168.8.39
node4.chinasoft.com:192.168.8.42


在ansible服務器中定義keepalived組
# vim /etc/ansible/hosts
[keepalived]
node2.chinasoft.com
node4.chinasoft.com


在兩個節點node2和node4上安裝nginx軟件:
# ansible keepalived -m yum -a "name=nginx state=present"


編輯默認主頁,將Welcome信息改為各自節點的hostname:
# vim /usr/share/nginx/html/index.html


keepalived的實現過程:

第一步:安裝配置keepalived程序


# ansible keepalived -m yum -a "name=keepalived state=present"

# cd /etc/keepalived/ # vim keepalived.conf ! Configuration File for keepalived global_defs { #全局定義notification_email { #定義郵件通知root@localhost #定義收件人,一行一個,有多少個就可以寫多少行}notification_email_from keepalivedadmin@localhost #以什么人的身份發郵件,就是發件人smtp_server 127.0.0.1 #指定發郵件的服務器smtp_connect_timeout 30 #連接郵件服務器超時時長router_id LVS_DEVEL #路由ID } vrrp_script chk_mantaince_down { #手動定義檢測機制#判斷/etc/keepalived/這個路徑下是否存在down文件,如果存在即退出為1,否則退出為0script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"interval 1 #每隔多久發送一次檢測信息,單位為秒weight -6 #如果上面的判斷有down文件即權后重-6,只要減后的權重大于master的就可以 } vrrp_instance VI_1 { #定義vrrp實例state MASTER #定義該節點為主節點,一個節點定義了master,另一臺或其實的就要定義成backup;interface eth0 #通告經過哪個接口進行virtual_router_id 88#虛擬路由ID號,不能大于255的priority 100 #定義初始優先級,定義主的優先級要高于BACKUP的advert_int 1 #通告幾個authentication { #定義認證auth_type PASS #定義認證機制,pass是明文認證auth_pass 1111 #認證密碼}virtual_ipaddress { #虛擬地址,VIP地址192.168.8.77 #可以定義得很詳細,<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>,可以用man keepalived.conf查看相關的詳細說明的;}track_script { #在vrrp實現中要追蹤到上面定義的檢測腳本chk_haproxychk_mantaince_down #調用上面定義好的檢測}# 調用編寫好的通知腳本notify_master "/etc/keepalived/notify.sh master"notify_backup "/etc/keepalived/notify.sh backup"notify_fault "/etc/keepalived/notify.sh fault" }




將配置文件發送一份到node4中,并修改vrrp_instance VI_1 部分的
state 為BACKUP
priority 優先級為 99

# scp keepalived.conf node4.chinasoft.com:/etc/keepalived/vrrp_instance VI_1 { #定義vrrp實例state BACKUP #定義該節點為主節點,一個節點定義了master,另一臺或其實的就要定義成backup;interface eth0 #通告經過哪個接口進行virtual_router_id 88#虛擬路由ID號,不能大于255的priority 99 #定義初始優先級,定義主的優先級要高于BACKUP的advert_int 1 #通告幾個



重啟keepalived服務
# ansible keepalived -a "service keepalived restart"
可以看到VIP虛擬地址被node2MASTER獲取,在node2的/etc/keepalived目錄下創建文件down,可以看到虛擬IP就轉移到了node4上
將node2中的down文件刪除可以看到VIP又回到了node2MASTER中,訪問http://192.168.8.77虛擬IP可以看到nginx服務在node2上



第二步:編寫通告腳本

node2和node4都需要編寫,當某一節點發生VIP地址轉移時就會發郵件通知管理員,在/etc/keepalived/目錄下創建一個腳本文件,然后再在腳本文件中調用這個腳本就可以了,上面配置文件中已經有調用腳本內容了:

# vim /etc/keepalived/notify.sh

#!/bin/bash # Author:Tanxw.com <tan_xw@hotmail.com> # Description: An example of notify script # vip=192.168.8.77 # 定義VIP地址 contact='root@localhost' # 這定義收件人 # 獲取當前主機的IP地址 currentIP=`ifconfig eth0 | awk '/inet addr/{print $2}' | awk -F: '{print $2}'` notify() { # 定義通告方法# 定義一個發件的主體內容mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname`($currentIP) changed to be $1"# 定義發件的主題mailsubject="$currentIP to be $1: $vip floating"# 用mail命令把郵件發送出去echo $mailbody | mail -s "$mailsubject" $contact } case "$1" in # 判斷傳進來的三個參數是什么,調用notify方法master)notify masterexit 0;;backup)notify backupexit 0;;fault)notify faultexit 0;;*)echo "Usage: `basename $0` {master|backup|fault}"exit 1;; esac


第三步:配置LVS的集群服務

把下面代碼加入到各節點的/etc/keepalived/keepalived.conf配置文件中即可,默認的配置文件中也有示例:

virtual_server 192.168.8.77 80 { # 定義一個虛擬服務 VIP PORTdelay_loop 6 # 大概延遲幾個周期再去做服務檢測的lb_algo rr # 定義調度方法lb_kind DR # LVS的模型,NET也可以nat_mask 255.255.255.0 # 掩碼persistence_timeout 0 # 持久時間protocol TCP # 協議,默認也是TCPreal_server 192.168.8.39 80 { # 定義真正的real_server ip portweight 1 # 定義權重HTTP_GET { # 請求方法url { # 聲明檢測哪個URLpath /status_code 200}connect_timeout 3 # 連接超時時間nb_get_retry 3 # 至少嘗試幾次delay_before_retry 3# 在每次嘗試時要等上幾秒鐘}}real_server 192.168.8.42 80 { # 定義真正的real_server ip portweight 1 # 定義權重HTTP_GET { # 請求方法url { # 聲明檢測哪個URLpath /status_code 200}connect_timeout 3 # 連接超時時間nb_get_retry 3 # 至少嘗試幾次delay_before_retry 3# 在每次嘗試時要等上幾秒鐘}} }




在各節點上安裝ipvsadm工具
# ansible keepalived -m yum -a "name=ipvsadm state=present"
通過ipvsadm命令可以看到集群節點已經啟動了
即使沒安裝有ipvsadm,只要配置有keepalived的lvs,啟動服務后就會自動生成LVS規則,但是如果沒安裝有ipvsadm就查看不了規則了

# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn [root@node2 keepalived]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.8.77:80 rr-> 192.168.8.39:80 Local 1 0 0 -> 192.168.8.42:80 Route 1 0 0 [root@node2 keepalived]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:0c:29:55:2e:82 brd ff:ff:ff:ff:ff:ffinet 192.168.8.39/24 brd 192.168.8.255 scope global eth0inet 192.168.8.77/32 scope global eth0inet6 fe80::20c:29ff:fe55:2e82/64 scope link valid_lft forever preferred_lft forever


第四步:兩個節點都配置有MASTER/BACKUP

定義兩個實例,一個定義為MASTER,另一個定義為BACKUP就可以了,分別配置不同的VIP,node2上配置了MASTER的VIP為192.168.8.77,BACKUP的VIP為192.168.8.78;node4為上配置了MASTER的VIP為192.168.8.78,BACKUP的VIP為192.168.8.77。



# 這段代碼在node2的節點上加,同樣加為vrrp實例就可以了
vrrp_instance VI_2 {
? ? state BACKUP
? ? interface eth0
? ? virtual_router_id 33
? ? priority 99
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.8.78
? ? }
? ? track_script {
? ? ? ? chk_mantaince_down
# ? ? ? chk_nginx
? ? }
? ? notify_master "/etc/keepalived/notify.sh master"
? ? notify_backup "/etc/keepalived/notify.sh backup"
? ? notify_fault "/etc/keepalived/notify.sh fault"
}
# 下面這段代碼加到node4節點的配置文件上就可以了,就是需要改一個master和權重
vrrp_instance VI_2 {
? ? state MASTER
? ? interface eth0
? ? virtual_router_id 33
? ? priority 100
? ? advert_int 1
? ? authentication {
? ? ? ? auth_type PASS
? ? ? ? auth_pass 1111
? ? }
? ? virtual_ipaddress {
? ? ? ? 192.168.8.78
? ? }
? ? track_script {
? ? ? ? chk_mantaince_down
# ? ? ? chk_nginx
? ? }
? ? notify_master "/etc/keepalived/notify.sh master"
? ? notify_backup "/etc/keepalived/notify.sh backup"
? ? notify_fault "/etc/keepalived/notify.sh fault"
}


再次重啟keepalived服務
# ansible keepalived -a "service keepalived restart"






結束:
? ?keepalived的vrrp的大概實現出來了,不管是LVS還是高可用VIP地址的自動轉移,還是服務的高用,都需要認真的配置好,更有需要寫好很多的腳本,服務才會更高效,更高可用。

轉載于:https://www.cnblogs.com/reblue520/p/6239804.html

總結

以上是生活随笔為你收集整理的CentOS6.5环境使用keepalived实现nginx服务的高可用性及配置详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。