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