高可用集群 corosync 搭建步骤

实验环境:
    OS :    CentOS 6.6
    corosync: corosync-1.4.7-1.el6.x86_64
    pacemaker:pacemaker-1.1.12-4.el6.x86_64
    crmsh:crmsh-2.1-1.6.x86_64.rpm
    pssh:    pssh-2.3.1-2.el6.x86_64.rpm

node1:
        hostname: node2.1inux.com
        IP     :172.16.66.81

node2:    
        hostname: node2.1inux.com
        IP    : 172.16.66.82

一、前期环境配置

为了配置一台Linux主机成为HA的节点,通常需要做出如下的准备工作:

1)所有节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:

172.16.66.81  node1.1inux.com node1
172.16.66.82   node2.1inux.com node2

为了使得重新启动系统后仍能保持如上的主机名称,还分别需要在各节点执行类似如下的命令:

Node1:
# sed -i ‘[email protected]\(HOSTNAME=\).*@\[email protected]‘  /etc/sysconfig/network
# hostname node1.1inux.com
Node2:
# sed -i ‘[email protected]\(HOSTNAME=\).*@\[email protected]‘ /etc/sysconfig/network
# hostname node2.1inux.com

2、设定 node1 、node2基于ssh秘钥的认证的配置

Node1:
[[email protected] ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ‘‘
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
Node2:
[[email protected] ~]# ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ‘‘
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

3、时间同步配置

[[email protected] yum.repos.d]# ntpdate 172.16.0.1 ; ssh node2 ‘ntpdate 172.16.0.1‘
30 May 16:20:20 ntpdate[2351]: adjust time server 172.16.0.1 offset 0.195961 sec
30 May 16:20:21 ntpdate[1994]: step time server 172.16.0.1 offset 1.033553 sec
[[email protected] yum.repos.d]#

验证时间同步:

[[email protected] ~]# date; ssh node1 "date"
Sat May 30 16:51:13 CST 2015
Sat May 30 16:51:13 CST 2015
[[email protected] ~]#

二、安装配置 corosync 、pacemaker
1、安装corosync  pacemaker

在node1 上面安装:
[[email protected] ~]# yum -y install corosync pacemaker
在node2上安装
[[email protected] ~]# yum -y install corosync pacemaker
===========================
查看安装生成的文件
[[email protected] ~]# rpm -ql corosync
/etc/corosync
/etc/corosync/corosync.conf.example        //样例配置文件
/etc/corosync/corosync.conf.example.udpu    //
/etc/corosync/service.d        //服务脚本
/etc/corosync/uidgid.d
/etc/dbus-1/system.d/corosync-signals.conf
/etc/rc.d/init.d/corosync        //服务文件
/etc/rc.d/init.d/corosync-notifyd
/etc/sysconfig/corosync-notifyd
/usr/bin/corosync-blackbox
/usr/libexec/lcrso
...
/usr/sbin/corosync
/usr/sbin/corosync-cfgtool
/usr/sbin/corosync-cpgtool
/usr/sbin/corosync-fplay
/usr/sbin/corosync-keygen
/usr/sbin/corosync-notifyd
/usr/sbin/corosync-objctl
/usr/sbin/corosync-pload
/usr/sbin/corosync-quorumtool
....
/var/lib/corosync
/var/log/cluster
...
===========================

2、配置corosync ,以下操作在在node2 上操作

[[email protected] ~]# cd /etc/corosync/
[[email protected] corosync]# cp corosync.conf.example corosync.conf
[[email protected] corosync]# vim corosync.conf
# Please read the corosync.conf.5 manual page
compatibility: whitetank
totem {
    version: 2
    # secauth: Enable mutual node authentication. If you choose to
    # enable this ("on"), then do remember to create a shared
    # secret with "corosync-keygen".
    secauth: on        //开启安全认证 
    threads: 0        //线程数 0 表示不基于线程模式工作而是进程
    # interface: define at least one interface to communicate
    # over. If you define more than one interface stanza, you must
    # also set rrp_mode.
    interface {
                # Rings must be consecutively numbered, starting at 0.
        ringnumber: 0        //环数目   一般保持为0
        # This is normally the *network* address of the
        # interface to bind to. This ensures that you can use
        # identical instances of this configuration file
        # across all your cluster nodes, without having to
        # modify this option.
        bindnetaddr: 172.16.0.0        //网络地址     更改为主机所在网络的网络地址
        # However, if you have multiple physical network
        # interfaces configured for the same subnet, then the
        # network address alone is not sufficient to identify
        # the interface Corosync should bind to. In that case,
        # configure the *host* address of the interface
        # instead:
        # bindnetaddr: 192.168.1.1
        # When selecting a multicast address, consider RFC
        # 2365 (which, among other things, specifies that
        # 239.255.x.x addresses are left to the discretion of
        # the network administrator). Do not reuse multicast
        # addresses across multiple Corosync clusters sharing
        # the same network.
        mcastaddr: 239.235.88.8        //多播地址  
        # Corosync uses the port you specify here for UDP
        # messaging, and also the immediately preceding
        # port. Thus if you set this to 5405, Corosync sends
        # messages over UDP ports 5405 and 5404.
        mcastport: 5405        //多播地址监听端口
        # Time-to-live for cluster communication packets. The
        # number of hops (routers) that this ring will allow
        # itself to pass. Note that multicast routing must be
        # specifically enabled on most network routers.
        ttl: 1
    }
}
logging {
    # Log the source file and line where messages are being
    # generated. When in doubt, leave off. Potentially useful for
    # debugging.
    fileline: off
    # Log to standard error. When in doubt, set to no. Useful when
    # running in the foreground (when invoking "corosync -f")
    to_stderr: no
    # Log to a log file. When set to "no", the "logfile" option
    # must not be set.
    to_logfile: yes        //是否记录日志 
    logfile: /var/log/cluster/corosync.log        //日志文件保存位置
    # Log to the system log daemon. When in doubt, set to yes.
    to_syslog: no        //是否记录系统日志  一般只记录一份  设置为NO 
    # Log debug messages (very verbose). When in doubt, leave off.
    debug: off
    # Log messages with time stamps. When in doubt, set to on
    # (unless you are only logging to syslog, where double
    # timestamps can be annoying).
    timestamp: on         //是否开启时间戳功能
    logger_subsys {
        subsys: AMF
        debug: off
    }
}
//添加如下行 使pacemaker 以corosync插件方式运行    
service {
  ver:  0
  name: pacemaker
  use_mgmtd: yes
   }
  
aisexec {
  user: root
  group:  root
      }
=======================================

生成corosync的密钥文件
查看 # corosync-keygen使用方法:
corosync-keygen是从/dev/random中读取随机数,如果此熵池中随机数过少,可能导致无法生成密钥,但可以通过下载软件或其他方案来产生大量I/O从而增加熵池中的随机数,编译生成密钥

[[email protected] ~]# corosync-keygen
.....
Press keys on your keyboard to generate entropy (bits = 896).
Press keys on your keyboard to generate entropy (bits = 960).
Writing corosync key to /etc/corosync/authkey.   //生成的密钥文件保存的位置

3、查看网卡是否开启了组播MULTICAST功能如果没有开启,要手动开启

[[email protected] corosync]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:3d:a9:a1 brd ff:ff:ff:ff:ff:ff
[[email protected] corosync]#

4、将corosync.conf 和authkey复制到node1中

[[email protected] corosync]# scp authkey corosync.conf node1:/etc/corosync/
authkey                                                                                                    100%  128     0.1KB/s   00:00    
corosync.conf                                                                                              100% 2773     2.7KB/s   00:00    
[[email protected] corosync]#

三、安装crmsh
RHEL自6.4起不再提供集群的命令行配置工具crmsh,转而使用pcs;所以如果想使用crmsh可以自行安装:

分别在node1和node2 上安装crmsh和pssh

[[email protected] ~]# ls
anaconda-ks.cfg  crmsh-2.1-1.6.x86_64.rpm  install.log  install.log.syslog  pssh-2.3.1-2.el6.x86_64.rpm
[[email protected] ~]#  yum --nogpgcheck localinstall crmsh-2.1-1.6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm

将此两个安装文件复制到node1上进行安装

[[email protected] ~]# scp crmsh-2.1-1.6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm node1:/root/
[[email protected] ~]#  yum --nogpgcheck localinstall crmsh-2.1-1.6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm

查看安装crmsh生成的文件

----------------------
[[email protected] ~]# rpm -ql crmsh
/etc/bash_completion.d/crm.sh
/etc/crm
/etc/crm/crm.conf
....
/usr/sbin/crm
/usr/share/crmsh
...
/var/cache/crm
---------------------------

查看pssh生成的文件

[[email protected] ~]# rpm -ql pssh
/usr/bin/pnuke
/usr/bin/prsync
/usr/bin/pscp.pssh
/usr/bin/pslurp
/usr/bin/pssh
.....
.....
/usr/libexec/pssh
/usr/libexec/pssh/pssh-askpass
.....
[[email protected] ~]#

四、验证:

1、启动 corosync

[[email protected] ~]# service corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]
[[email protected] ~]#

2、验证端口:

[[email protected] log]# ss -tunl | grep :5405
udp    UNCONN     0      0           172.16.66.82:5405                  *:*     
udp    UNCONN     0      0            239.235.1.8:5405                  *:*     
[[email protected] log]#

3、查看corosync引擎是否正常启动:

# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log

如图 3

4、查看初始化成员节点通知是否正常发出:
如图4


5、检查启动过程中是否有错误产生。下面的错误信息表示packmaker不久之后将不再作为corosync的插件运行,因此,建议使用cman作为集群基础架构服务;此处可安全忽略。
图5


6、查看pacemaker是否正常启动,图6

如果上面命令执行均没有问题,接着可以执行如下命令启动node2上的corosync
[[email protected] ~]# ssh node2 -- /etc/init.d/corosync start

注意:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动。

使用crmsh命令查看集群节点的启动状态
图7

五、配置集群的工作属性

1、corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用,这可以通过如下命令验正:

禁用后查看

# crm configure property stonith-enabled=false
图9


2、使用crmsh命令查看当前的配置信息
图10


[[email protected] ~]# crm configure show
node node1.1inux.com
node node2.1inux.com
property cib-bootstrap-options: \
    dc-version=1.1.11-97629de \
    cluster-infrastructure="classic openais (with plugin)" \
    expected-quorum-votes=2 \
    stonith-enabled=false   //stonith  已被禁用
[[email protected] ~]#

也可以进入crm命令模式关闭 图13


将no-quorum-policy 设置为ignore

crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# show
node node1.1inux.com     attributes standby=off
node node2.1inux.com     attributes standby=off
property cib-bootstrap-options:     dc-version=1.1.11-97629de     cluster-infrastructure="classic openais (with plugin)"     expected-quorum-votes=2     stonith-enabled=false \

no-quorum-policy=ignore

3、为集群添加集群资源

corosync支持heartbeat,LSB和ocf等类型的资源代理,目前较为常用的类型为LSB和OCF两类,stonith类专为配置stonith设备而用;

可以通过如下命令查看当前集群系统所支持的类型:
[[email protected] ~]# crm ra classes


如果想要查看某种类别下的所用资源代理的列表,可以使用类似如下命令实现:

# crm ra list lsb
# crm ra list ocf heartbeat
# crm ra list ocf pacemaker
# crm ra list stonith

# crm ra info [class:[provider:]]resource_agent
例如:
# crm ra info ocf:heartbeat:IPaddr
图12

六、配置高可用的Web集群
1、为web集群创建一个IP地址资源,以在通过集群提供web服务时使用

crm(live)configure# primitive webip ocf:heartbeat:IPaddr params ip=172.16.66.100 nic=eth0 cidr_netmask=16 op monitor interval=10 timeout=20s
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure#

然后查看node1 ip 信息如图18  ,看以看到66.100 已经在node1上生效

进入crm 命令行  下线node1  操作
crm(live)node# standby

然后查看node节点状态信息
图15

图15 可以看到node1 已经下线 现在在线的是node2

查看node2  IP 图19  

OK   IP配置完成,接下来我们配置httpd

2、高可用集群Web的配置

使用yum源分别在node1、node2 安装httpd
分别启动node1、node2上的httpd,并为其创建相应的主页

node1:
[[email protected] ~]# service httpd start
Starting httpd:                                            [  OK  ]
[[email protected] ~]# echo "<h1>node1.1inux.com</h1>" > /var/www/html/index.html
[[email protected] ~]# curl 172.16.66.81
<h1>node1.1inux.com</h1>
[[email protected] ~]# chkconfig httpd off
[[email protected] ~]# service httpd stop
node2:
[[email protected] ~]# service httpd start
Starting httpd:                                            [  OK  ]
[[email protected] ~]# echo "<h1>node2.1inux.com</h1>" > /var/www/html/index.html
[[email protected] ~]# curl 172.16.66.82
<h1>node2.1inux.com</h1>
[[email protected] ~]# service httpd stop
[[email protected] ~]# chkconfig httpd off

然后再node1 上配置如下

configure # primitive webserver lsb:httpd  op monitor interval=10 timeout=20s
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# group ip_web webip webserver            //创建组 
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show
node node1.1inux.com     attributes standby=off
node node2.1inux.com     attributes standby=off
primitive webip IPaddr     params ip=172.16.66.100 nic=eth0 cidr_netmask=16     op monitor interval=10 timeout=20s
primitive webserver lsb:httpd     op monitor interval=10 timeout=20s
group ip_web webip webserver
property cib-bootstrap-options:     dc-version=1.1.11-97629de     cluster-infrastructure="classic openais (with plugin)"     expected-quorum-votes=2     stonith-enabled=false     no-quorum-policy=ignore
crm(live)configure# cd ..
crm(live)# status
Last updated: Sun May 31 00:27:05 2015
Last change: Sun May 31 00:24:37 2015
Stack: classic openais (with plugin)
Current DC: node2.1inux.com - partition with quorum
Version: 1.1.11-97629de
2 Nodes configured, 2 expected votes
2 Resources configured
Online: [ node1.1inux.com node2.1inux.com ]
 Resource Group: ip_web
     webip    (ocf::heartbeat:IPaddr):    Started node1.1inux.com 
     webserver    (lsb:httpd):    Started node1.1inux.com            //就可以看到此时 webip   webserver  都在node1上面了 
crm(live)#

然后我们访问http://172.16.66.100,如图20 ,显示的是node1页面

然后我们在node1上运行如下命令,然后再访问 http://172.16.66.100
[[email protected]1 ~]# service corosync stop
Signaling Corosync Cluster Engine (corosync) to terminate: [  OK  ]
Waiting for corosync services to unload:.                  [  OK  ]
[[email protected] ~]#


此时访问的页面已经变成了node2
OK  基于heartbeat,crmsh的高可用集群已经搭建完毕

时间: 2024-10-09 14:26:31

高可用集群 corosync 搭建步骤的相关文章

Hadoop2.2.0-HA高可用集群环境搭建

Hadoop2.2.0-HA高可用集群环境搭建 集群主机信息 主机名称 主机ip 配置 主要功能 master1 硬盘300G,内存32G,CPU8核 管理主节点 master2 硬盘300G,内存32G,CPU8核 管理备份节点 slave1 硬盘300G,内存8G,CPU4核 数据节点 slave2 硬盘300G,内存8G,CPU4核 数据节点 slave3 硬盘300G,内存8G,CPU4核 数据节点 slave4 硬盘500G,内存4G,CPU2核 mysql数据库 本次集群使用6台物理

Kubernetes1.10HA高可用集群环境搭建

k8s 高可用2个核心 apiserver master 和 etcd etcd:(需高可用)集群的数据中心,用于存放集群的配置以及状态信息,非常重要,如果数据丢失那么集群将无法恢复:因此高可用集群部署首先就是etcd是高可用集群: Apiserver:提供了资源操作的唯一入口,并提供认证.授权.访问控制.API注册和发现等机制.整个集群中其他角色只有通过Apiserver才能访问etcd.CLI工具kubectl也是通过apiserver来对整体集群进行访问控制. Controller-man

高可用集群corosync+pacemaker+drbd+httpd----手动配置篇

共享存储高可用方案 -----DRBD Drbd  :Distributed Replicated Block Device 高可用集群中的文件共享方案之一 共享存储的常见实现方式 DAS:直接附加存储 Direct attached storage:通过专用线缆直接连接至主板存储控制器接口的设备成为直接附加存储.,如外置的raid阵列 并行口: IDE  SCSI 两种接口的区别: ide接口的存取过程: 首先将从文件的读取说起;当用户空间进程要读写文件时首先向内核发起系统调用,然后进程有用户

企业部分之-HA高可用集群的搭建

高可用念集群的概: 高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务.高可用集群是用于单个节点发生故障时,能够自动将资源.服务进行切换,这样可以保证服务一直在线.在这个过程中,对于客户端来说是透明的. 实验环境:需要三台纯净的虚拟机   iptables关闭  selinux为disabled server1:172.25.45.1   #ricci节点主机 server2:1

conga下HA高可用集群的搭建(redhat6.5)

实验环境 redhat6.5虚拟机三台,各1G内存,时间同步 server1  172.25.44.1 server2  172.25.44.2 server3  172.25.44.3 火墙和selinux均处于关闭状态 编辑/etc/hosts文件,加入解析 不支持在集群节点中使用 NetworkManager.如果已经在集群节点中安装了 NetworkManager,应该删除或者禁用该程序. server1  server2 ricci节点 (1).yum源配置 vim /etc/yum.

Eureka高可用集群环境搭建

注册中心集群 在微服务中,注册中心非常核心,可以实现服务治理,如果一旦注册出现故障的时候,可能会导致整个微服务无法访问,在这时候就需要对注册中心实现高可用集群模式. Eureka集群相当简单:相互注册 Eureka高可用实际上将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组相互注册的服务注册中心,从而实现服务清单的互相同步,达到高可用效果. 集群的服务名称要统一,要相同! 启动时候 报错 正常! 启动时候互相注册  不会同时启动成功的 启动类都是一样的 package com.too

Flume 学习笔记之 Flume NG高可用集群搭建

Flume NG高可用集群搭建: 架构总图: 架构分配: 角色 Host 端口 agent1 hadoop3 52020 collector1 hadoop1 52020 collector2 hadoop2 52020 agent1配置(flume-client.conf): #agent1 name agent1.channels = c1 agent1.sources = r1 agent1.sinks = k1 k2 #set gruop agent1.sinkgroups = g1 #

搭建 RabbitMQ Server 高可用集群

阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 因为公司测试服务器暂不能用,只能在自己电脑上重新搭建一下 RabbitMQ Server 高可用集群,正好把这个过程记录下来,以便日后查看. 公司测试服务器上的 RabbitMQ 集群,我搭建的是三台服务器,因为自己电脑空间有限,这边只能搭建两台服务器用作高可用集群,用的是 Vagrant 虚拟机

基于drbd的mariaDB 的高可用集群

Distributed Replicated Block Device(DRBD)是一个用软件实现的.无共享的.服务器之间镜像块设备内容的存储复制解决方案. 数据镜像:实时.透明.同步(所有服务器都成功后返回).异步(本地服务器成功后返回) DRBD的核心功能通过Linux的内核实现,最接近系统的IO栈,但它不能神奇地添加上层的功能比如检测到EXT3文件系统的崩溃. 在DRBD中,资源是特指某复制的存储设备的所有方面.包括资源名称.DRBD设备(/dev/drbdm,这里m是设备最小号,最大号可