Redhat Ha Cluster -(转)
生活随笔
收集整理的這篇文章主要介紹了
Redhat Ha Cluster -(转)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Redhat Ha Cluster
LinuxUla ??2009-06-25 23:50一 集群概念1 集群:集群是一組協同工作的服務實體,用來提供比單一服務實體更具擴展性以及可用性的服務平臺。
2 集群的可擴展性:可以動態的加入新的服務節點來提高集群的綜合性能,而不需要停掉集群提供的服務。
3 集群的高可用性:集群實體通過內部服務節點的冗余方式來避免客戶端訪問時出現out of service的狀況。也就是說,集群中同一服務可以由多個服務節點提供,當部分節點失效后,其他服務可以接管服務。
4 集群的實體地址:是客戶端訪問集群實體獲取服務的唯一入口。
5 負載均衡:指集群中的分發設備將用戶的請求比較均衡的分發給集群實體中各個服務節點的計算、存儲、以及網絡資源。
6 負載均衡器:負責提供負載均衡的設備。其一般具備如下功能:
1)維護集群地址
2 )負責管理各個服務節點的加入和退出
3 )集群地址向內部服務節點地址的轉換
7 錯誤恢復:指集群中的某個或者某些服務節點不能正常工作或者提供服務時,其他服務節點可以資源透明的完成原有任務。
8 HA集群:高可用性集群,通過特殊的軟件將獨立的node連接起來,組成一個能夠提供故障切換的集群。它保證了在多種故障中,關鍵性服務的可用性、可靠性、以及數據的完整性。主要應用與文件服務,WEB服務,數據庫服務等關鍵應用中。
9 LB集群:負載均衡集群,在LB服務器上使用專門的路由算法,將數據包分散到多個真實服務器上進行處理,從而達到網絡服務的負載均衡的作用。主要運用于公共WEB服務,FTP服務,數據庫服務等高負載的服務中。
10 集群技術的優勢:低成本,高可用,高擴展,高資源利用率。
二 HA 高可用集群
1 HA集群的三種方式:對稱,主從,多機。
1)對稱方式:包括2臺服務器以及至少1個服務,2臺服務器都運行服務,哪臺先起則在哪臺上啟動服務,當一臺失效時,服務遷移至另外一臺上,當失效機恢復正常時,服務不會遷回至該機。
2)主從方式:包括2臺服務器以及至少1個服務,其中權重較高的服務器運行服務,另外一臺作為備份服務器,并且監視Master 的狀態,當Master發生故障時,服務會切換至Slave服務器;當Master恢復正常,服務遷回至Master。
3)多機方式:2臺以上服務器以及至少1個服務的對稱方式或者主從方式。
2 HA的基本組成
1)Service:是HA集群中提供的特定資源。
2)Node:HA集群中實際運行服務提供特定資源的服務器。
3)Failover Domain:HA集群中所有提供特定資源的成員服務器的集合。
4)Hearbeat:通過網絡數據包來監視服務器狀態的方法。
5)ShareStorage:共享存儲來儲存HA集群所需的數據。
6)單一故障點:HA集群中可能出現故障的單個設備。
7)仲裁:判斷服務器及其服務是否運行正常
8)服務失效轉移:當node出現硬件或者服務失效時,應相應的服務遷移至失效域中的其他節點
9)Watchdog:定時向各節點發送信息,來確定節點或者節點上的服務的運行狀態
10)可編程的電源控制器:由外部控制的電源控制器,連接各節點,當某臺節點死鎖時,可以通過其他成員服務器或者設備強行關閉該節點的電源。
三 使用qdisk以及組播方式作仲裁的基于Web的RedHat Ha 高可用集群的配置
1 硬件環境
node1:192.168.0.1
node2:192.168.0.2
node3:192.168.0.3
fence:192.168.0.4
所有設備在uplooking.com內網中
所有主機都運行在RHEL5U3 OS 上,并開啟ssh服務,關閉selinux,方便操作
step1
在fence上編輯/etc/hosts文件,聲明所有節點以及fence
vi /etc/hosts??
192.168.0.1 node1.uplooking.com node1
192.168.0.2 node2.uplooking.com node2
192.168.0.4 fence.uplooking.com fence
這里先不將node3 加入進來,在配置完3臺的集群后,再動態的將node3 加入,體現集群技術的高擴展性。
step2
將fence 上的hosts 文件,復制給node1和node2
for i in node1 node2;do scp /etc/hosts $i:/etc;done
(可以將fence的公鑰復制給各個node,這樣在scp時就不需要頻繁輸入密碼了)
step3
設置各節點的主機名
for i in node1 node2 fence;do hostname $i;done
要想重啟后仍舊使用該主機名,修改/etc/sysconfig/network 文件
step4
在各臺機器上yum 安裝Clustering 套件;使用本地yum源
for i in node1 node2 fence;do ssh $i yum groupinstall -y Clustering;done
在這里可以將node3 的集群套件也安裝上,
ssh 192.168.0.3 yum groupinstall -y Clustering
step5
安裝完成后,取消各節點開機啟動RHCS
for i in node1 node2 fence;do chkconfig cman off;done
for i in node1 node2 fence;do chkconfig rgmanager off;done
for i in node1 node2; do chkconfig httpd off;done 我們將通過集群由rgmanager 運行httod 服務
也在192.168.0.3上進行該操作
step6
使用圖形化工具system-config-cluster 來生成我們的cluster.conf xml配置文件
1)執行system-config-cluster 命令
2)選擇create new configuration 選項來生成一個新的配置文件
3)為我們的集群起一個響亮的名字,在 Choose a name for the cluster 下的文本框內輸入
4)選擇 custom configure multicast ;輸入一個組播地址;該值的區間為[225.0.0.1,234.255.255.255]
這里先使用組播方式來確定成員服務器的狀態,qdisk 在node3 加入后再行配置
5) 選中左邊的fence devices ,點擊右下角的add a fence device ;在下拉菜單中選擇global network block device ;在name 文本框中輸入你想要的名字,例如fence_dev ;在servers 中輸入你在/etc/hosts文件中聲明的fence 主機的主機名或者ip 。這里選擇gnbd 因為我們沒有真正的fence 柵設備,只能用軟件來模擬。
6)選中左邊的cluster nodes ,點擊右邊的add a cluster node ;出現對話框后,輸入我們在hosts文件中聲明過的節點名,node1 ;quorum votes 為仲裁權重,不輸入它,Muticast interface 為接收組播的接口,選擇eth0 。重復該動作設置node2 和 fence。
7)在左邊選擇我們設置的節點名node1 ;點擊右邊的 manage fencing? for this node ;之后點擊 add a new fence level ;選擇點擊后出現的fence-level-1 ;點擊add a new fence to this level ;將fence_dev 配置給它。
8)選中左邊的failover domains ;點擊右邊的create a failover ;為失效域取一個名字;例如failover_httpd ;然后在下拉菜中將node1 node2 加入失效域。右邊的restrict failover to this domains members 意為在該失效域的node中輪替;另外個選項prioritized list 允許你使用adjust priority 箭頭來設置nodes 的優先級。
9)選中左邊的resources ;點擊右邊的create a resource ;在下拉菜單中選擇ip adress 為我們的集群配置一個浮動ip ;該ip 是訪問我們集群的唯一入口;設置一個沒人用的內網ip吧;如192.168.0.11(假設沒有人在使用它);ok 后繼續在下拉菜單中選擇script ;使用腳本方式來啟動我們的httpd 服務;name 中輸入你想要的名字;例如apache ;在file(with path) 中輸入/etc/init.d/httpd 。
10)選中左邊的services ;點擊create a service ;輸入我們的服務名字;例如apache_ha ;接下來點擊左下角的add a shared resource to this service ;將我們剛才設置的ip 以及httpd 資源配置給它。并且在右上角選擇我們剛才配置的失效域;在autostart this service 上打勾,并且選擇relcate為我們的切換方式。
11)在左上角的file 中選擇save ;保存我們的配置文件;默認在/etc/cluster/cluster.conf
step7
將fence 上的/etc/cluster/cluster.conf 分發給各個node ;
for i in node1 node2;do scp -r /etc/cluster $i:/etc;done
step8?
在各個node 上啟動cluster 服務
fence?
service cman start
gnbd_serv(若沒有安裝gnbd ;使用yum install gnbd* 安裝上它)
node1?
service cman start
service rgmanager start
node2?
/etc/init.d/cman start
/etc/init.d/rgmanager start
step9
若所有服務順利啟動成功;可以用如下方法測試:
clustat 查看當前狀態,發現httpd 正運行在node2 上;
ssh node2 "echo b > /proc/sysrq-trigger" 使用該命令干掉他,或者可以拔網線,拔電源,砸機器都可以;
在使用clustat 查看狀態,可以看到服務運行到了node1 ,并且node2 offline了
step10
將node3 動態的加入進我們現有的集群中:
1)將干掉的node2 重新加入到集群中
service cman start
service rgmanager start
2) 在hosts 文件中聲明node3
vi /etc/hosts
192.168.0.3 node3.uplooking.com node3
3) 將hosts 文件分發給各個node
for i in node1 node2 node3 ;do scp /etc/hosts $:/etc;done
4) 設置node3 的hostname
ssh node3 hostname node3
5) 編輯/etc/cluster/cluster.conf
a 修改 version
b 復制node1 或者node 2 的配置語句
c 將復制的配置語句中node1 或者 node2 部分 修改為 node3
d 在failover domain 的配置部分加入node3 節點的配置
e 保存退出
6)ccs_tool update /etc/cluster/cluster.conf
改命令用于更新集群中各節點的配置文件,使其同步到相同的版本
7)將配置文件拷貝給node3?
scp -r /etc/cluster node3:/etc
8)在node3 上啟動服務
service cman start
service rgmanager start
ip add list
不出意外使用clustat 可以發現node3 加入了集群
9)我們可以使用命令來遷移當前服務
clusvcadm -r apache_ha -m node3
將httpd 服務遷移到 node3
10)要將node3 T出集群,我們需要將配置文件中node3 的部分全部刪除;并且ccs_tool update 配置文件;
node3 將被打上標記聲明已被T出集群
step 11
設置qdisk 仲裁投票機制。
在擁有3個相同權重的節點以后,集群中的2個節點當機,另外一個節點活著的時候,使用組播方式投票,集群會信任死掉的2個節點的投票,因為1臺存活節點的權重加1,無法大于所有權重之和的一半,就會把存活著的node 也干掉,從而導致了整個集群的癱瘓。
因 此我們需要使用qdisk 的方式投票,qidsk使用探針來證明節點是否有投票的權利,若節點已死,就根本沒有資格來投票,從而保證了2臺服務器死掉后,另外一臺能正常運行的狀 況。1臺存活節點的權重與qdisk權重之和整除2加1,大于所有權重之和的一半,就可以使節點存活下來。
1)使用system-config-cluster 來生成qdisk 的配置文件段;
a 執行命令system-config-cluster
b 選擇create new configuration 選項來生成一個新的配置文件
c 選中 use a quorum disk
d 如下配置
? interval? 1? 每隔1秒發起投票
? tko 3 擊倒次數
? vote 2? qdisk 的權重?
? minimun 1 node 最小的權重
? device 不配置 qdisk 的設備名
? label qdisk1 qdisk 的label 名
? program ping -c2 -s2 192.168.0.254(網關)
? score 1? 探測1次
? interval 2 每隔2秒探測1次
2)將配置文件另存為一個路徑;例如/root
3)將配置文件中的qdisk 配置語句復制到/etc/cluster/cluster.conf
4)ccs_tool update /etc/cluster/cluster.conf
5)在fence 上劃分一個分區作為qdisk 的設備
a fdisk /dev/sda ;分出20M的分區
b partprobe
c fdisk -l 查看分區名;假設為 /dev/sda7
6)在fence 上安裝iscsi 導出工具
yum install scsi-target-utils
7)配置并到導出iscsi 為qdisk 設備
vi /etc/tgtd/target.conf
<target iqn.2009-06.com.uplooking.fence:qdisk>
back-store /dev/sda7?
<\target>
8)service tgtd start
9)在各個節點上安裝啟動端
for i in node1 node2 node3;do ssh $i? yum install -y iscsi-initiator;done?
安裝完成后啟動服務
for i in node1 node2 node3;do ssh $i? service iscsi start;done
10)在1個節點上發現并且掛接qdisk
ssh node1 iscsiadm -m discovery -t sendtargets -p 192.168.0.4:3260
ssh node1 iscsiadm -m node -T iqn.2009-06.com.uplooking.fence:qdisk
11)在任意一臺節點上格式化qdisk
ssh node1 mkqdisk -c /dev/sdb -l qdisk1
/dev/sdb 為本地掛接qdisk 的設備,qdisk1 為我們先前配置的qdisk 的label 名
12)在另外兩臺節點上發現并且掛接qdisk
for i in node1 node2 node3 ; do ssh $i iscsiadm -m discovery -t sendtargets -p 192.168.0.4:3260;done
for i in node1 node2 node3 ; do ssh $i iscsiadm -m node -T iqn.2009-06.com.uplooking.fence:qdisk;done
13)在各個節點上啟動qdisk 服務
for i in node1 node2 node3 ; do ssh $i service qdiskd start;done
如果順利,使用clustat 命令可以查看到qdisk 加入了集群,并且處于online 狀態。
14)測試掛掉2 臺服務節點,可以看到我們的集群在掛掉2臺節點以后,剩下的唯一節點仍然堅挺。
四 使用共享存儲的mysql-HA 集群
使用共享存儲可以使各個節點的數據同步,但是使用ext3文件系統,經常會在同讀寫同一個文件的時候,使數據文件發生損壞;因此我們使用gfs2全球文件系統,可以很好的解決因為同讀寫的問題。
根據以上qdisk以及組播方式作仲裁的基于Web的RedHat Ha 高可用集群為基礎,我們將其修改為mysql的共享存儲集群。
step1
將storage 加入到正在運行的集群中去
1) 修改/etc/hosts文件
在任意的一臺節點上修改/etc/hosts 文件
vim /etc/hosts
192.168.0.5 storage.uplooking.com storage
scp /etc/hosts storage:/etc/
2)修改配置文件
在任意一臺節點上修改/etc/cluster/cluster.conf
vi /etc/cluster/cluster.conf
a 修改 version
b 復制node1 的配置語句為storage的配置語句
c 將其中的node1修改為storage
d 修改資源與服務部分將httpd 修改為mysqld
因為sotarage 只是用來做存儲用的,因此不用將它加入沖突域中。
修改完成后,ccs_tool update /etc/cluster/cluster.conf
3)在storage 上啟動服務
service cman start
成功后應該可以看到storage 節點已經online 狀態。
step2
在storage 上導出共享設備
1) 使用gnbd 方式來導出共享設備
a 首先在storage上分出3個1g 的分區
fdisk /dev/sda
3個分區分別為 /dev/sda8 /dev/sda9 /dev/sda10
b 啟動gnbd_serv
gnbd_serv
若沒有該命令,那么yum instll "Cluster Storage",安裝上
c 使用gnbd_export 命令來導出共享設備
gnbd_export -d /dev/sda8 -e gnbd1
gnbd_export -d /dev/sda9 -e gnbd2
gnbd_export -d /dev/sda10 -e gnbd3
可以使用gnbd _export -L 來查看共享設備
2) 使用iscsi 方式來導出共享設備
a 下載 iscsi-target 源代碼包
b 安裝它,make && make install
c 修改配置文件
vi /etc/ietd.conf
Target iqn.2009-06.com.uplooking.storage:share_ha
Lun 0 Path=/dev/sda8,Type=blockio
Lun 1 Path=/dev/sda9,Type=blockio
Lun 2 Path=/dev/sda10,Type=blockio
d /etc/init.d/iscsi-target start
step3 在節點上導入共享設備
1) 導入gnbd共享存儲
以node1 為例,其余相同
a 首先需要掛接gnbd 模塊
modprobe gnbd
b 使用gnbd_import 來導入gnbd 設備
gnbd_import -i storage
導入好了以后 可以使用gnbd_import -l 來查看導入的設備
2)導入iscsi共享設備
以node1為例,其余相同
a 安裝iscsi 的導出端
yum install iscsi-initiator
b 啟動iscsi 的服務
service iscsi start
c 發現并導入設備
iscsiadm -m discovery -t sendtargets -p 192.168.0.5:3260
iscsiadm -m node -T iqn iqn.2009-06.com.uplooking.storage:share_ha
step 4
配置clvm 來滿足gfs 文件系統的動態擴展
1)打開lvm2 對clvmd 的支持
for i in node1 node 2 node3 fence storage ;do lvmconf --enable-cluster;done
也可以通過配置文件的方式來修改
?vi /etc/lvm/lvm.conf
?locking_type=3
2)在所有節點設備上啟用clvmd
for i in node1 node2 node3 fence storage;do service clvmd start
3) 在節點上創建pv vg lv
因為是共享存儲,因此只需要在一個節點做此操作即可,我們在node1 上創建它
a 創建pv
pvcreate /dev/gnbd/gnbd1
pvcreate /dev/gnbd/gnbd2
pvcreate /dev/gnbd/gnbd3
b 創建vg
vgcreate cvg0 /dev/gnbd/gnbd1 /dev/gnbd/gnbd2 /dev/gnbd/gnbd3
c 創建lv
lvcreat -L 2G cvg0 -n clv0?
創建完畢后應該在其他節點上也可以看到創建的lv,如果沒有,重啟下clvmd;service clvmd restart
iscsi 步驟同gnbd 就是/dev/下的設備名不一樣
step5?
創建gfs 集群文件系統
mkfs.gfs2 -b 4096 -p lock_dlm -t mysql_ha:gfs1 -j 3 /dev/cvg0/clv0
-b 指定塊大小
-p 指定鎖類型
-t 集群名:文件系統名
-j 可接入節點數,可以通過gfs_jadd 動態添加
step6
1)掛接gfs
for i in node1 node2 node3 ;do mount /dev/cvg0/clv0 /var/lib/mysql;done
2)測試同讀寫
node1
while true ;do echo node1 >> /var/lib/mysql/file;sleep1;done
node2
while true ;do echo node2 >> /var/lib/mysql/file;sleep1;done
node3
tail -f /var/lib/mysql/file
可以看到node1 node2 交替寫入,并沒有因為多節點同時寫入而損耗。
注:
1 mysql 的啟動腳本需要修改才能在ha中切換,修改如下
status mysqld > /dev/null >&1
?????????? if [ $? -eq 3 ];then
?????????????????? return 0
?????????? fi
將以上部分加在stop()函數的起始位置。
2 gfs 節點的添加
1)首先擴容clvm
lvextend -L +512M /dev/cvg0/clv0
2)gfs_jadd -j 2 /var/lib/mysql
3)gfs_grow /var/lib/mysql
固定順序
總結
以上是生活随笔為你收集整理的Redhat Ha Cluster -(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 倒数日app怎么设置在桌面上
- 下一篇: 创造与魔法北极冰鱼有什么用 什么是创造力