18.1 集羣介紹
18.2 keepalived介紹
18.3/18.4/18.5 用keepalived配置高可用集羣
18.6 負載均衡集羣介紹
18.7 LVS介紹
18.8 LVS調度算法
18.9/18.10 LVS NAT模式搭建
18.11課堂筆記
18.1 集羣介紹
根據功能劃分爲兩大類:高可用和負載均衡
一、高可用集羣
一般爲兩臺服務器,一臺工做,另一臺做爲冗餘,當提供服務的機器宕機,冗餘將接替繼續提供服務
實現高可用的開源軟件有:heartbeat、keepalived
二、負載均衡集羣
須要有一臺服務器做爲分發器,它負責把用戶的請求分發給後端的服務器處理,在這個集羣裏,除了分發器外,就是給用戶提供服務的服務器了,這些服務器數量至少爲2臺
實現負載均衡的開源軟件有LVS、keepalived、haproxy、nginx,商業的有F五、Netscaler
18.2 keepalived介紹
#在這裏咱們使用keepalived來實現高可用集羣,由於heartbeat在centos6上有一些問題,影響實驗效果
# 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配置高可用集羣
1、準備工做
準備兩臺機器150和129,150做爲master,129做爲backup
兩臺機器都執行
yum install -y keepalived
2、兩臺機器安裝nginx
兩臺機器都安裝nginx,其中150上已經編譯安裝過nginx,129上須要yum安裝nginx:
yum install -y nginx(須要安裝epel-release)
3、配置master相關操做(150主機)
一、編輯master的配置文件
>
/etc/keepalived/keepalived.conf
#直接清空文件內容
vim /etc/keepalived/keepalived.conf
#將連接的內容複製進去
keepalived配置文件說明:
#
global_defs 定義全局參數
- #notification_email #定義一個出問題時發送到郵箱的郵箱地址(平時用不到,能夠不用定義)
- #notification_email_from #由哪一個郵箱地址發送
#
vrrp_script chk_nginx #檢測服務是否正常(後面寫一個檢測腳本)
#
vrrp_instance VI_I #定義相關master信息
- state 定義MASTER或者BACKUP
- interface 指定網卡經過vrrp協議發送廣播
- virtual_router_id 定義路由器id是什麼
- priority 權重
- authentication 認證相關信息
#
virtual_ipaddress #定義一個vip(公有ip,主、從都能用的)
#
trank_script #加載前面的檢查腳本
二、編輯master的監控腳本
vim /usr/local/sbin/check_ng.sh
三、給腳本755權限
chmod 755
/usr/local/sbin/check_ng.sh
四、啓動master的keepalived服務
systemctl start keepalived #
150啓動服務
4、設定vip爲100(192.168.233.100)
vim /etc/keepalived/keepalived.conf
修改
virtual_ipaddress {
192.168.233.100
}
5、配置backup相關操做(129備份)
#配置前須要關閉防火牆(firewalld和SEXlinux)
vim /etc/keepalived/keepalived.conf
vim /usr/local/sbin/check_ng.sh
三、給腳本755權限
chmod 755
/usr/local/sbin/check_ng.sh
四、129上也啓動服務
systemctl start keepalived
6、測試高可用
先肯定好兩臺機器上nginx差別,好比能夠經過curl -I 來查看nginx版本
- master(150)的nginx(編譯安裝)默認頁在/data/wwwroot/default/index.html(之前實驗自定義的)
- backup(129)的nginx(直接yum下載的)默認頁在/usr/share/nginx/html/index.html
瀏覽器訪問192.168.233.150、192.168.233.100、192.168.233.129
模擬從接替主的任務(主機宕機)
#master切換到backup上時,vip會監聽到backup上
測試1:關閉master上的nginx服務
#master和backup都沒法關閉nginx服務,由於開啓了keepalived服務,它還會自動加載nginx服務
測試2:在master上增長iptabls規則
iptables -I OUTPUT -p vrrp -j DROP
#經過iptables規則將master出去的包所有丟掉
瀏覽器仍是能夠打開默認頁,說明沒法將主機器達到切換backup的目的
測試3:關閉master上的keepalived服務
systemctl stop keepalived
#中止keeplived,vip100也會釋放
ip add
這時候查看從機器backup,發現vip100綁定到從上了
ip add
tail /var/log/messages
#192.168.233.100被增長了
瀏覽器訪問192.168.233.100,出現backup backup,說明vip已經到了從上
測試4:啓動master上的keepalived服務
systemctl start keeplived
#發現vip立刻就回到master上
ip add
#若是有多臺backup,配置backup時要將權重調成不一樣的級別,權重越高,優先級越高
vim /etc/keeplived/keeplived.conf
修改priority的數值便可
#若是使用mysql作高可用時,要保證兩邊的數據保持一致
18.6 負載均衡集羣介紹
主流開源軟件LVS、keepalived、haproxy、nginx等
#keepalived的負載均衡功能其實就是LVS
LVS、nginx、haproxy三者比較
- LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既能夠認爲是4層,也能夠當作7層使用;
- lvs這種4層的負載均衡是能夠分發除80外的其餘端口通訊的,好比MySQL的,而nginx僅僅支持http,https,mail;haproxy也支持MySQL;
- 相比較來講,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)
LVS NAT模式
#這種模式
藉助iptables的nat錶轉發來實現
一、用戶的請求到分發器後,經過預設的iptables規則,把請求的數據包轉發到後端的rs上去
二、rs須要設定網關爲分發器的內網ip
三、用戶請求的數據包和返回給用戶的數據包所有通過分發器,因此分發器成爲瓶頸
優勢:
在nat模式中,只須要分發器有公網ip便可,因此比較節省公網ip資源
缺點:
請求量不宜太大,通常用戶規模10臺如下,超過10臺影響效率
LVS IP Tunnel模式
#這種模式,須要
有一個公共的IP配置在分發器和全部rs上,咱們把它叫作vip
一、客戶端請求的目標IP爲vip,分發器接收到請求數據包後,會對數據包作一個加工,會把目標IP改成rs的IP,這樣數據包就到了rs上
二、rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身(更改目標ip)
#用戶請求的數據包和返回給用戶的數據包不須要通過分發器,不存在瓶頸
LVS DR模式
這種模式,也須要有一個公共的IP配置在分發器和全部rs上,也就是vip,
還會更改MAC地址
一、和IP Tunnel不一樣的是,它會把數據包的MAC地址修改成rs的MAC地址
二、rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身
18.8 LVS調度算法
輪詢 rr(Round-Robin)
(經常使用)
#用戶請求過來,均衡將請求分發到這些rs上
加權輪詢 wrr(Weight Round-Robin)
(經常使用)
#帶權重的輪詢
最小鏈接 lc(Least-Connection)
(經常使用)
#讓新的請求交到請求量較少的服務器
加權最小鏈接 wlc(Weight Least-Connection)
(經常使用)
#能夠加一個權重
基於局部性的最小鏈接 lblc(Locality-Based Least Connections)
帶複製的基於局部性最小鏈接 lblcr(Locality-Based Least Connections with Replication)
目標地址散列調度 dh(Destination Hashing)
源地址散列調度 sh(Source Hashing)
18.9/18.10 LVS NAT模式搭建
準備工做:
三臺機器
分發器,也叫調度器(簡寫爲dir)
內網:233.150,外網:226.147(添加一個網卡,設置vmware僅主機模式,不須要設置網關,設置ip192.168.226.147)
rs1
內網:233.129,設置網關爲233.150
rs2
內網:233.132,設置網關爲233.150
#rs機器的網關必定要設置成dir的內網ip
hostnamectl set-hostname xin-04 #更改主機名
bash #進入一個子shell,主機名馬上就變了
三臺機器上都執行(關閉防火牆)
systemctl stop firewalld;
systemctl disable firewalld
systemctl start iptables;
systemctl enable iptables
iptables -F;
service iptables save #保存空規則
NAT模式搭建
一、在dir上安裝ipvsadm
yum install -y ipvsadm
二、在dir上編寫腳本
vim /usr/local/sbin/lvs_nat.sh
#內容以下
#! /bin/bash
# director 服務器上開啓路由轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 關閉icmp的重定向,爲了將數據包成功轉發到rs及rs發送數據包回來
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
#
MASQUERADE
讓同網段的內網去上網
iptables -t nat -A POSTROUTING -s
192.168.233.0/24 -j MASQUERADE
# director設置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.226.147:80 -s rr -p 3
$IPVSADM -a -t 192.168.226.147:80 -r 192.168.233.129:80 -m -w 1
$IPVSADM -a -t 192.168.226.147:80 -r 192.168.233.132:80 -m -w 1
#-t後面接外網ip,-s指定算法,-p指定保持鏈接時間(
防止使用負載均衡可能先後兩次鏈接會到不一樣的服務器)(
不能設置爲0),-r後面接rs的ip加端口,-m說明是nat的模式,-w設置權重
三、運行dir上編輯的腳本
sh
/usr/local/sbin/lvs_nat.sh
四、NAT模式效果測試
#兩臺rs上都安裝nginx
#設置兩臺rs的主頁,更改
/usr/share/nginx/html/index.html文件內容
[root@xinlinux-01 ~]#
curl localhost
xinlinux01
[root@xinlinux-04 ~]#
curl localhost
xinlinux04
curl 192.168.226.147(爲了更好的體現效果,編輯腳本,將-p 3 刪除掉)
[root@xinlinux-03 yum.repos.d]#
curl 192.168.226.147
xinlinux04
[root@xinlinux-03 yum.repos.d]#
curl 192.168.226.147
xinlinux01
[root@xinlinux-03 yum.repos.d]#
curl 192.168.226.147
xinlinux04
[root@xinlinux-03 yum.repos.d]#
curl 192.168.226.147
xinlinux01
18.11課堂筆記
1、mysql主從原理
(面試可能會問)
一、Mysql主從是基於binlog這個二進制文件,這個文件記錄了一些日誌
二、主從過程有三個步驟
三、mysql主從共有三個線程
使用場景:
一、數據備份,主機器宕機,從機器還能隨時對web提供服務
二、做爲一個從庫,讀的庫,減輕主庫的壓力,數據備份且能夠分擔主機器被調用數據時的壓力,mysql主從,是有方向性的,寫數據,必須從主機器開始;若是不依照原理會致使數據紊亂
2、主從配置
查看同步是否成功注意幾個參數:
一、兩個yes
二、Second_Behind_Master 落後多少秒
三、SQL_Running_State 狀態
四、error信息
3、檢測主從同步異常
#不可多個庫同一行用逗號隔開,能夠寫多行
4、binlog三種模式的區別
1.Row
日誌中會記錄成每一行數據被修改的形式,而後在slave端再對相同的數據進行修改,只記錄要修改的數據,只有value,不會有sql多表關聯的狀況。
優勢:在row模式下,bin-log中能夠不記錄執行的sql語句的上下文相關的信息,僅僅只須要記錄那一條記錄被修改了,修改爲什麼樣了,因此row的日誌內容會很是清楚的記錄下每一行數據修改的細節,很是容易理解。並且不會出現某些特定狀況下的存儲過程和function,以及trigger的調用和出發沒法被正確複製問題。
缺點:在row模式下,全部的執行的語句當記錄到日誌中的時候,都將以每行記錄的修改來記錄,這樣可能會產生大量的日誌內容。
2.statement
每一條會修改數據的sql都會記錄到master的binlog中,slave在複製的時候sql進程會解析成和原來master端執行多相同的sql再執行。
優勢:在statement模式下首先就是解決了row模式的缺點,不須要記錄每一行數據的變化減小了binlog日誌量,節省了I/O以及存儲資源,提升性能。由於他只須要記錄在master上所執行的語句的細節以及執行語句的上下文信息。
缺點:在statement模式下,因爲他是記錄的執行語句,因此,爲了讓這些語句在slave端也能正確執行,那麼他還必須記錄每條語句在執行的時候的一些相關信息,也就是上下文信息,以保證全部語句在slave端被執行的時候可以獲得和在master端執行時候相同的結果。另外就是,因爲mysql如今發展比較快,不少的新功能不斷的加入,使mysql的複製遇到了不小的挑戰,天然複製的時候涉及到越複雜的內容,bug也就越容易出現。在statement中,目前已經發現很多狀況會形成Mysql的複製出現問題,主要是修改數據的時候使用了某些特定的函數或者功能的時候會出現,好比:sleep()函數在有些版本中就不能被正確複製,在存儲過程當中使用了last_insert_id()函數,可能會使slave和master上獲得不一致的id等等。因爲row是基於每一行來記錄的變化,因此不會出現,相似的問題。
3.Mixed
從官方文檔中看到,以前的 MySQL 一直都只有基於 statement 的複製模式,直到 5.1.5 版本的 MySQL 纔開始支持 row 複製。從 5.0 開始,MySQL 的複製已經解決了大量老版本中出現的沒法正確複製的問題。可是因爲存儲過程的出現,給 MySQL Replication 又帶來了更大的新挑戰。另外,看到官方文檔說,從 5.1.8 版本開始,MySQL 提供了除 Statement 和 Row 以外的第三種複製模式:Mixed,實際上就是前兩種模式的結合。在 Mixed 模式下,MySQL 會根據執行的每一條具體的 SQL 語句來區分對待記錄的日誌形式,也就是在 statement 和 row 之間選擇一種。新版本中的 statment 仍是和之前同樣,僅僅記錄執行的語句。而新版本的 MySQL 中對 row 模式也被作了優化,並非全部的修改都會以 row 模式來記錄,好比遇到表結構變動的時候就會以 statement 模式來記錄,若是 SQL 語句確實就是 update 或者 delete 等修改數據的語句,那麼仍是會記錄全部行的變動。
5、拓展
一、不停庫不鎖表在線主從配置
二、主從不一樣步
#最完全的方法是重作一遍主從
兩臺機器都執行
yum install -y keepalived
2、兩臺機器安裝nginx
兩臺機器都安裝nginx,其中150上已經編譯安裝過nginx,129上須要yum安裝nginx:
yum install -y nginx(須要安裝epel-release)
3、配置master相關操做(150主機)
一、編輯master的配置文件
>
/etc/keepalived/keepalived.conf
#直接清空文件內容
vim /etc/keepalived/keepalived.conf
#將連接的內容複製進去
keeplived配置文件說明:
#
global_defs 定義全局參數
#
vrrp_script chk_nginx #檢測服務是否正常(後面寫一個檢測腳本)
#
vrrp_instance VI_I #定義相關master信息
#
virtual_ipaddress #定義一個vip(公有ip,主、從都能用的)
#
trank_script #加載前面的檢查腳本
二、編輯master的監控腳本
vim /usr/local/sbin/check_ng.sh
三、給腳本755權限
chmod 755
/usr/local/sbin/check_ng.sh
四、啓動master的keeplived服務
systemctl start keepalived #
150啓動服務
4、設定vip爲100(192.168.233.100)
vim /etc/keepalived/keepalived.conf
修改
virtual_ipaddress {
192.168.233.100
}
5、配置backup相關操做(129備份)
#配置前須要關閉防火牆(firewalld和SEXlinux)
vim /etc/keepalived/keepalived.conf
vim /usr/local/sbin/check_ng.sh
準備工做:
三臺機器
分發器,也叫調度器(簡寫爲dir)
內網:233.150,外網:226.147(添加一個網卡,設置vmware僅主機模式,不須要設置網關,設置ip192.168.226.147)
rs1
內網:233.129,設置網關爲233.150
rs2
內網:233.132,設置網關爲233.150
#rs機器的網關必定要設置成dir的內網ip
hostnamectl set-hostname xin-04 #更改主機名
bash #進入一個子shell,主機名馬上就變了
三臺機器上都執行(關閉防火牆)
systemctl stop firewalld;
systemctl disable firewalld
systemctl start iptables;
systemctl enable iptables
iptables -F;
service iptables save #保存空規則
NAT模式搭建
一、在dir上安裝ipvsadm
yum install -y ipvsadm
二、在dir上編寫腳本
vim /usr/local/sbin/lvs_nat.sh
#內容以下
#! /bin/bash
# director 服務器上開啓路由轉發功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 關閉icmp的重定向,爲了將數據包成功轉發到rs及rs發送數據包回來
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