lvs之fullnat與pacemaker的構建

實驗環境:rhel6.5


lvs中的常用術語約定

主機相關:

Director:調度器

Real ServerRS,後端真正提供服務的主機。 

IP地址相關:

ClientCIP,客戶端IP

Director Virtual IPVIP,調度器面向客戶端的IP。由於調度器會成爲單點,因此需要對調度器做高可用。由此,如果A調度器故障了,此地址是要轉移到B調度器上的。

Director IPDIP,調度器面向後端的IP

Real IPRIP,後端服務器的IP

fullnat無非就是nat,但DIPRIP之間可以經過路由進行轉發。當請求到來時,源目IP分別爲CIPVIP。到達調度器後,還是由ipvs挑選一臺主機,但由於DIPRIP並不在同一個網段,所以ipvs會將請求的報文源目IP分別改爲DIPRIPRS收到報文後,就會將響應報文發給DIP,這是毋庸置疑的。調度器在收到報文,通過在內部追蹤nat表以後,將響應報文的源目IP分別改爲VIPCIP,於是報文就發給客戶端。這種源目IP都進行修改的LVS類型就是fullnat

 wKiom1dqy6Tihln8AAF0aO-onOo773.png-wh_50

總結:通過請求報文的源地址爲DIP,目標爲RIP來實現轉發。對於響應報文而言,修改源地址爲VIP,目標地址爲CIP來實現轉發。

 

此架構能扛住每秒20W的併發,如果對併發要求不是特別的高,但又希望使用更復雜的內網模型,fullnat是一個不錯的選擇。但內核不支持fullnat,要從內核編譯,因此安裝時間不短。

一.fullnat模式構建

下載安裝kernel

#rpm -ivh kernel-2.6.32-220.23.1.el6.src.rpm

#yum install -y rpm-build rng-tools

#rngd -r /dev/urandom  //加快編譯速度

#cd ~/rpmbuild/SPECS

#rpmbuild -bp kernel.spec   //解開源碼包並打補丁,即只做準備

 

這時會提示缺很多組件,安裝之。

#rpmbuild -bp kernel.spec

#cd ~/rpmbuild/BUILD/kernel-2.6.32-220.23.1.el6

#tar zxf Lvs-fullnat-synproxy.tar.gz

#cd lvs-fullnat-synproxy

#cp lvs-2.6.32-220.23.1.el6.patch ../linux-2.6.32-220.23.1.el6.x86_64/

#cd linux-2.6.32-220.23.1.el6.x86_64/

#yum install -y patch

#vim .config

CONFIG_OUTPUT_FORMAT改爲“elf64-x86_64

CONFIG_ARCH_DEFCONFIG=arch/x86/configs/x86_64_defconfig

#vim Makefile

EXTRAVERSION改爲-220.23.1.el6

#patch -p1<lvs-2.6.32-220.23.1.e16.patch  //選項要忽略掉第一層目錄,從當前目錄開始查找,-p0 選項要從當前目錄查找目的文件(夾)

#cd configs

#make -j4  //以四核編譯

漫長等待……

#make modules_install

#make install

#vim /boot/grub/grub.conf

default改爲,默認啓動新內核

#reboot

 

#tar zxf lvs-tools.tar.gz -C ~

安裝keepalived 

#cd ~/tools/keepalived

#./configure --with-kernel-dir=/lib/modules/`uanme -r`/build

#make && make install

安裝ipvsadm

#cd ~/tools/ipvsadm

#make && make install

  

pacemaker配置

 

pacemaker是一個羣集資源管理器。它實現最大可用性羣集服務(亦稱資源管理)的節點和資源級故障檢測和恢復使用您的首選集羣基礎設施(OpenAIS的或Heaerbeat)提供的消息和成員能力。它可以做乎任何規模的集羣,並配備了一個強大的依賴模型,使管理員能夠準確地表達羣集資源之間的關係(包括順序和位置)。幾乎任何可以編寫腳本,可以管理作爲心臟起搏器集羣的一部分。pacemaker作爲一個資源管理器,不提供心跳信息。pacemaker是一個延續的CRM(亦稱Heartbeat V2資源管理器),最初是爲心跳,但已經成爲獨立的項目。

Heartbeat 到了V3版本後,拆分爲多個項目,其中pacemaker就是拆分出來的資源管理器。

Heartbeat 3.0拆分之後的組成部分:

·Heartbeat:將原來的消息通信層獨立爲heartbeat項目,新的heartbeat只負責維護集羣各節點的信息以及它們之前通信;

·Cluster Glue:相當於一箇中間層,它用來將heartbeatpacemaker關聯起來,主要包含2個部分,即爲LRMSTONITH

·Resource Agent:用來控制服務啓停,監控服務狀態的腳本集合,這些腳本將被LRM調用從而實現各種資源啓動、停止、監控等等。

Pacemaker : 也就是Cluster Resource Manager (簡稱CRM),用來管理整個HA的控制中心,客戶端通過pacemaker來配置管理監控整個集羣。

 

安裝

server1server2

#yum install -y pacemaker corosync

 

Coreosync:實現HA心跳信息傳輸。在傳遞信息的時候可以通過一個簡單的配置文件來定義信息傳遞的方式和協議等。它是一個新興的軟件,2008年推出,但其實它並不是一個真正意義上的新軟件,在2002年的時候有一個項目Openais它由於過大,分裂爲兩個子項目,其中可以實現HA心跳信息傳輸的功能就是Corosync ,它的代碼60%左右來源於Openais. Corosync可以提供一個完整的HA功能,但是要實現更多,更復雜的功能,那就需要使用Openais了。Corosync是未來的發展方向。在以後的新項目裏,一般採用Corosync,而hb_gui可以提供很好的HA管理功能,可以實現圖形化的管理。另外相關的圖形化有RHCS的套件luci+ricci.

server1上, 

#cd /etc/corosync/

#cp corosync.conf.example corosync.conf

#vim corosync.conf

  bindnetaddr: 172.25.9.0  #設定網段

  mcastaddr: 226.94.1.1    #多波地址

  mcastport5405          #多波端口

service{

    name:pacemaker   #添加pacemaker服務

    ver:0    #0爲啓動corsync時自動啓動pacemaker服務,1爲不接管服務

}

 

#/etc/init.d/corosync start

 

server2上執行同樣操作。

pacemaker本身只是一個資源管理器,我們需要一個接口才能對pacemker上的資源進行定義與管理,而crmsh即是pacemaker的配置接口,從pacemaker 1.1.8開始,crmsh 發展成一個獨立項目,pacemaker中不再提供。crmsh提供了一個命令行的交互接口來對Pacemaker集羣進行管理,它具有更強大的管理功能,同樣也更加易用,在更多的集羣上都得到了廣泛的應用,類似軟件還有 pcs

       注:在crm管理接口所做的配置會同步到各個節點上(commit命令之後)

 

安裝crm

server1server2

#yum install -y crmsh-1.2.6.0.rc2.2.1.x86_64.rpm pssh-2.3.1-2.1.x86_64.rpm

資源代理類型: lsb, ocf, stonith, service

資源代理的提供程序: heartbeat , pacemaker

資源代理名稱:即resource agent, 如:IPaddr2,httpd, mysql

 

crmconfigure的常用命令

        node             define a cluster node # 定義一個集羣節點

        primitive        define a resource # 定義資源

        monitor          add monitor operation to a primitive # 對一個資源添加監控選項(如超時時間,啓動失敗後的操作)

        group            define a group # 定義一個組類型(將多個資源整合在一起)

        clone            define a clone # 定義一個克隆類型(可以設置總的克隆數,每一個節點上可以運行幾個克隆)

        ms               define a master-slave resource # 定義一個主從類型(集羣內的節點只能有一個運行主資源,其它從的做備用)

        order            order resources # 資源的啓動的先後順序

        property         set a cluster property # 設置集羣屬性

        rsc_defaults     set resource defaults # 設置資源默認屬性(粘性)

        fencing_topology node fencing order # 隔離節點順序

        op_defaults      set resource operations defaults # 設置資源默認選項

        show             display CIB objects # 顯示集羣信息庫對

        commit           commit the changes to the CIB # 將更改後的信息提交寫入CIB

        verify           verify the CIB with crm_verify # CIB語法驗證

        upgrade          upgrade the CIB to version 1.0

        save             save the CIB to a file # 將當前CIB導出到一個文件中(導出的文件存於切換crm 之前的目錄)

        load             import the CIB from a file # 從文件內容載入CIB

        help             show help (help topics for list of topics) # 顯示幫助信息

        end              go back one level # 回到第一級(crm(live)#)

server2

#crm_mon  //監控crm

 wKioL1dqzV2BgBZNAAC2QdFwWuw131.png-wh_50

server1

#crm configure

#show

wKiom1dqzZqRorGfAADC2TQxdPY191.png-wh_50 

#property stonith-enabled=false  //關閉stonith

注:fence機制--Stonith概述

stonith是“shoot the other node in the head”的首字母簡寫,它是Heartbeat軟件包的一個組件,它允許使用一個遠程或“智能的”連接到健康服務器的電源設備自動重啓失效服務器的電源,stonith設備可以關閉電源並響應軟件命令,運行Heartbeat的服務器可以通過串口線或網線向stonith設備發送命令,它控制高可用服務器對中其他服務器的電力供應,換句話說,主服務器可以復位備用服務器的電源,備用服務器也可以復位主服務器的電源。

注意:儘管理論上連接到遠程或“智能的”循環電源系統的電力設備的數量是沒有限制的,但大多數stonith實現只使用兩臺服務器,因爲雙服務器stonith配置是最簡單的,最容易理解,它能夠長時間運行且不會降低系統的可靠性和高可用性。

#commit  //提交配置使配置生效,修改後沒提交系統不會保存更改的信息

 

添加vip服務

#primitive vip ocf::heartbeat::IPaddr2 params ip=172.25.0.100 cidr_netmask=32 op monitor interval=30s   //定義資源vip 172.25.0.100,子網掩碼爲255.255.255.255 ,每隔30秒監控

#cmomit

server2上監控如下:

 wKioL1dqzgCzJC7lAAE60-shr_Q456.png-wh_50

忽略法定節點數:(集羣不會以爲節點不夠而失效)

server1

#property no-quorum-policy=ignore#commi  #將修改同步到其他節點

#bye  //退出crm

#/etc/init.d/corosync stop

這時監控如下

 wKiom1dqzjahq4BZAAE0OUXSJvA621.png-wh_50

server1的pacemaler關掉後vipserver2接管,體現了pacemaker的高可用性

#/etc/init.d/corosync start

添加apache服務

#primitive website ocf::heartbeat:apache params configfile=/etc/httpd/conf/httpd.conf op monitor interval=60s

#commit

注意爲了監控Apache的健康狀態,並在它掛掉的時候恢復Apache服務,server-status URL是可用的:

server1server2

vim /etc/httpd/conf/httpd.conf

    <Location /server-status>

        SetHandler server-status    

        Order deny,allow

        Allow from 127.0.0.1

    </Location>

粘滯服務(使得服務與vip在同一主機上運行)

colocation httpd-with-ip inf: httpd vip #方法一

wKiom1dqznrxpiQZAAERQxzA0ns078.png-wh_50 

group apache vip httpd      #方法二

 wKioL1dqzpPSw0l0AAGHC9fFxLQ654.png-wh_50

commi  #將修改同步到server2

 

刪除服務:

#delete website-with-ip

#commit

#cd

#node //進入節點設置

#standby server2.example.com  //使server2離線

#online server2.example.com   // 使server2在線

#bye


添加drbd

#drbdadm primary sqldata

#crm configure

#primitive sqldata ocf:linbit:drbd params drbd resource=sqldata op monitor interval=60s

#ms sqldataclone sqldata meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

#bye


啓動fence

#crm configure

#property stonith-enabled=true

#primitive vmfence stonith:fence_xvm params pcmk_host_map=server1.example.com:vm1;server2.example.com:vm2” //     server1.example.comserver2.example.com是節點名,vm1/2爲虛擬機名稱

#commit  

wKiom1dqzwOQ6d2zAAGf-3B2hrw618.png-wh_50

添加文件系統

#primitive sqlfs ocf:heartbeat:Filesystem params device=/dev/drbd1 directory=/var/lib/mysql fstype=ext4

#colocation sqlfs_on_drbd inf: sqlfs sqldataclone:Master #order sqlfs-after-sqldata inf: sqldataclone:promote sqlfs:start

#commit

 wKioL1dqzzGTAPHgAAGe_x1KAfQ894.png-wh_50

添加mysql

#primitive mysql lsb:mysqld op monitor interval=60s#group mygroup vip sqlfs mysql #vip,文件系統,mysql進行粘滯

#commit

wKiom1dqz0nAsHhhAAHq-KMlpfc299.png-wh_50

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章