OpenStack-corosync-pacemaker高可用运维手册-HA_第1页
OpenStack-corosync-pacemaker高可用运维手册-HA_第2页
OpenStack-corosync-pacemaker高可用运维手册-HA_第3页
OpenStack-corosync-pacemaker高可用运维手册-HA_第4页
OpenStack-corosync-pacemaker高可用运维手册-HA_第5页
已阅读5页,还剩46页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录

文档介绍2

在节点访问shell2

上传公用密钥2

SSH到Fuel主节点3

SSH到目标节点3

LinuxTIA高可用集群介绍3

概念介绍3

相关术语3

集群套件4

开源实现5

本篇重点6

修改内核参数8

使用DRBD设备同步镜像9

DRBD设备原理9

部署DRBD内核模块10

创建/管理DRBD设备12

高可用切换实现13

使用Corosync实现通讯14

消息层原理14

部署Corosync15

验证消息传递16

使用Pacemaker管理资源18

概念介绍18

内部架构18

部署Pacemaker18

相关命令介绍:19

使用Haproxy代理资源21

内部架构21

部署haproxy21

详细配置22

mysqlGalera模式23

Openstack中Mysql案例应用24

Rabbitmq集群25

Mysql攻略25

HAProxy管理25

默认情况下说明25

Openstack中Rabbimq案例应用37

基本介绍5/

备份和恢用Fuel本节点41

运行备份41

后端数据库的性能42

Corosync/Pacemaker42

.重启服务47

常规测试场景47

失效切换测试场景50

文档介绍

此文档用手描述openstack中数据库MySQL的高可用搭建部署和rabbitmqcluster的集群部署处理工

作,主要涉及到组件包括drbd、corosync、pacemakerrabbitmq环境的基本实践描述。灵感来自内

心。

•OpenStack管理员手册

•OpenStack云管理手册

•深度实践KVM

.高性能Linux服务器建设

在节点访问shell

有很多的维护和高级配置任务需要用户shell级别的访问Fuel主控制器节点和目标节点,所有的这些系

统均运行着bashshell和支持标准的Linux系统命令,每个系统都拥有用户可以直接访问的终端,但

是,实际标准的使用是使用SSH登录到不同节点的终端上。

上传公用密钥

用户使用SSI1来访问Fuel主控制器节点和目标节点的shell,还必须使用SS1I定义一个公钥。

1.在用户的客户端上使用下面的命令生成一个公钥:

ssh-keygen-trsa

2.将此公钥在Fuel界面中填如:ref:么,的“泌区域,Fuel将会在部署每个目标节点时

上传此公钥,但是它不会上传到已经部署完成的节点中。

3.手动上传SSH公钥到Fuel主控制器节点或已经部署的节点,使用下面命令:

4.ssh-agent

ssh-copy-id-i.ssh/id_rsa.pubroot@<ip-addr>

<ip-addf>是Fuel主控制器节点的IP地址,它和用户登录到Fuel终端的1P地址是一样的。

用户可以使用同样的命令为己经部署的目标节点添加公钥,谐参若::ssh-toTarget-nodes-

ops,更多关于获取目标节点〈功为4切->值的信息。

用户可以自行在节点的文件/root/.ssh/authorized_keys-中添加自己的公钥内容(它存放在文

件''.ssh/id_rsa.pub''中)。

SSH到Fuel主节点

用户现在可以使用合ssh**来访问Fuel主控制器节点的终端了,也可以使用竺scp**来安全的复制文件

到Fuel主控制器节点了。

Sshroot@fuel_ip

默认用户名和密码为root/r001me

SSH到目标节点

使用命令**fuelnode1ist**获取类似下面的列表:

用户使用IP地址可以ssh到任何节点,例如,ssh到Cinder节点:

ssh10.110.0.4

用户也可以使用第一列列出的"id〃,例如:

sshnode-6

Linux-HA高可用集群介绍

概念介绍

介绍Linux-HA之前,首先我们来了解一下RHCS框架。RHCS即REDHATClusterSuite,中文意思即

红帽集群套件。群集一般可以分为科学集群,负载均衡集群,高可用性集群三大类。

高可用性集群,当集群中优一个系统发生故障时,集群软件迅速作出反应,将该系统的任务分配至

集群中其它正在工作的系统上执行,通过消除单一故障点和节点故障转移功能来提供高可用性,次节点

通常是主节点的镜像。

Linux-HA的全称是High-AvailabilityLinux,这是一个开源项目,主要意旨是:通过开发者的共

同努力,提供一个增强linux可靠性(reliability)、可用性(availability)和可服务性

(serviceability)(RAS)的群集解决方案。

相关术语

1.节点(node)

高可用集群,英文原文为HighAvailabilityCluster,简称HACluster,简单的说,集群

(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统就

是集群的节点(node)0而备用节点一般处于监控状态。

2.资源(resource)

资源是•个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管,

heartbeat中,可以当做资源的实体有:

磁盘分区、文件系统

IP地址

应用程序服务

NFS文件系统

3.事件(event)

也就是集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等。

这些事件都会导致节点的资源发生转移,HA的测试也是基于这些事件来进行的。

4.动作(action)

事件发生时HA的响应方式,动作是由shell脚步控制的,例如,当某个节点发生故障后,备份节

点将通过事先设定好的执行脚本进行服务的关闭或启动。进而接管故障节点的资源。

集群套件

1、集群管理器(CMAN)

ClusterManager,简称CMAN,是一个分布式集群管理工具,它运行在集群的各个节点上,为RHCS

提供集群管理任务。

CVAN用于管理集群成员、消息和通知。它通过监控每个节点的运行状态来了解节点成员之间的关

系,当集群中某个节点出现故障,节点成员关系将发生改变,CMAN及时将这种改变通知底层,进而做出

相应的调整。

2、锁管理(DLM)

DistributedLockManager,简称DLM,表示一个分布式锁管理器,它是RHCS的一个底层基础构

件,同时也为集群提供了一个公用的锁运行机制,在RHCS集群系统中,DLM运行在集群的每个节点上,

GFS通过锁管理器的锁机制来同步访问文件系统元数据。CLVM通过锁管理器来同步更新数据到LVM卷和

卷组。

DLV不需要设定锁管理服务器,它采用对等的锁管理方式,大大的提高了处理性能。同时,DLM避

免了当单个节点失败需要整体恢第的性能瓶颈,另外,DLM的请求都是本地的,不需要网络请求,因而

请求会立即生效。最后,DLM通过分层机制,可以实现多个锁空间的并行锁模式。

3、配置文件管理(CCS)

ClusterConfigurationSystem,简称CCS,主要用于集聚配置文件管理和配置文件在节点之间的

同步。CCS运行在集群的每个节点上,监控每个集群节点上的单•配置文件/etc/cluster/cluster.conf

的状态,当这个文件发生任何变化时,都将此变化更新到集群中的每个节点,时刻保持每个节点的配置

文件同步。

RHCS的配置文件是cluster.conf,它是一个xml文件,具体包含集群名称、集群节点信息、集群

资源和服务信息,fence设备等,cman的默认配置.

4、栅设备管理(FENCE)

FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情

况而造成的“脑裂”现象,Fence设备主要就是通过服务器或存储本身的硬件管理接口,或者外部电源

管理设备,来对服务器或存储直接发出硬件管理指令,将服务器重启或关机,或者与网络断开连接。

FENCE的工作原理是:当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通

过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,任机在接

到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进

行了释放,保讦了资源和服务始终运行在一个节点卜.

5、资源管理器

高可用管理主要用来监督、启动和停止集群的应用、服务和资源。它提供了•种对集群服务的管理

能力,当一个节点的服务失败时,高可用性集群服务管理进程可以将服务从这个失败节点转移到其它健

康节点上来,并且这种服务转移能力是自动、透明的。

RHCS通过RGmanager来管理集群服务,RGmanager运行在每个集群节点上,在服务器上对应的进程

为clurgmgrd。管理着集群服务和集群资源两个方面,集群服务其实就是应用服务,例如apache、mysql

等,集群资源有很多种,例如一个IP地址、一个运行脚本、ext3/GFS文件系统等。

6、配置管理工具

RHCS提供了多种集群配置和管理工具,常用的有基于GUI的system-config-cluster、Conga等,

也提供了基于命令行的管理工具。

system-config-cluster是一个用于创建集群和配置集群节点的图形化管理工具,它有集群节点配

置和集群管理两个部分组成,分别用于创建集群节点配置文件和维护节点运行状态。一般用在RHCS早期

的版本中。

RHCS也提供了一些功能强大的集群命令行管理工具,常用的有c也stat、cmantookccstook

fence_toolclusvcadm等,这些命令的用法将在下面讲述。

7、RedhatGFS

GFS是RHCS为集群系统提供的一个存储解决方案,它允许集群多个节点在块级别上共享存储,每个

节点通过共享一个存储空间,俣证了访问数据的•致性,更切实的说,GFS是RHCS提供的•个集群文件

系统,多个节点同时挂载一个文件系统分区,而文件系统数据不受破坏,这是单一的文件系统,例如

EXT3、EXT2所不能做到的。

为了实现多个节点对于一个文件系统同时读写操作,GFS使用锁管理器来管理I/O操作,当一个写

进程操作一个文件时,这个文件就被锁定,此时不允许其它进程进行读写操作,直到这个写进程正常完

成才释放锁,只有当锁被释放后,其它读写进程才能对这个文件进行操作,另外,当一个节点在GFS文

件系统上修改数据后,这种修改操作会通过RHCS底层通信机制立即在其它节点上可见。

开源实现

在RHCS集群套件定义下,各大开源社区纷纷实现了自己的集群管理软件,其中影响最广泛的开源项

目就是Linux-HA了。官网地址:http:〃www.1inux-ha.org/viki/MainPage项目实现了一个Hearbeat

框架,目前已经进展为3个版本「

Heartbeat提供了高可用集群最基本的功能,例如,节点间的内部通信方式、集群合作管理巩制、监

控工具和失效切换功能等等,目前的版本是Heai'tbeat2.x和Heartbeat?.x,这里以Heartbeat2.x为概

念介绍,主要说明Heartbeat?.x的部署和使用,内部主要分为:

heartbeaI:节点间通信检测模块

ha-logd:集群事件日志服务

CCM(ConsensusClusterMembership):集群成员•致性管理模块

LRM(LocalResourceManager):本地资源管理模块

StonithDaemon:使出现问题的节点从集群环境中脱离

CRM(Clusterresourcemanagement):集群资源管理模块

Clustei'policyengine:集群策略引擎

Clustertransitionengine:集群转移引擎

图1显示了Heartbeat2.0内部结构组成:

heartbeatCCMha-logd

节点何迪信公测拽块生隹资源甘行幄块某群安件口志服芥

Localresourcemanagement

4旭晓想皆发峨快

LocalResource

StonlthDaemon

Managerdemo

方点监控进R!

LRM守护通神(land)

Clusterresourcemanagement

实群筋源管理模块

ClusterresourceClusterpolicyClustertransition

managementdemoengineengine

CRM守护进程(crmd)案群策咯引蒙集群转移引京

Heartbeat仅仅是个HA软件,它仅实现了:

集群成员一致性管理模块(CCM)用于管理集群节点成员,同时管理成员之间的关系和节点间资源的

分配,heartbeat模块负责检测主次节点的运行状态,以决定节点是否失效。haTogd模块用于汜录集群

中所有模块和服务的运行信息。

本地资源管理器(LRM)负责本地资源的启动,停止和监控,一般由LRM守护进程Irmd和节点监控

进程(StonithDaemon)组成,Irmd守护进程负责节点间的通信,StonithDaemon通常是一个Fence设

备,主要用于监控节点状态,当一个节点出现问题时处于正常状态的节点会通过Fence设备将其重启或

关机以释放IP、磁盘等资源,始终保持资源被一个节点拥有,防止资源争用的发生。

集群资源管理模块(CRM)用于处理节点和资源之间的依赖关系,同时•,管理节点对资源的使用,一

般由CRM守护进程ermd、集群策略引擎和集群转移引擎三个部分组成,集群策略引擎(Clusterpolicy

engine)具体实施这些管理和依赖,集群转移引擎(Clustertransitionengine)监控CRM模块的状

态,当一个节点出现故障时,负责协调另一个节点上的进程进行合理的资源接管。

在Heartbeat集群中,最核心的是heartbeat模块的心跳监测部分和集群资源管理模块的资源接管

部分,心跳监测一般由串行接口通过串口线来实现,两个节点之间通过串口线相互发送报文来告诉对方

自己当前的状态,如果在指定的时间内未受到对方发送的报文,那么就认为对方失效,这时资源接管模

块将启动,用来接管运行在对方主机上的资源或者服务。

其中Heartbeat就是Linux-HA项目中的一个组件,它提供了所有HA软件所需要的基本功能,比如

心跳检测和资源接管、监测群集中的系统服务、在群集中的节点间转移共享IP地址的所有者等。

本篇重点

Heartbeat到了V3版本后,拆分为多个项目,其中pacemaker就是拆分出来的资源管理器。

Heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各节点的信息

以及它们之前通信:

ClusterGlue:相当于一个中间层,它用来将heartbeat和pacemaker关联起来,主要包含2个部分,

即为LRM和STONITH),

ResourceAgent:用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种

资源启动、停止、监控等等。

Pacemaker:也就是ClusterResourceManager(简称CRM),用来管理整个HA的控制中心,客户端

通过pacemaker来配置管理监控整个集群

简述高可用集群应该被定义为以卜几个层次:

>消息传输层(MessagingandMembership),Messaging位于最底层的,主要用于节点之间芍递心跳

信息,也称为心跳层。节点之间传递心跳信息。可以通过广播,组播,单播等方式。提供消息层的

软件有:heartbeat、corosync、keepalive、cman等系列LL具

>成员关系(Membership)层,这层最重要的作用是主节点(DC)通过(CCM或者CCS)这种服务由

Messaging层提供的信息,来产生一个完整的成员关系。这层主要实现承上启下的作用,承上:将下

层产生的信息生产成员关系图传递给上层以通知各个节点的工作状态:启下:将上层对于隔离某一设

备予以具体实施。

>集群密源管理层(ClusterResourceManager).直正实顼集群服务的管理层。在该层中每个节点

都运行一个集群资源管理器(CRM,clusterResourceManager),它能为实现高可用提供核心组

件,包括资源定义,属性等。在每一个节点上CRM都维护有一个C1B(集群信息库XML文档)和LRM

(本地资源管理器)组件。对于CTB,只有工作在DC(主节点)上的文档是可以修改的,其他CTB

都是复制DC上的那个文档而来的。

>资源代理层(ResourceAgents),集群资源代理(本地执行某个资源的执行和停止的具体执行人),

也就是位于CRM层中的LRM组件。资源代理分为:LSB(/etc/init.d/*),OCF(比LSB更专业,更加

通用),Legacyheartbeat(vl版本的资源管理)。当某个节点发生故障之后,是由DC通过PE(策

略引擎)和TE(实施引擎)来决定是否抢夺资源。

常见的RA有如下风格:

(1)、LSB(LinuxStandardBase),这是一种我们常见的如/etc/init.d/下的标准linux脚本风

格。

(2)OCF(OpenClusterFramwork):OCF脚本是比LSB更强大的一种脚本,支持更多的参数

回归正题:

Corosync经常与pacemaker结合做共同的处理,架构图如下:

PacemakerInternals

Corosync是OpenAIS发展到Wilson版本后衍生出来的开放性集群引擎工程。简单的说,AIS就是一个通

用的应用程序编程接口,OpenAIS是AIS的子项目,标准的集群框架的应用程序接口规范,而corosync

是OpenAIS是具体实现。

它包含OpenAIS的核心框架用来对晅Ison的标准接口的使用、管理。它为商用的或开源性的集群提供集

群执行框架。Corosync执行高可用应用程序的通信组系统,它有以下特征。

•一个封闭的程序组(Acloscdprocessgroupcommunicaticnmodel)通信模式,这个模式提供一种

虚拟的同步方式来保证能够复制服务器的状态。

•一个简单可用性管理组件(Asimpleavailabilitymanager),这个管理组件可以重新启动应用程

序的进程当它失败后。

•一个配置和内存数据的统计(Aconfigurationandstatisticsin-memorydatabase),内存数据

能够被设置,回复,接受通知的更改信息。

•一个定额的系统(Aquorumsystem,),定额完成或者丢失时通知应用程序。

•Heartbeat提供了全体成员间互相通信最基础的集群套件服务,为了使用这个套件必须联合clustcr

resourcemanager(CRM)一起编译使用,CRV又称资源管理器,用于启动、停止应用服务,服务资

源包括ip地址、web服务等类型,其中corosync可以提供集群的信息消息层。

修改内核参数

内核参数是当Linux系统启动时传递到内容的属性参数。内核参数可通过下列几种方法来设置:

・在Fuel的欢迎界面定义内核参数,将在Fule主节点安装完成后生效。

•在设置栏里使用:ref:初始化参数<kcrnel-paramcters-ug》来定义内核参数,Fuel将会为目标节

点设置。这仅对即将部署的目标节点有效.己经部署完成的不会理会这些参数。

•使用Cobblerweb界面(见:ref:]kernel-cobbler-ops)来更改所有正在运行的节点或特殊节点的

内核参数。在Cobbler显示的节而表明是部署完毕的,要在部署之前更改参数,会停止部署,更

改参数后,再继续。

•关于使用**dockcrctl**命令为每个节点来设置内核参数:请移步:ref

任何由使用的Linux发行版(不论是Ubuntu还是CentOS)所支持的内核参数,均可为目标节点和Fuel主

节点设置。但是有一些参数是为Fuel和OpenStack专门设置的:

ttysO=<速率)

没有视频输出的服务器设置串口终端

nnfb

禁用Linux帧缓存

nomodeset

禁止内核处理显卡:需要一些旧的集成服务器显卡芯片。

intel_iommu和amd_iommu

激活或禁用外设的物理地址转换为虚拟地址。一些设备(如Mellanox卡)需要打开此项,而另外一

些外设或许和设备的虚拟地址空间不兼容且仅在真实的地址空间工作正常。如果你不能启动节

点,或者是在启动时遭遇kernelpanic,将此项设置为禁用可以解决问题。

unsupported_hardware

能够值操作系统即使在不能识别一些硬件的情况下正常启动。如果此参数不设置的话,Lnux在

启动时会探测到危急硬件(通常是新的CPU型号)就不会启动,因为多数硬件提供向后兼容到以前

的版本,设置此内核参数可让系统启动。记住这点,如果没有向后兼容性提供,系统就会panic

或者即使是设置了此参数也会以另外的方式宕机。

使用DRBD设备同步镜像

DRBD(DistributedReplicatedBlockDevice)是一款基于Linux平台的分布式块设备同步复制软件,它

由内核模块和管理工具组成,通过网络进行块设备的同步镜像,用于构建高可用性的集群。DRBD类似基

于网络的RAID1。

DRBD设备原理

原现:DRBD工作位置在内核文件系统的BufferCache层和磁盘TO的DiskSched调度层之间,通过内

核模块虚拟出/dev/drbdN块类型设备提供使用。数据在写入本地磁盘同时,利用标准TCP/IP协议自动

将数据镜像发送到对端DRBD设备上,并保证相同方式同步写入滋盘。本地(主节点)与远程主机:备节点)

的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使

用。Drbd没有服务进程,工作在内核空间中,连接直接由内核负责维护

底层设备支持包括:一个磁盘,或者是磁盘的某一个分区、一个soflraid设备、一个LVM的逻辑卷、

一个EV'MS(EnterpriseVolumeManagementSystcm,企业卷管理系统)的卷、其他任何的块设备。

DRBD实现了异步复制、半同步复制、同步复制3种协议,分别是:

•协议A:

异步复制协议。一旦本地磁盘写入已经完成,数据包已在发送队列中,则写被认为是完成的。在一个炉

点发生故障时,可能发生数据丢失,因为被写入到远程节点上的数据可能仍在发送队列。尽管,在故障

转移节点上的数据是一致的,但没有及时更新。这通常是用于地理上分开的节点

•协议B:

内存同步(半同步)复制协议。一旦本地磁盘写入己完成旦复制数据包达到了对等节点则认为写在主节

点上被认为是完成的。数据丢失可能发生在参加的两个节点同时故障的情况下,因为在传输中的数据可

能不会被提交到磁盘

•协议C:

同步复制协议。只有在本地和远程节点的磁盘已经确认了写操作完成,写才被认为完成。没有任何数据

丢失,所以这是一个群集节点的流行模式,但I/。吞吐量依赖于网络带宽

原理图如下:

SERVICESERVICE

IT

FILESYSTEMFILESYSTEM

KU

BUFFERCACHEBUFFERCACHE

4.i

RAWDEVICERAWDEVICEDRfiT

TCFyiPTcryip

Kit-

DISKSCHEDI!DISKiSCnHED

DISKDRIVERNICDRIVEFNICDRIVERDISKDRIVER

HE

DRBD的结构组成:

•内核模块:用来创建虚拟块设备,完成底层的镜像数据同步

•管理工具:用来完成与内核模块通信、配置,管理资源。

DRBD支持两种两种使用方式:

•主备模式:两台存储服务器,只有一台提供服务

•主主模式:两台存储服务器,同时提供服务,共同分担压力

在DRBD模型中,至少存在两个角色,一个主节点,一个备节点。主节点上应用系统对DRBD设备可

以进行不受限制的读写操作,用来初始化、创建、挂载文件系统。备节点无法使用DRBD设各,只能

接收来自主节点的数据

部署DRBD内核模块

安装并部署DRBD服务

1.安装:yuminstall-ykmod-drbd83drbd83

2.加载:modprobedrbd

3.验证:Ismod|gi'ep-idrbd

4.工具:/sbin/dbrdsetup/sbin/drbdadm和init.d/drbd脚本

配置完整的DRBD服务

全局配置项(global)

基本上我们可以做的也就是配置usage-count是yes还是no了,usage-count参数其实只是为了让

linbit公司收集目前drbd的使用情况。当drbd在安装和升级的时候会通过http协议发送信息到

linbit公司的服务器hfflo

公共配置项(common)

这里的common,指的是drbd所管理的多个资源之间的common。配置项里面主要是配置drbd的所有

resource可以设置为相同的参数项,比如protocol,syncer等等.

DRBD设备

DRBD的虚拟块设备。它有一个主设备号为147的设备,默认的它的次要号码编从0开始。在一到主机

上,drbd的设备的设备名称为/dev/drbdN,这个N通常和他的次设备号一致。

资源配置项(resource)

resource项中配置的是drbd所管理的所有资源,包括节点的ip信息,底层存储设备名称,设备大小,

meta信息存放方式,drbd对外提供的设备名等等。每一个resource中都需要配置在每一个节点的信

息,而不是单独本节点的信息。并且资源名只能使用纯ascii码而且不能使用空白字符用于表示资源名

称。实际上,在drbd的整个集群中,每一个节点上面的drbd.conf文件需要是完全一致的。

主配置文件:/etc/drbd/drbd.conf

include"/etc/drbd.d/global_common.conf”

include/etc/drbd.d/*.resM

配置三个部分:global、commonisresource

global{

usage-countno;〃是否参加DRBD调查统计

minor-count10;〃从节点的最大数据

common{

synccr{rate200M;}〃同步镜像使用最大的网络速率

resourcedbrdzy(

protocolC;〃使用同步协议

meta-diskinternal;〃DRBD元数据存储方式

headlers{

net{

•••

cram-hmac-alg"shal";#设置加密算法

shared-secret,zallcndrbd,?;#设置加密密钥

)

disk(

•••

on-io-errordetach;#配置I/O错误处理策略为分离

)

startup{

•••

)

Ondrbd_master{

device/dev/drbdl;〃创建镜像盘,必须drbd开头且包含数字

disk/dev/sdb;〃使用源磁盘

address81:7788;

)

Ondrbd_slave(

device/dev/drbdl;〃创建镜像盘,必须drbd开头且包含数字

disk/dev/sdb;〃使用源磁盘

address192.168.12.182:7788;

)

相关的配省说明详见手册:mandrbd.conf

创建/管理DRBD设备

提供工具/sbin/drbdadm^11/sbin/drbdsetup指令

清空物理磁盘或者分区,或者LVM逻辑卷:

ddif=/dev/zeroof=/dev/sd3bs=lM{清空1G即可}

初始化DBRD设备记录块:

drbdadmcreate-mddrbdzy{资源名}

启用/禁用集群的资源,执行命令:

drbdadmupdrbdzy(资源名};==>林\载闪极模块,创建块设备,监听端口

集群状态:WFConnection;磁盘状态:Inconsistent角色状态:Secondary

drbdadmdowndrbdzy{资源名};=:>禁用内孩膜块,删除块设备,放弃监听

集群状态;Unknown;磁盘状态;Inconsistent角色状态;Unknown

启动停止管理的脚本:

/etc/init.d/drbd[startIstop]

设置主节点,数据开始同步:

drbdsetupprimary/dev/drbdl{设备名}-。或者执行:

drbdadmoverwrite-data-of-peerprimaryziyuan{资源名}

查看资源连接、磁盘、以及角色状态:

drbdadmestatedrbdzy;drbdadmdstatcdrbdzy;drbdadmroledrbdzy

连接/断开集群的资源,角色不变连接变为独立运行:

drbdadmdisconnectdrbdzy==>放弃监听{StandAlonc}

drbdadmconnectdrbdzy==>监听端口,发送请求包{WFConnection}

主备角色切换,先降级再升级:

drbdadmsecondarydrbdzy;drbdadmprimarydrbdzy;

drbdsetsecondary/dev/drbdl;drbdsetupprimary/dev/drbdl

创建文件系统,并挂载DRBD设备:

mkfs.ext4/dev/drbdl&&mount/dev/drbdl/mnt

对资源的状态做如下说明:

•StandAlone独立的:网络配置不可用;资源还没有被连接或是被管理断开,或是由于出现认证失败

或是脑裂的情况

,Disconnecting断开:断开只是临时状态,下一个状态是SLandAlone独立的

,Unconnected悬空:是尝试连接前的临时状态,可能下一个状态为WFconnection和NFReporiParams

,Timeout超时:与对等节点连接超时,也是【I缶时状念,下一个状态为Unconected悬空

♦BrokerPipe:与对等节点连接丢失,也是临时状态,下•个状态为Unconected悬空

,NetworkFailure:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空

,ProtocolError:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空

•TearDown拆解:临时状态,对等节点关闭,下•个状态为Unconected悬空

•WFConnection:等待和对等节点建立网络连接

•WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包

•Connected连接:DRBD已经建立连接,数据镜像现在可用,节点处于正常状态

,StartingSyncS:完全同步,有管理员发起的刚刚开始同步,未来可能的状态为SyncSource或

PausedSyncS

♦StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncLlID

,WFBitMapS:部分同步刚刚开始,下一步可能的状态为SyncSource或PausedSyncS

•WEBitMapT:部分同步刚刚开始,下一步可能的状态为WFSyncUUlD

,WFSyncUUlD:同步即将开始,下一步可能的状态为SyncTarget或PausedSyncT

♦SyncSource:以本节点为同步源的同步正在进行

,SyncTarget:以本节点为同步目标的同步正在进行

•PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停,可能是因为另外一个同步

正在进行或是使用命令(pause-sync)暂停了同步

♦PausedSyncT:以本地节点为持续同步的目标,但是目前同步已经暂停,这可以是因为另外一个同步

正在进行或是使用命令(pause-sync)暂停了同步

•VerifyS:以本地节点为验证源的线上设备验证正在执行

•VerifyT:以本地节点为验证目标的线上设备验证正在执行

对磁盘状态有如下几种:

•Diskless无盘:本地没有块设备分配给DRBD使用,这表示没有可用的设备,或者使用山bduchu命

令手工分离或是底层的I/O错误导致自动分离

•Attaching:读取无数据时侯的瞬间状态

•Failed失败:本地块设备报告I/O错误,其下一个状态为Diskless无盘

•Negotiating:在已经连接的DRBD设置进行Attach读取无数据前的瞬间状态

•Inconsistent:数据是不一致的,在同步期间(同步目标)在一个节点上出现这种状态

•Outdated:数据资源是一致的,但是已经过时

•DUnknown:当对等节点网络连接不可用时出现这种状态

,Consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是5ToDate或是Outdated

•UpToDate:一致的最新的数据状态,这个状态为正常状态

注:初始化同步源:这一步至关成要,尤其是在已经存在数据的磁盘上。

默认情况下,DRBD不支持主备间自动切换能力,需要借助其他套件。

高可用切换实现

DRBD设备只允许主节点被挂我无条件读写,而备节点设备文件不允许挂我读写,因此切换时需要必

要的将主节点DRBD设备卸载并降级,备节点升级并挂载。在HA高可用架构中,这属于节点中的文件系

统资源。

主节点:

□mount/dev/drbdl;

drbdadmsecondarydrbdzy;/drbdsetupsecondary/dev/drbd1

备节点:

drbdadmprimarydrbdzy;/drbdsetupprimary/dev/drbd1

mount/dev/drbdl/mnt

这个过程的实现,往往由Pacemaker套件完成,配者节点文件系统资源,包括在该文件系统上铝现

的应用服务、浮动VIP等资源。解决脑裂现象指令是:drbdadm-discard-my-dataconnectmfs_store

使用Corosync实现通讯

高可用架构由两个核心部分组成,一个是心跳检测,判断服务器是否正常运行;一个是资源转移,用来

将公共资源在正常服务器和故陌服务器之间搬动。

整个运行模式就是心跳检测不断的在网络中检测各个指定的设备是否能够正常响应,如果一旦发生设备

故障,就由资源转移功能进行应用的切换,以继续提供服务。更加上面的基础理论,不管heartbeat,

还是corosync都是高可用集群中的ClusterMessagingLayer(集群信息层),是主要传递发舆群信息

与心跳信息的,资源管理还得依赖于上层的erm(ClusterresourceManager,集群资源管理器),最著

名的资源管理器,就是pacemaker,它是heartbeatv3分离出去的子项目。而现在corosync+pacemaker

成广高可用集群中的最佳组合。

消息层原理

Corosync:heartbeat与corosync是流行的MessagingLayer(集群信息层)工具,主要实现HA心跳信息

传输的功能。

功能:主要的作用是使用UDP组播的形式传递当前节点的心跳信息,并告知给对方,这样对方就知道其

他节点是否在线。传递心跳信息一般使用一根心跳线连接,该线接口可以使用串行接口也可以是以太网

接口来连接。每一个节点上都包含信息层引擎。

原理.:心跳信息传递机制

>Serailcable:串形接口连接,作用范围有限,不建议使用:

>Ethernetcable:网线连接,通过网络接口(中间可通过交换机)将主机连接起来:

>UDPUnicast:UDP单播方式

■UDPMulliuusl:UDP组播方式(常用)

■UDPBroadcast:UDP广播方式

永久组播地址:224.0.0.0-224.0.0.255;

临时组播地址:224.0.1.0-238.255.255.255;

本地组播地址:239.0.0.0-239.255.255.255(仅在特定本地范围内有效)

经过tepdunip抓包发现:Corosync使用本地接口的5404发送UDP数据报;

使用组播地址226.94.1.1接口的5405接收UDP数据报;

RARARA

通过上图可知消息层位于CRM层下,同时CRM可以以插件的形式连接到corosync层中。LRM即不地资源

管理器,统一管理本地提供的服务资源。

部署Corosync

Corosync是集群管理套件的•部分,它在传递信息的时候可以通过•个简单的配置文件来定义信息传递

的方式和协议等。通常使用UDP组播的形式。默认情况下Corosync服务进程以hacluster用户身份运

行。

安装并部署Corosync服务

1.安装:yuminstall-yoorosync

2.提供:/usr/sbin/corosync服务、/usi7sbin/corosync-notifyd通知

3.配置:/etc/corosync/corosync.conf

配置消息层corosync服务

主配置文件:/etc/corosync/corosync.conf

totem{

version:2曲版本号,只能是2,不能修改

secauth:on##安全认证,当使用aisexec时,会非常消耗CPU

threads:2冲线程数,根据CPU个数和核心数确定

interface{

ringnumber:0##表示心跳信息能够在网络中转几圈

bindnetaddr:192,168.8.0坤绑定心跳网段

mcastaddr:坤心跳组播地址

mcastport:5405期心跳组播使用端口

ttl:1

}

logging{骷定义集群环境卜各corosync间通讯机制

filelinc:off的指定要打印的行

to_stderr:no附是否发送到标准错误输出

to_logfile:yes期记录到文件

tosyslog:no己录到syslog

IngfiIP:/var/1og/rllistpr/corosync.log

debug:Off

timestamp:on特是否打印时间戳,利于定位错误,但会消耗CPU

logger_subsys{

subsys:AMF

debug:off

)

)

service{

ver:0

name:pacemaker##定义插件式启动pacemaker

#usc_mgmtd:yes

}

aisexec(

user:root

group:root

}

amf{

mode:disabled

}

相关步骤如下:

1.生成认证key:

corosync-keygen==>writing/etc/corosync/authkey

这个文件是data类型,不能查看,保证数据的加密性

2.启动服务;

默认ubuntu系统下,cat/etc/default/corosync中START=yes

执行脚本/etc/init.d/corosyncstart或者执行/usr/sbin/corosync

3.程序启动后,监听指定地址的udp端口,但启用的组播方式

Isof-i:5405

COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME

corosync6211root8uIPv430973OtGUDP:5405

corosync6211root12uIPv430977Ot0UDPdrbdtwo:5405

Corosync服务进程启动后监听bind指定接口的5404、5405端口,并加入组播组,监听组播组的相

关端口。消息传递使用udp组播技术通信。

验证消息传递

执行抓包:

Nodcl:tcpdump-icthO-nnsrcnodclipandudpport540!

tcpdump-iothO-nncrc1Q12andudpport5404

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningor1ethQ,link-typeEN10M3(Ethernet),capturesize65535bytes

15:13:10,12:2554IP12.5404>11.5405:UDP,Iength74

15:13:10.34<)955IP12.5494>11.5405:UDP,1ength74

15:13:10.57(>067IP12.5404>192,405:UDP,Iength74

15:13:10,80:2229IP12.5464>11.5495:UDP,Xength74

15:13:11.02<)520IP12.5404>11.5405:UDP,Iength74

IS-111RTP1Q71f>RSS11754A4>SS111S40S-IIDP1pnath74

Node2:tcpdump-iethO-nnsrcnode2_ipandudpport5404

tcpdump-1ethG-nnsrc11aidudpport5404

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode

listeningoneth0,link-typeEN10MB(Ethernet),capturesize65535bytes

15:21:55.416687IP11.5404>.5405:UDP,length87

15:21:55.441700IP11.5404>12.5405:UDP,length74

15:21:55.643335IP11.5404>.5405:UDP,length87

15:21:55,668465IP11.5404>12.5405:U)P,length74

15:21:55.870496IP11.5404>.5405:UDP,length87

15:21:55.894676IP11.5404>12.5405:IDP,length74

15:21:56.096494IP11.5404>.5405:UDP,length87

解释一下UDP协议的单播、组播和广播:

21组播的工作原理

组猖是一仲允许一个或多个发送者(组播蠢)发送单一的数指曲多个换收者《一次的,同讨的)

盾源把熟据包发送到特定组插组,而只育属于该组播组的地址才能接收到数据包。密耐以大大的爷ifc廊&带宽,

因为无论有多少个目标地址,在整个网络的任何一条迸目上只传送单一的豹据包・图1为基于三¥♦!讯方式的建&

结忖和劭据传递过程。

A♦方方志功£B组・方式

tTTTt^

口口口口H

♦»»»«

C广・齐班蛆・罹

的I三构也累方式即楫传金短程比收

乂幽1的工作方式可以看出:

hffiJsKasi)传输:在发送省和每一接收者之间需要单独的的据值道.如果一&王机丽给很少量6瓶收看传

■am,t没有什ZR・•丽联有大量王况青基获毒对据包的冏一份建贝时如»戏实现・|这将导致夏送春负担

沉过迟长.网络侬7M保证一定的副号再置零璃加随住乳滞费・

组格(MuRcast)传儡:日》高了都据传送浓多・|;«少了王千砒班艇的可槐.组措组中的王机可以是在同一

个物理网络,也可以东自不同的帆即琳《加果1阉的支持》・

Cfi(Broadcast)传能:是指在IP子网内广播数据包,所有在于网内部的王机都杼收到这些数据包.广桶酗,

网络向子网主机都投递一份数据包,不论这些主机是否乐于接收该船提包•然而广信的使用花西E常小,只在本地

子网内有效,因为路由器会引领广播道僖・广搔传输增ME接啜者的开铺。

使用Pacemaker管理资源

Pacemaker:是众多集群资源管理器(ClusterResourceManager)CRM中的一个,主要功能是管理来自集

群信息层发送来的信息。

概念介绍

Pacemaker(直译:心脏起搏器),是•个群集资源管理器。它实现最大可用性群集服务(亦称资源管理)

的节点和资源级故障检测和恢复使用您的首选集群基础设施(OpenAIS的或Heaerbeal)提供的消息和成

员能力。

它可以做任何规模的集群,并配备了•个强大的依赖模型,使管理员能够准确地表达群集资源之间的关

系(包括顺序和位置)。几乎任何可以编写脚木,可以管理作为心脏起搏器集群的一部分。

Pacemaker是个资源管理器,不是提供心跳信息的,因为它似乎是一个普遍的误解,也是值得的。

pacemaker是一个延续的CRM(亦称HeartbeatV2资源管理器),最初是为心跳,但己经成为独立的项

目。

内部架构

实际操作来认识Pacemaker的框架组成,使用apt-getinstallPacemaker软件。以Ubuntu为例执行:

dpkg-LPacemaker

组件包括:

root@drbdone:'#dpkg-Lpacema<er|grep'lib/pacemaker

/usr/lib/pacemaker

/usr/lib/pacemaker/crmd

/usr/lib/pacemaker/stonithd

/usr/lib/pacemaker/cib

/usr/lib/pacemaker/cibmon

/usr/lib/pacemaker/stonith-test

/usr/lib/pacemaker/attrd

/usr/lib/pacemaker/1rmd

/usr/lib/pacemaker/1rmd_test

/usr/lib/pacemaker/penglne

并且没有配置文件(暂时理解到这个程度):

root@drbdone:~#dpkg-Lpacemaker|grep'etc

/etc

/etc/default

/etc/default/pacemaker

/etc/init.d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论