天天看點

corosync+pacemaker實作高可用(HA)叢集(二)

部署方案二(推薦):corosync+pacemaker

利用ansible自動安裝corosync和pacemaker

安裝ansible(使用最新版的rpm包安裝)

1

<code>yum --nogpgcheck localinstall ansible-1.5.4-1.el6.noarch.rpm</code>

配置ansible的主機清單

2

3

4

<code>vi</code> <code>/etc/ansible/hosts</code>

<code>[hanodes]</code>

<code>node1.lamp.com</code>

<code>node2.lamp.com</code>

在ansible控制端準備安裝所需的檔案

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

<code>mkdir</code> <code>-pv </code><code>/root/autoinstall_corosync/conf</code>

<code># 内含檔案有:</code>

<code>authkeys </code><code># corosync所需的密鑰檔案,可通過corosync-keygen指令生成</code>

<code>corosync.conf </code><code># corosync的主配置檔案</code>

<code># corosync.conf配置檔案</code>

<code># Please read the corosync.conf.5 manual page</code>

<code>compatibility: whitetank</code>

<code>totem {</code>

<code>version: 2</code>

<code>secauth: on</code>

<code>threads: 0</code>

<code>interface {</code>

<code>ringnumber: 0</code>

<code>bindnetaddr: 172.16.0.0 </code><code># 配置主機網卡所在的網路位址</code>

<code>mcastaddr: 226.0.25.10 </code><code># 配置多點傳播位址,防止心跳資訊在區域網路内混亂傳播</code>

<code>mcastport: 5405 </code><code># 配置多點傳播位址</code>

<code>ttl: 1</code>

<code>}</code>

<code>logging {  </code><code># 日志相關的配置</code>

<code>fileline: off</code>

<code>to_stderr: no</code>

<code>to_logfile: </code><code>yes</code> <code># logfile和syslog方式二選一即可</code>

<code>to_syslog: no</code>

<code>logfile: </code><code>/var/log/cluster/corosync</code><code>.log</code>

<code>debug: off</code>

<code>timestamp: on</code>

<code>logger_subsys {</code>

<code>subsys: AMF</code>

<code>amf {</code>

<code>mode: disabled</code>

<code>service { </code><code># 定義一個服務,用以加載pacemaker插件</code>

<code>ver: 0</code>

<code>name: pacemaker</code>

<code>aisexec { </code><code># 定義corosync的工作使用者</code>

<code>user: root</code>

<code>group: root</code>

<code>mkdir</code> <code>-pv </code><code>/root/autoinstall_corosync/packages</code>

<code># 内含程式包有:</code>

<code>crmsh-1.2.6-4.el6.x86_64.rpm:crmsh配置接口的程式包</code>

<code>pssh-2.3.1-2.el6.x86_64.rpm:并發</code><code>ssh</code><code>程式包,crmsh安裝所依賴的包</code>

配置corosync安裝劇本(corosync.yaml)

<code>vi</code> <code>/root/autoinstall_corosync/corosync</code><code>.yaml</code>

<code>- hosts: hanodes</code>

<code>  </code><code>remote_user: root</code>

<code>  </code><code>vars:</code>

<code>    </code><code>crmsh: crmsh-1.2.6-4.el6.x86_64.rpm</code>

<code>    </code><code>pssh: pssh-2.3.1-2.el6.x86_64.rpm</code>

<code>  </code><code>tasks:</code>

<code>    </code><code>- name: corosync installing</code>

<code>      </code><code>yum: name=corosync state=present</code>

<code>    </code><code>- name: pacemaker installing</code>

<code>      </code><code>yum: name=pacemaker state=present</code>

<code>    </code><code>- name: pcs installing</code>

<code>      </code><code>yum: name=pcs state=present</code>

<code>    </code><code>- name: crmsh rpm packages</code>

<code>      </code><code>copy: src=</code><code>/root/autoinstall_corosync/packages/</code><code>` crmsh ` dest=</code><code>/tmp/</code><code>` crmsh `</code>

<code>    </code><code>- name: pssh rpm packages</code>

<code>      </code><code>copy: src=</code><code>/root/autoinstall_corosync/packages/</code><code>` pssh ` dest=</code><code>/tmp/</code><code>` pssh `</code>

<code>    </code><code>- name: crmsh installing</code>

<code>      </code><code>command</code><code>: yum -y reinstall </code><code>/tmp/</code><code>` crmsh ` </code><code>/tmp/</code><code>` pssh `</code>

<code>    </code><code>- name: authkey configure </code><code>file</code>

<code>      </code><code>copy: src=</code><code>/root/autoinstall_corosync/conf/authkey</code> <code>dest=</code><code>/etc/corosync/authkey</code>

<code>    </code><code>- name: authkey mode 400</code>

<code>      </code><code>file</code><code>: path=</code><code>/etc/corosync/authkey</code> <code>mode=400</code>

<code>      </code><code>notify:</code>

<code>        </code><code>- restart corosync</code>

<code>    </code><code>- name: corosync.conf configure </code><code>file</code>

<code>      </code><code>copy: src=</code><code>/root/autoinstall_corosync/conf/corosync</code><code>.conf dest=</code><code>/etc/corosync/corosync</code><code>.conf</code>

<code>      </code><code>tags:</code>

<code>        </code><code>- conf</code>

<code>    </code><code>- name: ensure the corosync service startup on boot</code>

<code>      </code><code>service: name=corosync state=started enabled=</code><code>yes</code>

<code>  </code><code>handlers:</code>

<code>    </code><code>- name: restart corosync</code>

<code>      </code><code>service: name=corosync state=restarted</code>

執行一鍵安裝

<code>ansible-playbook corosync.yaml</code>

crmsh配置接口

<code>crm </code><code># 進入crm指令行配置接口</code>

<code>configure </code><code># 進入configure模式</code>

<code>property stonith-enabled=</code><code>false</code> <code># 因為在實驗環境中無stonith裝置</code>

<code>property no-quorum-policy=ignore </code><code># 在實驗的雙節點環境中,配置no-quorum-policy為ignore可避免手動測試某節點下線導緻整個叢集不可用</code>

<code>rsc_defaults resource-stickiness=100 </code><code># 設定預設資源黏性值為100</code>

<code>verify </code><code># 驗證配置是否正确</code>

<code>commit </code><code># 送出配置</code>

<code>primitive webip ocf:heartbeat:IPaddr params ip=172.16.25.51 </code><code>op</code> <code>monitor interval=30s timeout=20s on-fail=restart </code><code># 建立資源webip,使用的RA是IPaddr,同時定義監控,檢測失敗則重新開機資源</code>

<code>primitive webstore ocf:heartbeat:Filesystem params device=</code><code>"172.16.251.163:/www/phpwind.com"</code> <code>directory=</code><code>"/var/www/html"</code> <code>fstype=</code><code>"nfs"</code> <code>op</code> <code>monitor interval=20s timeout=40s </code><code>op</code> <code>start timeout=60s </code><code>op</code> <code>stop timeout=60s on-fail=restart </code><code># 建立資源webstore,使用的RA是Filesystem</code>

<code>primitive webserver lsb:httpd </code><code>op</code> <code>monitor interval=30s timeout=40s on-fail=restart </code><code># 建立資源webserver,使用的RA是httpd</code>

<code>verify</code>

<code>commit</code>

<code>show </code><code># 顯示配置結果</code>

<code>show xml </code><code># 以xml檔案格式顯示詳細配置資訊</code>

<code>edit </code><code># 可直接編輯配置檔案,修改内容</code>

<code>group webservice webip webstore  webserver </code><code># 配置資源組webservice</code>

<code>order webip_before_webstore_before_webserver infinity: webip webstore webserver </code><code># 定義順序限制,定義在前面的先確定運作</code>

<code>location webip_prefer_node1 webip inf: node1.lamp.com </code><code># 定義位置限制,使得webservice更傾向于運作于node1.lamp.com節點上</code>

<code># 其它操作</code>

<code>ra </code><code># 切換至ra模式</code>

<code>list ocf heartbeat </code><code># 檢視某類别(ocf heartbeat)下的所有資源代理RA</code>

<code>meta ocf:heartbeat:Filesystem </code><code># 檢視某一具體資源代理RA的可用屬性,查找哪些是必須屬性</code>

<code>configure </code><code># 切換至configure模式</code>

<code>colocation webip_with_webstore_with_webserver inf: webserver webstore webip </code><code># 定義排列限制,即各資源都運作在同一個主機上的傾向,這與定義資源組效果相同;定義在最後的資源所在的主機決定排列限制内全部資源所運作的主機</code>

<code>monitor webserver 20s:40s </code><code># 單獨定義監控資源webserver,間隔時間為20s,逾時時間為40s</code>

<code>resource </code><code># 進入resource模式</code>

<code>cleanup webservice </code><code># 清理資源運作過程中的錯誤狀态資訊</code>

<code>stop webip </code><code># 停止資源</code>

<code>crm status </code><code># 顯示叢集狀态資訊</code>

<code>crm configure show </code><code># 顯示叢集配置資訊</code>

<code>crm node standby node1.lamp.com </code><code># 手動将node1由主節點配置為從節點,使資源轉移發生</code>

<code>crm node online node1.lamp.com </code><code># 手動使node1重新上線</code>

pcs配置接口

<code># 注:配置後即刻生效,無需手動commit送出</code>

<code>pcs property </code><code>set</code> <code>stonith-enabled=</code><code>false</code> <code># 設定參數屬性</code>

<code>pcs property </code><code>set</code> <code>no-quorum-policy=ignore</code>

<code>pcs property </code><code>set</code> <code>default-resource-stickiness=100</code>

<code>pcs resurce create webip ocf:heartbeat:IPaddr ip=172.16.25.51 </code><code>op</code> <code>monitor interval=30s timeout=20s</code><code># 建立資源webip</code>

<code>pcs resource create webstore ocf:heartbeat:Filesystem device=</code><code>"172.16.251.163:/www/phpwind.com"</code> <code>directory=</code><code>"/var/www/html"</code> <code>fstype=</code><code>"nfs"</code> <code>op</code> <code>monitor interval=20s timeout=40s </code><code>op</code> <code>start timeout=60s </code><code>op</code> <code>stop timeout=60s on-fail=restart </code><code># 建立資源webstore</code>

<code>pcs resource create webserver lsb:httpd </code><code>op</code> <code>monitor interval=30s timeout=20s on-fail=restart </code><code># 建立資源webserver</code>

<code>pcs resource group add webservice webip webstore  webserver </code><code># 配置資源組webservice</code>

<code>pcs constraint order webip </code><code>then</code> <code>webstore </code><code># 定義順序限制,隻能定義兩兩的順序關系</code>

<code>pcs constraint order webstore </code><code>then</code> <code>webserver</code>

<code>pcs constraint location webservice prefers node1.lamp.com=500 </code><code># 定義位置限制</code>

<code>pcs status </code><code># 檢視叢集狀态</code>

<code># 其它操作:</code>

<code>pcs resource list ocf:heartbeat </code><code># 檢視某類别(ocf heartbeat)下的所有資源代理RA</code>

<code>pcs resource describe ocf:heartbeat:Filesystem </code><code># 檢視某一具體資源代理RA的可用屬性,查找哪些是必須屬性</code>

<code>pcs resource group remove webservice webserver </code><code># 删除資源組webservice中的webserver資源</code>

<code>pcs resource ungroup webservice </code><code># 隻删除資源組webservice,并不删除組内的資源</code>

<code>pcs constraint show </code><code># 顯示全部限制規則</code>

<code>pcs constraint order show </code><code># 顯示指定(如order)的限制規則</code>

<code>pcs constraint colocation add webstore with webip </code><code># 定義排列限制,與資源組效果相同,二者選其一即可</code>

<code>pcs constraint order </code><code>set</code> <code>webip webstore webserver </code><code># 定義順序限制,可一次指定多個資源</code>

<code>pcs config </code><code># 檢視目前叢集的配置</code>

<code></code>

本文轉自 xxrenzhe11 51CTO部落格,原文連結:http://blog.51cto.com/xxrenzhe/1400025,如需轉載請自行聯系原作者

繼續閱讀