利用Pacemaker集群管理让Apache最大可用性
实验环境:
系统版本:CentOS release 6.5 (Final)_x64
node1: ip :192.168.0.233 #写进/etc/hosts文件中
node2: ip :192.168.0.234
vip: 192.168.0.183
注意:1.两台机器务必写静态ip,切记莫用dhcp获取ip,确保两个机器互相能ping通
2. 先禁用防火墙和SELinux
一.配置SSH
SSH 是一个方便又安全的用来远程传输文件或运行命令的工具. 在这个文档中, 我们创建ssh key(用 -N 选项)来免去登入要输入密码的麻烦。
创建一个密钥并允许所有有这个密钥的用户登入
在node1上操作:
[root@node1 ~]# ssh-keygen -t dsa -f ~/.ssh/id_dsa -N ""
[root@node1 ~]# cp .ssh/id_dsa.pub .ssh/authorized_keys
[root@node1 ~]# scp -r .ssh node2:
ok,我们已经做好了双机认证
二.集群软件安装/配置(两台机器都要做同样的操作)
1.这里,我们用的rpm包安装的,建议使用163源或epel 源进行依赖关系解决:
epel-release-6-5.noarch #我用的是epel源,找不到源rpm包的话可以留言给我
rpm -ivh epel-release-6-5.noarch.rpm #安装
163源:
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
2.设置Pacemaker源:
vi /etc/yum.repos.d/centos.repo #贴入如下内容
[centos-6-base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
enabled=1
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
3.安装集群软件:
[root@node1 ~]# yum makecache #缓存一下
[root@node1 ~]# yum install lvm2-cluster corosync pacemaker pcs -y #安装请这样安装,官网文档有点坑,大概八十六个包
4.开始集群设置:
[root@node1 ~]# /etc/init.d/pcsd start
[root@node2 ~]# /etc/init.d/pcsd start
① 设置hacluster用户设置密码。两个节点设置一致
[root@node1 ~]# passwd hacluster
[root@node2 ~]# passwd hacluster
② 配置 Corosync
hacluster 这个我们之前用过的用户就是做统一的集群管理用的,这里配置corosync就是用到这个用户,配置完成后生成corosync.conf 发送到各个节点上hacluster在一个集群中的节点认证的的事情。
[root@node1 ~]# pcs cluster auth node1 node2
Username: hacluster
Password: #这里输入redhat
node1: Authorized
node2: Authorized
[root@node1 ~]# pcs cluster setup --name mycluster node1 node2
node1: Updated cluster.conf...
node2: Updated cluster.conf...
③ 启动我们的集群:
[root@node1 ~]# pcs cluster start --all #启动稍微有点慢,耐心等待
④ 查看我们创建的集群,节点状态:
[root@node1 ~]# pcs status
[root@node1 ~]# pcs status corosync
[root@node1 ~]# crm_verify -L -V #查看你会发现很多错误
[root@node1 ~]# pcs property set stonith-enabled=false #关掉这些错误
三.开始配置我们的Apache高可用(主/备)
①.添加vip
首先要做的是配置一个IP地址,不管集群服务在哪运行,我们要一个固定的地址来提供服务。在这里我选择 192.168.0.183作为浮动IP,给它取一个好记的名字 ClusterIP 并且告诉集群每30秒检查它一次。
[root@node1 ~]# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.0.183 cidr_netmask=32 op monitor interval=30s
另外一个重要的信息是 ocf:heartbeat:IPaddr2。这告诉Pacemaker三件事情,第一个部分ocf,指明了这个资源采用的标准(类型)以及在哪能找到它。第二个部分标明这个资源脚本的在ocf中的名字空间,在这个例子中是heartbeat。最后一个部分指明了资源脚本的名称。
[root@node1 ~]# pcs status #查看我们已经创建好的资源,一个vip现在已经在node1 上运行
②安装Apace
在继续前,我们需要确保两个节点上都安装了Apache。
[root@node1 ~]# yum -y install httpd
[root@node2 ~]# yum -y install httpd
准备工作,给Apache,写个默认首页:
[root@node1 ~]# cat <<-END >/var/www/html/index.html
welcome to node 1
END
[root@node2 ~]# cat <<-END >/var/www/html/index.html
welcome to node 2
END
③开启 Apache status URL
为了监控Apache实例的健康状态,并在它挂掉的时候恢复Apache服务,pacemaker使用的资源agent会假设 server-status URL是可用的。查看/etc/httpd/conf/httpd.conf并确保下面的选项没有被禁用或注释掉。,在这里我们直接添加了,默认是注释的。
注意,两个node的Apache都要添加,切勿偷懒
vi /etc/httpd/conf/httpd.conf
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
⑤ Apache 添加进我们的集群中
[root@node1~]#pcs resource create Web ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=1min
现在,Apache已经可以添加到集群中了。我们管这个资源叫Web。我们需要用一个叫做apache的OCF脚本,这个脚本在heartbeat这个名字空间里,唯一一个需要设定的参数就是Apache的主配置文件路径,并且我们告诉集群每一分钟检测一次Apache是否运行。
默认的,所有资源的start,stop和monitor操作的超时时间都是20秒。在很多情况下这个超时周期小于建议超时时间。在本教程中,我们将调整全局操作的超时时间为240秒。
[root@node1 ~]# pcs resource op defaults timeout=240s
[root@node1 ~]# pcs resource op defaults
timeout: 240s
⑥ 确保资源在同一个节点运行
(1)为了减少每个机器的负载,Pacemaker会智能地尝试将资源分散到各个节点上面。然而我们可以告诉集群某两个资源是有联系并且要在同一个节点运行(或不同的节点运行)。这里我们告诉集群WebSite只能在有ClusterIP的节点上运行。
(2)为此我们使用托管约束来强制性的表明WebS和ClusterIP运行在同一节点。“强制性”部分的托管约束使用分数INFINITY(无穷大)来表示。无穷大也表明了如果ClusterIP没有在任何节点运行,那么Web也不能运行。
[root@node1 ~]# pcs constraint colocation add Web ClusterIP INFINITY
在两个节点上启动Apache即可,用vip访问我们写的界面。
⑦ 控制资源的启动停止顺序
当Apache启动了,它跟可用的IP绑在了一起。它不知道我们后来添加的IP,所以我们不仅需要控制他们在相同的节点运行,也要确保ClusterIP 在Web之前就启动了。我们用添加ordering约束来达到这个效果。我们需要给这个order取个名字(apache-after-ip之类描述性的),并指出他是托管的(这样当ClusterIP恢复了,同时会触发Web的恢复) 并写明了这两个资源的启动顺序。
[root@node1 ~]# pcs constraint order ClusterIP then Web
[root@node1 ~]# pcs constraint #查看一下我们写的规则
⑧ .指定优先的 Location
(1)Pacemaker 并不要求你机器的硬件配置是相同的,可能某些机器比另外的机器配置要好。这种状况下我们会希望设置当某个节点可用时,资源就要跑在上面之类的规则。为了达到这个效果我们创建location约束。
(2)同样的,我们给他取一个描述性的名字(prefer-pcmk-1),指明我们想在上面跑WebSite这个服务,多想在上面跑(我们现在指定分值为50,但是在双节点的集群状态下,任何大于0的值都可以达到想要的效果),以及目标节点的名字:
[root@node1 ~]# pcs constraint #查看我们写好的规则
如果要看现在的分值,可以用crm_simulate这个命令
[root@node1 ~]# crm_simulate -sL
⑨在集群中手动迁移资源
[root@node1 ~]# pcs constraint location Web prefers node2=INFINITY
Pacemaker 还有许多强大的功能还未挖掘,请求期待!
相关文章
- 这篇文章主要介绍了C#简单了解接口(Interface)使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-08
- 护卫神·主机管理系统该版本支持在Windows Server 200320082012,含32位和64位,直接开设配置WEB站、FTP站,以及SQL Server和MySQL,是您开设和管理虚拟主机的绝好帮手。但是对于新用户可能在使用上有一些困难,因此请仔细阅读如下说明文档...2016-01-27
- 这篇文章主要介绍了C#利用DesignSurface如何实现简单窗体设计器的相关资料,文中通过图文及示例代码介绍的很详细,对大家具有一定的参考价值,需要的朋友们下面来一起学习学习吧。...2020-06-25
Apache启动报错No space left on device: AH00023该怎么解决
Apache启动报错No space left on device: AH00023错误可能是进程导致了,虽然小编不知道什么原因但网上提供的解决办法确实是可以解决我们的问题,下面来看看。对于这类错误是因为linux系统的ipc信号量造成的,apache启动时...2015-10-21- 本篇文章是对C#中内存管理以及优化的方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25
js replace(a,b)之替换字符串中所有指定字符的方法
下面小编就为大家带来一篇js replace(a,b)之替换字符串中所有指定字符的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-08-24- 本文我们将分享apache配置黑名单和白名单,apache层的账户权限控制,以及apache黑名单白名单过滤功能,apache rewrite规则实现白名单。 apache配置黑名单和白名单的两...2016-09-14
- 给大家详细讲解了IOS开发中swift语言xcworkspace多项目管理的方法和介绍,一起参考一下。...2020-06-30
- 今天在用百度工具检测时发,发现有个提示如下 原来可以开启gzip啊,因为我的是apache所以和iis不同,经过网站搜索开启方法如下 一,找到你的httpd.conf文件,打开找到如下 ...2016-01-28
解决PHPstudy Apache无法启动的问题【亲测有效】
这篇文章主要介绍了PHPstudy Apache无法启动的问题及解决方法【亲测有效】,本文给大家总结了三种方法供大家参考,需要的朋友可以参考下...2020-10-30apache http server遇到了一个问题,需要关闭
重装系统后,重新安装了xamp,最近启动的时候经常报apache http server遇到了一个问题,需要关闭,显示如图: 解决方法:查看szModName报错的模块,然后把PHP安装目录下对应的模块...2016-01-28- 这篇文章主要为大家详细介绍了js实现车辆管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-26
Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程详解
Windows Server 2016 上配置 APACHE+SSL+PHP+perl怎么配置?小编推荐了一篇介绍Windows Server 2016 上配置 APACHE+SSL+PHP+perl的教程,有需要的同学快来看看吧! ...2017-07-06- namespace即“命名空间”,也称“名称空间” 、”名字空间”。接下来通过本文给大家介绍JavaScript中命名空间namespace模式的相关知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧...2016-06-24
- 这篇文章主要介绍了C# 命名空间(Namespace)的相关知识,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以参考下...2020-11-03
- 下面小编就为大家带来一篇thinkphp自定义权限管理之名称判断方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
nginx+apache+mysql+php+memcached+squid搭建集群web环境
当前,LAMP开发模式是WEB开发的首选,如何搭建一个高效、可靠、稳定的WEB服务器一直是个热门主题,本文就是这个主题的一次尝试。...2016-01-27- 今天小编就为大家分享一篇关于C++与namespace有关的两个编译错误的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-04-25
- 这篇文章主要为大家想详细介绍了C++学生信息管理系统的实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-04-25
- C#里面的String.Replace(string,string)方法替换的时候是替换所有的匹配项,我们需要只替换第一个匹配项,写一个方法来实现这个功能...2020-06-25