Corosync+Pacemaker

corosync+pacemker的高可用集羣,html

能夠分爲幾層:從下往上,分爲Messaging  Layer(信息傳遞層或基礎架構層,用來傳遞心跳信息等的程序),Resoure  Layer(資源管理器層(全局的),管理資源),Local  Resouce  Manager(本地資源管理器),在上面是資源代理,node

wKiom1Y4NVTg_plHAAF6hkjRkQU708.jpg

這種形式的高可用集羣,一旦分區,須要quorum(擁有法定票數)  >  total/2(總數),擁有法定票數多的一方表明集羣進行工做python

vote system: (投票系統)mysql

   少數服從多數:quorum> total/2web

        withquorum: 擁有法定票數sql

        withoutquorum: 不擁有法定票數shell

兩個節點(偶數個節點)vim

    Pingnode後端

    qdiskcentos

    若是是兩個節點的後端服務器,須要加仲裁機制,才能讓集羣正常的工做

 

資源管理層用來定義和管理資源,資源之間有位置關係(也叫約束)

資源類型:

    primitive:主資源,原始資源;在集羣中只能運行一個實例;

    clone:克隆資源,在集羣中可運行多個實例;匿名克隆、全局唯一克隆、狀態克隆(主動、被動)

    multi-state(master/slave):克隆資源的特殊實現;多狀態資源;

    group: 組資源;

        啓動或中止;

        資源監視

        相關性:

 

    資源屬性:

        priority: 優先級;

        target-rolestarted,stopped, master;

        is-managed:是否容許集羣管理此資源;

        resource-stickiness:資源粘性;

        allow-migrate:是否容許遷移;

    約束:score

        位置約束:資源對節點的傾向性;

          (-oo,+oo):

            任何值+無窮大=無窮大

            任何值+負無窮大=負無窮大

            無窮大+負無窮大=負無窮大

        排列約束:資源彼此間是否能運行於同一節點的傾向性;

        順序約束:多個資源啓動順序依賴關係,即誰先啓動,誰後啓動;

            

CentOS7中,使用的是corosync  v2(帶有投票系統)  + pacemaker (獨立服務)

集羣的全生命週期管理工具:

        pcs:agent(pcsd)

        crmsh:agentless (pssh)

 

配置集羣的前提:

    (1)時間同步;

    (2)基於當前正在使用的主機名互相訪問;

    (3)是否會用到仲裁設備;

配置兩節點的集羣服務,首先安裝pcs,安裝pcs會自動安裝corosyncpacmaker

 

示例:pcs的方式配置集羣,用pcs管理集羣

 

兩個節點都安裝pcs,時間要同步,要能基於主機名進行訪問,須要修改/etc/hosts文件(ansible的使用,若有疑問能夠查看本人的ansible的博客)

wKioL1Y4ZwzTWokZAACjGseyDo0343.jpg

wKiom1Y4Z5KwDf4hAAB4UkFUiXU729.jpg

而後在每一個節點啓動pcsd.service,並讓開機自啓動

systemctl start pcsd.service

systemctl enable pcsd.service

使用ansible進行啓動

ansible websrvs -m service -a 'name=pcsdstate=started enabled=yes'

websrvs裏包括172.16.249.115  172.16.249.159

wKioL1Y4Z_WBM4NAAADeK9sj7vA824.jpg

能夠使用systemctl  status  pcsd 來查看

wKioL1Y4aGPRv6GSAAHvosjFd7E891.jpg

而後給hacluster這個用戶設置密碼

ansible websrvs -m shell -a 'echo"mageedu" | passwd --stdin hacluster'

wKiom1Y4aEPSBIe0AAEAUdp08F0943.jpg

而後配置corosync 在其中的任意一個節點上進行配置(pcs  help 能夠查看pcs的命令)

pcs  cluster  auth  centos71 centos72 作認證

wKiom1Y4aFqSIfozAABvaAVBJ2Y284.jpg

這樣驗證就經過了,你要保證每一個節點的hacluster的用戶的信息是同樣的,

在另外一個節點上測試下

wKiom1Y4aHrDMfCGAABtYZQqM_o336.jpg

而後設定集羣

pcs cluster setup --name mycluster centos71centos72

wKiom1Y4aKCTujqYAAEnURH4Hg0371.jpg

若是你之前作過corosync集羣,加個選項–force強制從新生成下

而後進入/etc/corosync/裏面會有一個corosync.conf配置文件,這個文件默認是不存在的

能夠修改配置文件(/etc/corosync/ corosync.conf),把日誌的存放位置改下

wKioL1Y4aPGQsX6rAAA4gfelaaw615.jpg

而後其餘節點也須要修改,

這個不須要修改就能夠啓動,這裏爲了查看日誌方便,才修改的

 

而後啓動集羣任意節點中pcs cluster start - - all 由於這裏只有一個集羣,因此使用all,若是有多個,能夠指定集羣名來啓動

wKioL1Y4aQnjWdhSAABvGBCMXIc160.jpg

而後檢查集羣啓動的狀態

檢查各節點通訊狀態(顯示爲no faults即爲OK)

 corosync-cfgtool -s

wKiom1Y4aOyDD9QQAACdLVvBUvI046.jpg

能夠看到沒問題

檢查集羣成員關係及Quorum API:

corosync-cmapctl  | grep members

wKiom1Y4aQDjs3pLAAGfZCFUVQU257.jpg

這樣集羣就沒問題了

還能夠使用 pcs  status 來查看集羣狀態

wKiom1Y4aRCi6F7sAAGwS3D_Qjo575.jpg

這裏有個警告,須要修改集羣的全局屬性stonith-enabled=false就能夠了,

Current DC是集羣中用來決策的節點

crm_verify -L –V這個命令能夠查看集羣是否有問題

wKioL1Y4aV2B82hrAAEPc7bleBU012.jpg


配置集羣全局屬性,pcs property set stonith-enabled=false,而後在檢查就沒問題了

wKiom1Y4aSCDsCEMAABfeN51E2w383.jpg 

pcs resource  describe  能夠查看資源的配置命令格式

查看一個詳細資源的配置信息

pcs resource describe 資源名 例:pcs resourcedescribe ocf:heartbeat:IPaddr

這樣就能夠查看這個資源的怎樣配置的了

 

定義資源,pcs resource create webip ocf:heartbeat:IPaddrip="172.16.36.88" op monitor interval=20s timeout=10s

刪除資源,pcs resource  delete  webip  這樣就能夠刪除

而後定義下一個資源

pcs resource create webserver systemd:httpdop monitor interval=30s timeout=20s

查看狀態

wKiom1Y4aWHy3fFhAAHPRKzrB6w157.jpg

要把這兩個資源綁到一塊,使用約束,或者定義成組,這裏定義成組

pcs resource group add webservice webipwebserver

在看狀態

wKiom1Y4aevxlKcCAAHVW_Ltd9Q753.jpg

這樣資源就在一個節點上了

測試下

wKiom1Y4agDSFpRKAABk-L3nNrg064.jpg

而後把這個節點狀態改成standby,資源就會到另外一個節點上了

pcs cluster standby centos71

wKioL1Y4alXwVt00AAHrVbw8i-I252.jpg

能夠看到在另外一個節點上了,測試下

wKioL1Y4amaRjNBZAABj3S96Doc734.jpg

 

 

 

 

示例:手動配置 corosync + pacemaker 使用crmsh來管理集羣

 

首先在三個節點上172.16.249.195(centos7),172.16.249.115(centos71),172.16.249.159(centos72),安裝httpd服務,

設置測試頁

[root@centos7 ansible_playbooks]# echo"<h1>This is node1</h1>" >/var/www/html/index.html

[root@centos7 ansible_playbooks]# ansible172.16.249.159 -m shell -a'echo "<h1>This is node3</h1>">/var/www/html/index.html'

172.16.249.159 | success | rc=0 >>

[root@centos7 ansible_playbooks]# ansible172.16.249.115 -m shell -a'echo "<h1>This is node2</h1>">/var/www/html/index.html'

172.16.249.115 | success | rc=0 >>

而後測試服務是否都沒問題了,把服務停掉,而後把服務加入到列表中


而後作corosync+pacemaker集羣服務

首先安裝 corosync和 pacemaker 使用ansible

建立一個installcpk.yml,而後加入內容以下:

    - hosts: websrvs

     remote_user: root

     tasks:

       - name: install corosync pacemaker

        yum: name=corosync state=present

        yum: name=pacemaker state=present

 

而後使用 ansible-playbook installcpk.yml

這樣就安裝好了

 

使用多播的形式來進行heartbeat的信息交互,而後crmsh認證

首先複製配置文件

cd /etc/corosync/

[root@centos7 corosync]# ls

corosync.conf.example  corosync.conf.example.udpu  corosync.xml.example  uidgid.d

[root@centos7 corosync]# cp corosync.conf.example corosync.conf

而後修改配置文件

wKiom1Y4bOOwOjhyAAI2HU5cLIg220.jpg

wKioL1Y4bSCBBx7tAADzWV_CYMQ008.jpg

wKioL1Y4bSDDo_bnAABQMPlbiKc503.jpg 作安全認證

wKiom1Y4bOPSVmQ4AABrCFcLIAw912.jpg

wKiom1Y4bOOTleHrAACHH7-dK9Y075.jpg

由於開啓認證了,因此要生成認證文件

corosync-keygen

wKioL1Y4bWSSi0VfAADTpCRkQ1E285.jpg

而後把配置文件和認證文件,複製給其餘節點

scp -p authkey corosync.confcentos71:/etc/corosync/

scp -p authkey corosync.conf centos72:/etc/corosync/

而後驗證沒有問題的話,就能夠啓動了

寫一個ansible劇本,

vim startcpk.yml

- hosts: websrvs

 remote_user: root

 tasks:

       - name: start corosync

         service: name=corosync  state=started

而後執行就好了

wKiom1Y4beyg1c56AAIaGkCCBho666.jpg

使用這個命令corosync-cfgtool –s驗證如下

wKioL1Y4beuCKpGwAACKV4oMBfc933.jpg

其餘節點也都驗證一下

wKiom1Y4bzPQ3W-9AACS--vs1QI909.jpg

wKioL1Y4b3HDUX9OAACLBpHzMRk976.jpg

使用這個命令corosync-cmapctl也能夠驗證,裏面有下面這些信息就能夠了

wKioL1Y4b5HTjEAYAAIoThY4aF0144.jpg

 

而後啓動pacemaker ,配置文件在/etc/sysconfig/pacemaker裏,通常不用改,若是想單獨生成日誌文件,打開下面這一項

wKiom1Y4b3GTQEmFAABogNjgH90839.jpg

寫入到剛纔的ansible劇本里,而後執行

wKioL1Y4b7ngi8JIAAB_WRFQhFk526.jpg

wKioL1Y4b-bzFcqXAAJfU0H0V0s037.jpg

使用ps  aux 查看下

wKiom1Y4b72BnL7kAAI8rJLspp8694.jpg

 

而後使用crm_mon來監控集羣服務

能夠看到,節點都啓動成功了,就是沒有資源定義

wKioL1Y4cA7xublIAADEshX6zaY720.jpg

 

下面來定義資源,能夠使用crmshpcs等,也能夠直接使用二進制的接口命令也能夠設置

下面使用crmsh,只須要在一個節點安裝crmsh就好了,而後在這個節點進行配置

 

使用crm_verify -L –V 能夠查看集羣的狀態,這裏顯示錯誤,是由於咱們沒有STONITH設備,但默認開啓了這一項,因此須要修改這一項stonith-enabledfalse

wKiom1Y4cAWjfBr5AAFIpqFDK10520.jpg

安裝crmsh來進行修改和定義資源

首先下載,

crmsh-2.1.4-1.1.x86_64.rpmpssh-2.3.1-4.2.x86_64.rpm python-pssh-2.3.1-4.2.x86_64.rpm

這幾個rpm包,而後yum -y install *.rpm(你要保證當前目錄下,就只有這三個rpm包)

wKiom1Y4cCSBa6fsAADpuCl4F7g959.jpg

 

而後就能夠使用crm工具了

wKiom1Y4cDjAITW-AAAdm3g4mgA921.jpg

而後就行資源的定義,修改STONITH這一項crm(live)# configure property stonith-enabled=false

而後在crm_verify -L -V檢查集羣就沒問題了,下面開始配置資源

 

show能夠查看已定義的資源,而後定義IP這個資源,使用verify能夠檢查錯誤,若是出錯會提示,若是出錯,能夠使用delete webip這個資源

wKioL1Y4cI2ykzXWAAEsV7_UQ0A167.jpg

primitive webip ocf:heartbeat:IPaddr paramsip="172.16.36.88" op monitor interval=30s timeout=20s

primitive webserver systemd:httpd opmonitor interval=30s timeout=20s

colocation webserver_with_webip inf:webserver webip 這是定義這兩個資源在一塊兒,排列約束

order webserver_afterwebip Mandatory: webipwebserver定義順序約束

而後提交commit

wKioL1Y4cReD0oFMAAFzaQdDJSs514.jpg

使用show  xml  能夠看到配置的配置文件,定義好提交,而後在使用status就能夠查看集羣的狀態了,從上圖能夠看出,資源已經啓動了

查看下ip地址

wKioL1Y4caqw0gffAAFWlU3Jlp4255.jpg

地址加上了,而後訪問下

wKiom1Y4cT6xSNC2AABZtTj6v-I647.jpg

而後把第一個節點變爲備用

而後使用這個命令crm node standby

而後在查看狀態

wKioL1Y4cdTgd-uuAAF_pM0x6mc547.jpg

能夠看到遷移了,

而後去centos71上看下,而後在訪問下

wKioL1Y4cfaCcxggAAGU1olJGa4432.jpg

wKiom1Y4cbmTs38eAABdKgvnoTI212.jpg

 

沒問題了,而後再把節點一還原回來,看下資源會不會切換來

wKiom1Y4ceLQyiBzAAFtATG52Ac600.jpg

能夠看到資源沒有動,咱們能夠定義位置約束,只要這個節點在,就會把資源移動到這個節點上

location webservice_pref_centos7 webip 100:centos7  定義位置約束

而後commit同步

wKioL1Y4ckPwZ3OkAAF0cs-Nh_U860.jpg

能夠看到資源回到cemtos7上了

 

下面把web的頁面放在nfs服務器上,而後修改資源進行操做


首先在nfs服務器上建立一個目錄,mkdir /www/htdocs -pv

而後寫一個測試頁echo "<h1>Test Page on NFS Server</h1>" >/www/htdocs/index.html

而後把這個目錄輸出出去,編輯/etc/exports

wKiom1Y4cizzqGYpAAAdkERtcu4427.jpg

而後執行service   nfs   start,而後確保沒有被iptables阻斷

wKioL1Y4cnvBOPAjAAFx4mFn1ys745.jpg

而後chkconfig nfs on 讓其能開機啓動

而後測試一下,

在其餘主機上使用showmount -e 172.16.249.248

wKiom1Y4clXjAdQdAAB1ex0-IL4509.jpg

能夠看到沒問題了

而後掛載上,訪問測試下

wKioL1Y4cpWiNTNAAAD-mOYLx6M721.jpg

wKiom1Y4cliAyCrCAABoqLHzNKU872.jpg

而後使用crmsh定義nfs資源

而後把剛定義的順序和綁定的約束刪掉

delete webserver_with_webip

delete webserver_afterwebip

而後定義資源

primitive webstore ocf:heartbeat:Filesystemparams device="172.16.249.248:/www/htdocs"directory="/var/www/html" fstype="nfs" op start timeout=60sop stop timeout=60s op monitor  interval=20s  timeout=40s

 

colocation webserver_with_webstore_and_wibipinf: webserver (webip webstore)

order webstore_after_webip Mandatory: webipwebstore

order webserver_after_webstore Mandatory:webstore webserver

commit

status

wKioL1Y4csyjixf0AAFCrTA10ew808.jpg

而後測試就好了

wKiom1Y4co6RS1cSAAB0PMa_WXI942.jpg

使用corosync + pacemaker作mysql集羣 

首先設置nfs

而後在nfs共享的目錄裏,建立一個data目錄,屬主屬組改成mysql 權限766

負載mysql服務

而後在節點主機裏,建立一個/mydata/data/目錄屬主屬組改成mysql權限766

修改/etc/my.cnfdatadir=/mydata/data 而後重啓mariadb,若是能正常啓動沒有問題的話

就把上面作的資源修改下就能夠實現mysql集羣了。(這個之後有時間在演示)

本站公眾號
   歡迎關注本站公眾號,獲取更多信息