linux實現HA有幾種方法
【實驗配置環境】
伺服器系統:CentOS-5.6
LVS主節點(lvs-master):192.168.2.250(eth0) 心跳直連線口:192.168.1.250(eth1)
LVS備節點(lvs-backup):192.168.2.251(eth0) 心跳直連線口:192.168.1.251(eth1)
Web Server-1:192.168.2.252
Web Server-2:192.168.2.253
VIP(虛擬ip):192.168.2.254
注:4臺伺服器已經配置好LNMP(Linux+Nginx+PHP(FastCGI模式)+mysql)網站執行環境,當然使用apache也可以。這裡主備節點也當作真實伺服器使用,所以也配置了網站環境。
本文配置拓撲圖:
主備排程器eth1介面使用交叉線相連(理論上是這樣)
線序為: 一頭為568A標準:白綠,綠;白橙,藍;白藍,橙;白棕,棕
另一頭為568B標準:白橙,橙;白綠,藍;白藍,綠;白棕,棕
在LVS主節點和備節點的/etc/hosts中加入以下內容:
#vim /etc/hosts
192.168.2.250 lvs-master
192.168.2.251 lvs-backup
修改主機名:
# vim /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
hostname=lvs-master
GATEWAY=192.168.2.1
# vim /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 lvs-master localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
這2個檔案都要修改,修改完後重啟生效,備份機修改方法一樣,不在重述。
【下載軟體】
[libnet]
wgethttp://search.cpan.org/CPAN/authors/id/G/GB/GBARR/libnet-1.22.tar.gz
[ipvsadm]
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
[Heartbeat]
wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/STABLE-3.0.4.tar.bz2
[Cluster Glue]
wget http://hg.linux-ha.org/glue/archive/glue-1.0.7.tar.bz2
[Resource Agents]
wgethttps://download.github.com/ClusterLabs-resource-agents-agents-1.0.4-0-gc06b6f3.tar.gz
一、 配置LVS主節點(lvs-master)
1. 安裝libnet
# tar zxvf libnet-1.1.2.2.tar.gz
# cd libnet
# ./configure
# make && make install
# cd ..
2. 安裝ipvsadm
# yum install kernel-devel //安裝對應核心的kernel-devel
# tar zxvf ipvsadm-1.24.tar.gz
# cd ipvsadm-1.24
# ln -s /usr/src/kernels/`ls /usr/src/kernels/` /usr/src/linux //將當前使用核心連線到/usr/src/linux
# make && make install
# cd..
3. 安裝Heartbeat
3.1 確認系統已經安裝以下軟體(系統光碟中有)
libxslt、libxslt-devel、libgcrypt-devel、autoconf、automake、pkgconfig、libgpg-error-devel、libtool、sgml-common、opensp、openjade、xml-common、docbook-dtds、docbook-style
如果在編譯安裝過程中出錯,很有可能是因為缺少了相關的軟體包
3.2 安裝glue
# groupadd haclient
# useradd -g haclient -M -s /sbin/nologin hacluster
# tar jxvf glue-1.0.7.tar.bz2
# cd Reusable-Cluster-Components-glue--glue-1.0.7/
# ./autogen.sh
# ./configure
# make && make install
# cd ..
3.3 安裝 agents
# tar zxvf ClusterLabs-resource-agents-agents-1.0.4-0-gc06b6f3.tar.gz
# cd ClusterLabs-resource-agents-c06b6f3/
# ./autogen.sh
# ./configure
# make && make install
# cd..
3.4 安裝Heartbeat
# tar jxvf Heartbeat-3-0-STABLE-3.0.4.tar.bz2
# cd Heartbeat-3-0-STABLE-3.0.4
# ./ConfigureMe configure
# gmake && make install
# cd..
4. 配置lvs啟動指令碼
本實驗採用的是lvs-DR模式,該模式的特點是客戶端的請求從主/備節點進入分配到web server,然後web server的響應是直接交付給客戶端的。
# vim /etc/init.d/lvs
#!/bin/sh
#chkconfig: 2345 20 80
#description: start_lvs_of_dr
VIP1=192.168.2.254
RIP1=192.168.2.250
RIP2=192.168.2.251
RIP3=192.168.2.252
RIP4=192.168.2.253
./etc/rc.d/init.d/functions
case "$1" in
start)
echo "開啟LVS DirectorServer..."
#設定虛擬IP地址
#LVS啟動時新增VIP的網口eth0:0
/sbin/ifconfig eth0:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up
/sbin/route add -host $VIP1 dev eth0:0
#清除IPVS表
/sbin/ipvsadm -C
#設定LVS
/sbin/ipvsadm -A -t $VIP1:80 -s lc
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 -g
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:80 -g
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP3:80 –g
/sbin/ipvsadm -a -t $VIP1:80 -r $RIP4:80 -g
#使用ipvsadm來轉發客戶端請求。-s lc為最小連線數演算法,-g是採用DR模式。有多少RIP就新增幾條記錄。
#啟動LVS
/sbin/ipvsadm
;;
stop)
echo "停止LVS DirectorServer..."
#關閉時清除ipvsadm表
/sbin/ipvsadm –C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
注:這個指令碼不要使用chkconfig管理,放入/etc/init.d內即可。
5. 安裝ldirectord相關元件
預設安裝完上面的三個軟體包之後,ldirectord已經安裝到系統中,預設路徑在 /usr/etc/ ,由於ldirectord是由perl語言編寫的,所以必須安裝相關的軟體包:Socket6、libwww-perl、URI、MailTools、HTML-Parser
# yum -y install perl-Socket6 perl-libwww-perl perl-URI perl-MailTools perl-HTML-Parser
也可以在http://search.cpan.org/網站下載相關軟體包安裝
安裝方法:
# perl Makefile.PL
# make && make install
6. 配置heartbeat
# cp -a /usr/etc/ha.d/ /etc/
# rm -fr /usr/etc/ha.d/
# ln -s /etc/ha.d/ /usr/etc/
# cp /usr/share/doc/haresources /etc/ha.d/
# cp /usr/share/doc/authkeys /etc/ha.d/
# cp /usr/share/doc/ha.cf /etc/ha.d/
# chmod 600 /etc/ha.d/authkeys //這個檔案的許可權必須是600
6.1 修改配置檔案
6.1.1 authkeys檔案配置(authkeys檔案的作用是用來設定心跳資訊的加密方式)
vim /etc/ha.d/authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
此設定是使用crc迴圈冗餘校驗,不採用加密的方式。
6.1.2 ha.cf為heartbeat的主配置檔案,修改下面配置。
# vim /etc/ha.d/ha.cf
#日誌檔案位置
logfile /var/log/ha-log
#指定主備伺服器多久傳送一次心跳
keepalive 2
#指定30秒沒有收到對方心跳就認為對方已經down機
deadtime 30
#10秒沒有收到心跳,便發出警報。
warntime 10
#對方DOWN後120秒重新檢測一次。
initdead 120
#指定監聽埠
udpport 694
#心跳監聽網口,這裡為eth1
bcast eth1 //去掉後面#linux
#備份機的心跳線介面與介面IP
ucast eth1 192.168.1.251
#主節點恢復後,自動收回資源。
auto_failback on
#指定主備伺服器的主機名稱,即在hosts檔案中指定的。第一個node為主伺服器,第二個node為備伺服器。
node lvs-master //伺服器的主機名
node lvs-backup
#當192.168.2.1、192.168.2.2這兩個IP都不能ping通時,對方即開始接管資源。
ping_group group1 192.168.2.1 192.168.2.2
#啟用ipfail指令碼
respawn root /usr/lib/heartbeat/ipfail
#指定執行ipfail的使用者。
apiauth ipfail gid=root uid=root
6.1.3 haresources檔案配置,這個檔案是指定虛擬IP和改主機控制的指令碼。
# vim /etc/ha.d/haresources
lvs-master 192.168.2.254 lvs ldirectord
// master.lvs.net可為主節點主機名,192.168.2.254為虛擬IP
6.1.4 ldirectord.cf是ldirectord程序的配置檔案,該程序用來監視web server的執行狀況,如果web server不能響應請求則把它排除在轉發列表外。
複製安裝檔案ldirectord目錄上的ldirectord.cf 到/etc/ha.d/conf下,如果找不到可以查詢一下:find / -name ldirectord.cf
# mkdir /etc/ha.d/conf
# cp ldirectord.cf /etc/ha.d/conf
# vim /etc/ha.d/conf/ldirectord.cf
# Global Directives
#設定真實web server的超時時間
checktimeout=30
#監視真實web server的時間間隔
checkinterval=10
#如全部真實web server失敗,則轉發至本地
fallback=127.0.0.1:80
#改變配置檔案內容,不需要重新ldirectord
autoreload=yes
#指定日誌位置
logfile="/var/log/ldirectord.log"
quiescent=no
# A sample virual with a fallback that will override the gobal setting
#指定虛擬IP
virtual=192.168.2.254:80
#指定真實web server IP及監聽埠
real=192.168.2.250:80 gate
real=192.168.2.251:80 gate
real=192.168.2.252:80 gate
real=192.168.2.253:80 gate
fallback=127.0.0.1:80 gate
service=http
#指定轉發演算法
scheduler=lc //這裡的演算法要和LVS指令碼的演算法一樣
protocol=tcp
#監視VIP伺服器的方法
checktype=negotiate
checkport=80
#監聽測試頁面名稱,這個頁面放入真實web server web服務的根目錄
request="lvs_testpage.html"
#指定測試頁面返回內容
receive="test Page"
virtualhost= lvstest.net
配置檔案中的lvs_testpage.html必須存在網站根目錄下,校驗一下配置:
# ldirectord -d /etc/ha.d/conf/ldirectord.cf start //按Ctrl+C結束
# cp /etc/ha.d/shellfuncs /usr/lib/ocf/resource.d/heartbeat/.ocf-shellfuncs
以上lvs和heartbeat配置完成。
LVS備節點(lvs-backup)的配置和LVS主節點(lvs-master)完全一樣。
只是在/etc/ha.d/ha.cf中“ucast eth1 192.168.1.251”此配置地址不一樣。
二、配置真實web server指令碼
在每臺web server的/etc/init.d目錄下放置realserver指令碼,這裡主備節點同時也作為web server使用。
# vim /etc/init.d/realserver
#!/bin/bash
# chkconfig: 2345 20 80
# description: lvs_dr_realserver
#指定虛擬IP
VIP=192.168.2.254
host=`/bin/hostname`
case "$1" in
start)
# Start LVS-DR real server on this machine.
/sbin/ifconfig lo down
/sbin/ifconfig lo up
#修改相關核心引數
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
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
;;
stop)
# Stop LVS-DR real server loopback device(s).
/sbin/ifconfig lo:0 down
;;
status)
# Status of LVS-DR real server.
islothere=`/sbin/ifconfig lo:0 | grep $VIP`
isrothere=`netstat -rn | grep "lo" | grep $VIP`
if [ ! "$islothere" -o ! "$isrothere" ];
then
# Either the route or the lo:0 device
# not found.
echo "LVS-DR real server Stopped."
else
echo "LVS-DR Running."
fi
;;
*)
# Invalid entry.
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;;
esac
# chmod +x /etc/init.d/lvs
# chmod +x /etc/init.d/realserver
# service heartbeat start //主備LVS排程器上執行
# /etc/init.d/lvs start //主備LVS排程器上執行
# /etc/init.d/realserver start //真實web服務器上執行
# chkconfig --level 35 heartbeat on
# echo “/etc/init.d/lvs start” >> /etc/rc.local //開機啟動
# echo “/etc/init.d/realserver start” >> /etc/rc.local //開機啟動
三、測試
配置我已經測試過了,但是不同系統環境可能會出一些意料之外的事情。
相關推薦
linux實現HA有幾種方法
【實驗配置環境】伺服器系統:CentOS-5.6LVS主節點(lvs-master):192.168.2.250(eth0) 心跳直連線口:192.168.1.250(eth1)LVS備節點(lvs-backup):192.168.2.251(eth0) 心跳直連線口:19
java中有幾種方法可以實現一個執行緒?用什麼關鍵字修飾同步方法 stop()和suspend()方法為何不推薦使用?
java5以前,有兩種實現方法,分別使用new Thread()和new Thread(runnable)形式,第一種繼承Thread類,直接呼叫thread的run方法,所以,我們往往使用Thread子類,即new SubThread()。第二種是實現Runn
java中有幾種方法可以實現一個執行緒?用什麼關鍵字修飾同步方法? stop()和suspend()方法為何不推薦使用?
java5以前,有如下兩種: 第一種: new Thread(){}.start();這表示呼叫Thread子類物件的run方法,new Thread(){}表示一個Thread的匿名子類的例項物件,子類加上run方法後的程式碼如下: new Thread(){ publi
本地文件上傳到Linux服務器的幾種方法
scp xftp u盤掛載 本文介紹幾種常見的方法,把文件上傳到Linux服務器中!常見有使用:scp命令、xshell軟件裏的xftp程序、U盤掛載、服務器自帶的lrzsz程序。一、scp使用說明:1、把本機的文件傳給目的服務器:scp get66.pcap [email protec
在Windows環境下學習Linux命令列的幾種方法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
【轉】linux清屏的幾種方法
內置命令 測試 get 回車 清空 曾經 .exe 兼容 喜歡 在windows的DOS操作界面裏面,清屏的命令是cls,那麽在linux 裏面的清屏命令是什麽呢?下面筆者分享幾種在linux下用過的清屏方法。 1、clear命令、這個命令將會刷新屏幕,本質上只是讓終端顯示
Linux安裝軟體的幾種方法
一、rpm包安裝方式步驟: 1、找到相應的軟體包,比如soft.version.rpm,下載到本機某個目錄; 2、開啟一個終端,su -成root使用者; 3、cd soft.version.rpm所在的目錄; 4、輸入rpm -ivh soft.version.rp
Android實現延遲的幾種方法小結
本文例項總結了Android實現延遲的幾種方法。分享給大家供大家參考,具體如下: 一、通過Thread new Thread(){ public void run(){ sleep(***); } }.start(); 通過ProgressDialog的使用來
實現繼承的幾種方法
cal 效率 等於 lse cat 實現 www. per 缺點 JS繼承的實現方式 既然要實現繼承,那麽首先我們得有一個父類,代碼如下: // 定義一個動物類 function Animal (name) { // 屬性 this.name
hadoop實現Join的幾種方法
1) reduce side join reduce side join是一種最簡單的join方式,其主要思想如下: 在map階段,map函式同時讀取兩個檔案File1和File2,為了區分兩種來源的key/value資料對,對每條資料打一個標籤 (tag), 比如:tag=0表示來自檔案File1,tag=
Android實現非同步的幾種方法
在Android專案中,有經驗的開發人員都知道,一些耗時的IO操作等都必須在子執行緒中去操作,那麼可以有哪些方法來開啟子執行緒呢,一般可以使用Java中自帶的幾種方法,也可以使用Andorid特有的一些類。 用Java來實現非同步 主要有兩種方法來實現非同步
Android實現滑動的幾種方法
下面通過一個例子來總結實現滑動的幾種方式,例子的主要功能就是讓我們的自定義View能夠隨著手指的移動而移動。 佈局檔案如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro
Excel資料匯入到Oracle有幾種方法
方法一、使用SQL*Loader 這個是用的較多的方法,前提必須oracle資料中目的表已經存在。大體步驟如下:1、將excel檔案另存為一個新檔案比如檔名為text.txt,檔案型別選文字檔案(製表符分隔),這裡選擇型別為csv(逗號分隔)也行,但是在寫後面的control.ctl時要將欄位終止符改為',
在iOS中有幾種方法來解決多執行緒訪問同一個記憶體地址的互斥同步問題
方法一,@synchronized(id anObject),(最簡單的方法) 會自動對引數物件加鎖,保證臨界區內的程式碼執行緒安全 @synchronized(self) {
記錄Android中實現滑動的幾種方法
一、layou方法 程式碼示例如下,自定義一個view,在onTouchEvent()方法中計算手指滑動時的偏移量,呼叫view的layout()方法,在當前left、top、right、bottom上加上偏移量,實現view的滑動。 public clas
建立多執行緒有幾種方法?如何建立執行緒?
多執行緒有幾種實現方法? 多執行緒實現又3種方法,其中前兩中是常用的方法,推薦第二種方法,一個類應該在其修改或者加強是才繼承 1.繼承Thread類,重寫run()方法,例項化該類,呼叫執行緒start()方法 (1)自定義類,繼承Thread類,重寫run()方法 (2
java 程序間通訊的有幾種方法?
歡迎訪問我的技術群425783133 程序間通訊的方法主要有以下幾種: (1)管道(Pipe):管道可用於具有親緣關係程序間的通訊,允許一個程序和另一個與它有共同祖先的程序之間進行通訊。 (2)命名管道(named pipe):命名管道克服了管道沒有名字的限制,因此
【Android View事件(四)】View滑動與實現滑動的幾種方法
1 前言 在前面的幾篇文章,我向大家介紹的都是單一View事件,而在這篇文章中,我將向大家介紹連續的事件 —— 滑動。 在安卓裝置上滑動幾乎是應用的標配,由於安卓手機螢幕較小,為了給使用者呈現更多的內容,就需要使用滑動來隱藏和顯示一些內容。
如何新增HTML元素的事件處理,有幾種方法
新增html元素的事件有三種方法。 1.通過HTML元素屬性。簡單說來就是在html結構中,給你要新增事件的元素新增一個屬性。 屬性名為 ‘on’ + 事件名。 如:你要給a元素繫結一個click事件,你就該這麼寫: name 2.通過物件屬性。 物
HTML網頁訪問servlet有幾種方法?
1, 表單:<form action=""></form> 2, 超連結:<a href=""></a> 3, 網頁後退:onclick="hist