centos7雙機熱備方案(pcs+corosync+pacemaker+DRBD)


常用命令:
修改虛擬IP
pcs resource update virtual_ip ip=10.16.10.200
重啟節點服務
#重啟節點的ClusterIP服務
pcs resource cleanup ClusterIP
#重啟節點所有的服務
pcs resource cleanup
兩台都在online狀態時,服務運行在node1服務器上,想切換到node2服務器上
pcs cluster standby node1
將node1再次激活
pcs cluster unstandby node1
常用命令:
查看集群狀態:#pcs status
查看集群當前配置:#pcs config
開機后集群自啟動:#pcs cluster enable --all
啟動集群:#pcs cluster start --all
停止集群:#pcs cluster destroy --all
查看集群資源狀態:#pcs resource show
設置節點為備用狀態:#pcs cluster standby node1
取消節點備用狀態:#pcs cluster unstandby node1
(pcs resource create umail_data ocf:heartbeat:Filesystem device="/dev/mapper/umail_vg-umail_lv" directory="/umaildata" fstype="xfs")
----------------------------------------------------------------------------------------------------------
1. 安裝常見的習慣用的包(node1node2
yum install vim wget tmux lrzsz unzip -y
2. 配置服務器hosts記錄
環境:(node1、node2
192.168.1.181 drbd1.cspcs.com node1
192.168.1.216 drbd2.cspcs.com node2
(切記需要注意使用hostname的時候,需要直接顯示的主機名)
(相關的環境記得改成自已的,歡迎踩到坑里)
127.0.0.1 localhost drbd1.cspcs.com localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.181 drbd1.cspcs.com node1
192.168.1.216 drbd2.cspcs.com node2
# Created by anaconda
NETWORKING=yes
HOSTNAME=drbd1.cspcs.com
node1
0
node2
0
3、關閉iptables和SELINUX,避免安裝過程中報錯,部署完成后可以再開啟(node1,node2)
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# vi /etc/selinux/config
---------------
SELINUX=disabled
---------------
(node1,node2)
reboot
4、創建LVM步驟 (node1,node2) LVM
fdisk /dev/sdb
pvdisplay
pvcreate /dev/sdb1
vgcreate umail_vg /dev/sdb1
vgdisplay
lvcreate -l 4095 -n umail_lv umail_vg
0
0
0
0
0
5、時間同步(node1,node2)
# yum install -y rdate
# rdate -s time-b.nist.gov
6、(DRBD安裝)(node1,node2)
3、由於編譯安裝沒成功,所以選擇yum方式安裝(node1,node2)
# yum install -y kmod-drbd84 drbd84-utils
# systemctl enable drbd
4、配置文件介紹
# /etc/drbd.conf #主配置文件
# /etc/drbd.d/global_common.conf #全局配置文件
5、加載DRBD模塊、查看DRBD模塊是否加載到內核:(node1,node2)
# modprobe drbd
# lsmod |grep drbd
drbd                  397041  0
libcrc32c              12644  2 xfs,drbd
如果加載DRBD模塊報下面的錯誤:
# modprobe drbd
FATAL: Module drbd not found.
備注:由於在安裝依賴包的時候,已經安裝kernel,所以一般情況下不會出現下面的錯誤。如果出現了可以先嘗試重啟看下,如果重啟后還是不行,就按照下面的方法操作:
原因:這個報錯是因為內核並不支持此模塊,所以需要更新內核,
更新內核的方法是:yum install kernel(備注:如果沒報錯不建議更新)
更新后,記得一定要重新啟動操作系統!!!
重啟系統后再次使用命令查看,此時的內核版本變為
# uname -r
此時再次嘗試加載模塊drbd
# modprobe drbd
參數配置:(node1,node2)
# vi /etc/drbd.d/db.res
resource r0{
protocol C;
startup { wfc-timeout 0; degr-wfc-timeout 120;}
disk { on-io-error detach;}
net{
timeout 60;
connect-int 10;
ping-int 10;
max-buffers 2048;
max-epoch-size 2048;
}
syncer { rate 200M;}
on drbd1.cspcs.com{
device /dev/drbd0;
disk /dev/mapper/umail_vg-umail_lv;
address 192.168.1.181:7788;
meta-disk internal;
}
on drbd2.cspcs.com{
device /dev/drbd0;
disk /dev/mapper/umail_vg-umail_lv;
address 192.168.1.216:7788;
meta-disk internal;
}
}
0
(使用drbdadm create-md r0這個步驟的的時候,如果提示如下報錯,可以使用 dd if=/dev/zero of=/dev/mapper/umail_vg-umail_lv bs=1M count=1)
0
0
======================================================================
0
0
0
將drbd1.cspcs.com主機配置為主節點:(node1, 注意只有node1,這步一定要等待顯示下面的狀態后才能執行下一步)
此步驟可以使用cat /proc/drbd進行查看硬盤同步的狀態。
0
drbdsetup /dev/drbd0 primary --force
0
0
【node1、node2】
mkdir /store
【node1】
mkfs.xfs /dev/drbd0
mount /dev/drbd0 /store
df -h
umount /store/
df -h
drbdadm secondary r0
cat /proc/drbd
0
0
 
 
7、測試故障轉移(drbd故障轉移)
0
【node2】
mkdir /store
cat /proc/drb
drbdadm primary r0
mount /dev/drbd0 /store
cat /proc/drbd
0
8、安裝PCS套件(node1,node2
# yum install corosync pcs pacemaker -y
#在上一步yum安裝的時候,會創建 hacluster用戶,與pcs一起用於配置集群節點
#修改兩台服務器上面 hacluster 賬號的密碼
# echo " password" | passwd --stdin hacluster
#分別在兩台服務器上面啟動pcsd服務
#systemctl start pcsd
以下開始,可以只要在(node1)上面操作
#授權集群節點,讓節點間可以正常通訊
#pcs cluster auth node1 node2
0
#添加集群節點成員,創建一個名為cluster_umail的集群,並把 node1與node2添加為成員
#pcs cluster setup --name cluster_umail node1 node2 --force
0
# 啟動集群節點,下面的命令成功啟動后,corosync和pacemaker守護進程會一同被啟動,可以通過systemctl status corosync和systemctl status pacemaker觀察
(#pcs cluster start node1 啟動某個節點)
#pcs cluster start --all
0
啟動后檢測群集的狀態:
#pcs status cluster
0
檢查集群中節點的狀態:
#pcs status nodes
#corosync-cmapctl |grep members
#pcs status corosync
0
---------------------------
群集配置
檢查配置是否還有錯誤:
#pcs status corosync
#crm_verify -L -V
#pcs property set stonith-enabled=false
#crm_verify -L -V
#pcs property set no-quorum-policy=ignore
#pcs property
[root@mail1 ~]# crm_verify -L -V
error: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
error: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
error: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
[root@mail1 ~]#
0
創建虛擬IP與查看虛擬IP地址狀態
#pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.1.191 cidr_netmask=32 op monitor interval=30s
#pcs status resources
#ip addr
0
#pcs status 查看虛擬IP的狀態,pcs cluster stop停止一邊的集群,看一下虛擬IP是否有轉移到另外一台
0
在另外一台使用pcs status查看虛擬IP是否轉移過來了
0
0
添加drbd資源至集群中、掛載,並且添加關聯約束
[root@drbd1 ~]# pcs cluster cib add_drbd
[root@drbd1 ~]# ls -al add_drbd
-rw-r--r-- 1 root root 4083 Dec 12 21:11 add_drbd
[root@drbd1 ~]# pcs -f add_drbd resource create umaildata ocf:linbit:drbd drbd_resource=r0 op monitor interval=60s
[root@drbd1 ~]# pcs -f add_drbd resource master umaildata_sync umaildata master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
[root@drbd1 ~]# pcs -f add_drbd resource show
virtual_ip (ocf::heartbeat:IPaddr2): Started node1
Master/Slave Set: umaildata_sync [umaildata]
Stopped: [ node1 node2 ]
[root@drbd1 ~]# pcs status
Cluster name: cluster_umail
Stack: corosync
Current DC: node1 (version 1.1.19-8.el7_6.1-c3c624ea3d) - partition with quorum
Last updated: Wed Dec 12 21:16:41 2018
Last change: Wed Dec 12 21:07:26 2018 by root via cibadmin on node1
2 nodes configured
1 resource configured
Online: [ node1 node2 ]
Full list of resources:
virtual_ip (ocf::heartbeat:IPaddr2): Started node1
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/disabled
[root@drbd1 ~]# pcs -f add_drbd resource show
virtual_ip (ocf::heartbeat:IPaddr2): Started node1
Master/Slave Set: umaildata_sync [umaildata]
Stopped: [ node1 node2 ]
[root@drbd1 ~]# pcs cluster cib-push add_drbd
CIB updated
[root@drbd1 ~]#
0
pcs cluster cib add_fs
pcs -f add_fs resource create umail_fs Filesystem device="/dev/drbd0" directory="/store" fstype="xfs"
pcs -f add_fs constraint colocation add umail_fs umaildata_sync INFINITY with-rsc-role=Master
df -h
0
pcs -f add_fs constraint order promote umaildata_sync then start umail_fs
pcs -f add_fs constraint colocation add virtual_ip umail_fs INFINITY
#以下步驟先啟動umail_fs,然后再啟動virtual_ip
pcs -f add_fs constraint order umail_fs then virtual_ip
pcs cluster cib-push add_fs
ip addr
#先使用pcs status查看一下現在是掛載在那台,然后使用pcs cluster stop將其停止一下,然后看一下是否切換到另外一台上面,然后再使用pcs cluster start 將其啟動
pcs status
pcs cluster stop
pcs cluster start
##############################################################
#配置pcs,並且添加虛擬Ip與drbd資源,相關的歷史命令
##############################################################
yum install corosync pcs pacemaker -y
echo "password" | passwd --stdin hacluster
systemctl start pcsd
pcs cluster auth node1 node2
pcs cluster setup --name cluster_umail node1 node2 --force
pcs cluster start --all
pcs status cluster
pcs status nodes
pcs status
corosync-cmapctl |grep 'members'
pcs status corosync
crm_verify -L -V
pcs property set stonith-enabled=false
crm_verify -L -V
pcs property set no-quorum-policy=ignore
pcs property
pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.1.191
pcs status
pcs cluster stop
pcs cluster start
pcs status
pcs cluster cib add_drbd
ls -al add_drbd
pcs -f add_drbd resource create umaildata ocf:linbit:drbd drbd_resource=r0 op monitor interval=60s
pcs -f add_drbd resource master umaildata_sync umaildata master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
pcs -f add_drbd resource show
pcs cluster cib add_fs
pcs cluster cib-push add_drbd
pcs status
#以下步驟為將drbd的設備進行掛載,並且添加關聯約束
pcs cluster cib add_fs
pcs -f add_fs resource create umail_fs Filesystem device="/dev/drbd0" directory="/store" fstype="xfs"
pcs -f add_fs constraint colocation add umail_fs umaildata_sync INFINITY with-rsc-role=Master
df -h
pcs -f add_fs constraint order promote umaildata_sync then start umail_fs
pcs -f add_fs constraint colocation add virtual_ip umail_fs INFINITY
#以下步驟先啟動umail_fs,然后再啟動virtual_ip
pcs -f add_fs constraint order umail_fs then virtual_ip
pcs cluster cib-push add_fs
ip addr
#先使用pcs status查看一下現在是掛載在那台,然后使用pcs cluster stop將其停止一下,然后看一下是否切換到另外一台上面,然后再使用pcs cluster start 將其啟動
pcs status
pcs cluster stop
pcs cluster start
##############################################################
9、umail目錄配置
分別在兩台服務器上面安裝一下U-Mail,並且更新至最新版本一下
1、在 node1進行以下操作(先把/store目錄掛載到node1)
   # 移動目錄到 / store 目錄
    mv  /usr/local/u-mail/data/mailbox /store
    mv /usr/local/u-mail/data/backup / store           <默認沒有此目錄,可以跳過>
    mv /usr/local/u-mail/data/www/webmail/attachment / store
    mv /usr/local/u-mail/data/www/webmail/netdisk / store
    mv /usr/local/u-mail/data/mysql/default/umail / store
    mv /usr/local/u-mail/data/mysql/default/ibdata1 / store
    mv /usr/local/u-mail/data/mysql/default/ib_logfile0 /store
    mv /usr/local/u-mail/data/mysql/default/ib_logfile1 /store
    
    # 建立軟鏈接
    ln -s / store/mailbox /usr/local/u-mail/data/mailbox
    ln -s / store/backup  /usr/local/u-mail/data/backup     <默認沒有此目錄,可以跳過>
    ln -s / store/attachment /usr/local/u-mail/data/www/webmail/attachment
    ln -s / store/netdisk /usr/local/u-mail/data/www/webmail/netdisk
    ln -s / store/umail /usr/local/u-mail/data/mysql/default/umail
    ln -s / store/ibdata1 /usr/local/u-mail/data/mysql/default/ibdata1 
    ln -s / store/ib_logfile0 /usr/local/u-mail/data/mysql/default/ib_logfile0 
    ln -s / store/ib_logfile1 /usr/local/u-mail/data/mysql/default/ib_logfile1         
    
    # 更正權限
    chown -R umail.root  /usr/local/u-mail/data/mailbox/
    chown -R umail.umail /usr/local/u-mail/data/backup/      <默認沒有此目錄,可以跳過>
    chown -R umail_apache.umail_apache /usr/local/u-mail/data/www/webmail/attachment/
    chown -R umail_apache.umail_apache /usr/local/u-mail/data/www/webmail/netdisk/
    chown -R umail_mysql.umail_mysql /usr/local/u-mail/data/mysql/default/umail
    chown -R umail_mysql.umail_mysql /usr/local/u-mail/data/mysql/default/ibdata1 
    chown -R umail_mysql.umail_mysql /usr/local/u-mail/data/mysql/default/ib_logfile0 
    chown -R umail_mysql.umail_mysql /usr/local/u-mail/data/mysql/default/ib_logfile1  
2、在 node2上面進行以下操作(把/store目錄掛載到node2)
    # 修改原來的內容
    mv  /usr/local/u-mail/data/mailbox{,_bak}
    mv /usr/local/u-mail/data/backup{,_bak}        <默認沒有此目錄,可以跳過>
    mv /usr/local/u-mail/data/www/webmail/attachment{,_bak}
    mv /usr/local/u-mail/data/www/webmail/netdisk{,_bak}
    mv /usr/local/u-mail/data/mysql/default/umail{,_bak}
    mv /usr/local/u-mail/data/mysql/default/ibdata1{,_bak}
    mv /usr/local/u-mail/data/mysql/default/ ib_logfile0{,_bak}
    mv /usr/local/u-mail/data/mysql/default/ ib_logfile1{,_bak}
    
    # 建立軟鏈接
    ln -s / store/mailbox /usr/local/u-mail/data/mailbox
    ln -s / store/backup  /usr/local/u-mail/data/backup     <默認沒有此目錄,可以跳過>
    ln -s / store/attachment /usr/local/u-mail/data/www/webmail/attachment
    ln -s / store/netdisk /usr/local/u-mail/data/www/webmail/netdisk
    ln -s / store/umail /usr/local/u-mail/data/mysql/default/umail
    ln -s / store/ibdata1 /usr/local/u-mail/data/mysql/default/ibdata1 
    ln -s / store/ib_logfile0 /usr/local/u-mail/data/mysql/default/ib_logfile0 
    ln -s / store/ib_logfile1 /usr/local/u-mail/data/mysql/default/ib_logfile1 
    
10、添加U-Mail服務至集群中
#添加umail_mysqld服務
pcs resource create umail_mysqld_server service:umail_mysqld op monitor interval="30" timeout="60" op start interval="0" timeout="60" op stop interval="0" timeout="60" meta target-role="Started"
#添加umail_nginx服務
pcs resource create umail_nginx_server service:umail_nginx op monitor interval="30" timeout="60" op start interval="0" timeout="60" op stop interval="0" timeout="60" meta target-role="Started"
#添加umail_apache服務
pcs resource create umail_apache_server service:umail_apache op monitor interval="30" timeout="60" op start interval="0" timeout="60" op stop interval="0" timeout="60" meta target-role="Started"
#添加umail_postfix服務
pcs resource create umail_postfix_server service:umail_postfix op monitor interval="30" timeout="60" op start interval="0" timeout="60" op stop interval="0" timeout="60" meta target-role="Started"
#添加啟動節點約束:umail_nginx_server、umail_apache_server、umail_postfix_server 、umail_mysqld_server 啟動的節點必須是 umail_fs 的節點
pcs constraint colocation add umail_nginx_server with umail_fs
pcs constraint colocation add umail_apache_server with umail_fs
pcs constraint colocation add umail_postfix_server with umail_fs
pcs constraint colocation add umail_mysqld_server with umail_fs
#添加order約束,先啟動umail_fs,然后再啟動 umail_mysqld_server
pcs constraint order umail_fs then umail_mysqld_server
11、設置開機啟動項(node1、node2)
0
systemctl enable pcsd
systemctl enable corosync
systemctl enable pacemaker
vim /usr/lib/systemd/system/corosync.service
在第8行下面添加:
ExecStartPre=/usr/bin/sleep 10
#重新加載systemd守護程序
systemctl daemon-reload
cat /usr/lib/systemd/system/corosync.service
12、自行重啟測試
祝君好運
------------------------------------------------------------------------------------------------------------------------
附(馬總寫的):DRBD常見維護
一、服務器維護建議:
1、不要同時重啟兩台服務器,否則可能會爭奪資源(術語叫做腦裂),建議間隔5分鍾左右。
2、不要同時開機兩台服務器,否則可能會爭奪資源(術語叫做腦裂),建議間隔5分鍾左右。
3、當前心跳線是10.0.100.0網段的,建議后期在兩台服務器上各加一個網卡,用網線直接將兩台服務器相連(IP配置成另外一個網段)。這樣可以避免由於您10.0.100.0網段出現故障造成爭奪資源(術語叫做腦裂)。
 
 
二、升級注意:
1、如果將一台服務器升級到最新版本了,需要切換到另外一台也升級到最新版本。
 
 
三、怎么確認同步是否有問題:
最基本的方法,在兩台服務器上運行df –h命令查看存儲掛載情況:
正常情況:一台服務器掛載了(紅框圈中的分區),另外一台服務器沒掛載,並且兩邊drbd都是啟動的,並且cat /proc/drbd狀態正常。
 
不正常情況1:如果兩台服務器都掛載了(紅框圈中的分區),表示不正常,即發生了腦裂。這時候請聯系技術支持解決。
 
不正常情況2:一台服務器掛載了(紅框圈中的分區),另外一台服務器沒掛載,但是drdb服務停止狀態,並且cat /proc/drbd狀態不正常。
 
不正常情況下drbd狀態一般為:
    (1). 其中兩個個節點的連接狀態為 StandAlone
    (2). 其中一個節點的連接狀態為 WFConnection,另一個問題StandAlone
查看主備服務器DRBD狀態:
/etc/init.d/drbd status
cat /proc/drbd
 
四、DRBD同步異常的原因:
    (1). 采用HA環境的時候自動切換導致腦裂;
    (2). 人為操作或配置失誤,導致產生的腦裂;
(3). 經驗有限,慚愧的很,只碰到以上2中產生腦裂的原因。
(4). drbd服務停止了
 
 
五、解決方法:
一般問題狀態可能是這樣的:
備機(hlt1):
[root@hlt1 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@hlt1.holitech.net, 2016-10-31 10:43:50
m:res  cs            ro                 ds                 p  mounted  fstype
0:r0   WFConnection  Secondary/Unknown  UpToDate/DUnknown  C
 
[root@hlt1 ~]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@hlt1.holitech.net, 2016-10-31 10:43:50
 0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:383860
 
主機(hlt2):
[root@hlt2 ~]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@hlt2.holitech.net, 2016-10-31 10:49:30
 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r-----
ns:0 nr:0 dw:987208 dr:3426933 al:1388 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1380568204
 
[root@hlt2 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@hlt2.holitech.net, 2016-10-31 10:49:30
m:res  cs          ro               ds                 p       mounted  fstype
0:r0   StandAlone  Primary/Unknown  UpToDate/DUnknown  r-----  ext4
 
1、在備服務器操作:其中example(比如r0)是資源名。
[root@hlt1 ~]# drbdadm secondary r0
[root@hlt1 ~]# drbdadm --discard-my-data connect r0 (如果返回錯誤信息,就多執行一次)
 
2、在主服務器操作:
[root@hlt2 ~]# drbdadm connect r0
[root@hlt2 ~]# cat /proc/drbd
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 599f286440bd633d15d5ff985204aff4bccffadd build by root@master.luodi.com, 2013-11-03 00:03:40
 1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:6852 nr:0 dw:264460 dr:8393508 al:39 bm:512 lo:0 pe:2 ua:0 ap:0 ep:1 wo:d oos:257728
    [>....................] sync'ed:  4.7% (257728/264412)K
finish: 0:03:47 speed: 1,112 (1,112) K/sec
 
3、備主機上查看:DRBD恢復正常:
備服務器:
[root@hlt1 ~]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@hlt1.holitech.net, 2016-10-31 10:43:50
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:1455736720 dw:1455736720 dr:0 al:0 bm:140049 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 
主服務器:
[root@hlt2 ~]# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@hlt2.holitech.net, 2016-10-31 10:49:30
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:1455737960 nr:0 dw:85995012 dr:1403665281 al:113720 bm:139737 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 
如果出現下列錯誤:
‘r0‘ not defined in your config (for this host).檢查是否設置hosts文件和配置文件主機名是否一致
Exclusive open failed. Do it anyways  檢查是否已經打開drbd服務,先關閉
 
DRBD日常管理:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM