前言:在網上找了不少的資料,卻沒有一個成型的文檔.如下是我總結出來的經驗,若有錯誤和建議請指出.
一. 安裝前環境設定
兩臺主機硬件環境能夠不同,本人用的是vmware環境.
硬件環境:dell 1800(虛擬 2個機器)
軟件環境:vmware5 redhat as4 heartbeat2.0.4
環境描述:
兩臺計算機(兩個節點),一個共享SCSI硬盤盒(用於存儲共享,參考下邊"添加硬件")。每一個節點都安裝支持共享總線的SCSI卡;每一個節點有本身的系統磁盤;每一個分別帶有兩塊以太網卡,(其中一塊用於網絡通信,另外一塊用於心跳功能。)。兩個節點的網絡設置以下:
節點1: 主機名爲:www1,第一塊網卡(eth0)的IP地址:192.168.0.197 (用於網絡通信) 。第二塊網卡(eth1)的IP地址:192.168.1.1 (用於心跳通信) 。
節點2: 主機名爲:www2,第一塊網卡(eth0)的IP地址:192.168.0.198 (用於網絡通信) 。第二塊網卡(eth1)的IP地址:192.168.1.2 (用於心跳通信) 。
vm裏用eth1作心跳(只要互相能夠ping就能夠了)。實際安裝時,兩臺主機的eht1使用雙機對聯線直接鏈接。
vmware下快速安裝雙系統!^_^
1. 在d:\vmfile目錄下新建目錄linuxha2,在把d:\vmfile\linuxha1裏面剛纔安裝好的虛擬操做系統複製一份到linuxha2
這樣子,咱們就獲得了兩個虛擬的RedHat Advanced Server4了,固然,他們是同樣的,咱們須要進行些修改。
2. 進入d:\vmfile\linuxha2,用寫字板打開linux.vmx,修改displayName = "Linuxha1"爲displayName = "Linuxha2",這樣子,在vmware控制檯,你就看到兩個不一樣的名字了。儘管如此,若是你同時啓動兩個虛擬機,這兩個虛擬系統仍是同樣的,因此,咱們須要修改他們的ip地址,主機名字等。
3. 將linuxha2目錄中的系統啓動,修改主機名字
#vi /etc/sysconfig/network
將HOSTNAME=www1改成HOSTNAME=www2
接下來修改ip地址:
#vi /etc/sysconfig/network-scripts/ifcfg-eth0
將IPADDR=192.168.1.1改成IPADDR=192.168.1.2
修改/etc/hosts,參考下邊的步驟
4.Power off 這個虛擬機,這個樣子,咱們就獲得了兩個不一樣的系統,一個是linuxha1,位於d:\vmfile\linuhxad1,一個是linuxha2 位於d:\vmfile\linuxha2
添加硬件
在兩個系統都power off的狀態下。咱們須要分別給兩個系統添加一塊網卡,還要添 加一個共享磁盤
1.用vmware 打開linuxha1,注意不是power on 哦。在setting菜單下選擇configuration edtior
,點擊add,添加一塊網卡,這個就不須要講了吧。還須要添加一個虛擬磁盤,仍是點add,硬件類型是Hard disk,而後」Creat a new virtual disk」,大小我分配了0.5G,並選擇上下面的「Allocate all disk space」.下一步是給共享磁盤起名字叫」sharedisk.pln」,而後肯定。這樣子就添加好了。
2.用vmware 打開linuxha2,注意不是power on 哦。一樣添加一塊網卡。接着添加虛擬磁盤,此次是」Use an existing virtual disk」,而後選擇咱們剛纔在linuxone中建立的sharedisk.pln,按照提示就能夠了。
3.磁盤和網卡都添加好了。這裏,還須要注意,因爲vmware中的系統啓動後會鎖定磁盤,因此當你啓動linuxha1後共享磁盤被鎖定了,你的linuxha2就起不來了。所以,咱們須要處理一下先。首先,到d:\vmfile\linuxha1下,用寫字板打開linux.vmx,在最後一行加入
Disk.locking = false
而後到d:\vmfile\linuxha2,一樣修改linux.vmx, 在最後一行加入
Disk.locking = false
保存退出。
4.好了,到此爲止,兩個系統的硬件都配置好了.
分區方式:
[root@www1 ha.d]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
7.4G 2.8G 4.3G 40% /
/dev/sda1 99M 9.0M 85M 10% /boot
*安裝啓動服務後
[root@www1 ha.d]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
7.4G 2.8G 4.3G 40% /
/dev/sda1 99M 9.0M 85M 10% /boot
none 94M 0 94M 0% /dev/shm
/dev/sdb 1008M 34M 924M 4% /ha ##由ha自動加載
二.安裝前網絡環境設定:
node1: 主機名:www1 ( HA01 )
eth0: 192.168.0.197 //對外IP地址
eth1: 192.168.1.1 //HA心跳使用地址
node2: 主機名:www2 ( HA02 )
eth0: 192.168.0.198 //對外IP地址
eth1: 192.168.1.2 //HA心跳使用地址
特別注意要檢查如下幾個文件:
/etc/hosts
/etc/host.conf
/etc/resolv.conf
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/nsswitch.conf
#vi /etc/hosts
node1的hosts內容以下:
127.0.0.1 localhost.localdomain localhost
192.168.0.197 www1 HA01
192.168.1.1 HA01
192.168.1.2 HA02
192.168.0.198 www2
node2的hosts內容以下:
127.0.0.1 localhost.localdomain localhost
192.168.0.198 www2 HA02
192.168.1.2 HA02
192.168.1.1 HA01
192.168.0.197 www1
#cat /etc/host.conf
order hosts,bind
#cat /etc/resolv.conf
nameserver 202.98.0.68 //DNS地址
#cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=www1 //主機名
#cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.197
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
#cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.1.1
NETMASK=255.255.255.0
[node1] 與 [node2] 在上面的配置中,除了
/etc/hosts
/etc/sysconfig/network
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
要各自修改外,其餘一致。
配置完成後,試試在各自主機上ping對方的主機名,應該能夠ping通:
/root#ping HA02
PING HA02 (192.168.1.2) 56(84) bytes of data.
64 bytes from HA02 (192.168.1.2): icmp_seq=0 ttl=64 time=0.198 ms
64 bytes from HA02 (192.168.1.2): icmp_seq=1 ttl=64 time=0.266 ms
64 bytes from HA02 (192.168.1.2): icmp_seq=2 ttl=64 time=0.148 ms
--- HA02 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.148/0.204/0.266/0.048 ms, pipe 2
三.安裝HA 與HA依賴包
rpm -Uvh libnet-1.1.2.1-1.rh.el.um.1.i386.rpm //能夠不裝
rpm -Uvh heartbeat-pils-2.0.4-1.el4.i386.rpm
rpm -Uvh heartbeat-stonith-2.0.4-1.el4.i386.rpm
rpm -Uvh heartbeat-2.0.4-1.el4.i386.rpm
rpm -Uvh ipvsadm-1.24-5.i386.rpm
四. 配置 heartbeat
使用 heartbeat,必須配置三個文件:authkeys、ha.cf 和 haresources。
---------------------------
配置心跳的加密方式:authkeys
---------------------------
#vi /etc/ha.d/authkeys
若是使用雙機對聯線(雙絞線),能夠配置以下:
#vi /etc/ha.d/authkeys
auth 1
1 crc
存盤退出,而後
#chmod 600 authkeys
---------------------------
配置心跳的監控:haresources
---------------------------
#vi /etc/ha.d/haresources
1.沒有共享磁盤的狀況下配置
各主機這部分應徹底相同。
www1 192.168.0.200 ipvsadm httpd
指定www1調用ipvsadm啓動http服務,系統附加一個虛擬IP 192.168.0.200 給eth0:0
這裏若是www1宕機後,www2能夠自動啓動http服務,並新分配IP 192.168.0.200給www2的eth0:0
2.有共享磁盤狀況的配置
www1 192.168.0.200 Filesystem::/dev/sdb1::/ha::ext3 ipvsadm httpd
設置www1爲主節點,集羣服務器的ip地址爲192.168.0.200,netmask 集羣的服務有httpd,還有共享磁盤/dev/sdb1。該文件只有一行,其含義就是,當主節點www1宕機時,自動啓用備用節點裏www2來提供 服務,在切換到www2上時,自動啓動httpd服務,同時,將/dev/sdb1掛接到/ha。
*配置HA高可用,不要設置NFS掛載和mysql服務在啓動服務器時自動運行,也就是說,把與HA相關資源交給Heartbeat HA去自動管理。
3.由NFS服務的設置
www1 10.4.66.88 Filesystem::192.168.0.252:/data::/data::nfs mysql.server
這一行配置了3個資源,第一個是IP地址,第二個是NFS共享數據,
第三個是mysql.server服務,文件在/etc/rc.d/init.d/目錄,
可使用mysql.server start或stop來啓動或中止服務。
---------------------------
配置心跳的配置文件:ha.cf
---------------------------
#vi /etc/ha.d/ha.cf
logfile /var/log/ha_log/ha-log.log ## ha的日誌文件記錄位置。如沒有該目錄,則須要手動添加
logfacility local0
#bcast eth1 ##使用eht1作心跳監測,這個我沒有設置
keepalive 2 ##設定心跳(監測)時間時間爲2秒
#warntime 10 ##超出該時間間隔未收到對方節點的心跳,則發出警告並記錄到日誌中,這個也沒有設置
deadtime 30 ##超出該時間間隔未收到對方節點的心跳,則認爲對方已經死亡
initdead 120 ##在某些系統上,系統啓動或重啓以後須要通過一段時間網絡才能正常工做,該選項用於解決這種狀況產生的時間間隔。取值至少爲deadtime的兩倍。
udpport 694 ##使用udp端口694 進行心跳監測
auto_failback on ##heartbeat的兩臺主機分別爲主節點和從節點。主節點在正常狀況下佔用資源並運行全部的服務,遇到故障時把資源交給從節點並由從節點運行服務。在該選項設爲on的狀況下,一旦主節點恢復運行,則自動獲取
node www1 ##節點1,必需要與 uname -n 指令獲得的結果一致。
node www2 ##節點2
ping 192.168.10.1 ##經過ping 網關來監測心跳是否正常。
respawn hacluster /usr/lib64/heartbeat/ipfail
---------------------------
五. HA服務的啓動、關閉以及測試
啓動HA: service heartbeat start
關閉HA; service heartbeat stop
系統在啓動時已經自動把heartbeat 加載了。
使用http服務測試 heartbeat
首先啓動httpd服務
#service httpd start
編輯各自主機的測試用html文件,放到/var/www/html/目錄下。
啓動node1的heartbeat www1#service heartbeat start
將看到不用的頁面
在主節點(www1)上啓動heartbeat服務:/etc/init.d/heartbeat start。 若是不出現錯誤,web服務應該被heartbeat啓動,同時heartbeat爲主節點設置IP地址192.168.0.200。使用ifconfig eth0:0能夠看到以下信息:
eth0:0 Link encap:Ethernet HWaddr 00:0C:29:D8:FD:EB
inet addr:192.168.0.200 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:14970 errors:0 dropped:0 overruns:0 frame:0
TX packets:14977 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:3624073 (3.4 Mb) TX bytes:3626223 (3.4 Mb)
Interrupt:19 Base address:0x10a0
同時/dev/sdb,應該被掛接。使用df -h,能夠看到的信息包含下面的行:
/dev/sdb 485M 8.1M 452M 2% /ha
在node2(www2)上啓動heartbeat:/etc/init.d/heartbeat start。 使用ifconfig eth0:0能夠看到以下信息: eth0:0 Link encap:Ethernet HWaddr 00:0C:29:E4:1E:F7 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:19 Base address:0x10a0 代表如今node2節點沒有被啓用。 使用df -h,看到的信息不包含下面的行: /dev/sdb1 485M 8.1M 452M 2% /ha 代表/dev/sdb1沒有被加載。 直接關閉節點1的電源或者在www1上執行service heartbeat stop命令(模擬故障)。 最慢30秒後,在節點2(www2) 上執行ifconfig eth0:0,能夠看到eth0:0已經被設置爲192.168.0.200 還能夠在客戶機上這樣來肯定 ^_^ 1.www1掛起服務時的狀態,仔細看197和200的mac地址是同樣的 D:\>arp -a Interface: 192.168.0.138 --- 0x10005 Internet Address Physical Address Type 192.168.0.197 00-0c-29-71-4b-12 dynamic 192.168.0.200 00-0c-29-71-4b-12 dynamic 192.168.0.254 00-01-50-55-63-5b dynamic 2.www2掛起服務 mac地址變啦 D:\>arp -a Interface: 192.168.0.138 --- 0x10005 Internet Address Physical Address Type 192.168.0.200 00-0c-29-6c-54-91 dynamic 192.168.0.254 00-01-50-55-63-5b dynamic (發現個小問題,若是把兩臺節點都手動stop之後,必須從新啓動機器才能從新正常啓用heartbeat服務) 六. 防火牆設置 heartbeat 默認使用udp 694端口進行心跳監測。 若是系統有使用iptables 作防火牆,應記住把這個端口打開。 #vi /etc/sysconfig/iptables 加入如下內容 -A RH-Firewall-1-INPUT -p udp -m udp --dport 694 -d 10.0.0.201 -j ACCEPT 意思是udp 694端口對 對方的心跳網卡地址 192.168.1.2 開放。 #service iptables restart 從新加載iptables。做者:剛-百萬富翁