一個高可用示例

要求:
 如何實際部署一個LAMP負載均衡集羣
 web服務器負載均衡,連接同一臺獨立的mysql數據庫。
 安裝phpwind論壇,使用域名來訪問。
 在網站的根目錄存放一個index_session.php
思考:
 php的session信息默認是以文件的形式存放的
  /etc/php.ini  <----session

  常規的session信息保存方法:
   文件形式 <---共享存儲
   數據庫形式 <----所有web服務器都讀寫同一個MySQL
   memcached服務 <---所有web服務器都讀寫同一個
   內存
 爲了對外提供相同的服務,需要做到哪些?
   
 論壇的用戶可以上傳附件,那麼附件需要同步嗎?怎麼同步?
  共享存儲: nfs , iscsi(集羣文件系統),mfs


 httpd, php , mysql-server ,php-mysql


   clients  10.1.1.115
   |  |  |
     eth0
    Router
    virbr1
 |------------------|---------------------|
 Dr    R1         R2


Router
 eth0 10.1.1.21
 virbr1 1.1.1.1
Dr
 eth0 1.1.1.128  <----www.upl.com
 gw 1.1.1.1
 
R1
 eth0 1.1.1.129
 gw 1.1.1.1
 lo:0 1.1.1.128/32
R2
 eth0 1.1.1.130
 gw 1.1.1.1
 lo:0 1.1.1.128/32

Mysql
 eth0 1.1.1.131

 


MySQL數據庫:

skip-name-resolve

mysql> create database phpwind default charset utf8;
mysql> grant all on phpwind.* to bbs@'1.1.1.%'
    -> identified by '123';


部署web服務器:
 1、在其中一臺web服務器,這裏選擇是R1解壓代碼
 2、暫時讓調度器DR只把請求調度給R1
# ipvsadm -e -t 1.1.1.128:80 -r 1.1.1.130 -g -w 0
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  1.1.1.128:80 rr
  -> 1.1.1.130:80                 Route   0      0          0  <--暫停調度    
  -> 1.1.1.129:80                 Route   1      0          0     

 3、使用域名www.upl.com訪問,進行嚮導 。
 4、安裝完畢之後才把R1上的網站根目錄裏的代碼同步到R2
 5、恢復DR的正常調度,可以調度給R1,R2

 

# vim /etc/php.ini
session.save_path = "/var/lib/php/session"

把/var/lib/php/session 掛載到共享存儲。

# chmod 777 /var/lib/php/session


=====================================================================

   clients  10.1.1.115
   |  |  |
     eth0
    Router
    virbr1
 |----------|-----------|---------------------|
 Dr   BDr        R1       R2

VIP 1.1.1.132 <----www.upl.com

 

Router
 eth0 10.1.1.21
 virbr1 1.1.1.1
Dr
 eth1 1.1.1.128 
 gw 1.1.1.1
 

BDr
 eth0 1.1.1.131
 
R1
 eth0 1.1.1.129
 gw 1.1.1.1
 lo:0 1.1.1.132/32
R2
 eth0 1.1.1.130
 gw 1.1.1.1
 lo:0 1.1.1.132/32

 

一、部署調度工具

1、
Dr、BDR都安裝piranha

# yum install piranha -y

# piranha-passwd
New Password:
Verify:
Updating password for user piranha

# service piranha-gui start

# lsof -i:3636

2、在主DR進行配置,然後同步配置文件到BDR

http://1.1.1.128:3636

配置完畢,把配置文件同步到BDR
# scp  /etc/sysconfig/ha/lvs.cf 1.1.1.131:/etc/sysconfig/ha/


在本次實驗中,由於Dr公共網絡的網卡(綁定VIP的網卡)是eth1,BDR卻是eth0,所以配置文件同步過去後,需要修改一下,把裏面eth1:1修改成eth0:1才使用被BDR使用。

啓動pulse服務: dr、bdr都要啓動
# service pulse start

 

3、其餘步驟
 爲什麼在該拓撲圖中,調度器可以不靜態綁定後端節點的MAC。 

二、部署後端節點
 略
 
# ifconfig lo:0 1.1.1.132 netmask 255.255.255.255


參考文檔:27頁
Red_Hat_Enterprise_Linux-5-Virtual_Server_Administration-zh-CN.pdf


========================================================================

高可用集羣
 
 爲了解決單點故障,使用的集羣技術,叫做“高可用集羣(HA)”

 同一時刻只有一個節點,作爲活動節點對外提供服務,另外的節點都是處於備用狀態,他們構成HA集羣,集羣中的這些節點都是相互通過“心跳”(串口線的信號、網絡組播、廣播、單播)相互進行溝通,只要活動節點出故障,就會進行故障遷移,就是剩餘的備用狀態的這些備用節點會推舉其中一臺取代故障節點,繼續對外提供服務。

 常用的高可用集羣用到的套件:
  heartbeat
  keepalive
  rhcs套件


實驗1:使用heartbeat實現web服務器的高可用。

  clients
  |||
  vip <----浮動IP
   |
 |-----------------|
 web1  web2  <---- 這兩個節點組成了HA集羣

 


資源:
 vip 1.1.1.188
 apache服務

node2.upl.com
 eth0 1.1.1.129/24
node3.upl.com
 eth0 1.1.1.130/24

必須兩個節點同步相互綁定主機名hosts


一、所有節點安裝軟件heartbeat
heartbeat-2.1.3-3.el5.centos.i386.rpm
heartbeat-pils-2.1.3-3.el5.centos.i386.rpm
heartbeat-stonith-2.1.3-3.el5.centos.i386.rpm


二、在其中一個節點配置,同步配置文件

1、主配置文件
# cp /usr/share/doc/heartbeat-2.1.3/ha.cf /etc/ha.d/
# vim /etc/ha.d/ha.cf

logfile /var/log/ha-log
keepalive 2
deadtime 12
warntime 6
initdead 60
udpport 694
ucast eth0 1.1.1.130 <--使用本機的eth0接受與發送心跳,並且把心跳發送給1.1.1.130
auto_failback on <---主節點故障修復後重新上線,會自動取回資源,備節點會重新恢復備用狀態
node    node2.upl.com
node    node3.upl.com    <---定義集羣中的所有節點
ping 1.1.1.1 <----一般設定爲網關
respawn hacluster /usr/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster

2、資源配置文件
 資源:一個HA集羣中的節點爲了能夠對外提供正常的服務所必須的條件,這些條件可以是,例如:
  vip  <----浮動IP
  apache服務
  mysql服務
  共享存儲的連接與掛載
  。。。。。 
 這些資源往往都是通過腳本來管理:
  獲取apache服務,就是通過/etc/rc.d/init.d/httpd start啓動
  停止apache服務,就是通過/etc/rc.d/init.d/httpd stop釋放資源
  查看資源狀態 .... status 
 腳本執行的時候,heartbeat會自動根據實際情況傳輸start,stop,status等參數,但是一些特別的參數就需要手工指定
 資源對應的腳本默認情況下,heartbeat會在/etc/ha.d/resource.d/或者/etc/rc.d/init.d/目錄下尋找。

格式:
#node-name resource1::參數1::參數2 resource2 ... resourceN


# cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
# vim /etc/ha.d/haresources
node2.upl.com   IPaddr::1.1.1.188/24/eth0   httpd
^^^主節點。

 

 


3、心跳加密配置文件
# cp /usr/share/doc/heartbeat-2.1.3/authkeys /etc/ha.d/

# vim /etc/ha.d/authkeys
auth 2
2 sha1 sdlkfjfk219dj!

# chmod 600 /etc/ha.d/authkeys

 

同步配置文件到其餘節點


三、把涉及到資源測試一下,保證資源是可用。
 在本實驗中,就應該測試apache是否能工作正常。

 測試完畢之後,所有資源都應該手工的關閉掉。因爲這些資源都應該有heartbeat服務根據配置文件自動協商獲取的。

 

四、啓動

# service heartbeat start


手工把資源讓給另外一個節點:
# /usr/lib/heartbeat/hb_standby  <----當前活動節點

手工把資源搶到手:
# /usr/lib/heartbeat/hb_takeover

 

 

故障排除:
 /var/log/ha-log

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