天天看點

高性能負載均衡叢集(Lvs+Keepalived+Nginx)LVS作用keepalived是什麼keepalived工作原理keepalived的配置檔案1環境搭建1.10、digest值的擷取方法

LVS作用

LVS是一個開源的軟體,可以實作傳輸層四層負載均衡。LVS是Linux Virtual Server的縮寫,意思是Linux虛拟伺服器。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);八種排程算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh),CentOS 早在版本2.4時就內建了LVS

keepalived是什麼

keepalived是叢集管理中保證叢集高可用的一個服務軟體,其功能類似于heartbeat,用來防止單點故障。

keepalived工作原理

keepalived是以VRRP協定為實作基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛拟路由備援協定。

虛拟路由備援協定,可以認為是實作路由器高可用的協定,即将N台提供相同功能的路由器組成一個路由器組,這個組裡面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在區域網路内其他機器的預設路由為該vip),master會發多點傳播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。

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

keepalived的配置檔案

keepalived隻有一個配置檔案keepalived.conf,裡面主要包括以下幾個配置區域,分别是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。

1環境搭建

至少準備兩台Nginx伺服器,因為需要展現出keepalived的效果

1.1、使用yum指令下載下傳插件

安裝SSL插件

yum install -y openssl openssl-devel

安裝gcc gcc-c++

yum install -y gcc gcc-c++

安裝popt插件

yum install popt-devel

安裝IPv6插件

yum -y install libnl libnl-devel

安裝下載下傳插件

yum -y install wget

如果沒安裝,後面會報一系列錯誤

其他插件:

防火牆管理工具

yum install firewalld firewall-config

啟動:# systemctl start firewalld

檢視狀态:# systemctl status firewalld 或者 firewall-cmd --state

停止:# systemctl disable firewalld

禁用:# systemctl stop firewalld

1.2、下載下傳keepalived

目前最高版本為2.0.18。現在我們就下載下傳2.0.18

官網下載下傳位址:https://www.keepalived.org/download.html

Linux指令:

cd /home

mkdir program

cd prgram

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

1.3、解壓

tar -zxvf keepalived-2.0.18.tar.gz

1.4、進入解壓的檔案夾中

cd keepalived-2.0.18

1.5、編譯keepalived

指定安裝路徑,并編譯

./configure --prefix=/usr/local/keepalived

1.6、安裝

make && make install

安裝完成後會在以下此處生成檔案

/usr/local/etc/keepalived/keepalived.conf

/usr/local/etc/sysconfig/keepalived

/usr/local/sbin/keepalived

1.7、初始化及啟動

keepalived啟動腳本變量引用檔案,預設檔案路徑是/etc/sysconfig/,也可以不做軟連結,直接修改啟動腳本中檔案路徑即可(安裝目錄下)

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived

#将keepalived主程式加入到環境變量(安裝目錄下)

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

#keepalived啟動腳本(源碼目錄下,也就是你的檔案壓縮包解壓位址),放到/etc/init.d/目錄下就可以使用service指令便捷調用

cp /home/program/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/keepalived

#将配置檔案放到預設路徑下

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

1.8、keepalived常用指令

啟動

service keepalived start

停止

service keepalived stop

重新開機

service keepalived restart

加為系統服務

chkconfig –add keepalived

開機啟動

chkconfig keepalived on

檢視開機啟動的服務

chkconfig –list

1.9、配置keepalived配置檔案

移動目前位置

cd /etc/keepalived/

編輯檔案

vi keepalived.conf

配置檔案說明

#全局定義塊
global_defs {
    # 郵件通知配置,配置你的郵件位址
    # 其内容可以設定為	
    # email1替換為郵件位址1	[email protected]
    #email2替換為郵件位址2	[email protected]
	#以此類推
    notification_email {
        email1
        email2
    }
    #設定通知郵件來自與誰,這裡填寫email位址
    notification_email_from email
    #郵件smtp服務位址
    smtp_server host
    # 郵件伺服器連接配接逾時時間(機關預設為秒。這裡直接替換為數字就可以)
    smtp_connect_timeout num
    #LVS負載均衡器辨別,在一個網絡内,它的值應該是唯一的
    lvs_id string
    #使用者辨別本節點的名稱,通常為hostname (建立時的預設名稱為LVS_DEVEL)
    router_id string
}
 
#VRRP 執行個體定義塊
#同步vrrp級,用于确定失敗切換(FailOver)包含的路由執行個體個數。
#即在有2個負載均衡器的場景,一旦某個負載均衡器失效,需要自動切換到另外一個負載均衡器的執行個體是哪
vrrp_sync_group string { 
	#至少要包含一個vrrp執行個體,vrrp執行個體名稱必須和vrrp_instance定義的一緻
    group {
    	#這個名稱就與下方的vrrp_instance 所配置的名稱一緻
        string 
        #這個名稱就與下方的vrrp_instance 所配置的名稱一緻
        string 
    }
}
 #vrrp執行個體名
vrrp_instance string {
	#執行個體狀态,隻有MASTER 和 BACKUP兩種狀态,并且需要全部大寫。
	#搶占模式下,其中MASTER為工作狀态,BACKUP為備用狀态。
	#當MASTER所在的伺服器失效時,BACKUP所在的服務會自動把它的狀态由BACKUP切換到MASTER狀态。
	#當失效的MASTER所在的服務恢複時,BACKUP從MASTER恢複到BACKUP狀态。
    state MASTER | BACKUP
    #虛拟路由的ID号,每個節點設定必須一樣,可選擇IP最後一段使用,相同的 VRID 為一個組,他将決定多點傳播的 MAC 位址。
    virtual_router_id num
    #對外提供服務的網卡接口,即VIP綁定的網卡接口。
    #如:eth0,eth1。目前主流的伺服器都有2個或2個以上的接口(分别對應外網和内網),在選擇網卡接口時,一定要核實清楚。
    interface string
    #本機的IP位址
    mcast_src_ip @IP 
    #點優先級,取值範圍0~254,MASTER要比BACKUP高,值越大權重越大
    priority num
    #MASTER與BACKUP節點間同步檢查的時間間隔,機關為秒
    advert_int num
    #禁止搶占服務。預設情況,當MASTER服務挂掉之後,BACKUP自動更新為MASTER并接替它的任務。
    #當MASTER服務恢複後,更新為MASTER的BACKUP服務又自動降為BACKUP,把工作權交給原MASTER。
    #當配置了nopreempt,MASTER從挂掉到恢複,不再将服務搶占過來。
    nopreempt
    #有故障時是否激活郵件通知
    smtp_alert
    #負載均衡器之間的監控接口,類似于 HA HeartBeat 的心跳線。
 	#但它的機制優于 Heartbeat,因為它沒有“裂腦”這個問題,它是以優先級這個機制來規避這個麻煩的。
 	#在 DR 模式中,lvs_sync_daemon_inteface與服務接口interface使用同一個網絡接口
    lvs_sync_daemon_interface string 
    #驗證類型和驗證密碼。類型主要有 PASS、AH 兩種,通常使用PASS類型。
    #據說AH使用時有問題。驗證密碼為明文,同一vrrp 執行個體MASTER與BACKUP使用相同的密碼才能正常通信。
    authentication {
    	#驗證類型
        auth_type PASS | AH
        #驗證密碼
        auth_pass string
    }
 	#虛拟IP位址池,可以有多個IP,每個IP占一行,不需要指定子網路遮罩。
 	#注意:這個IP必須與我們的設定的vip保持一緻。(直接寫入IP即可)
    #如果是一主一備,虛拟VIP隻能在一台伺服器存放
    #如果是多主多備,可以讓虛拟VIP在多台伺服器上存放,并且是存放在state值為 MASTER的伺服器上
    #多主的情況下LVS就會采用輪詢機制通路這些伺服器
    virtual_ipaddress {  # Block limited to 20 IP addresses @IP
        @IP
        @IP
    }
}
 
#虛拟伺服器定義塊
#(@IP PORT) 這裡填寫IP與端口号,記住這兩者之間沒有冒号(:)隻有空格
virtual_server (@IP PORT)|(fwmark num) { 
	#健康檢查時間間隔,機關:秒
    delay_loop num
    #負載均衡排程算法,網際網路應用常用方式為wlc或rr
    lb_algo	 rr |wrr | lc | wlc | sh | dh | lblc 
    #負載均衡轉發規則。包括DR、NAT、TUN 3種,一般使用路由(DR)轉發規則。
    lb_kind		 NAT | DR | TUN
    #http服務會話保持時間,機關:秒(預設50)
    persistence_timeout num 
    #轉發協定,分為TCP和UDP兩種(預設TCP)
    protocol TCP|UDP
    #真實伺服器IP和端口,可以定義多個 real_server 
    real_server @IP PORT { 
    	#負載權重,值越大,轉發的優先級越高
        weight num
        #服務停止後執行的腳本 (填寫腳本位址)
        notify_down /path/script.sh
        #服務有效性檢測
        TCP_CHECK { 
        	#服務連接配接端口
            connect_port num 
            #服務連接配接逾時時長,機關:秒
            connect_timeout num
            #服務連接配接失敗重試次數
            nb_get_retry num 
            #重試連接配接間隔,機關:秒
            delay_before_retry num
        }
    }
 
    real_server @IP PORT {
        weight num
        MISC_CHECK {
            misc_path /path_to_script/script.sh(or misc_path “/path_to_script/script.sh <arg_list>”)
        }
    }
 
    real_server @IP PORT {
        weight num
        #HTTP_GET健康檢查 
        #SSL_GET
        HTTP_GET|SSL_GET {
            url { 
               #頁面位址,可以在path與digest二選一
                path /index.html
                 # digest 擷取方式 通過linux指令行  (genhash -s 【IP位址】 -p 【端口号】 【能夠直接被通路的頁面例如 index.html】)
                #genhash -s 192.168.100.110 -p 80 -u /index.html
               #檢查後的摘要資訊
                digest <STRING> # HTTP/SSL 檢查後的摘要資訊 用工具genhash生成
                status_code : 200
            }
            #服務連接配接端口
            connect_port num 
            #服務連接配接逾時時長,機關:秒
            connect_timeout num
            #服務連接配接失敗重試次數
            nb_get_retry num 
            #重試連接配接間隔,機關:秒
            delay_before_retry num
        }
    }
}
           

1.10、digest值的擷取方法

指令行語句:genhash -s 192.168.100.110 -p 80 -u /index.html

MD5SUM = bfaa334fdd71444e45eca3b7a1679a4a

genhash指令:

[[email protected] html]# genhash

genhash v1.0.0 (18/11, 2002)

Usage:

genhash -s server-address -p port -u url

genhash -S -s server-address -p port -u url

genhash -h

genhash -r

Commands:

Either long or short options are allowed.

genhash --use-ssl -S Use SSL connection to remote server.

genhash --server -s Use the specified remote server address.

genhash --port -p Use the specified remote server port.

genhash --url -u Use the specified remote server url.

genhash --use-virtualhost -V Use the specified virtualhost in GET query.

genhash --verbose -v Use verbose mode output.

genhash --help -h Display this short inlined help screen.

genhash --release -r Display the release number

2.1進行簡單配置

配置檔案

! Configuration File for keepalived

vrrp_sync_group string {
	group {
		nginx_master
	}
}
#檢測腳本
vrrp_script chk_nginx{
	script "/etc/keepalived/nginx_check.sh" #運作腳本,腳本内容下面有,就是起到一個nginx當機以後,自動開啟服務
	#檢測時間間隔,機關為 秒
	interval 2 				
	#如果條件成立的話,則權重 -12
	weight -12

}

vrrp_instance nginx_master {
    state MASTER
    #網卡
    interface ens33
    #主機與備機的virtual_router_id值一定要相同
    virtual_router_id 188
    #記住備用機的權重一定要比主機小
    priority 100
    advert_int 1
    #備用機的IP不要忘記該了
    mcast_src_ip 192.168.114.144
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    	chk_nginx
    }
    #虛拟vip,
    #如果是一主一備,虛拟VIP隻能在一台伺服器存放,但是備用機也要寫入虛拟VIP要與主機一緻
    #如果是多主多備,可以讓虛拟VIP在多台伺服器上存放,并且是存放在state值為 MASTER的伺服器上
    virtual_ipaddress {
        192.168.114.100
    }
}

}
           

腳本代碼:

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi
           

2.2、安裝Nginx并運作

Nginx安裝教程(點選此處)

記住一定要關閉防火牆,不然無法正常通路

關閉防火牆指令:systemctl stop firewalld

2.4、需要對nginx_restart.sh檔案進行授權

移動目前位置

cd /etc/keepalived

授權

chmod 777 nginx_restart.sh

2.3、運作Keepalived

啟動

service keepalived start

停止

service keepalived stop

重新開機

service keepalived restart

繼續閱讀