成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MySQL集群搭建(4)-MMM+LVS+Keepalived

elisa.yang / 3468人閱讀

摘要:上篇文章集群搭建高可用架構(gòu)介紹了高可用集群的搭建方法里面有提到可以配置多個(gè)讀,今天這篇文章教大家怎么用對(duì)這些讀做一個(gè)負(fù)載均衡。集群采用負(fù)載均衡技術(shù)和基于內(nèi)容請(qǐng)求分發(fā)技術(shù)。

上篇文章 MySQL集群搭建(3)-MMM高可用架構(gòu) 介紹了 MMM 高可用集群的搭建方法, 里面有提到 MMM 可以配置多個(gè)讀 VIP, 今天這篇文章教大家怎么用 LVS 對(duì)這些讀 VIP 做一個(gè)負(fù)載均衡。

1 LVS 介紹 1.1 簡(jiǎn)介

LVS 是 Linux Virtual Server 的簡(jiǎn)寫,意即 Linux 虛擬服務(wù)器,是一個(gè)虛擬的服務(wù)器集群系統(tǒng)。本項(xiàng)目在 1998 年 5 月由章文嵩博士成立,是中國(guó)國(guó)內(nèi)最早出現(xiàn)的自由軟件項(xiàng)目之一。

LVS 集群采用 IP 負(fù)載均衡技術(shù)和基于內(nèi)容請(qǐng)求分發(fā)技術(shù)。調(diào)度器具有很好的吞吐率,將請(qǐng)求均衡地轉(zhuǎn)移到不同的服務(wù)器上執(zhí)行,且調(diào)度器自動(dòng)屏蔽掉服務(wù)器的故障,從而將一組服務(wù)器構(gòu)成一個(gè)高性能的、高可用的虛擬服務(wù)器。

比如說,用 LVS 做 Web 負(fù)載均衡,那么請(qǐng)求 LVS 調(diào)度器的時(shí)候,請(qǐng)求會(huì)根據(jù)配置的算法分發(fā)給后端某臺(tái) Web 服務(wù)器,后端 Web 服務(wù)器機(jī)器對(duì)于請(qǐng)求者來說是透明的。

1.1 LVS 工作模式

LVS 包含以下三種常用工作模式

1). NAT 模式

NAT (Network Address Translation) 即網(wǎng)路地址裝換,NAT 的工作原理是更改報(bào)文頭(目標(biāo)地址、源地址和端口等)后,轉(zhuǎn)發(fā)請(qǐng)求都后端地址。流程如下

客戶端請(qǐng)求 LVS 的 IP

LVS 更改請(qǐng)求的目的 IP,改為后端服務(wù)器其中一個(gè) IP,然后轉(zhuǎn)發(fā)請(qǐng)求

后端服務(wù)器處理完,返回?cái)?shù)據(jù)給 LVS,LVS 更改源 IP 為 LVS 機(jī)器的 IP 然后返回給請(qǐng)求端

NAT 模式的所有數(shù)據(jù)都會(huì)經(jīng)過 LVS 服務(wù)器,簡(jiǎn)單來說就是從 LVS 進(jìn),從 LVS 出,如圖

2). TUN 模式

在 NAT 的集群系統(tǒng)中,請(qǐng)求和響應(yīng)的數(shù)據(jù)報(bào)文都需要通過 LVS 服務(wù)器,當(dāng)真實(shí)服務(wù)器的數(shù)目在10臺(tái)和20臺(tái)之間時(shí),負(fù)載調(diào)度器將成為整個(gè)集群系統(tǒng)的新瓶頸。大多數(shù) Internet服務(wù)都有這樣的特點(diǎn):請(qǐng)求報(bào)文較短而響應(yīng)報(bào)文往往包含大量的數(shù)據(jù)。如果能將請(qǐng)求和響應(yīng)分開處理,即在負(fù)載調(diào)度器中只負(fù)責(zé)調(diào)度請(qǐng)求而響應(yīng)直接返回給客戶,將極大地提高整個(gè)集群系統(tǒng)的吞吐量。

IP 隧道(IP tunneling)是將一個(gè)IP報(bào)文封裝在另一個(gè)IP報(bào)文的技術(shù),這可以使得目標(biāo)為一個(gè)IP地址的數(shù)據(jù)報(bào)文能被封裝和轉(zhuǎn)發(fā)到另一個(gè)IP地址。IP隧道技 術(shù)亦稱為IP封裝技術(shù)(IP encapsulation)。IP隧道主要用于移動(dòng)主機(jī)和虛擬私有網(wǎng)絡(luò)(Virtual Private Network),在其中隧道都是靜態(tài)建立的,隧道一端有一個(gè)IP地址,另一端也有唯一的IP地址。

我們利用IP隧道技術(shù)將請(qǐng)求報(bào)文封裝轉(zhuǎn)發(fā)給后端服務(wù)器,響應(yīng)報(bào)文能從后端服務(wù)器直接返回給客戶(要求后端真實(shí)服務(wù)器與外部網(wǎng)絡(luò)連接)。

TUN 模式工作流程如下:

客戶端請(qǐng)求數(shù)據(jù),調(diào)度器根據(jù)各個(gè)服務(wù)器的負(fù)載情況,動(dòng)態(tài)地選擇一臺(tái)服務(wù)器, 將請(qǐng)求報(bào)文封裝在另一個(gè)IP報(bào)文中,再將封裝后的IP報(bào)文轉(zhuǎn)發(fā)給選出的服務(wù)器

服務(wù)器收到報(bào)文后,先將報(bào)文解封獲得原來目標(biāo)地址為VIP的報(bào)文,服務(wù)器發(fā) 現(xiàn)VIP地址被配置在本地的IP隧道設(shè)備上,所以就處理這個(gè)請(qǐng)求,然后根據(jù)路由表將響應(yīng)報(bào)文直接返回給客戶。

3). DR 模式

DR 模式中,負(fù)載調(diào)度器中只負(fù)責(zé)調(diào)度請(qǐng)求,而服務(wù)器直接將響應(yīng)返回給客戶, DR 模式架構(gòu)圖

DR 模式的執(zhí)行流程如下

客戶端請(qǐng)求數(shù)據(jù),調(diào)度器根據(jù)各個(gè)服務(wù)器的負(fù)載情況,動(dòng)態(tài)地選擇一臺(tái)服務(wù)器,不修改也不封裝IP報(bào)文,而是將數(shù)據(jù)幀的MAC 地址改為選出服務(wù)器的 MAC 地址,再將修改后 的數(shù)據(jù)幀在與服務(wù)器組的局域網(wǎng)上發(fā)送。

因?yàn)閿?shù)據(jù)幀的 MAC 地址是選出的服務(wù)器,所以服務(wù)器肯定可以收到這個(gè)數(shù)據(jù)幀,從中可以獲得該 IP 報(bào)文。當(dāng)服務(wù)器發(fā)現(xiàn) 報(bào)文的目標(biāo)地址VIP是在本地的網(wǎng)絡(luò)設(shè)備上,服務(wù)器處理這個(gè)報(bào)文,然后根據(jù)路由表將響應(yīng)報(bào)文直接返回給客戶。

關(guān)于三種模式選擇

NAT模式下,所有流量會(huì)經(jīng)過 LVS 服務(wù)器, 很容易有瓶頸;TUN 模式需要內(nèi)核支持,部署成本比較高;DR模式性能高、容易部署,一般使用這種模式。

本小節(jié)內(nèi)容參考: LVS集群中的IP負(fù)載均衡技術(shù)

1.2 LVS 調(diào)度算法

這里簡(jiǎn)單介紹 LVS 的 8 種調(diào)度算法

靜態(tài)調(diào)度

輪詢調(diào)度(rr): 輪詢調(diào)就是依次將請(qǐng)求調(diào)度不同的服務(wù)器,即每次調(diào)度執(zhí)行i = (i + 1) mod n,并選出第i臺(tái)服務(wù)器。算法的優(yōu)點(diǎn)是其簡(jiǎn)潔性,它無需記錄當(dāng)前所有連接的狀態(tài),所以它是一種無狀態(tài)調(diào)度。

加權(quán)輪詢(wrr): 加權(quán)輪詢算法可以解決服務(wù)器間性能不一的情況,它用相應(yīng)的權(quán)值表示服務(wù)器的處理性能,服務(wù)器的缺省權(quán)值為1。假設(shè)服務(wù)器A的權(quán)值為1,B的 權(quán)值為2,則表示服務(wù)器B的處理性能是A的兩倍。加權(quán)輪詢調(diào)度算法是按權(quán)值的高低和輪叫方式分配請(qǐng)求到各服務(wù)器。

源地址散列(sh): 該算法正好與目標(biāo)地址散列調(diào)度算法相反,它根據(jù)請(qǐng)求的源IP地址,作為散列鍵(Hash Key)從靜態(tài)分配的散列表找出對(duì)應(yīng)的服務(wù)器,若該服務(wù)器是可用的且未超載,將請(qǐng)求發(fā)送到該服務(wù)器,否則返回空。

目標(biāo)地址散列(dh): 該算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,但它是一種靜態(tài)映射算法,通過一個(gè)散列(Hash)函數(shù)將一個(gè)目標(biāo)IP地址映射到一臺(tái)服務(wù)器。

動(dòng)態(tài)調(diào)度

最少連接(lc): 最少連接是把新的連接請(qǐng)求分配到當(dāng)前連接數(shù)最小的服務(wù)器。

加權(quán)最少連接(wlc): 加權(quán)最少連接算法是最小連接調(diào)度的超集,各個(gè)服務(wù)器用相應(yīng)的權(quán)值表示其處理性能。

基于局部性的最少連接(lblc): 該算法是針對(duì)請(qǐng)求報(bào)文的目標(biāo)IP地址的負(fù)載均衡調(diào)度,目前主要用于Cache集群系統(tǒng),因?yàn)樵贑ache集群中 客戶請(qǐng)求報(bào)文的目標(biāo)IP地址是變化的。

帶復(fù)制的基于局部性最少連接(lblcr): 該算法也是針對(duì)目標(biāo)IP地址的負(fù)載均衡,目前主要用于Cache集群系統(tǒng)。它與LBLC算法的不同之處是它要 維護(hù)從一個(gè)目標(biāo)IP地址到一組服務(wù)器的映射,而LBLC算法維護(hù)從一個(gè)目標(biāo)IP地址到一臺(tái)服務(wù)器的映射。

本小節(jié)內(nèi)容參考: LVS集群的負(fù)載調(diào)度

2 Keepalived 簡(jiǎn)介

Keepalived 起初是為 LVS 件設(shè)計(jì), 用來管理和監(jiān)控 LVS 各個(gè)服務(wù)器節(jié)點(diǎn)狀態(tài)的工具

Keepalived 采用 Master/Slave 模式, 在 Master 上設(shè)置配置文件的 VIP,當(dāng) Master 宕機(jī)后,VIP 自動(dòng)漂移到另一臺(tái) Keepalived 服務(wù)器上

Keepalived 可以用來做各種軟件的高可用集群,它會(huì)一直檢測(cè)服務(wù)器的狀態(tài),如果有一臺(tái)服務(wù)器宕機(jī),或工作出現(xiàn)故障,Keepalived 將檢測(cè)到,并將有故障的服務(wù)器從系統(tǒng)中剔除,同時(shí)使用其他服務(wù)器代替該服務(wù)器的工作,當(dāng)服務(wù)器工作正常后 Keepalived 自動(dòng)將服務(wù)器加入到服務(wù)器群中。

簡(jiǎn)單來說,Keepalived 就是用來實(shí)現(xiàn)機(jī)器的高可用的,在使用 Keepalived 的情況下,只有一臺(tái)服務(wù)器能夠提供服務(wù)(通過 VIP 來實(shí)現(xiàn)),當(dāng) Master 主機(jī)宕機(jī)后,VIP 會(huì)自動(dòng)飄移到另一臺(tái)服務(wù)器

3 環(huán)境準(zhǔn)備 3.1 服務(wù)器與 MySQL 環(huán)境

MySQL 環(huán)境采用上篇文章部署的那一套,然后新增一臺(tái)服務(wù)器作為 LVS 的備用節(jié)點(diǎn)

節(jié)點(diǎn)信息
IP 系統(tǒng) 端口 MySQL版本 節(jié)點(diǎn) 讀寫 說明
10.0.0.247 Centos6.5 3306 5.7.9 Master 讀寫 主節(jié)點(diǎn)
10.0.0.248 Centos6.5 3306 5.7.9 Standby 只讀,可切換為讀寫 備主節(jié)點(diǎn)
10.0.0.249 Centos6.5 3306 5.7.9 Slave 只讀 從節(jié)點(diǎn)
10.0.1.24 Centos6.5 - - MMM Monitor/LVS - MMM Monitor/LVS Keepalive Master
10.0.1.85 Centos6.5 - - LVS - LVS Keepalive Slave
VIP 信息
簡(jiǎn)稱 VIP 類型
RW-VIP 10.0.0.237 讀寫VIP
RO-VIP1 10.0.0.238 讀VIP
RO-VIP2 10.0.0.239 讀VIP
LVS-RO 10.0.0.236 LVS Keepalived VIP
3.2 Keepalved 安裝配置

我們?cè)?b>10.0.1.24和10.0.1.85上部署 Keepalived

1). yum 安裝

如果有對(duì)應(yīng)的 yum 源,直接安裝就可以了

yum install -y keepalived
2). 源碼安裝

下載安裝包, 下載地址 keepalived, 使用 1.2.24 版本舉例

# 安裝依賴
yum install -y gcc popt-devel openssl openssl-devel libssl-dev libnl-devel popt-devel libnfnetlink-devel

# 下載包
wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz

# 解壓安裝
tar -xvz -f  keepalived-1.2.24.tar.gz
cd keepalived-1.2.24
./configure --prefix=/usr/local/keepalived
make && make install

cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
3). 配置 Keepalived

打開 /etc/keepalived/keepalived.conf 文件, 加上上面的配置

global_defs {
   notification_email {
   }
   router_id MYSQL_MMM
}

vrrp_instance MMM_TEST {
    state BACKUP
    interface eth0
    virtual_router_id 24
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.236
    }
}

router_id: 標(biāo)識(shí)用的

state: MASTERBACKUP, 當(dāng)其他節(jié)點(diǎn)起來的時(shí)候會(huì)重新選舉,所以這里設(shè)為 BACKUP 就可以了

virtual_router_id: 用來區(qū)分 VRRP 組播的標(biāo)記,取值 0-255

priority: 優(yōu)先級(jí)

advert_int: 監(jiān)控檢測(cè)間隔

authentication: 認(rèn)證相關(guān)

virtual_ipaddress: 要設(shè)置的 VIP

注意: 在同一個(gè)廣播域內(nèi) virtual_router_id 不能重復(fù)

4). 啟動(dòng)

由于在priority都相同,所以先啟動(dòng)為 Master, 我們?cè)?b>10.0.1.24和10.0.1.85上輪流啟動(dòng)Keepalived

/etc/init.d/keepalived start

啟動(dòng)后觀察10.0.1.24 IP 狀態(tài)

[root@chengqm ~]# ip addr
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether fa:16:3e:ee:ae:a1 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.24/16 brd 10.0.255.255 scope global eth0
    inet 10.0.0.236/32 scope global eth0
    inet6 fe80::f816:3eff:feee:aea1/64 scope link 
       valid_lft forever preferred_lft forever
3.3 LVS 安裝配置

本次測(cè)試,負(fù)載調(diào)度的算法采用 加權(quán)最少連接(wlc),工作模式采用 DR 模式

1). 安裝

LVS 采用 yum 安裝就可以了

yum install -y ipvsadm
2). 增加配置文件

繼續(xù)打開 /etc/keepalived/keepalived.conf 文件, 在后面加上 LVS 配置, 轉(zhuǎn)發(fā)VIP10.0.0.2363306端口到MMM的虛IP

virtual_server 10.0.0.236 3306 {  
    delay_loop 6    # 健康檢查時(shí)間,單位是秒                    
    lb_algo wlc     # 負(fù)載調(diào)度的算法                 
    lb_kind DR      # LVS 工作模式
    nat_mask 255.255.255.255     # 掩碼            
    persistence_timeout 0  
    protocol TCP                  
    real_server 10.0.0.237 3306 {     # 指定后端真實(shí)服務(wù)器的IP地址, 這里直接指到 MMM 虛 IP 上
        weight 1                      # 節(jié)點(diǎn)權(quán)重, 數(shù)字越大, 權(quán)重越大
        TCP_CHECK {                   # 檢測(cè)參數(shù)
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }  
    }
    real_server 10.0.0.238 3306 {
        weight 3
        TCP_CHECK {  
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }  
    }
    real_server 10.0.0.239 3306 {
        weight 3
        TCP_CHECK {  
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }  
    }
} 

更改完畢重啟 keepalived

3). 后端真實(shí)服務(wù)器抑制 ARP 廣播

由于 DR 模式的原理是 LVS 與后端真實(shí)服務(wù)器配置同一個(gè) VIP,后端服務(wù)器 不允許arp廣播,這樣路由器接收到請(qǐng)求就會(huì)發(fā)給 LVS,LVS 修改請(qǐng)求的 MAC 地址。這樣路由器和后端服務(wù)器通過 MAC 地址進(jìn)行通信,達(dá)到負(fù)載均衡的目的。

10.0.0.247, 10.0.0.248, 10.0.0.249 服務(wù)器上執(zhí)行以下命令

VIP=10.0.0.236
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1

注意: 后端真實(shí)服務(wù)器的 VIP 綁在 lo 上

如果想取消,可以反著操作

ifconfig lo:0 down
route del VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
4). 檢查 LVS 狀態(tài)
[root@chengqm ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.0.0.236:mysql wlc
  -> 10.0.0.237:mysql             Route   1      0          0         
  -> 10.0.0.238:mysql             Route   3      0          0         
  -> 10.0.0.239:mysql             Route   3      0          0 

LVS 負(fù)載均衡已經(jīng)生效

4 測(cè)試 4.1 負(fù)載均衡測(cè)試

LVS 配置好了,讓我們測(cè)試一下效果, 目前 Keepalived Master10.0.1.24, 并且已經(jīng)預(yù)先創(chuàng)建了一個(gè)測(cè)試賬號(hào),那么我們?cè)谄渌麢C(jī)器發(fā)起請(qǐng)求看看

[root@mysql-test-83 ~]# mysql -umytest -p -h10.0.0.236 -P3306 -e "show variables like "hostname""
Enter password: 
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| hostname      | cluster01 |
+---------------+-----------+
[root@mysql-test-83 ~]# mysql -umytest -p -h10.0.0.236 -P3306 -e "show variables like "hostname""
Enter password: 
+---------------+-----------+
| Variable_name | Value     |
+---------------+-----------+
| hostname      | cluster02 |
+---------------+-----------+

可以看到,LVS 負(fù)載均衡已經(jīng)生效

4.2 高可用測(cè)試

10.0.1.2410.0.1.85部署了 Keepalived服務(wù),我們停掉MasterKeepalived, VIP 會(huì)自動(dòng)飄移到另一臺(tái)機(jī)器

現(xiàn)在停掉10.0.1.24Keepalived

[root@chengqm ~]# /etc/init.d/keepalived stop
Stopping keepalived:                                       [  OK  ]

查看10.0.1.85的IP

[root@yexm ~]# ip addr
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether fa:16:3e:3c:81:1b brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.85/16 brd 10.0.255.255 scope global eth0
    inet6 fe80::f816:3eff:fe3c:811b/64 scope link 
       valid_lft forever preferred_lft forever
[root@yexm ~]# ip addr
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether fa:16:3e:3c:81:1b brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.85/16 brd 10.0.255.255 scope global eth0
    inet 10.0.0.236/32 scope global eth0
    inet6 fe80::f816:3eff:fe3c:811b/64 scope link 
       valid_lft forever preferred_lft forever

可以看到 VIP 已經(jīng)飄移到另一臺(tái) LVS 服務(wù)器

5 結(jié)語

LVS + MMM下既可以實(shí)現(xiàn)多臺(tái) MySQL 節(jié)點(diǎn)的負(fù)載均衡,也避免了因?yàn)橥窖舆t、同步失敗等問題造成的數(shù)據(jù)不一致問題,是一個(gè)非常不錯(cuò)的架構(gòu)方式。

參考: http://www.linuxvirtualserver.org/zh/lvs1.html

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/17845.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<