藉助LVS+Keepalived實現mysql的負載平衡

來源:互聯網
上載者:User

標籤:

1 初識LVS:Linux Virtual Server 1.1 LVS是什麼

      LVS是Linux Virtual Server的簡稱,也就是Linux虛擬伺服器, 是一個由章文嵩博士發起的自由軟體項目,它的官方網站是www.linuxvirtualserver.org。現在LVS已經是 Linux標準核心的一部分,在Linux2.4核心以前,使用LVS時必須要重新編譯核心以支援LVS功能模組,但是從Linux2.4核心以後,已經完全內建了LVS的各個功能模組,無需給核心打任何補丁,可以直接使用LVS提供的各種功能。

1.2 LVS有什麼作用

      LVS主要用於伺服器叢集的負載平衡。它工作在網路層,可以實現高效能,高可用的伺服器叢集技術。它廉價,可把許多低效能的伺服器組合在一起形成一個超級伺服器。它易用,配置非常簡單,且有多種負載平衡的方法。它穩定可靠,即使在叢集的伺服器中某台伺服器無法正常工作,也不影響整體效果。另外可擴充性也非常好。

LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了。可以利用LVS技術實現高可伸縮的、高可用的網路服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的叢集系統,例如:Linux的門戶網站(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。

2.3 LVS的體繫結構

使用LVS架設的伺服器叢集系統有三個部分組成:

(1)最前端的負載平衡層,用Load Balancer表示;

(2)中間的伺服器叢集層,用Server Array表示;

(3)最底端的資料共用儲存層,用Shared Storage表示;

在使用者看來,所有的內部應用都是透明的,使用者只是在使用一個虛擬伺服器提供的高效能服務。

2.4 LVS負載平衡機制

(1)LVS是四層負載平衡,也就是說建立在OSI模型的第四層——傳輸層之上,傳輸層上有我們熟悉的TCP/UDP,LVS支援TCP/UDP的負載平衡。因為LVS是四層負載平衡,因此它相對於其它高層負載平衡的解決辦法,比如DNS網域名稱輪流解析、應用程式層負載的調度、用戶端的調度等,它的效率是非常高的。

(2)LVS的轉寄主要通過修改IP地址(NAT模式,分為源地址修改SNAT和目標地址修改DNAT)、修改目標MAC(DR模式)來實現。

①NAT模式:網路位址轉譯

NAT(Network Address Translation)是一種外網和內網地址映射的技術。NAT模式下,網路資料報的進出都要經過LVS的處理。LVS需要作為RS(真實伺服器)的網關。當包到達LVS時,LVS做目標地址轉換(DNAT),將目標IP改為RS的IP。RS接收到包以後,彷彿是用戶端直接發給它的一樣。RS處理完,返迴響應時,源IP是RS IP,目標IP是用戶端的IP。這時RS的包通過網關(LVS)中轉,LVS會做源地址轉換(SNAT),將包的源地址改為VIP,這樣,這個包對用戶端看起來就彷彿是LVS直接返回給它的。用戶端無法感知到後端RS的存在。

②DR模式:直接路由

DR模式下需要LVS和RS叢集綁定同一個VIP(RS通過將VIP綁定在loopback實現),但與NAT的不同點在於:請求由LVS接受,由真實提供服務的伺服器(RealServer, RS)直接返回給使用者,返回的時候不經過LVS。詳細來看,一個請求過來時,LVS只需要將網路幀的MAC地址修改為某一台RS的MAC,該包就會被轉寄到相應的RS處理,注意此時的源IP和目標IP都沒變,LVS只是做了一下移花接木。RS收到LVS轉寄來的包時,鏈路層發現MAC是自己的,到上面的網路層,發現IP也是自己的,於是這個包被合法地接受,RS感知不到前面有LVS的存在。而當RS返迴響應時,只要直接向源IP(即使用者的IP)返回即可,不再經過LVS。

(3)DR負載平衡模式資料分發過程中不修改IP地址,只修改mac地址,由於實際處理請求的真實物理IP地址和資料請求目的IP地址一致,所以不需要通過負載平衡伺服器進行地址轉換,可將響應資料包直接返回給使用者瀏覽器,避免負載平衡伺服器網卡頻寬成為瓶頸。因此,DR模式具有較好的效能,也是目前大型網站使用最廣泛的一種負載平衡手段。

三、構建實戰:LVS+Keepalived實現mysql負載平衡 3.1 實驗結構總覽

(1)本次基於VMware Workstation搭建一個四台Linux(CentOS 6.4)系統所構成的一個伺服器叢集,其中兩台負載平衡伺服器(一台為主機,另一台為備機),另外兩台作為真實的Web伺服器(向外部提供http服務,這裡僅僅使用了CentOS預設內建的http服務,沒有安裝其他的類似Tomcat、Jexus服務)。

(2)本次實驗基於DR負載平衡模式

設定了一個VIP(Virtual IP)為192.168.5.200,使用者只需要訪問這個IP地址即可獲得網頁服務。

負載平衡主機為192.168.5.120

備機為192.168.5.121

mysql伺服器A為192.168.5.122

mysql伺服器B為192.168.5.123

3.2 基礎準備工作

以下工作針對所有伺服器,也就是說要在四台伺服器中都要進行配置:

(1)網路設定

  參考 centos網路設定,將4台虛擬機器設定成靜態ip

(2)設定主機名稱

①修改當前會話中的主機名稱,執行命令hostname xxxx (這裡xxxx為你想要改為的名字)

②修改設定檔中的主機名稱,執行命令vi /etc/sysconfig/network (√一般需要進行此步湊才能永久更改主機名稱)

驗證:重啟系統reboot

(3)IP地址與主機名稱的綁定

執行命令vi /etc/hosts,增加一行內容,如下(下面的從節點以你自己的為主,本實驗搭建了兩個從節點):

192.168.5.120 lvs-master

192.168.5.121 lvs-slave

#下面是本次實驗的兩個真實伺服器節點

192.168.5.122 lvs-mysql1

192.168.5.123 lvs-mysql2

儲存後退出

驗證:ping lvs-master

(4)關閉防火牆

①執行關閉防火牆命令:service iptables stop

      驗證:service iptables stauts

②執行關閉防火牆自動運行命令:chkconfig iptables off

驗證:chkconfig --list | grep iptables

3.3 配置兩台mysql伺服器

以下操作需要在角色為資料庫伺服器的兩台中進行,不需要在負載平衡伺服器中進行操作:

(1)安裝和運行mysql

參考我之前寫的一篇文章:MySQL知識總結(一)安裝與配置(Linux CentOS)

建立資料庫bruce

建立表test並插入資料:

create table test(  id int,  name varchar(10));-- A中插入insert into test values(1,‘A‘);-- B中插入insert into test values(2,‘B‘);

(2)編輯realserver指令檔

①進入指定檔案夾:cd /etc/init.d/

②建立指令碼檔案:vi realserver

SNS_VIP=192.168.5.200/etc/rc.d/init.d/functionscase "$1" instart)       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP       /sbin/route add -host $SNS_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       echo "RealServer Start OK"       ;;stop)       ifconfig lo:0 down       route del $SNS_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       echo "RealServer Stoped"       ;;*)       echo "Usage: $0 {start|stop}"       exit 1esacexit 0

這裡我們設定虛擬IP為:192.168.5.200

③儲存指令檔後更改該檔案許可權:chmod 755 realserver

④開啟realserver服務:service realserver start

3.4 配置主負載伺服器

(1)安裝Keepalived相關包

yum install -y keepalived

在CentOS下,通過yum install命令可以很方便地安裝軟體包,但是前提是你的虛擬機器要連網;

(2)編輯keepalived.conf設定檔

①進入keepalived.conf所在目錄:cd /etc/keepalived

②首先清除掉keepalived原有配置:> keepalived.conf

③重新編輯keepalived設定檔:vi keepalived.conf

global_defs {      router_id LVS_DEVEL  # 設定lvs的id,在一個網路內應該是唯一的}  vrrp_instance VI_1 {      state MASTER   #指定Keepalived的角色,MASTER為主,BACKUP為備              interface eth1  #指定Keepalived的角色,MASTER為主,BACKUP為備    virtual_router_id 51  #虛擬路由編號,主備要一致    priority 100  #定義優先順序,數字越大,優先順序越高,主DR必須大於備用DR        advert_int 1  #檢查間隔,預設為1s    authentication {          auth_type PASS          auth_pass 1111      }      virtual_ipaddress {          192.168.5.200  #定義虛擬IP(VIP)為192.168.2.33,可多設,每行一個    }  }  # 定義對外提供服務的LVS的VIP以及portvirtual_server 192.168.5.200 3306 {      delay_loop 6 # 設定健全狀態檢查時間,單位是秒                        lb_algo wrr # 設定負載調度的演算法為wlc                       lb_kind DR # 設定LVS實現負載的機制,有NAT、TUN、DR三個模式       nat_mask 255.255.255.0                    persistence_timeout 0              protocol TCP                      real_server 192.168.5.122 3306 {  # 指定real server1的IP地址        weight 3   # 配置節點權值,數字越大權重越高                      TCP_CHECK {          connect_timeout 10                 nb_get_retry 3          delay_before_retry 3          connect_port 3306          }      }      real_server 192.168.5.123 3306{  # 指定real server2的IP地址        weight 3  # 配置節點權值,數字越大權重越高          TCP_CHECK {          connect_timeout 10          nb_get_retry 3          delay_before_retry 3          connect_port 3306          }       }  }

(3)開啟keepalived服務

service keepalived start
3.5 配置從負載伺服器

從負載伺服器與主負載伺服器大致相同,只是在keepalived的設定檔中需要改以下兩處:

(1)將state由MASTER改為BACKUP

(2)將priority由100改為99

vrrp_instance VI_1 {      state BACKUP # 這裡改為BACKUP    interface eth1      virtual_router_id 51      priority 99 # 這裡改為99,master優先順序是100    advert_int 1      authentication {          auth_type PASS          auth_pass 1111      }      virtual_ipaddress {          192.168.80.200      }  }  

3.6 驗證性測試

在192.168.5.120上登入mysql

mysql -h192.168.1.225 -utest -ptest -P8066 –Ddbtest

藉助LVS+Keepalived實現mysql的負載平衡

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.