第十八章 Linux叢集架構(上)
18.1 叢集介紹
18.2 keepalived介紹
18.3 用keepalived配置高可用叢集(上)
準備兩臺機器
一個為mater 另一個為backup
兩臺機器都關閉防火牆
兩臺機器都安裝上nginx,為了下一步實驗用
兩臺機器都安裝keepalived
•yum install -y keepalived
設定vip為100
master上的配置檔案
cat /etc/keepalived/keepalived.conf
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/usr/local/sbin/check_ng.sh"
interval 3
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.93.100
}
track_script {
chk_nginx
}
}
master上監控指令碼
/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
systemctl start nginx
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
指令碼賦755許可權
systemctl start keepalived 啟動服務
18.4 用keepalived配置高可用叢集(中)
backup 配置檔案
/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 {
script "/usr/local/sbin/check_ng.sh"
interval 3
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass aminglinux>com
}
virtual_ipaddress {
192.168.93.100
}
track_script {
chk_nginx
}
}
監控指令碼
/usr/local/sbin/check_ng.sh
#時間變數,用於記錄日誌
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
指令碼賦755許可權
systemctl start keepalived 啟動服務
18.5 用keepalived配置高可用叢集(下)
18.6 負載均衡叢集介紹
18.7 LVS介紹
18.8 LVS的排程演算法
18.9 LVS NAT模式搭建(上)
centos1安裝 ipvsdam
yum install -y ipvsdam
centos1 網絡卡配置
dir 編寫配置指令碼
/usr/local/sbin/lvs_nat.sh
#! /bin/bash
# director 伺服器上開啟路由轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 關閉icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意區分網絡卡名字,阿銘的兩個網絡卡分別為ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 設定nat防火牆
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.93.0/24 -j MASQUERADE
# director設定ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.188.110:80 -s rr
$IPVSADM -a -t 192.168.188.110:80 -r 192.168.93.128:80 -m -w 1
$IPVSADM -a -t 192.168.188.110:80 -r 192.168.93.130:80 -m -w 1
18.10 LVS NAT模式搭建(下)
centos2的閘道器設為dir
centos3的閘道器設為dir
課堂串講
18.1 叢集介紹
18.2 keepalived介紹
18.3/18.4/18.5 用keepalived配置高可用叢集
18.1 叢集介紹
- 叢集根據功能劃分為兩大類:
高可用
和負載均衡
高可用叢集
通常為兩臺伺服器,一臺工作,另外一臺作為冗餘,當提供服務的機器宕機,冗餘將接替繼續提供服務
實現高可用的開源軟體有:heartbeat
、keepalived
負載均衡叢集
,需要有一臺伺服器作為分發器,它負責把使用者的請求分發給後端的伺服器處理,在這個叢集裡,除了分發器外,就是給使用者提供服務的伺服器了,這些伺服器數量至少為2。實現負載均衡的開源軟體有LVS
、keepalived
、haproxy
、nginx
,商業的有F5
、Netscaler
18.2 keepalived介紹
在這裡我們使用keepalived
來實現高可用叢集,因為heartbeat
在centos6上有一些問題,不太穩定。建議以後使用高可用使用keepalived實現。keepalived
通過VRRP
(Virtual Router Redundancy Protocl)來實現高可用。其中文叫虛擬路由冗餘協議。在這個協議裡會將多臺功能相同的路由器(機器)組成一個小組,這個小組裡會有1個master角色和N(N>=1)個backup角色。master會通過組播的形式向各個backup傳送VRRP協議的資料包,當backup收不到master發來的VRRP資料包時,就會認為master宕機了。此時就需要根據各個backup的優先順序來決定誰成為新的mater。
Keepalived主要有三個模組,分別是core
、check
和vrrp
。其中core模組
為keepalived的核心,負責主程序的啟動、維護以及全域性配置檔案的載入和解析,check模組
負責健康檢查,vrrp模組
是來實現VRRP協議的。
18.3/18.4/18.5 用keepalived配置高可用叢集
先準備兩臺機器做高可用叢集 一般使用高可用都是針對機器上的服務的 這裡以Nginx服務為例子,就是針對Nginx來實現高可用 企業上一般會讓Nginx
作為負載均衡
來使用,當他出現單點故障時,就會導致後端的web機器訪問不了, Nginx使用高可用是很有必要的。
192.168.80.102為master 192.168.80.104為backup
步驟
1.兩臺機器上分別安裝keepalived
|
|
2.兩臺機器上分別安裝好針對的服務,這裡是Nginx
master上之前編譯安裝過Nginx
backup為了區別用master 這裡使用yum安裝
|
|
3.master上編輯keepalived配置檔案
我們可以先把自動的配置檔案清空 才自定義編輯
|
|
輸入下面內容
|
|
內容在 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_keepalived.conf
keepalived配置檔案路徑在/etc/keepalived/keepalived.conf
引數 | 含義 |
---|---|
global_defs | 全域性定義 |
notification_email | 出現問題時給郵箱發郵件 |
notification_email_from | 又哪個郵箱發郵件 |
vrrp_script chk_nginx | 檢查Nginx服務是否正常 指定檢查指令碼的路徑 |
interval 3 | 檢查間斷為3秒 |
state MASTER | 定義master |
interface | 指定網絡卡傳送VRRP包 |
virtual_router_id | 定義路由群的id |
priority | 定義權重 |
authentication | 定義認證 |
auth_type | 認證型別 |
auth_pass | 認證密碼 |
virtual_ipaddress | 定義虛擬ip(vip)此IP用來訪問此虛擬路由群的,就是把master和backup看作一臺機器單個IP |
chk_nginx | 載入檢查指令碼 |
4.master上編寫檢查Nginx指令碼
|
|
輸入下面內容
|
|
內容在 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/master_check_ng.sh
指令碼上systemctl stop keepalived
關閉keepalived服務是為了啟動backup上的keepaliveed時候 不會出現“腦裂
”現象。即master和backup的keepaliveed各自搶佔資源,如VIP,外部訪問時候出現兩臺機器同個ip。
5.更改檢查指令碼的許可權
|
|
6.master上啟動keepalived服務
|
|
測試
master上停止Nginx服務看是否自動開啟
|
|
發現沒有啟動Nginx,這裡是防火牆問題
|
|
現在看到Nginx是自動開啟的
|
|
ip add
檢視VIP
keepalived日誌在/var/log/messages
中看到
7.為了讓實驗成功 兩臺機器都關閉防火牆
|
|
8.backup上編輯keepalived配置檔案
|
|
輸入下面內容
|
|
內容在 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_keepalived.conf
這裡和master上的不一樣的地方是state BACKUP
和priority 90
backup的權重比主少
9.backup上編寫檢查Nginx指令碼
|
|
輸入下面內容
|
|
內容在 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/backup_check_ng.sh
和主上的區別在於 systemctl start nginx
是由於從機器上使用yum安裝的
10.修改backup上的指令碼許可權並啟動keepalived服務
|
|
測試
master上之前設定了預設虛擬主機 更改主頁內容
backup主頁的地址在/usr/share/nginx/html/index.html
並更改主頁內容
同時檢視vip是載入maser的主頁的
模擬master機器宕機,直接把maser上的keepalied服務給停掉 早看看vip是否給了backup
|
|
留意backup
|
|
看到vip已經來到了backup上,再用瀏覽器看看
再把maser上的keepalived啟動 發現vip又回到了主上
|
|
18.6 負載均衡叢集介紹
18.7 LVS介紹
18.8 LVS排程演算法
18.9/18.10 LVS NAT模式搭建
18.6 負載均衡叢集介紹
負載均衡主流開源軟體LVS
、keepalived
、haproxy
、nginx
等。
其中LVS屬於4層
(網路OSI 7層模型),nginx屬於7層
,haproxy既可以認為是4層,也可以當做7層使用。
其實keepalived的負載均衡功能其實就是lvs,lvs這種4層的負載均衡是可以分發除80外的其他埠通訊的,比如MySQL的,而nginx僅僅支援http,https,mail,haproxy也支援MySQL這種。但是nginx可以實現根據目錄來區分後端的伺服器等更為靈活的功能。
相比較來說,LVS這種4層的更穩定,能承受更多的請求,而nginx這種7層的更加靈活,能實現更多的個性化需求。
18.7 LVS介紹
LVS
是由國人章文嵩開發的。其流行度不亞於apache的httpd,是基於TCP/IP做的路由和轉發,穩定性和效率很高。
LVS最新版本基於Linux核心2.6,有好多年不更新了。
LVS有三種常見的模式:NAT
、DR
、IP Tunnel
LVS架構中有一個核心角色叫做分發器
(Load balance),它用來分發使用者的請求,還有諸多處理使用者請求的伺服器(Real Server,簡稱rs
)
NAT模式
這種模式藉助iptables的nat表來實現
使用者的請求到分發器後,通過預設的iptables規則,把請求的資料包轉發到後端的rs上去
rs需要設定閘道器為分發器的內網ip
使用者請求的資料包和返回給使用者的資料包全部經過分發器,所以分發器成為瓶頸,一般請求量在10臺以下。
在nat模式中,只需要分發器有公網ip即可,所以比較節省公網ip資源。
IP Tunnel模式
這種模式,需要有一個公共的IP配置在分發器和所有rs上,我們把它叫做vip
客戶端請求的目標IP為vip,分發器接收到請求資料包後,會對資料包做一個加工,會把目標IP改為rs的IP,這樣資料包就到了rs上
rs接收資料包後,會還原原始資料包,這樣目標IP又變回為vip,因為所有rs上配置了這個vip,此時它會認為使用者請求的就是它自己。
這個模式下的rs都會獨立的公網IP來回複用戶的請求,可以減少分發器的壓力。
DR模式
這種模式,也需要有一個公共的IP配置在分發器和所有rs上,也就是vip
和IP Tunnel不同的是,它會把資料包的MAC地址修改為rs的MAC地址
rs接收資料包後,會還原原始資料包,這樣目標IP為vip,因為所有rs上配置了這個vip,所以它會認為是它自己。
此模式下rs配置公網IP來返回使用者請求。
總結
綜上所述,nat模式
就是做iptables路由轉發
IP Tunnel模式
實際上是更改目標IP
DR模式
是更改目標MAC地址
18.8 LVS排程演算法
名稱 | 縮寫 | 含義 |
---|---|---|
輪詢 Round-Robin | rr | 平均分發使用者請求 |
加權輪詢 Weight Round-Robin | wrr | 帶權重的輪詢 |
最小連線 Least-Connection | lc | 分發使用者給連線數少的機器上 |
加權最小連線 Weight Least-Connection | wlc | 帶權重的最小連線 |
基於區域性性的最小連線 Locality-Based Least Connections | lblc | |
帶複製的基於區域性性最小連線 Locality-Based Least Connections with Replication | lblcr | |
目標地址雜湊排程 Destination Hashing | dh | |
源地址雜湊排程 Source Hashing | sh |
18.9/18.10 LVS NAT模式搭建
準備工作
準備三臺機器 一臺作分發器,兩臺作rs
分發器:kun03 內網:192.168.80.102 外網:192.168.218.128
rs1:kun05 內網:192.168.80.104 閘道器:192.168.80.102
rs2:kun06 內網:192.168.80.105 閘道器:192.168.80.102
kun03上新增外網網絡卡 選擇僅主機模式
編輯外網網絡卡配置
|
|
|
|
|
|
可以ping通
kun05和kun06上設定閘道器為192.168.80.102
|
|
|
|
三臺機器上關閉firewalld
|
|
各自下載iptables 並清空規則和儲存
|
|
步驟
1.在分發器上安裝ipvsadm工具
在kun03上
|
|
ipvsadm
工具實現lvs功能
2.在分發器上編輯指令碼
|
|
|
|
iptables -t nat -A POSTROUTING -s 192.168.80.0/24 -j MASQUERADE
讓同網段的網實現上網ipvsadm -C
清除lvs規則-A
增加規則-t
指定分發器外網IP-s
指定演算法-p
指定rs上的超時時間-m
指NAT模式-w
指定權重
3.執行指令碼
|
|
測試
兩臺rs上安裝Nginx
之前在kun05機器上yum了安裝過Nginx 現在在kun06上安裝
|
|
設定兩臺rs的主頁,做一個區分
|
|
|
|
|
|
在分發器上使用curl命令訪問公網ip
|
|
使用瀏覽器訪問
ipvsadm -ln 可以檢視ipvsadm分發資料的情況
[[email protected] ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.218.128:80 rr
-> 192.168.80.104:80 Masq 1 0 6
-> 192.168.80.105:80 Masq 1 1 4
擴充套件:
VRRP協議
https://blog.csdn.net/u013920085/article/details/21184143
keepalived郵件告警
http://blog.51cto.com/6764097/1954158
https://blog.csdn.net/HzSunshine/article/details/62052398
LVS 三種模式圖解
http://blog.51cto.com/jiekeyang/1839583
LVS演算法 DH
http://blog.51cto.com/lovvvve/1141713
arp_ignore和arp_announce
https://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html