Corosync:它属于OpenAIS(开放式应用接口规范)中的一个项目corosync一版本中本身不具备投票功能,到了corosync 2.0之后引入了votequorum子系统也具备了投票功能了,如果我们用的是1版本的,又需要用到票数做决策时那该如何是好呢;当然,在红帽上把cman + corosync结合起来用,但是早期cman跟pacemaker没法结合起来,如果想用pacemaker又想用投票功能的话,那就把cman当成corosync的插件来用,把cman当成corodync的投票功能,当然,这里结合了两个了Messaging Lader;Corosync目前有两个主流的版本:一个是2系列的,另一个是1系列的稳定版;2版本和1版本差别很大,1版本不具有投票功能,2版本之后引入了votequorum后支持投票功能了;

OpenAIS自从诞生之后,红帽就基于这个规范研发了一个高可用集群的解决方案叫cman,并为cman提供了rgmanager作为资源管理器,并且容合conga全生命周期的管理接口形成了RHCS;
   Conrosync是从OpenAIS这个大项目中分支出来的一个项目,而Pacemaker是heartbeat v3版本中分裂出来专门用于提供高可用集群CRM的组件,功能十分强大, Coreosync在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等,Corosync可以提供一个完整的HA功能,Corosync是未来的发展方向,在以后的新项目里,一般采用Corosync,而heartbeat_gui可以提供很好的HA管理功能,可以实现图形化的管理。

Pacemaker是一个集群管理器。它利用首选集群基础设施(OpenAIS 或heartbeat)提供的消息和成员能力,由辅助节点和系统进行故障检测和回收,实现性群集服务(亦称资源)的高可用性。

corosync+pacemaker:在配置corosync时最好具有三个以上的节点,并且节点个数为奇数个,如果使用偶数个节点的话也没关系,只是要关闭不具有法定票数的决策策略功能;

拓扑

实现过程:

1、双机互信需要设置好,hosts文件需要解析好,时间要同步

8.39、8.42、8.40
#vim /etc/hosts

# hostname node2.chinasoft.com
vim /etc/hosts
192.168.8.39 node2.chinasoft.com node2
192.168.8.42 node2.chinasoft.com node4 在ansible服务器8.40上配置ssh免密码访问node2和node4
# ssh-keygen -t rsa -P '' # ssh-copy-id -i .ssh/id_rsa.pub root@node2.chinasoft.com
# ssh-copy-id -i .ssh/id_rsa.pub root@node4.chinasoft.com
测试是否成功
# ssh node2.chinasoft.com 'date';date
# ssh node4.chinasoft.com 'date';date

2、安装时间服务器客户端(时间服务器192.168.8.102)

# yum install -y ntp
# vim /etc/ntp.conf
加入
server 192.168.8.102
启动ntp客户端并手动同步一次时间,后续自动平滑同步
# service ntpd start
# ntpdate -u 192.168.102

3、安装corosync,这里我们用ansible来安装,要使用ansible在一台主机上操作多台主机得需要事先安装ansible,那这里我们就先说说安装和配置使用ansible,安装ansible也可以用yum来安装:

# yum install -y epel-relase
# yum install -y ansible1.9

# vim /etc/ansible/hosts  把里面的内容全都注释掉,加下面你的节点hostname
[corosync]
node2.chinasoft.com
node4.chinasoft.com

我们这里使用192.168.8.40这台主机安装ansible,操作192.168.8.39和192.168.8.42这两台主机,测试一下:    
# ansible corosync -m shell -a 'date'
node2.chinasoft.com | success | rc=0 >>
Tue Apr 19 20:48:07 CST 2016

node1.chinasoft.com | success | rc=0 >>
Tue Apr 19 20:48:07 CST 2016     --测试成功,成功时显示的颜色为绿色

4、安装corosync

好,准备工作做好了之后就可以安装corosync了,使用ansible查看两个节点是否已经安装了corosync(最好使用centos6.5光盘当做yum源来安装,测试如果不是centos6.5光盘自带依赖包安装,报错无法进行试验):
此处我们将8.20配置成了http方式的Yum源(这个yum源的软件包都来自centos6.5光盘)
过程:
# cd /etc/yum.repos.d
将默认的yum源备份即关闭
# mv CentOS-Base.repo CentOS-Base.repo.bak
加入我们自己的yum源
# vim localyum.repo

[base]
name=localyum
baseurl=http://192.168.8.20
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 [updates]
name=localyum
baseurl=http://192.168.8.20
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

清理下缓存,即可
# yum clean all
# yum makecache

# ansible corosync -a "rpm -q corosync"
node2.chinasoft.com | FAILED | rc=1 >>
package corosync is not installed

node1.chinasoft.com | FAILED | rc=1 >>
package corosync is not installed

# ansible corosync -m yum -a "name=corosync state=present"  全部输出显示为绿色说明安装成功

# ansible corosync -a "rpm -q corosync"再查看一下corosync的安装版本
node2.chinasoft.com | success | rc=0 >>
corosync-1.4.7-2.el6.x86_64

node4.chinasoft.com | success | rc=0 >>
corosync-1.4.7-2.el6.x86_64

在其中的一个节点如node2.chinasoft.com(8.39)配置:
# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf  复制一份corosync的样本配置文件
# vim /etc/corosync/corosync.conf   编辑配置文件修改如下内容

compatibility: whitetank    #这个表示是否兼容0.8之前的版本
totem { #图腾,这是用来定义集群中各节点中是怎么通信的以及参数
version: 2 #图腾的协议版本,它是种协议,协议是有版本的,它是用于各节点互相通信的协议,这是定义版本的
secauth: on #表示安全认证功能是否启用的
threads: 0 #实现认证时的并行线程数,0表示默认配置
interface { # 指定在哪个接口上发心跳信息的,它是个子模块
ringnumber: 0 #环号码,集群中有多个节点,每个节点上有多个网卡,别的节点可以接收,同时我们本机的别一块网卡也可以接收,为了避免这些信息在这样的环状发送,因此要为这个网卡定义一个唯一的环号码,以避免心跳信息环发送。
bindnetaddr: 192.168.8.0 # 绑定的网络地址
mcastaddr: 226.95.1.188 #多播地址,一对多通信
mcastport: 5405 # 多播端口
ttl: 1 # 表示只向外播一次
}
}
logging { # 跟日志相关
fileline: off
to_stderr: no # 表示是否需要发送到错误输出
to_logfile: yes #是不是送给日志文件
to_syslog: no #是不是送给系统日志
logfile: /var/log/cluster/corosync.log #日志文件路径
debug: off #是否启动调试
timestamp: on #日志是否需要记录时间戳
logger_subsys { #日志的子系统
subsys: AMF
debug: off
}
}
amf { # 跟编程接口相关的
mode: disabled
}
service { #定义一个服务来启动pacemaker
ver: 0 #定义版本
name: pacemaker #这个表示启动corosync时会自动启动pacemaker
}
aisexec { #表示启动ais的功能时以哪个用户的身份去运行的
user: root
group: root #其实这个块定义不定义都可以,corosync默认就是以root身份去运行的
}

这里我们改一个随机数池,再把配置好的corosync的配置和认证文件复制到另一个节点上去:

对于corosync而言,我们各节点之间通信时必须要能够实现安全认证的,要用到一个密钥文件:
# corosync-keygen    # 生成密钥文件,用于双机通信互信,会生成一authkey的文件
另外开启一个窗口安装lftp命令,并且通过ftp获取一个较大文件
# yum install -y lftp
# lftp 192.168.8.53 -uadmin,pass
> get bigdata.zip

# corosync-keygen 
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Press keys on your keyboard to generate entropy (bits = 848).
Press keys on your keyboard to generate entropy (bits = 912).
Press keys on your keyboard to generate entropy (bits = 976).
Writing corosync key to /etc/corosync/authkey.

# scp authkey corosync.conf node4.chinasoft.com:/etc/corosync  在配置好的节点上把这两个文件复制给另一个节点上的corosync的配置文件中去

# scp -p authkey corosync.conf node4.chinasoft.com:/etc/corosync
-bash: scp: command not found
# yum install openssh-clients -y

注意:
corosync-keygen命令生成密钥时会用到 /dev/random 
/dev/random是 Linux系统下的随机数生成器,它会从当前系统的内存中一个叫熵池的地址空间中根据系统中断来生成随机数,加密程序或密钥生成程序会用到大量的随机数,就会出现随机数不够用的情况,random 的特性就是一旦熵池中的随机数被取空,会阻塞当前系统进程等待产生中断会继续生成随机数;
由于此处会用到1024位长度的密钥,可能会存在熵池中的随机数不够用的情况,就会一直阻塞在生成密钥的阶段,两种解决办法:
1、手动在键盘上输入大量字符,产生系统中断(产生中断较慢,不建议使用)

2、通过互联网或FTP服务器下载较大的文件(产生中断较快,建议使用)

安装pacemaker
   # ansible corosync -m yum -a "name=pacemaker state=present"
   我们要想使用pacemaker配置的话需要安装一个pacemaker的接口,它的这个程序的接口叫crmshell,它在新版本的pacemaker已经被独立出来了,不再是pacemaker的组成部分了,早期装上pacemaker就会自带有crmshell,因此要想用crmshell的话得去安装crmshell,而安装crmshell又依赖于pssh的相关包,因此得安装这两个组件,(这里的这两个包是自己制件的),哪个节点配置就安装在哪个节点上就可以了,也无需两个节点都安装这两个包:

crmsh-1.2.6-4.el6.x86_64.rpm
pssh-2.3.1-2.el6.x86_64.rpm
# yum -y install crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm

一切都OK了之后就可以启动服务了,两个节点都需要启动:
# service corosync start
# grep TOTEM /var/log/cluster/corosync.log 
Apr 21 20:35:52 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).
Apr 21 20:35:52 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Apr 21 20:35:52 corosync [TOTEM ] The network interface [192.168.8.39] is now up.
Apr 21 20:35:52 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
Apr 21 20:35:52 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
Apr 21 20:36:00 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
Apr 21 20:36:00 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.

# crm status
Last updated: Thu Apr 21 20:38:16 2016
Last change: Thu Apr 21 20:35:31 2016 via crmd on node4.chinasoft.com
Stack: classic openais (with plugin)
Current DC: node2.chinasoft.com - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
0 Resources configured

Online: [ node2.chinasoft.com node4.chinasoft.com ]


在这里crm是一个很复杂的命令,可以在命令行直接输入crm进入crm的命令行模式:# crm
   那在这里,我们如何去配置一个资源呢,虽然它跟heartbeat略有区别,但是概念基本上是一样的,下面我们就来配置一个web资源吧!
   由于我们的corosync默认是启用stonith功能的,但是我们这里没有stonith设备,如果我们直接去配置资源的话,由于没有stonith功能,所以资源的切换并不会完成,所以要禁用stonith功能,但禁用stonoith需要我们去配置集群的全局stonith属性,全局属性是对所有的节点都生效;

# crm configure    #进入crm命令行模式配置资源等
crm(live)configure# property #切换到property目录下,可以用两次tab键进行补全和查看
usage: property [$id=<set_id>] <option>=<value> # property的用法和格式
crm(live)configure# property stonith-enabled=false #禁用stonith-enabled
crm(live)configure# verify #检查设置的属性是否正确
crm(live)configure# commit #检查没问题就可以提交了
crm(live)configure# show #查看当前集群的所有配置信息
node node2.chinasoft.com
node node4.chinasoft.com #两个节点
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \ #DC的版本号
cluster-infrastructure="classic openais (with plugin)" \ #集群的基础架构,使用的是OpenAIS,插件式的
expected-quorum-votes="2" \ #期望节点的票数
stonith-enabled="false" #禁用stonith功能
crm(live)configure#

要注意:如果一个节点挂了,就不拥有法定票数了,那资源是不会切换的
   集群的策略有几种:
   stopped    :停止服务    
   ignore    :忽略,继续运行    
   freeze    :冻结,已经连接的请求继续响应,新的请求不再响应    
   suicide    :自杀,将服务kill掉

这里我们定义一个web资源,那如何去定义一个资源,在定义web资源之前我们先启动测试我们的web服务是否正常,并以它们提供两个不同的页面以示区别:

# ansible corosync -a "service httpd start"
# ansible corosync -a "chkconfig httpd off"

不要让apache随机启动,让pacemaker去管理
# ansible corosync -a "chkconfig --list httpd"
node4.chinasoft.com | success | rc=0 >>
httpd          0:off1:off2:off3:off4:off5:off6:off

node2.chinasoft.com | success | rc=0 >>
httpd          0:off1:off2:off3:off4:off5:off6:off

再进入crm定义我们所需要的资源:

[root@node2 corosync]# crm configure
crm(live)configure# primitive webip ocf:heartbeat:IPaddr params ip=192.168.8.77
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show
node node2.chinasoft.com
node node4.chinasoft.com
primitive webip ocf:heartbeat:IPaddr \
params ip="192.168.8.77"
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2" \
stonith-enabled="false"
crm(live)configure#

定义一个组,把之后定义的资源加到这个组里面去:
   # group weservice webip webserver

crm(live)# configure
crm(live)configure# group webservice webip webserver
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show
node node2.chinasoft.com
node node4.chinasoft.com
primitive webip ocf:heartbeat:IPaddr \
params ip="192.168.8.77"
primitive webserver lsb:httpd
group webservice webip webserver
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2" \
stonith-enabled="false"
crm(live)configure# cd
crm(live)# status
Last updated: Thu Apr 21 20:57:15 2016
Last change: Thu Apr 21 20:56:58 2016 via cibadmin on node2.chinasoft.com
Stack: classic openais (with plugin)
Current DC: node4.chinasoft.com - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
2 Resources configured Online: [ node2.chinasoft.com node4.chinasoft.com ] Resource Group: webservice
webip (ocf::heartbeat:IPaddr):Started node2.chinasoft.com
webserver (lsb:httpd):Started node2.chinasoft.com

好了,我们在页面上测试一下,现在是运行在node2上,我们看看是不是node2上页面的内容,当然,真实的环境中我们的两个web的页面内容都应该是一样的,这里为了以示区别才设置两个不一样的页面内容的:

让node2节点离线:

如果让node2上线它也不会转回的,因为我们没有定义它的倾向性和故障转回,所以node2回来就回来吧,而服务依然运行在node4上;
   crm(live)# node
crm(live)node# online node2.chinasoft.com  让node2重新上线

结束:
   到这里我们算是配置和运行起来了服务了,当然,还需要别的功能我们还可以添加,比如说排列约束,倾向性定义,或者添回别的资源进来都是可以的等等都可以一一添加理来,定义我们所需要的高可用集群

配置的时候需要注意的问题:
1.做corosync实验的两台节点主机最好系统版本一致,最好使用centos6.5,并且使用光盘做yum源

2.通过crm status命令发现每次只能看到自己的节点,没有报错但 # serevice pacemaker start 识别,这个问题是因为开启了防火墙和selinux,关闭防火墙和selinux即可
# setenfroce 0
# service iptables stop

# crm status
Last updated: Thu Apr 21 20:23:13 2016
Last change: Thu Apr 21 20:14:48 2016 via cibadmin on node4.chinasoft.com
Stack: classic openais (with plugin)
Current DC: NONE
1 Nodes configured, 2 expected votes
0 Resources configured

OFFLINE: [ node4.chinasoft.com ]

CentOS 6.5使用Corosync + pacemaker实现httpd服务的高可用的更多相关文章

  1. Centos 7 下 Corosync + Pacemaker + psc + HA-proxy 实现业务高可用

    一.介绍: 1.本博客Corosync + Pacemaker + psc + HA-proxy 实现业务高可用,以httpd 服务实现高可用为例. 2.架构思路 a.三台web 节点,功能:全部安装 ...

  2. corosync+pacemaker and drbd实现mysql高可用集群

    DRBD:Distributed Replicated Block Device 分布式复制块设备,原理图如下 DRBD 有主双架构和双主架构的,当处于主从架构时,这个设备一定只有一个节点是可以读写的 ...

  3. Corosync+pacemaker实现集群的高可用

    一.Corosync和pacemaker的了解: Corosync是集群管理套件的一部分,他在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等.也就是说,corosync是Mess ...

  4. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡【转】

    CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡   一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2 ...

  5. 手动配置三台虚拟机pacemaker+corosync并添加httpd服务

    创建三台虚拟机,实验环境:centos7.1,选择基础设施服务安装. 每台虚拟机两块网卡,第一块为pxe,第二块连通外网,手动为两块网卡配置IP.网关,使它们都能ping通外网并可以互相通过hostn ...

  6. corosync+pacemaker实现httpd高可用

    corosync+pacemaker 官方网址 https://clusterlabs.org/ 一.开源高可用了解 OPEN SOURCE HIGH AVAILABILITY CLUSTER STA ...

  7. CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...

  8. 转载--CentOS 6.3下部署LVS(NAT)+keepalived实现高性能高可用负载均衡

    源地址:http://www.cnblogs.com/mchina/archive/2012/08/27/2644391.html 一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台: ...

  9. VM虚拟机上 实现CentOS 6.X下部署LVS(DR)+keepalived实现高性能高可用负载均衡

    一.简介 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一. ...

随机推荐

  1. 洛谷P2680 运输计划

    大概就是二分+树上差分... 题意:给你树上m条路径,你要把一条边权变为0,使最长的路径最短. 最大的最小,看出二分(事实上我并没有看出来...) 然后二分k,对于所有大于k的边,树上差分求出最长公共 ...

  2. 跟我一起使用electron搭建一个文件浏览器应用吧(四)

    在软件的世界里面,创建一个新项目很容易,但是坚持将他们开发完成并发布却并非易事.分发软件就是一个分水岭, 分水岭的一边是那些完成的被全世界用户在用的软件,而另外一边则是启动了无数项目却没有一个完成的. ...

  3. 反射attr以及模块动态导入

    一.实现自省的四个函数 1.hasattr判断一个对象中有没有一个name字符串对应的方法或属性 class BlackMedium: feture="Ugly" def __in ...

  4. 深入理解 BFC

    W3C 规范中 BFC的定义: 浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不 ...

  5. JS基础:翻转数组

    var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(arr); //操作原数组,让原数组第一位和最后一个位调换位置,以此类推. for (va ...

  6. layui(一)——layDate组件常见用法

    和 layer 一样,我们可以在 layui 中使用 layDate,也可直接使用 layDate 独立版,可按照实际需求来选择.options整理如下: layui.use('laydate', f ...

  7. vue错误记录

    启动时报错如下 D:\QQFile\\FileRecv\industry_vue>cnpm run dev > vue_demo@ dev D:\QQFile\\FileRecv\indu ...

  8. keepalive+nginx 热备跟负载均衡

    结构图 keepalived配置 master跟backup除了state跟优先级,其它一样,优先级master需大于backup ! Configuration File for keepalive ...

  9. JacobMathType

    JACOB是一个 Java到微软的COM接口的桥梁.使用JACOB允许任何JVM访问COM对象,从而使JAVA应用程序能够调用COM对象,;MathType 是由美国Design Science公司开 ...

  10. 01、@ConfigurationProperties 将属性文件里的值映射到JavaBean

    @ConfigurationProperties("person") //或是prefix属性 @Component //必须注册成容器中的bean被容器管理起来 public c ...