一、Corosync和pacemaker的了解:

Corosync是集群管理套件的一部分,他在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等。也就是说,corosync是Messaging Layer集群信息层软件,需要pacemaker资源管理器,才能构成一个完整的高可用集群。它也是运行于心跳层的开源软件。(是集群框架引擎程序)

 Pacemaker也就是Cluster Resource Manager(简称CRM),,是一个集群资源管理器。它利用群集基础构建(corosync或heartbeat)提供的消息和成员管理能力来探测并从节点或资源级别的故障中恢复,以实现群集服务的最大可用性。

Pacemaker和corosync,前者用于资源的转移,后者用于心跳的检测。结合起来使用,实现对高可用架构的自动管理。心跳检测使用来检测服务器是否还在提供服务,若出现服务器异常,就认为它挂掉了,此时pacemaker将会对资源进行转移。

Crmsh是pacemaker的命令行工具。

二、高可用集群的配置(实现环境:关闭selinux和火墙)

主要实现的是,在server1和server4上安装corosync和pacemaker,当一个节点服务器出问题,则另一个节点服务器进行服务。

1)在server1和server4中安装pacemaker和corosync

--->  yum  install pacemaker  corosync  -y

2)在server1中配置corosync的配置文件,完成后复制到server4中

--->  cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf

         --->  vim  /etc/corosync/corosync.conf          #修改内容如下

  # Please read the corosync.conf.5 manual page 

  compatibility: whitetank

totem {
          version: 2          # 表示配置文件的版本
          secauth: off        # 表示集群认证关闭
          threads: 0          # 并发开启的线程数
          interface {         # 接口信息
                  ringnumber: 0
                  bindnetaddr: 172.25.2.0              # 集群工作的网段
                  mcastaddr: 226.94.1.1                # 多播地址
                  mcastport: 5405                      # 多播端口号(注意,在多个人使用时,修改自己的端口号或多播地址,防止结点添加在自己的集群中)
                  ttl: 1
          }
  }
  logging {       # 配置日志存储部分
          fileline: off
          to_stderr: no
          to_logfile: yes
          to_syslog: yes
          logfile: /var/log/cluster/corosync.log
          debug: off

          timestamp: on
          logger_subsys {
                  subsys: AMF
                  debug: off
          }
  }

amf {
          mode: disabled
  }
  service {       # 启动corosync之后启动pacemaker;若var为1的时候,需要手动启动pacemaker
          name: pacemaker
          ver: 0 
  }

   --->  scp  /etc/corosync/corosync.conf  server4:/etc/corosync/corosync.conf

   3)在server1和server4中安装crm软件(软件包需要在网上下载)

   --->  yum  install   -y  crmsh-1.2.6.0.rc2.2.1.x86_64.rpm  pssh-2.3.1-4.1.x86_64.rpm

     4)开启服务 (server1和server4均需要启动)   

   --->  /etc/init.d/corosync  start     # 当corosync启动后,pacemaker也会启动

   5)检测crm(出现结点1和结点4,代表结点添加成功)

   6)两个节点均crm_verify -VL 校验(会出现如下提示信息)

   --->  crm_verify  -LV      

   # 出现错误时,我们可以设置STONITH的值,消除错误(Stonith 即shoot the other node in the head使Heartbeat软件包的一部分, 该组件允许系统自动地复位一个失败的服务器使用连接到一个健康的服务器的遥远电源设备。 Stonith设备是一种能够自动关闭电源来响应软件命令的设备 )

   7)我们在server4中添加策略(ip和apache),在server1中进行监控

   # 首先添加vip (完成之后,可以在server1的监控中看到)

   # 添加参数,当结点server1坏掉的时候,server4会自动接管(也相当于忽略结点的检测)

   在server1中执行 /etc/init.d/corosync  stop后,在server4中监控结果为:

   # 添加spache服务在集群中(警告:默认时间和自己设置的监控时间不同,忽略,它会以默认时间为准);但此时cpahce和vip不在同一主机上,需建立资源组,把vip和apache服务添加进去;(注意,添加进去的服务不需要手动启动,pacamaker会帮我们启动)

   此时,server4中监控的情况为

   7)此时,apache的高可用已经配置完成,我们可以进行测试。当运行的节点有问题时,会http会自动切换到另一个节点上。

   # 修改node1为standy(停止节点node1),此时浏览器中显示的server4

三、含fence设备的高可用实现

   在server1和server4中查看,是否有key文件。

   1)在真机中安装软件

   --->  yum  search  fence-cirtd        #查找相关软件

   --->  yum  install -y yum install  -y fence-virtd-libvirt.x86_64  fence-virtd-multicast.x86_64 fence-virtd.x86_64

   --->  mkdir  /etc/cluster             # 创建密码生成目录

   --->  cd  /etc/cluster 

   --->  fence_virtd  -c                 # 生成配置文件       
  Module search path [/usr/lib64/fence-virt]: 回车

Available backends:
      libvirt 0.1
  Available listeners:
      multicast 1.2
 
  Listener modules are responsible for accepting requests
  from fencing clients.

Listener module [multicast]: 回车(默认为多播)

The multicast listener module is designed for use environments
  where the guests and hosts may communicate over a network using
  multicast.

The multicast address is the address that a client will use to
  send fencing requests to fence_virtd.
 
  Multicast IP Address [225.0.0.12]: 回车(多播ip)

Using ipv4 as family.

Multicast IP Port [1229]: 回车(多播接口)

Setting a preferred interface causes fence_virtd to listen only
  on that interface.  Normally, it listens on all interfaces.
  In environments where the virtual machines are using the host
  machine as a gateway, this *must* be set (typically to virbr0).
  Set to 'none' for no interface.

Interface [br0]: 回车(此处为自己真机的ip设备名称)

The key file is the shared key information which is used to
  authenticate fencing requests.  The contents of this file must
  be distributed to each physical host and virtual machine within
  a cluster.

Key File [/etc/cluster/fence_xvm.key]: 回车(密钥位置,没有目录自己建立)

Backend modules are responsible for routing requests to
  the appropriate hypervisor or management layer.

Backend module [libvirt]:

Configuration complete.

=== Begin Configuration ===
  fence_virtd {
      listener = "multicast";
      backend = "libvirt";
      module_path = "/usr/lib64/fence-virt";
  }

listeners {
      multicast {
          key_file = "/etc/cluster/fence_xvm.key";
          address = "225.0.0.12";
          interface = "br0";
          family = "ipv4";
          port = "1229";
      }

}

backends {
      libvirt {
          uri = "qemu:///system";
      }
  }

=== End Configuration ===
  Replace /etc/fence_virt.conf with the above [y/N]? y(对配置进行覆盖保存)

   ---> dd  if=/dev/urandom  of=fence_xvm.key  bs=128  count=1         # 随机截取密码文件的大小

   --->  systemctl  start fence-virtd.service                          # 启动服务(要关闭火墙)

   2)将真机中生成的密钥发送给server1和server4

   --->  scp  /etc/cluster/fence_xvm.key  server1:/etc/cluster         # 若在server1或4中没有cluster目录。创建即可

   --->  scp  /etc/cluster/fence_xvm.key  server4:/etc/cluster 

   3)在server1和server4中执行stonith_admin  -l,查看是否有fence代理:fence_xvm。如果没有我们需要安装fence-virt-0.2.3-15.el6.x86_64,  

   --->  yum install  fence-virt-0.2.3-15.el6.x86_64   -y  

   4)在corosync的策略中添加fence(当节点有问题时,可以自启动) 

   crm(live)configure# primitive vmfence stonith:fence_xvm  params pamk_host_map="server1:vm1;server4:vm4"  op  monitor interval=1min

   4)在另一端监控情况如下:

   5)测试,此时当我们对虚拟机server4使用命令--->  echo c> /proc/sysrq-trigger 的时候,它会自动重启,并添加在可用节点里面。

   注意:当添加vmfence时,出现 vmfence_start_0 on server1 'unknown error' (1)错误的时候,我们可以进行如下操作:(对之前的数据进行清除)

Corosync+pacemaker实现集群的高可用的更多相关文章

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

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

  2. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  3. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  4. 15套java架构师、集群、高可用、高可扩 展、高性能、高并发、性能优化Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩 展 ...

  5. hadoop 集群HA高可用搭建以及问题解决方案

    hadoop 集群HA高可用搭建 目录大纲 1. hadoop HA原理 2. hadoop HA特点 3. Zookeeper 配置 4. 安装Hadoop集群 5. Hadoop HA配置 搭建环 ...

  6. Rabbitmq安装、集群与高可用配置

    历史: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多 ...

  7. Nginx+Zuul集群实现高可用网关

    代码参考:https://github.com/HCJ-shadow/Zuul-Gateway-Cluster-Nginx Zuul的路由转发功能 前期准备 搭建Eureka服务注册中心 服务提供者m ...

  8. 11.Redis 哨兵集群实现高可用

    作者:中华石杉 Redis 哨兵集群实现高可用 哨兵的介绍 sentinel,中文名是哨兵.哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能: 集群监控:负责监控 redis mast ...

  9. Quartz学习笔记:集群部署&高可用

    Quartz学习笔记:集群部署&高可用 集群部署 一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点.这就意味着你必须对每个节点分别启动或停止.Quartz集群 ...

随机推荐

  1. Web安全学习笔记之Openvas配置,使用,报告

    OpenVAS(开放式漏洞评估系统)是一个客户端/服务器架构,它常用来评估目标主机上的漏洞.OpenVAS是Nessus项目的一个分支,它提供的产品是完全地免费.OpenVAS默认安装在标准的Kali ...

  2. CSS 图片

    CSS 图片 一.圆角图片 img { border-radius: 8px; } 二.缩略图 border 属性来创建缩略图. img { border: 1px solid #ddd; borde ...

  3. 20145322《Java程序设计》第2次实验报告

    20145322<Java程序设计>第2次实验报告 实验步骤与内容 一.实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4. ...

  4. .net 数据缓存(二)之Redis部署

    现在的业务系统越来复杂,大型门户网站内容越来越多,数据库的数据量也越来愈大,所以有了“大数据”这一概念的出现.但是我们都知道当数据库的数据量和访问过于频繁都会影响系统整体性能体验,特别是并发量高的系统 ...

  5. minSdk(API 21) > deviceSdk(API 17)解决

    运行一个开源的项目出现“minSdk(API 21) > deviceSdk(API 17)”的提示,因为我用的是手机是sdk(API17)的,而项目要求是最低版本是minSdk(API 21) ...

  6. java代码实现JVM栈溢出,堆溢出

    参考博客:http://www.cnblogs.com/tv151579/p/3647238.html 背景知识: 栈存放什么:栈存储运行时声明的变量——对象引用(或基础类型, primitive)内 ...

  7. Markdown锚点使用

    为了使得博客看起来更加美观,我更倾向于使用索引,但是如何在Markdown使用索引跳到指定位置呢?以下是使用方法: 具体应用场景: (1)文献列表中链接--可以通过锚实现页面内的链接:引用文献中可能需 ...

  8. MySQL行锁、间隙锁、Next-Key锁

    InnoDB是一个支持行锁的存储引擎,它有三种行锁的算法: Record Lock:行锁,单个行记录上的锁. Gap Lock:间隙锁,锁定一个范围,但不包括记录本身.GAP锁的目的,是为了防止幻读. ...

  9. 理解JAVA MQ消息中间件

    MQ的几种消息传递方式 发布订阅模式 发布订阅模式有点类似于我们日常生活中订阅报纸.每年到年尾的时候,邮局就会发一本报纸集合让我们来选择订阅哪一个.在这个表里头列了所有出版发行的报纸,那么对于我们每一 ...

  10. Codeforces Round #412

    第一题水题,8分钟1a #include<map> #include<set> #include<cmath> #include<queue> #inc ...