Pacemaker-2.0-Clusters_from_Scratch-en-US.pdf 阅读笔记

Pacemaker-2.0-Clusters_from_Scratch-en-US.pdf 阅读笔记

HA Cluster——drbd+pacemaker+corosync

安装配置Centos 7.3

——安装系统和配置网络网上教程很多,hostnamectl 更改FQDN为主机名,/etc/hosts配置主机名,ssh-keygen生成密钥用于主机间免密ssh

安装Cluster软件

#yum install -y pacemaker pcs psmisc policycoreutils-python

文章使用pcs作为集群管理器,其他也有crmsh,语法上会有不同

#代表在每个节点上都要运行

配置Cluster软件

关闭防火墙限制

#firewall-cmd --permanent --add-service=high-availability

success

#firewall-cmd --reload 

success

启用pcs守护进程

在集群可被配置前,每个节点的pcs进程需要先启动并设置为开机自启

pcs命令行可以管理同步集群所有节点的corosync配置

#systemctl start pcsd.service

#systemctl enable pcsd.service

Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to /usr/lib/systemd/system/pcsd.service.

安装包会创建一个hacluster用户(/etc/passwd可以直接查看)默认带有一个禁用的密码,当在本地运行pcs命令没有问题,在集群其他节点上同步corosync配置,启用/禁用节点时账户就需要登录密码

#passwd hacluster

ssh修改节点2的hacluster密码

ssh pcmk-2 -- 'echo mysupersecretpassword | passwd --stdin hacluster'

配置Corosync

在任一节点上, 使用pcs cluster auth作为hacluster用户进行身份验证:

pcs cluster auth pcmk-1 pcmk-2

输入hacluster账户认证

接下来,在同一节点上运行 pcs cluster setup 生成和同步corosync 配置:

pcs cluster setup --name mycluster pcmk-1 pcmk-2

如果报认证错误,重新确认一遍每个节点的hacluster的密码是否相同

配置文件路径/etc/corosync/corosync.conf


/etc/corosync/corosync.conf

Pacemaker Tools

直接输入pcs查看命令选项

pacemakerd --features查看版本信息

pcs status help查看已知可用的状态分类

集群的启动和验证

前面pcs cluster auth后就可以直接调用一下命令启动所有节点

pcs cluster start --all 

也可以在每个节点上单独启动调用命令

# pcs cluster start

or

# systemctl start corosync.service  

# systemctl start pacemaker.service

在上述例子中,corosync和pacemaker服务没有设置开机自启。所以,一个集群节点fail或者reboot后,需要重新调用以下命令

pcs cluster start --all

or

pcs cluster start  nodename 

验证Corosync

首先,运行 corosync-cfgtool 检查集群通信状况

corosync-cfgtool -s

可以看到id是设置的ip地址而不是 127.0.0.x loopback address

状态栏没有报错

如果有异常的地方,可以检查节点的网络连接,防火墙和SELinux设置

check the membership and quorum APIs:

#corosync-cmapctl | grep members

#pcs status corosync

可以看到两个节点1,2都已经加入集群

验证Pacemaker

上面已经确认Corosync正常工作,接下来是Pacemaker

pcs status

可以看到除了提示警告STONITH配置相关,没有其他错误

创建Active/Passive集群

Pacemaker启动后会自动记录集群节点数目和细节,也包括Stack和version等信息

pcs status

or

pcs cluster cib

CIB(集群信息库 XML文档),对于CIB,只有工作在DC(主节点)上的文档是可以修改的,其他CIB都是复制DC上的那个文档而来的。

在进行变动前,最好检查一下配置的合法性

crm_verify -L -V


STONITH ERROR

为了确保数据的安全性,隔离(也叫做STONITH,利用心跳机制)默认是启用的。

上述的错误就是没有找到STONITH相关配置,但是启用了STONITH

所以这里先禁用STONITH

pcs property set stonith-enabled=false

crm_verify -L


STONITH是Shoot-The-Other-Node-In-The-Head的简称,并且它能够保护数据使其不会因为节点异常或者同时访问而遭到损坏。

节点无反应并不代表它没有存取数据,如果想要百分百确认数据安全的话,需要使用STONITH来隔离节点,以确保在目前的节点已经离线后其它节点才能正常存取数据。

STONITH也能用于集群服务无法停下的情况。在这种情况下,集群可以使用STONITH来强制整个节点离线,并让服务在其它节点上安全启用。


添加资源

添加一个集群用于在任一节点上可以提供的专有IP。不考虑集群服务运行在哪个节点,终端用户总是需要一个一致的IP访问的。

这里我使用的是192.168.11.165作为浮动IP,命名为ClusterIP,并且集群设置每30s检查一下是否在运行。

为了确保使用的IP未被占用可以自行ping当前网段的ip查看

下面是一个*.bat脚本


#!/bin/bash

ip=1

while [ $ip != "254" ]; do

ping 192.168.11.$ip -c 2 | grep -q "ttl=" && echo "192.168.11.$ip yes" || echo "192.168.11.$ip no"

ip=`expr "$ip" "+" "1"`

done


添加IP资源

pcs resource create ClusterIP ocf:heartbeat:IPaddr2  ip=192.168.11.165 cidr_netmask=24 op monitor interval=30s 

ocf:heartbeat:IPaddr2

第一部分ocf即资源脚本服从标准和执行位置/pcs resource standards

第二部分heartbeat即明确标准,对于OCF资源,告诉集群资源脚本在哪个OCF命名空间/pcs resource providers 

第三部分IPaddr2即资源脚本名称 /pcs resource agents ocf:heartbeat

删除资源

pcs resource delete ClusterIP


资源添加

故障转移

pcs cluster stop pcmk-1

pcs status



节点1下线,但是节点1的pcsd还是激活的,可以继续接受pcs命令,ClusterIP现在运行在节点2上。

这里还有一个资源黏性的概念,即类似服务自身转移花费,即防止恢复后的资源转移造成额外开销

pcs resource defaults resource-stickiness=100

pcs resource defaults 

Quorum

投票仲裁机制,过半数即有仲裁权

total_nodes < 2 * active_nodes

但是双节点是一个特殊情况, corosync has the ability to treat two-node clusters as if only one node is required for quorum.

添加Apache HTTP Server作为集群服务

安装Apache

# yum install -y httpd wget

# firewall-cmd --permanent --add-service=http

# firewall-cmd --reload

不要enable httpd服务,即服务自启动。对于集群软件管理的服务不应该交给OS管理。通过手动的启动、停止、验证后再加入到集群,可以防止一些非集群问题的引入。

Note:我自己遇到的一个问题,节点1 WebSite资源添加后显示为Starting状态并且报错Fail Action on pcmk-1,转移到pcmk-2后同样出错,最后Stopped。

原因:status URL没有配置成正确的格式,httpd.service无法正常启动。

总结:新添加资源可以开放服务端口,不要设置自启动或者在未手动运行成功前不要添加成资源

新建Website

Apache默认网页目录是/var/www/html

# cat <<-END >/var/www/html/index.html

<html> 

    <body>

        My Test Site - $(hostname)

    </body>    

</html>  

END

启用Apache status URL

为了监控Apache实例,故障恢复,Pacemaker使用的资源代理层默认server-status URL是可用的

# cat <<-END >/etc/httpd/conf.d/status.conf

<Location /server-status> 

   SetHandler server-status 

    Require local 

</Location>  

END

Note:这里的格式要严格要求这样,不然启动httpd.service会报错,即一行一条指令

httpd配置文件httpd.conf规则说明和一些基本指令

不同的OS server-status可能默认启用了or配置路径不同;

Apache HTTP Server版本低于2.4,语法也会不同

配置集群

添加Website资源

pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status"  op monitor interval=1min

默认对于 start, stop, and monitor的操作超时限制时20s,很多情况下这个timeout限制低于特定资源建议的timeout。这里,我们调整全局操作的timeout为240s。

pcs resource op defaults timeout=240s

pcs resource op defaults

在生产集群,还是对每个资源的start, stop, and monitor timeout分别调整比较好,而不是全局设置。


Note:WebStite资源和IP没有运行在同一主机上

如果显示错误,可能是没有正确启用status URL,可以运行以下命令检查:

wget -O - http://localhost/server-status

看到 Not Found or Forbidden,那么就可能是status错误了,检查<Location /server-status>块是否正确。

保证资源运行在同一主机

为了减轻任一主机的负载,Pacemaker会将配置的资源分散到集群节点上。当然,也可以声明两个资源是相关的需要运行在同一主机。这里,声明WebSite只能运行在激活了ClusterIP的主机上。

constraint colocation

表明两种资源位置选择的顺序,即WebSite资源选择位置前需要先找到ClusterIP的位置

INFINITY score表明如果ClusterIP没有在任一节点激活,那WebSite也不会在任一节点启用。

pcs constraint colocation add WebSite with ClusterIP INFINITY

pcs constraint 

保证资源有序启动和停止

ordering constraint

保证ClusterIP先于WebSite运行

pcs constraint order ClusterIP then WebSite

pcs constraint 

节点偏好性

location constraint

Pacemaker不要求节点硬件的对称性,即节点机器差异是允许的。

引出当条件更好的机器可用时,为了更好的性能表现就会出现偏好or资源放在稍差的节点,那在故障转移的时候就不用担心负载的问题了

pcs constraint location WebSite prefers pcmk-1=50

pcs constraint

查看当前替换分数:

crm_simulate -sL 

Note:设置了节点1的prefer score为50,但是还是低于前面设置的资源黏性100,即转移失败

手动转移资源

管理员覆盖集群并强制移动资源到特定位置,比如这里强制移动WebSite到pcmk-1

pcs resource move WebSite pcmk-1

pcs constraint

pcs resource move会创建一个临时约束其分数为INFINITY


ClusterIP和WebSite资源都转移到了节点1


Location Constraints可以看到新的约束

恢复正常操作,去除新约束

pcs resource clear WebSite

pcs constraint


新约束已经去除


Note:由于第一个Location Constraint和资源黏性,资源还是在节点1上

去除第一个score为50的Location Constraint

pcs constraint --full

pcs constraint remove {ID}


分布式复制块设备DRBD

即使使用静态页面网站,手动在集群节点间同步网站内容也是不现实的;对于动态网站,像wiki就更不在考虑内了。NAS太过昂贵,数据又需要同步。

DRBD,可以理解为是network-based RAID-1(mirror)

安装DRBD

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

# yum install -y kmod-drbd84 drbd84-utils

默认SElinux安全策略禁止DRBD运行

# semanage permissive -a drbd_t

配置DRBD到端口7789

# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.11.163/164" port port="7789" protocol="tcp" accept'

无效..没搞懂

# firewall-cmd --permanent --zone=public --add-port=7789/tcp

# firewall-cmd --reload

分配一个磁盘卷给DRBD

DRBD需要每个节点上有独享的块设备。可以是物理磁盘分区or逻辑卷,任意大小。

这里,我们使用512M LV,存储单个HTML文件和GFS2 metadata

# vgdisplay | grep -e Name -e Free

# lvcreate --name drbd-demo --size 512M centos

# lvs

ssh方式:

ssh pcmk-2 -- lvcreate --name drbd-demo --size 512M centos

配置DRBD

配置DRBD资源文件

#  cat <<END >/etc/drbd.d/wwwdata.res

resource wwwdata{protocol C;meta-disk internal;device /dev/drbd1;syncer{verify-alg sha1;}net{allow-two-primaries;}on pcmk-1{disk /dev/centos/drbd-demo;address 192.168.11.163:7789; }on pcmk-2{disk /dev/centos/drbd-demo;address 192.168.11.164:7789;}}

END

Note:自行更改ip地址和LV路径

初始化DRBD

# systemctl start drbd.service

drbdadm create-md wwwdata

modprobe drbd

drbdadm up wwwdata

cat /proc/drbd


还未初始化数据所以显示 Inconsistent,没有初始化从节点,本地状态为 WFConnection(wait for connection),另一节点的状态为 Unknown

节点2重复上一步 报错:Module drdb not found

uname -r

不低于3.10.0-514.6.1.el7.x86_64

yum -y install kernel-devel kernel kernel-headers or yum -y install kernel*

reboot

节点1作为正确数据节点

[root@pcmk-1 ~]# drbdadm primary --force wwwdata


填充DRBD磁盘

primary节点建立文件系统

mkfs.xfs /dev/drbd1

mount /dev/drbd1 /mnt

cat <<-END >/mnt/index.html

<html> <body>My Test Site - DRBD</body> </html>

END

chcon -R --reference=/var/www/html /mnt

umount /dev/drbd1

DRBD设备配置集群

pcs一个重要特点就是整合多个更改到一个文件并一次性提交。开始前,先填充CIB现有的原始XML配置文件。

pcs cluster cib drbd_cfg

pcs的-f参数,修改存储在drbd_cfg的配置文件,这部分修改在drbd_cfg文件推送到集群CIB前是不可见的。

这里,为DRBD设备新建了一个集群资源以及一个额外的clone资源来保证资源同时在两个节点运行。

pcs -f drbd_cfg resource create WebData ocf:linbit:drbd drbd_resource=wwwdata op monitor interval=60s

pcs -f drbd_cfg resource master WebDataClone WebData master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

pcs -f drbd_cfg resource show


pcs cluster cib-push drbd_cfg --config

pcs status


资源代理层要在DRBD模块未加载时遇到需要DRBD模块时自动加载,如果失效,配置OS自启动模块。对于Centos 7.5:

# echo drbd >/etc/modules-load.d/drbd.conf

配置集群文件系统

上述已经配置了可以工作的DRBD设备,现在还需要挂载其文件系统

除了定义文件系统,还需要告诉集群其位置(在DRBD主节点上)以及启动时间(主节点启动后)

这次创建资源时可以取巧,不直接显示声明需要 ocf:heartbeat:Filesystem 脚本,只调用Filesystem。之所以可以这么干,是因为在Pacemaker中只有一个资源脚本叫Filesystem,并且pcs也可以自动填充ocf:heartbeat。如果OCF providers有多个Filesystem脚本,就需要明确声明完整的Filesystem了。

pcs cluster cib fs_cfg

pcs -f fs_cfg resource create WebFS Filesystem device="/dev/drbd1" directory="/var/www/html" fstype="xfs"


Note:可以看到Pacemaker自己推断的过程

pcs -f fs_cfg constraint colocation add WebFS with WebDataClone INFINITY with-rsc-role=Master

pcs -f fs_cfg constraint order promote WebDataClone then start WebFS


pcs -f fs_cfg constraint colocation add WebSite with WebFS INFINITY

pcs -f fs_cfg constraint order WebFS then WebSite 

pcs -f fs_cfg constraint

pcs -f fs_cfg resource show


pcs cluster cib-push fs_cfg --config

pcs status


测试集群故障转移

之前的测试通过pcs cluster stop pcmk-1来停止pcmk-1上所有集群服务,故障转移集群资源,但还有一种安全模拟节点崩溃的办法。

可以让节点进入standby模式。这个模式下的节点可以继续运行corosync和pacemaker但是无法运行资源。任何原本在此节点激活的资源都会被转移。这个特性在执行系统管理任务比如更新资源所需的packages时会非常有用。

pcs cluster standby pcmk-1

pcs status


结束standby节点上的事务后,恢复正常运行

pcs cluster unstandby pcmk-1

pcs status


Note:pcmk-1已经恢复到Online模式,而资源由于之前设置的资源黏性还是留在pcmk-2

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容