實驗環境:rhel6.5
lvs中的常用術語約定
主機相關:
Director:調度器
Real Server:RS,後端真正提供服務的主機。
IP地址相關:
Client:CIP,客戶端IP
Director Virtual IP:VIP,調度器面向客戶端的IP。由於調度器會成爲單點,因此需要對調度器做高可用。由此,如果A調度器故障了,此地址是要轉移到B調度器上的。
Director IP:DIP,調度器面向後端的IP
Real IP:RIP,後端服務器的IP
fullnat無非就是nat,但DIP和RIP之間可以經過路由進行轉發。當請求到來時,源目IP分別爲CIP和VIP。到達調度器後,還是由ipvs挑選一臺主機,但由於DIP和RIP並不在同一個網段,所以ipvs會將請求的報文源目IP分別改爲DIP和RIP。RS收到報文後,就會將響應報文發給DIP,這是毋庸置疑的。調度器在收到報文,通過在內部追蹤nat表以後,將響應報文的源目IP分別改爲VIP和CIP,於是報文就發給客戶端。這種源目IP都進行修改的LVS類型就是fullnat。
總結:通過請求報文的源地址爲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改爲0 ,默認啓動新內核
#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:相當於一箇中間層,它用來將heartbeat和pacemaker關聯起來,主要包含2個部分,即爲LRM和STONITH。
·Resource Agent:用來控制服務啓停,監控服務狀態的腳本集合,這些腳本將被LRM調用從而實現各種資源啓動、停止、監控等等。
Pacemaker : 也就是Cluster Resource Manager (簡稱CRM),用來管理整個HA的控制中心,客戶端通過pacemaker來配置管理監控整個集羣。
安裝
在server1和server2上
#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 #多波地址
mcastport:5405 #多波端口
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
在server1和server2上
#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
crm中configure的常用命令
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
在server1上
#crm configure
#show
#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上監控如下:
忽略法定節點數:(集羣不會以爲節點不夠而失效)
在server1上
#property no-quorum-policy=ignore#commi #將修改同步到其他節點
#bye //退出crm
#/etc/init.d/corosync stop
這時監控如下
server1的pacemaler關掉後vip由server2接管,體現了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是可用的:
在server1和server2上
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 #方法一
group apache vip httpd #方法二
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.com、server2.example.com是節點名,vm1/2爲虛擬機名稱
#commit
添加文件系統
#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
添加mysql
#primitive mysql lsb:mysqld op monitor interval=60s#group mygroup vip sqlfs mysql #將vip,文件系統,mysql進行粘滯
#commit