天天看点

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,如需转载请自行联系原作者

继续阅读