前言:
高可用集群,是指以減少服務中斷(如因服務器宕機等引起的服務中斷)時間為目的的服務器集群技術。簡單的說,集群就是一組計算機,它們作為一個整體向用戶提供一組網絡資源。這些單個的計算機系統就是集群的節點。
高可用集群的出現是為了減少由計算機硬件和軟件易錯性所帶來的損失。它通過保護用戶的業務程序對外不間斷提供的服務,把因軟件/硬件/人為造成的故障對業務的影響降低到最小程度。
什么是pacemaker :
Pacemaker是一個集群資源管理器。它利用集群基礎構件(OpenAIS 、heartbeat或corosync)提供的消息和成員管理能力來探測并從節點或資源級別的故障中恢復,以實現群集服務(亦稱資源)的最大可用性。
Corosync
Corosync是集群管理套件的一部分,他在傳遞信息的時候可以通過一個簡單的配置文件來定義信息傳遞的方式和協議等。也就是說,corosync是Messaging Layer集群信息層軟件,需要pacemaker資源管理器,才能構成一個完整的高可用集群。它也是運行于心跳層的開源軟件。(是集群框架引擎程序)
實驗搭建:
準備三臺7.3的虛擬機
server1:ip為172.25.5.111 作為管理節點和HA節點
server2:ip為172.25.5.112 作為HA節點
server3:ip為172.25.5.113 作為iscsi共享磁盤
三臺虛擬機關火墻,selinux狀態disabled,
首先需要配好高可用yum源(server1和server2):


yum源配好之后安裝工具(一和二都裝)
yum install pacemaker pcs corosync -y
systemctl start pcsd
systemctl enable pcsd
passwd hacluster 為高可用用戶設定密碼
yum install bash-* -y 安裝pcs相關命令

因為官方規定為了安全起見要生成ssh密鑰,給自己和server2發送一份
server2重復相同操作
ssh-keygen
ssh-copy-id server1
ssh-copy-id server2
發送不了你看下自己的解析寫好沒:

在server1上
pcs cluster auth server1 server2
pcs cluster setup --name mycluster server1 server2
pcs cluster start --all
pcs cluster enable --all
pcs status
pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
crm_verify -L
pcs resource list
pcs resource standards
在server1和server2上安裝httpd,并寫入網頁

在server1上創建vip:
pcs resource create vip ocf:heartbeat:IPaddr2 ip=172.25.5.100 cidr_netmask=32 op monitor interval=30s
在server2上查看
crm_mon
測試:
pcs cluster stop server1
crm_mon
pcs cluster start server1
在sever1上添加httpd資源和組
pcs resource create apache systemd:httpd op monitor interval=1min
pcs resource group add apache_group vip apache
crm_mon
pcs constraint order vip then apache
添加fence柵設備
在server1、server2和物理機上分別安裝fence
yum install fence-virt -y
mkdir /etc/cluster
在物理機上
fence_virtd -c ##配置fence
Interface [virbr0]: br0 ##設備選擇br0,其他用默認生成fence_xvm.key
mkdir /etc/cluster
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1把fence_xvm.key分發到HA節點,通過這個key來管理節點
scp fence_xvm.key root@server1:/etc/cluster/
scp fence_xvm.key root@server2:/etc/cluster/systemctl start fence_virtd.service
在server1上識別并添加fence
注意:server1(主機名):server1(虛擬機名)
stonith_admin -I
pcs stonith create vmfence fenxe_xvm pcmk_host_map="server1:server1;server2:server2" op monitor interval=1min
測試:
寫壞server2的內核,通過fence重啟
pcs property set stonith-enabled=true
echo c >/proc/sysrq-trigger
添加iscsi網絡共享磁盤
server3作為共享磁盤
為server3添加一塊20G的虛擬磁盤
fdisk /dev/vda 建個分區
partprobe
安裝共享磁盤服務并設置
yum install targetcli -y
targetcli
/backstores/block create my_disk1 /dev/vdaiscsi/ create iqn.2019-06.com.example:server3iscsi/iqn.2019-06.com.cc.example:server3:/tpg1/luns create /backstores/block/my_disk1
iscsi/iqn.2019-06.com.cc.example:server3/tpg1/acls create iqn.2019-06.com.example:client
exit
在server1和server2上安裝iscsi
并編寫文件
yum install iscsi-* -y
cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iscsi/iqn.2019-06.com.cc.example:client
systemctl restart iscsid
識別并登陸共享磁盤
iscsiadm -m discovery -t st -p 172.25.5.113
iscsiadm -m node -l
partprobe
cat /proc/partitions
在共享磁盤上創建一個分區并格式化
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
partprobe
在server2同步并查看
partprobe
cat /proc/partitions
添加mysql數據庫資源
在server1和server2上分別安裝mariadb
yum install mariadb-* -y
sysemctl start mariadb
server1掛載到共享磁盤并登陸數據庫
chown mysql.mysql /var/lib/mysql
mount /dev/sdb1 /var/lib/mysql
systemctl start mariadb
mysql -uroot
關閉server1的mariadb并在server2登陸數據庫
server1 systemctl stop mariadbserver2 mount /dev/sdb1 /var/lib/mysqlsystemctl start mariadbmysql -uroot
測試完畢卸載并關閉mariadb
umount /var/lib/mysql
systemctl stop mariadb
刪除之前創建的apache組
并創建新的vip和組
pcs resource delete apache_group
pcs resource create vip1 ocf:heartbeat:IPaddr2 ip=172.25.11.200 cidr_netmask=32 op monitor interval=30s
pcs resource create mysql_data ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mysql fstype=xfs op monitor interval=30s
df
crm_mon
pcs resource create mariadb systemd:mariadb op monitor interval=1min
pcs resource group add mysql_group vip1 mariadb
crm_mon
在server1登陸mysql測試
mysql -uroot
在server2把內核寫崩測試fence
pcs property set stonith-enabled=true
echo c >/proc/sysrq-trigger
解決fence資源的bug
目的:寫崩server2內核,在server2重啟過程中,資源會回到server1上,當server2重啟以后,資源也會一直在server1上
解決辦法:
刪除之前創建資源、組、fence
pcs resource delete mysql_group
pcs resource delete vmfence
pcs property set stonith-enabled=false
crm_verify -L -V
重新添加資源、組、fence
pcs resource create vip1 ocf:heartbeat:IPaddr2 ip=172.25.5.200 cidr_netmask=32 op monitor interval=30s
pcs resource create mysql_data ocf:heartbeat:Filesystem device=/dev/sdb1 directory=/var/lib/mysql fstype=xfs op monitor interval=30s
pcs resource create mariadb systemd:mariadb op monitor interval=1min
pcs resource group add mysql_group vip1 mariadb
更改resource-stickiness值
pcs resource defaults
pcs resource defaults resource-stickiness=100
pcs resource defaults
添加fence并再次更改resource-stickiness值
pcs stonith create vmfence fenxe_xvm pcmk_host_map="server1:server1;server2:server2" op monitor interval=1min
pcs resource defaults resource-stickiness=0
pcs resource defaults
pcs property set stonith-enabled=true
測試:
寫崩server2內核,在server2重啟過程中,資源會回到server1上,當server2重啟以后,資源也會一直在server1上