HA(High Available),高可用集羣,是減小服務中斷時間爲目的的服務器集羣技術。是保證業務連續性的有效解決方案。集羣,簡單的來講就是一組計算機。通常有兩個或者兩個以上的計算機組成,這些組成集羣的計算機被稱爲節點。html
其中由兩個節點組成的集羣被稱爲雙機熱備,即便用兩臺服務器互相備份,當其中一臺服務器出現問題時,另外一臺服務器立刻接管服務,來保護用戶的業務程序對外不間斷提供的服務,固然集羣系統更能夠支持兩個以上的節點,提供比雙機熱備更多、更高級的功能,把因軟件/硬件/人爲形成的故障對業務的影響下降到最小程度。node
在集羣中爲了防止服務器出現「腦裂」的現象,集羣中通常會添加Fence設備,有的是使用服務器自己的的硬件接口稱爲內部Fence,有的則是外部電源設備稱爲外部Fence,當一臺服務出現問題響應超時的時候,Fence設備會對服務器直接發出硬件管理指令,將服務器重啓或關機,並向其餘節點發出信號接管服務。linux
在紅帽系統中咱們經過luci和ricci來配置管理集羣,其中luci安裝在一臺獨立的計算機上或者節點上,luci只是用來經過web訪問來快速的配置管理集羣的,它的存在與否並不影響集羣。ricci是安裝在每一個節點上,它是luci與集羣給節點通訊的橋樑。web
接下來是集羣的配置了。
apache
主機環境: rhel6.5 iptables and selinux disablevim
實驗主機
server4.example.com 172.25.9.4 luci端後端
server2.example.com 172.25.9.2 節點1服務器
server3.example.com 722.25.9.2 節點2dom
在節點端:ide
yum install ricci
給ricci用戶設置密碼
echo redhat | passwd --stdin ricci
開啓ricci並確保ricci開機啓動
/etc/init.d/ricci start chkconfig ricci on
在luci端:
安裝集羣管理軟件
yum install luci
開啓luci
/etc/init.d/luci start
用web登陸https://server4.example.com:8084經過網頁來配置其中8084端口就是luci啓動的端口
luci端的主機的root用戶就是luci的管理用戶;其餘用戶登陸須要root用戶受權這裏爲了方 便直接用root登陸
建立集羣
建立集羣成功
輸入節點主機clustat命令也可查看到
Member Status: Quorate Member Name ID Status ------ ---- ---- ------ server2.example.com 1 Online, Local server3.example.com 2 Online
爲集羣添加外部fence:
由於實驗主機是虛擬機因此用物理機來模擬fence 在物理機中安裝所需的軟件包
yum install fence-virtd-multicast.x86_64 fence-virtd.x86_64 fence-virtd-libvirt.x86_64
開始建立:
執行fence_virtd -c
命令後按要求配置
尋找module路徑默認便可:
監聽module設爲多波:
多波IP設爲225.0.0.12:
端口設爲1229:
接口爲br0:
建立fence的key文件默認便可,要確保有/etc/cluster目錄:
後端module爲libvirt:
成功後會將如下信息寫入/etc/fence_virt.conf
backends { libvirt { uri = "qemu:///system"; } } listeners { multicast { port = "1229"; family = "ipv4"; interface = "br0"; address = "225.0.0.12"; key_file = "/etc/cluster/fence_xvm.key"; } } fence_virtd { module_path = "/usr/lib64/fence-virt"; backend = "libvirt"; listener = "multicast"; }
採集隨即信息到剛剛生成的key文件裏
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
啓動fence_virtd服務
systemctl start fence_virtd.service
將key文件傳到節點的/etc/cluster目錄下就能夠經過luci給集羣添加fence了 點擊Fence Devices添加fence,有多種fence設備可供選擇這裏選的是Fence virt(MulticastMode ):
而後點擊Nodes裏的節點爲集羣添加fence
這裏選擇vmfence(xvm Virtual Machine Fencing)其中Domain填寫虛擬機的名字或UUID。
每一個節點都添加了之後測試一下:
在server2.example.com中執行fence_node server3.example.com
命令能夠看到server3主機關閉重起了
配置完fence後接着配置failover:
#Prioritized設置優先級
#Restricted設置只在勾選節點中運行
#No Failback設置當優先級高的節點恢復時不會接管正在運行的服務
而後在Resource中添加資源這裏添加虛擬ip和httpd的腳本(集羣要安裝httpd):
最後設置Server Group:
#Automatically Start This Service設置自動開啓服務
#Run Exclusive 設置當運行此服務時再也不運行其餘服務
點擊 Add Resource 增長Resource中的資源這裏添加的是上一步配置的虛擬IP和httpd腳本
測試:
在網頁輸入設置的虛擬IP172.25.9.100能夠看到server2主機的網頁內容server2.example.com
在server2主機執行clusvcadm -r apache -m server3.example.com
命令讓server3主機接管服務
或者執行echo c > /proc/sysrq-trigger
讓server2內核崩潰,server2主機將在fence的做用下重起.
刷新172.25.9.100的頁面能夠看到server3的主頁內容server3.example.com。
集羣存儲:
在luci端安裝iscsi服務端
yum install scsi-target-utils.x86_64
添加配置:
vim /etc/tgt/targets.conf <target iqn.2016-06.com.example:server.target1> backing-store /dev/vdb initiator-address 172.25.9.2 initiator-address 172.25.9.3 </target> /etc/init.d/tgtd start
輸入tgt-admin -s看到以下信息表示成功
在集羣安裝iscsi客戶端
yum install iscsi-initiator-utils.x86_64 -y
找到服務端分享的磁盤
iscsiadm -t st -m discovery -p 172.25.9.4
連接
iscsiadm -m node -l
對磁盤進行分區並建立lvm(只需在集羣的一個節點作)
fdisk -cu /dev/sda pvcreate /dev/sda1 vgcreate clust0 /dev/sda1 lvcreate -L +2G -n lv0 clust0
磁盤能夠格式化爲本地系統或者集羣文件系統
1.磁盤格式化爲本地文件系統 mkfs.ext4 /dev/clust0/lv0
節點執行pvs,vgs,lvs。
命令進行同步
最後在網頁進行配置:
點擊Resource添加資源:選擇File System
在以前的Resource Group中的apache組添加資源順序爲虛擬IP -> File System ->httpd腳本
由於server2主機的優先級高因此先掛載在server2主機,在server2主機執行
echo www.redhat.com > /var/www/html/index.html
訪問虛擬ip172.25.9.100能夠看到這個主頁
2.磁盤格式化爲集羣文件系統
lvcreate -L 2G -n demo clust0 mkfs.gfs2 -p lock_dlm -t memory:mygfs2s -j 3 /dev/clust0/demo gfs2_tool sb /dev/clust0/demo all #查看demo的信息
在/etc/fstab中寫入(UUID能夠經過blkid查看,所用節點都作) vim /etc/fstab UUID=c705c698-7dbb-b831-2cd5-1d553660d393 /var/www/html gfs2 _netdev 0 0 mount -a