Chinaunix首页 | 论坛 | 博客
  • 博客访问: 187458
  • 博文数量: 46
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-26 14:22
个人简介

做最Low逼的DBA

文章分类

全部博文(46)

文章存档

2017年(46)

我的朋友

分类: LINUX

2017-04-19 21:38:21

前提:
1)本配置共有两个测试节点,分别node1.heyuxuan.com和node2.heyuxuan.com,相的IP地址分别为192.168.1.30和192.168.1.31;
2)集群服务为apache的httpd服务;
3)提供web服务的地址为192.168.1.101;
4)系统为CentOS 6.5 X86_64


1、准备工作


为了配置一台Linux主机成为HA的节点,通常需要做出如下的准备工作:


1)所有节点的主机名称和对应的IP地址解析服务可以正常工作,且每个节点的主机名称需要跟"uname -n“命令的结果保持一致;因此,需要保证两个节点上的/etc/hosts文件均为下面的内容:
192.168.1.30   node1.heyuxuan.com node1
192.168.1.31  node2.heyuxuan.com node2


为了使得重新启动系统后仍能保持如上的主机名称,还分别需要在各节点执行类似如下的命令:


Node1:
# sed -i 's@\(HOSTNAME=\).*@\1node1.heyuxuan.com@g'  /etc/sysconfig/network
# hostname node1.heyuxuan.com


Node2:
# sed -i 's@\(HOSTNAME=\).*@\1node2.heyuxuan.com@g' /etc/sysconfig/network
# hostname node2.heyuxuan.com


2)设定两个节点可以基于密钥进行ssh通信,这可以通过类似如下的命令实现:
Node1:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2


Node2:
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


【适用于红帽系列:Redhat 5.8 操作系统安装】
2、安装如下rpm包:
libibverbs, librdmacm, lm_sensors, libtool-ltdl, openhpi-libs, openhpi, perl-TimeDate




3、安装corosync和pacemaker,首先下载所需要如下软件包至本地某专用目录(这里为/root/cluster):
cluster-glue
cluster-glue-libs
heartbeat
resource-agents
corosync
heartbeat-libs
pacemaker
corosynclib
libesmtp
pacemaker-libs


下载地址:。请根据硬件平台及操作系统类型选择对应的软件包;这里建议每个软件包都使用目前最新的版本。
  32bits rpm包下载地址:   epel-5/i386/
  64bits rpm包下载地址:   epel-5/x86_64/


使用如下命令安装:
# cd /root/cluster
# yum -y --nogpgcheck localinstall *.rpm


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


【适用于CentOS 6.5 X86_64位系统安装】


[root@node1 corosync]# yum install corosync




[root@node1 corosync]# yum install pacemaker




##pacemaker需要依赖heartbeat使用

##需要自行下载heartbeat-3.0.4-2.el6.x86_64以及heartbeat-libs-3.0.4-2.el6.x86_64进行安装


[root@node1 ~]#  yum -y --nogpgcheck localinstall heartbeat-3.0.4-2.el6.x86_64 heartbeat-libs-3.0.4-2.el6.x86_64




4、crmsh的安装及使用简介
1.Pacemaker配置资源方法
(1).命令配置方式crmshpcs(2).图形配置方式pyguihawkLCMCpcs
#注:本文主要的讲解的是crmsh
2.安装crmsh
RHEL自6.4起不再提供集群的命令行配置工具crmsh,转而使用pcs;如果你习惯了使用crm命令,可下载相关的程序包自行安装即可。crmsh依赖于pssh,因此需要一并下载。



python-pssh-2.3.1-4.2.x86_64
pssh-2.3.1-4.2.x86_64



crmsh-1.2.6-0.rc2.2.1.x86_64






[root@node1 ~]#  yum -y --nogpgcheck localinstall crmsh-1.2.6-0.rc2.2.1.x86_64.rpm pssh-2.3.1-4.2.x86_64.rpm  python-pssh-2.3.1-4.2.x86_64.rpm


##实验用到的crmsh以及pssh安装包的版本,到此为止,crmsh安装完毕




5、配置corosync,(以下命令在node1.heyuxuan.com上执行)


# cd /etc/corosync
# cp corosync.conf.example corosync.conf


接着编辑corosync.conf,添加如下内容:
service {
  ver:  0
  name: pacemaker
  # use_mgmtd: yes
}


aisexec {
  user: root
  group:  root
}


并设定此配置文件中 bindnetaddr后面的IP地址为你的网卡所在网络的网络地址,我们这里的两个节点在192.168.1.0网络,因此这里将其设定为192.168.1.0;如下
bindnetaddr: 192.168.1.0




生成节点间通信时用到的认证密钥文件:
# corosync-keygen


[root@node1corosync]#corosync-keygen
CorosyncClusterEngineAuthenticationkeygenerator.
Gathering1024bitsforkeyfrom/dev/random.
Presskeysonyourkeyboardtogenerateentropy.
Presskeysonyourkeyboardtogenerateentropy(bits=192).
#注:corosync生成key文件会默认调用/dev/random随机数设备,一旦系统中断的IRQS的随机数不够用,将会产生大量的等待时间;




将corosync和authkey复制至node2:
# scp -p corosync authkey  node2:/etc/corosync/


分别为两个节点创建corosync生成的日志所在的目录:
# mkdir /var/log/cluster
# ssh node2  'mkdir /var/log/cluster'


6、尝试启动,(以下命令在node1上执行):


# /etc/init.d/corosync start


查看corosync引擎是否正常启动:
# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/cluster/corosync.log
Apr 15 23:21:06 corosync [MAIN  ] Corosync Cluster Engine ('1.4.1'): started and ready to provide service.
Apr 15 23:21:06 corosync [MAIN  ] Successfully read main configuration file '/etc/corosync/corosync.conf'.


查看初始化成员节点通知是否正常发出:
# grep  TOTEM  /var/log/cluster/corosync.log
Apr 15 23:21:06 corosync [TOTEM ] Initializing transport (UDP/IP Multicast).
Apr 15 23:21:06 corosync [TOTEM ] Initializing transmit/receive security: libtomcrypt SOBER128/SHA1HMAC (mode 0).
Apr 15 23:21:06 corosync [TOTEM ] The network interface [192.168.1.30] is now up.
Apr 15 23:21:06 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.
Apr 15 23:21:20 corosync [TOTEM ] A processor joined or left the membership and a new membership was formed.


检查启动过程中是否有错误产生:
# grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
Apr 16 00:10:03 corosync [pcmk  ] ERROR: process_ais_conf: You have configured a cluster using the Pacemaker plugin for Corosync. The plugin is not supported in this environment and will be removed very soon.
Apr 16 00:10:03 corosync [pcmk  ] ERROR: process_ais_conf:  Please see Chapter 8 of 'Clusters from Scratch' () for details on using Pacemaker with CMAN


#上面的错误信息表示packmaker不久之后将不再作为corosync的插件运行,因此,建议使用cman作为集群基础架构服务;此处可安全忽略。




查看pacemaker是否正常启动:
# grep pcmk_startup /var/log/cluster/corosync.log
Apr 15 23:21:06 corosync [pcmk  ] info: pcmk_startup: CRM: Initialized
Apr 15 23:21:06 corosync [pcmk  ] Logging: Initialized pcmk_startup
Apr 15 23:21:06 corosync [pcmk  ] info: pcmk_startup: Maximum core file size is: 18446744073709551615
Apr 15 23:21:06 corosync [pcmk  ] info: pcmk_startup: Service: 9
Apr 15 23:21:06 corosync [pcmk  ] info: pcmk_startup: Local hostname: node1


如果上面命令执行均没有问题,接着可以执行如下命令启动node2上的corosync
# ssh node2 -- /etc/init.d/corosync start


注意:启动node2需要在node1上使用如上命令进行,不要在node2节点上直接启动;


使用如下命令查看集群节点的启动状态:
# crm status
============
[root@node1 ~]# crm status
Last updated: Sat Apr 16 00:48:37 2016
Last change: Sat Apr 16 00:10:04 2016 via crmd on node2
Stack: classic openais (with plugin)
Current DC: node1 - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
0 Resources configured




Online: [ node1 node2 ]




++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


# crm_mon
=============================
Last updated: Fri Apr 15 23:30:39 2016
Last change: Fri Apr 15 23:21:34 2016 via crmd on node2
Stack: classic openais (with plugin)
Current DC: node1 - partition with quorum
Version: 1.1.10-14.el6-368c726
2 Nodes configured, 2 expected votes
0 Resources configured




Online: [ node1 node2 ]




#注意:如果想要知道一个命令的具体的使用方式,可在命令的前面加上help关键字


crm(live)node# help status


Show nodes' status as XML. If the node parameter is omitted then
all nodes are shown.


Usage:
...............
        status []
...............








从上面的信息可以看出两个节点都已经正常启动,并且集群已经处于正常工作状态。


执行ps auxf命令可以查看corosync启动的各相关进程。
189       71694  0.5  1.0  94012 10108 ?        S    22:44   0:06 /usr/libexec/pacemaker/cib
root      71695  0.0  0.3  94380  3480 ?        S    22:44   0:00 /usr/libexec/pacemaker/stonithd
root      71696  0.0  0.2  76088  2628 ?        S    22:44   0:00 /usr/libexec/pacemaker/lrmd
189       71697  0.0  0.2  89628  2916 ?        S    22:44   0:00 /usr/libexec/pacemaker/attrd
189       71698  0.0  1.8 117276 18368 ?        S    22:44   0:00 /usr/libexec/pacemaker/pengine
189       71699  0.0  0.5 147784  5972 ?        S    22:44   0:00 /usr/libexec/pacemaker/crmd
root      71736  0.0  1.5 228840 15900 pts/0    S+   22:46   0:00 /usr/bin/python /usr/sbin/crm




6、配置集群的工作属性,禁用stonith


corosync默认启用了stonith,而当前集群并没有相应的stonith设备,因此此默认配置目前尚不可用,这可以通过如下命令验正:


# crm_verify -L 
crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
crm_verify[5202]: 2011/06/14_19:10:38 ERROR: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
  -V may provide more details


我们里可以通过如下命令先禁用stonith:
# crm configure property stonith-enabled=false


使用如下命令查看当前的配置信息:
[root@node1 ~]# crm configure show
node node1
node node2
property $id="cib-bootstrap-options" \
        dc-version="1.1.10-14.el6-368c726" \
        cluster-infrastructure="classic openais (with plugin)" \
        expected-quorum-votes="2" \
        stonith-enabled="false"
  
从中可以看出stonith已经被禁用。


上面的crm,crm_verify命令是1.0后的版本的pacemaker提供的基于命令行的集群管理工具;可以在集群中的任何一个节点上执行。




7、为集群添加集群资源


corosync支持heartbeat,LSB和ocf等类型的资源代理,目前较为常用的类型为LSB和OCF两类,stonith类专为配置stonith设备而用;


可以通过如下命令查看当前集群系统所支持的类型:


# crm ra classes 
heartbeat
lsb
ocf / heartbeat pacemaker
stonith


如果想要查看某种类别下的所用资源代理的列表,可以使用类似如下命令实现:
# crm ra list lsb
# crm ra list ocf heartbeat
# crm ra list ocf pacemaker
# crm ra list stonith


# crm ra info [class:[provider:]]resource_agent
例如:
# crm ra info ocf:heartbeat:IPaddr




8、接下来要创建的web集群创建一个IP地址资源,以在通过集群提供web服务时使用;这可以通过如下方式实现:


语法:
primitive [:[:]]
          [params attr_list]
          [operations id_spec]
            [op op_type [=...] ...]


op_type :: start | stop | monitor


例子:
 primitive apcfence stonith:apcsmart \
          params ttydev=/dev/ttyS0 hostlist="node1 node2" \
          op start timeout=60s \
          op monitor interval=30m timeout=60s


应用:
# crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.1.100


通过如下的命令执行结果可以看出此资源已经在node1.heyuxuan.com上启动:
# crm status
============
Last updated: Tue Jun 14 19:31:05 2011
Stack: openais
Current DC: node1.heyuxuan.com - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
1 Resources configured.
============


Online: [ node1.heyuxuan.com node2.heyuxuan.com ]


 WebIP  (ocf::heartbeat:IPaddr):  Started node1.heyuxuan.com


当然,也可以在node1上执行ifconfig命令看到此地址已经在eth0的别名上生效:
# ifconfig 
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:AA:DD:CF  
          inet addr:172.16.100.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:67 Base address:0x2000 
          
而后我们到node2上通过如下命令停止node1上的corosync服务:
# ssh node1 -- /etc/init.d/corosync stop


查看集群工作状态:
# crm status
============
Last updated: Tue Jun 14 19:37:23 2011
Stack: openais
Current DC: node2.heyuxuan.com - partition WITHOUT quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
1 Resources configured.
============


Online: [ node2.heyuxuan.com ]
OFFLINE: [ node1.heyuxuan.com ]


上面的信息显示node1.heyuxuan.com已经离线,但资源WebIP却没能在node2.heyuxuan.com上启动。这是因为此时的集群状态为"WITHOUT quorum",即已经失去了quorum,此时集群服务本身已经不满足正常运行的条件,这对于只有两节点的集群来讲是不合理的。因此,我们可以通过如下的命令来修改忽略quorum不能满足的集群状态检查:


# crm configure property no-quorum-policy=ignore


片刻之后,集群就会在目前仍在运行中的节点node2上启动此资源了,如下所示:
# crm status
============
Last updated: Tue Jun 14 19:43:42 2011
Stack: openais
Current DC: node2.heyuxuan.com - partition WITHOUT quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
1 Resources configured.
============


Online: [ node2.heyuxuan.com ]
OFFLINE: [ node1.heyuxuan.com ]


 WebIP  (ocf::heartbeat:IPaddr):  Started node2.heyuxuan.com
 
好了,验正完成后,我们正常启动node1.heyuxuan.com:
# ssh node1 -- /etc/init.d/corosync start


正常启动node1.heyuxuan.com后,集群资源WebIP很可能会重新从node2.heyuxuan.com转移回node1.heyuxuan.com。资源的这种在节点间每一次的来回流动都会造成那段时间内其无法正常被访问,所以,我们有时候需要在资源因为节点故障转移到其它节点后,即便原来的节点恢复正常也禁止资源再次流转回来。这可以通过定义资源的黏性(stickiness)来实现。在创建资源时或在创建资源后,都可以指定指定资源黏性。


资源黏性值范围及其作用:
0:这是默认选项。资源放置在系统中的最适合位置。这意味着当负载能力“较好”或较差的节点变得可用时才转移资源。此选项的作用基本等同于自动故障回复,只是资源可能会转移到非之前活动的节点上;
大于0:资源更愿意留在当前位置,但是如果有更合适的节点可用时会移动。值越高表示资源越愿意留在当前位置;
小于0:资源更愿意移离当前位置。绝对值越高表示资源越愿意离开当前位置;
INFINITY:如果不是因节点不适合运行资源(节点关机、节点待机、达到migration-threshold 或配置更改)而强制资源转移,资源总是留在当前位置。此选项的作用几乎等同于完全禁用自动故障回复;
-INFINITY:资源总是移离当前位置;


我们这里可以通过以下方式为资源指定默认黏性值:
# crm configure rsc_defaults resource-stickiness=100




9、结合上面已经配置好的IP地址资源,将此集群配置成为一个active/passive模型的web(httpd)服务集群


为了将此集群启用为web(httpd)服务器集群,我们得先在各节点上安装httpd,并配置其能在本地各自提供一个测试页面。


Node1:
# yum -y install httpd
# echo "

node1.heyuxuan.com

" > /var/www/html/index.html


Node2:
# yum -y install httpd
# echo "

node2.heyuxuan.com

" > /var/www/html/index.html


而后在各节点手动启动httpd服务,并确认其可以正常提供服务。接着使用下面的命令停止httpd服务,并确保其不会自动启动(在两个节点各执行一遍):
# /etc/init.d/httpd stop
# chkconfig httpd off




接下来我们将此httpd服务添加为集群资源。将httpd添加为集群资源有两处资源代理可用:lsb和ocf:heartbeat,为了简单起见,我们这里使用lsb类型:


首先可以使用如下命令查看lsb类型的httpd资源的语法格式:
# crm ra info lsb:httpd
lsb:httpd


Apache is a World Wide Web server.  It is used to serve \
         HTML files and CGI.


Operations' defaults (advisory minimum):


    start         timeout=15
    stop          timeout=15
    status        timeout=15
    restart       timeout=15
    force-reload  timeout=15
    monitor       interval=15 timeout=15 start-delay=15


接下来新建资源WebSite:
# crm configure primitive WebSite lsb:httpd


查看配置文件中生成的定义:
node node1.heyuxuan.com
node node2.heyuxuan.com
primitive WebIP ocf:heartbeat:IPaddr \
  params ip="172.16.100.1"
primitive WebSite lsb:httpd
property $id="cib-bootstrap-options" \
  dc-version="1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87" \
  cluster-infrastructure="openais" \
  expected-quorum-votes="2" \
  stonith-enabled="false" \
  no-quorum-policy="ignore"
  
查看资源的启用状态:
# crm status
============
Last updated: Tue Jun 14 19:57:31 2011
Stack: openais
Current DC: node2.heyuxuan.com - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
2 Resources configured.
============


Online: [ node1.heyuxuan.com node2.heyuxuan.com ]


 WebIP  (ocf::heartbeat:IPaddr):  Started node1.heyuxuan.com
 WebSite  (lsb:httpd):  Started node2.heyuxuan.com
 
从上面的信息中可以看出WebIP和WebSite有可能会分别运行于两个节点上,这对于通过此IP提供Web服务的应用来说是不成立的,即此两者资源必须同时运行在某节点上。


由此可见,即便集群拥有所有必需资源,但它可能还无法进行正确处理。资源约束则用以指定在哪些群集节点上运行资源,以何种顺序装载资源,以及特定资源依赖于哪些其它资源。pacemaker共给我们提供了三种资源约束方法:
1)Resource Location(资源位置):定义资源可以、不可以或尽可能在哪些节点上运行;
2)Resource Collocation(资源排列):排列约束用以定义集群资源可以或不可以在某个节点上同时运行;
3)Resource Order(资源顺序):顺序约束定义集群资源在节点上启动的顺序;


定义约束时,还需要指定分数。各种分数是集群工作方式的重要组成部分。其实,从迁移资源到决定在已降级集群中停止哪些资源的整个过程是通过以某种方式修改分数来实现的。分数按每个资源来计算,资源分数为负的任何节点都无法运行该资源。在计算出资源分数后,集群选择分数最高的节点。INFINITY(无穷大)目前定义为 1,000,000。加减无穷大遵循以下3个基本规则:
1)任何值 + 无穷大 = 无穷大
2)任何值 - 无穷大 = -无穷大
3)无穷大 - 无穷大 = -无穷大


定义资源约束时,也可以指定每个约束的分数。分数表示指派给此资源约束的值。分数较高的约束先应用,分数较低的约束后应用。通过使用不同的分数为既定资源创建更多位置约束,可以指定资源要故障转移至的目标节点的顺序。


因此,对于前述的WebIP和WebSite可能会运行于不同节点的问题,可以通过以下命令来解决:
# crm configure colocation website-with-ip INFINITY: WebSite WebIP


接着,我们还得确保WebSite在某节点启动之前得先启动WebIP,这可以使用如下命令实现:
# crm configure order httpd-after-ip mandatory: WebIP WebSite


此外,由于HA集群本身并不强制每个节点的性能相同或相近,所以,某些时候我们可能希望在正常时服务总能在某个性能较强的节点上运行,这可以通过位置约束来实现:
# crm configure location prefer-node1 WebSite rule 200: node1
这条命令实现了将WebSite约束在node1上,且指定其分数为200;

阅读(1423) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~