Drbd+Pacemaker实现高可用

What is Pacemaker?

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


前提:

1)本配置共有两个测试节点,分别node1.a.org和node2.a.org,相的IP地址分别为192.168.0.5和192.168.0.6;

2)node1和node2两个节点已经配置好了基于openais/corosync的集群;且node1和node2也已经配置好了Primary/Secondary模型的drbd设备/dev/drbd0,且对应的资源名称为web;如果您此处的配置有所不同,请确保后面的命令中使用到时与您的配置修改此些信息与您所需要的配置保持一致;

3)系统为rhel5.4,x86平台;


1、查看当前集群的配置信息,确保已经配置全局属性参数为两节点集群所适用:

1
# crm configure show
1
2
3
4
5
6
7
8
9
node node1.a.org
node node2.a.org
property $id="cib-bootstrap-options" \
 dc-version="1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87" \
 cluster-infrastructure="openais" \
 expected-quorum-votes="2" \
 stonith-enabled="false" \
 last-lrm-refresh="1308059765" \
 no-quorum-policy="ignore"

在如上输出的信息中,请确保有stonith-enabled和no-quorum-policy出现且其值与如上输出信息中相同。否则,可以分别使用如下命令进行配置:

1
2
# crm configure property stonith-enabled=false
# crm configure property no-quorum-policy=ignore

2、将已经配置好的drbd设备/dev/drbd0定义为集群服务;

1)按照集群服务的要求,首先确保两个节点上的drbd服务已经停止,且不会随系统启动而自动启动:

1
# drbd-overview
1
 0:web Unconfigured . . . .
1
# chkconfig drbd off

2)配置drbd为集群资源:

提供drbd的RA目前由OCF归类为linbit,其路径为/usr/lib/ocf/resource.d/linbit/drbd。我们可以使用如下命令来查看此RA及RA的meta信息:

1
# crm ra classes
1
2
3
4
heartbeat
lsb
ocf / heartbeat linbit pacemaker
stonith
1
# crm ra list ocf linbit
1
drbd
1
# crm ra info ocf:linbit:drbd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
This resource agent manages a DRBD resource
as a master/slave resource. DRBD is a shared-nothing replicated storage
device. (ocf:linbit:drbd)
Master/Slave OCF Resource Agent for DRBD
Parameters (* denotes required, [] the default):
drbd_resource* (string): drbd resource name
 The name of the drbd resource from the drbd.conf file.
drbdconf (string, [/etc/drbd.conf]): Path to drbd.conf
 Full path to the drbd.conf file.
Operations' defaults (advisory minimum):
 start timeout=240
 promote timeout=90
 demote timeout=90
 notify timeout=90
 stop timeout=100
 monitor_Slave interval=20 timeout=20 start-delay=1m
 monitor_Master interval=10 timeout=20 start-delay=1m

drbd需要同时运行在两个节点上,但只能有一个节点(primary/secondary模型)是Master,而另一个节点为Slave;因此,它是一种比较特殊的集群资源,其资源类型为多态(Multi-state)clone类型,即主机节点有Master和Slave之分,且要求服务刚启动时两个节点都处于slave状态。

1
[root@node1 ~]# crm
1
2
3
crm(live)# configure
crm(live)configure# primitive webdrbd ocf:linbit:drbd params drbd_resource=web op monitor role=Master interval=50s timeout=30s op monitor role=Slave interval=60s timeout=30s
crm(live)configure# master MS_Webdrbd webdrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
1
2
3
4
crm(live)configure# show webdrbd
primitive webdrbd ocf:linbit:drbd \
 params drbd_resource="web" \
 op monitor interval="15s"
1
2
3
4
5
crm(live)configure# show MS_Webdrbd
ms MS_Webdrbd webdrbd \
 meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
crm(live)configure# verify
crm(live)configure# commit

查看当前集群运行状态:

1
# crm status
1
2
3
4
5
6
7
8
============
Last updated: Fri Jun 17 06:24:03 2011
Stack: openais
Current DC: node2.a.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
1 Resources configured.
============
1
2
3
4
5
Online: [ node2.a.org node1.a.org ]
 Master/Slave Set: MS_Webdrbd
 Masters: [ node2.a.org ]
 Slaves: [ node1.a.org ]

由上面的信息可以看出此时的drbd服务的Primary节点为node2.a.org,Secondary节点为node1.a.org。当然,也可以在node2上使用如下命令验正当前主机是否已经成为web资源的Primary节点:

1
# drbdadm role web
1
Primary/Secondary

3)为Primary节点上的web资源创建自动挂载的集群服务

MS_Webdrbd的Master节点即为drbd服务web资源的Primary节点,此节点的设备/dev/drbd0可以挂载使用,且在某集群服务的应用当中也需要能够实现自动挂载。假设我们这里的web资源是为Web服务器集群提供网页文件的共享文件系统,其需要挂载至/www(此目录需要在两个节点都已经建立完成)目录。

此外,此自动挂载的集群资源需要运行于drbd服务的Master节点上,并且只能在drbd服务将某节点设置为Primary以后方可启动。因此,还需要为这两个资源建立排列约束和顺序约束。

1
# crm
1
2
3
4
5
6
crm(live)# configure
crm(live)configure# primitive WebFS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/www" fstype="ext3"
crm(live)configure# colocation WebFS_on_MS_webdrbd inf: WebFS MS_Webdrbd:Master
crm(live)configure# order WebFS_after_MS_Webdrbd inf: MS_Webdrbd:promote WebFS:start
crm(live)configure# verify
crm(live)configure# commit

查看集群中资源的运行状态:

1
 crm status
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
============
Last updated: Fri Jun 17 06:26:03 2011
Stack: openais
Current DC: node2.a.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
2 Resources configured.
============
Online: [ node2.a.org node1.a.org ]
 Master/Slave Set: MS_Webdrbd
 Masters: [ node2.a.org ]
 Slaves: [ node1.a.org ]
 WebFS (ocf::heartbeat:Filesystem): Started node2.a.org

由上面的信息可以发现,此时WebFS运行的节点和drbd服务的Primary节点均为node2.a.org;我们在node2上复制一些文件至/www目录(挂载点),而后在故障故障转移后查看node1的/www目录下是否存在这些文件。

1
# cp /etc/rc./rc.sysinit /www

下面我们模拟node2节点故障,看此些资源可否正确转移至node1。

以下命令在Node2上执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# crm node standby
# crm status
============
Last updated: Fri Jun 17 06:27:03 2011
Stack: openais
Current DC: node2.a.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
2 Resources configured.
============
Node node2.a.org: standby
Online: [ node1.a.org ]
 Master/Slave Set: MS_Webdrbd
 Masters: [ node1.a.org ]
 Stopped: [ webdrbd:0 ]
 WebFS (ocf::heartbeat:Filesystem): Started node1.a.org

由上面的信息可以推断出,node2已经转入standby模式,其drbd服务已经停止,但故障转移已经完成,所有资源已经正常转移至node1。

在node1可以看到在node2作为primary节点时产生的保存至/www目录中的数据,在node1上均存在一份拷贝。

让node2重新上线:

1
# crm node online
1
[root@node2 ~]# crm status
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
============
Last updated: Fri Jun 17 06:30:05 2011
Stack: openais
Current DC: node2.a.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
2 Resources configured.
============
Online: [ node2.a.org node1.a.org ]
 Master/Slave Set: MS_Webdrbd
 Masters: [ node1.a.org ]
 Slaves: [ node2.a.org ]
 WebFS (ocf::heartbeat:Filesystem): Started node1.a.org










本文转自 SoulMio 51CTO博客,原文链接:http://blog.51cto.com/bovin/1861153,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab常用函数——矩阵函数

五、数组和矩阵函数 1)数组基本函数 display:显示字符或者数组 isempty :判断数组是否为空,空返回1,不空返回0 isequal :判断数组是否相同 (认为NaN不同) isequalwithequalnans:判断数组是否相同,把NaN看成相同的数 isfinite :判断数组元素是否为有限数 isfloat…

记录下面试中的回答的不好的问题

1 伙伴系统在linux中的作用,具体咋回事 2 tcp拥塞控制 滑动窗口 3 linux sed,awk的具体使用 4 ftp哪几种模式 5 中断与轮询 6 C stl的vector是怎么是实现的 7 I/O多路复用是怎么回事,select(),epoll()具体怎么回事。 一个文件中每行一个单词&…

Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、...

去空格及特殊符号 s.strip().lstrip().rstrip(,) 复制字符串 #strcpy(sStr1,sStr2)sStr1 strcpysStr2 sStr1 sStr1 strcpy2print sStr2 连接字符串 #strcat(sStr1,sStr2)sStr1 strcatsStr2 appendsStr1 sStr2print sStr1 查找字符 #strchr(sStr1,sStr2)# < 0 为未找到…

周赛题解

A - An easy problemTime Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2601Description When Teddy was a child , he was always thinking about some simple math problems ,such as “What it’s 1 cup of wa…

matlab常用函数——数学函数

六、基本数学函数 1)基本运算符 +:加法运算符 -:减法运算符 *:矩阵乘法 .*:数组乘法 /:斜杠或者矩阵右除 B/A等于公式B*inv(A) ./:数组右除 A./B等于A(i,j)/B(i,j) \:反斜杠或者矩阵左除 A\B等于inv(A)*B .\:数组左除 A.\B等于B(i,j)/A(i,j) ^…

内存容量出现异常的解决办法

【鄙视360人工服务工程师 笨死你!】 如果哪天的内存容量突然出现了异常 而且发现只有一半可以使用的时候 不是内存出现了问题 而是设置的问题。 【win 7 win 8 win 10通用的解决办法】 问题描述&#xff1a; 我是win 10 64位系统 内存容量突然只有一半了 打开我的电脑的设置看了…

Oracle 变量绑定与变量窥视合集系列一

《Oracle 变量绑定与变量窥视合集》 数据库环境 LEO1LEO1> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL R…

(原创)对某国的一次渗透

文章均由自己原创&#xff0c;只是一直没有在自己博客发表。本地附件也没有了&#xff0c;我是从网上找来我的以前的投稿。 写在之前的废话&#xff1a;小菜技术能力不行&#xff0c;如果你觉得此文实在看不下去&#xff0c;还请PASS掉。如果你对我的文章有兴趣&#xff0c;可以…

matlab常用函数——方程函数

八、插值函数、线性方程解函数和多项式函数 1)插值函数 interp1q :1维快速线性插值法 yi=interp1q(x,Y,xi) interp1q正常执行条件: (1)x单调递增列向量 (2)Y为列向量or行数为length(x)(3)xi为列向量,如果xi值在x的坐标范围外,返回NaN 实例: x=(-5:0.5:5); y=sin…

C/C++ | 字节对齐

目的&#xff1a;优化CPU访问数据效率 类型转换&#xff1a;未对齐时&#xff0c;严格一些的系统会报段错误&#xff0c;未报错的话效率也会有所下降。 各种结构的对齐&#xff1a; 编译器的区别&#xff1a; 其实字节对齐的细节和具体编译器实现相关&#xff0c;但一般而言&am…

关于python测试webservice接口的视频分享

现在大公司非常流行用python做产品的测试框架&#xff0c;还有对于一些快速原型产品的开发也好&#xff0c;很好地支持OO编程&#xff0c;代码易读。 Python的更新挺快的&#xff0c;尤其是第三方库。 对于测试人员&#xff0c;代码基础薄弱&#xff0c;用python语言容易上手。…

matlab常用函数——文件操作函数

十一、基本文件操作函数 1)文件创建函数 filemaker :把文件名与文件中函数名分开 。 filesep :文件目录分隔。 fileparts :把目标文件名拆分成字符串形式输出 。 tempdir :返回系统暂存地址名 。 tempname :返回系统暂存文件名 。 fullfile :创建文件名 2)文件打…

Struts2中文件上传下载实例

1.单文件上传 1 jsp页面&#xff1a;2 3 <!-- 单文件上传 -->4 <form action"Fileupload.action" method"post"5 enctype"multipart/form-data">6 username:7 <input type"tex…

最优化课堂笔记06-无约束多维非线性规划方法(续)

6.5共轭方向法 6.5.1 共轭方向 6.5.1 共轭梯度法 6.6单纯形法(不考) 6.7最小二乘法 6.7.2 改进的高斯-牛顿最小二乘法

opengl微发展理解

1.什么是OpenGL? 一种程序&#xff0c;可以与界面和图形硬件交互作用、一个开放的标准 2.软件管道 请看上图 - Apllication层 表示你的程序&#xff08;调用渲染命令。如opengl API&#xff09; -Abstraction层 表示画图接口&#xff08;如OpenGL API或者DirectX API&a…

MacosX 下GCC编译指定版本的代码

export MACOSX_DEPLOYMENT_TARGET10.6转载于:https://www.cnblogs.com/lovelylife/p/5754226.html

最优化作业第六章——共轭梯度法和鲍尔法

共轭梯度法&#xff1a; 代码&#xff1a; #导入模块 from sympy import * import sympy as sp #将导入的模块重新定义一个名字以便后续的程序进行使用 from numpy import * import numpy as npdef main():#本例是利用共轭梯度法进行最优化x1,x2,alpha symbols("x1,x2,…

酒鬼随机漫步(一个矢量类)

摘要: 阅读全文这是一个定义的一个矢量类&#xff0c; 然后用矢量类模拟一个酒鬼的随机漫步 问题很简单&#xff0c; 实现也不麻烦&#xff0c; 但是这个小程序却可以呈现出许多语法知识。而且代码风格也不错&#xff0c;因此保存在了这篇博客中。 建议&#xff1a; 1. 类的声…

对高并发流量控制的一点思考

前言 在实际项目中&#xff0c;曾经遭遇过线上5WQPS的峰值&#xff0c;也在压测状态下经历过10WQPS的大流量请求&#xff0c;本篇博客的话题主要就是自己对高并发流量控制的一点思考。 应对大流量的一些思路 首先&#xff0c;我们来说一下什么是大流量&#xff1f; 大流量&…