温馨提示:
前一篇博文己经介绍过了corosync+pacemaker基本用法,这篇将重点介绍基于corosync+pacemaker的web高可用
---本文大纲
资源分配及拓扑图
实现过程
测试
==================
一、资源分配及拓扑图
1、资源分配
| 系统 | 主机名 | 角色 | ip地址 | 关系 |
| Centos 6.5x86_64 | 数据库+NFS | 192.168.1.110 | 为两个web节点存储数据与站点 | |
| Centos 6.5x86_64 | web | 192.168.1.109 | apache+php 站点位于1.110 | |
| Centos 6.5x86_64 | essun.web2.org | web | 192.168.1.108 | apache+php 站点位于1.110 |
2、拓扑图
二、实现过程
注:
主机名(与uname -n相同,节点之间可以解析主机名)
时间同步
无密码登录
1、node1配置过程
己安装的包组
#yum groupinstall -y "Development tools" "Server Platform Development" # yum install -y crmsh-1.2.6-4.el6.x86_64.rpm pssh-2.3.1-2.el6.x86_64.rpm
[root@essun .ssh]# curl -I http://192.168.1.108 HTTP/1.1 200 OK Date: Wed, 30 Apr 2014 06:05:04 GMT Server: Apache/2.4.9 (Unix) X-Powered-By: PHP/5.4.26 Content-Type: text/html
连接数据库测试
<?php
$link = mysql_connect('192.168.1.110','root','mysql');
if ($link)
echo "Success...";
else
echo "Failure...";
mysql_close();
?>[root@essun web]# curl http://192.168.1.108 Success...
安装corosync、pacemaker
#yum install corosync pacemaker
以上步骤出需要在节点web2上执行。
修改corosync的配置文件(/etc/corosync/corosync),增加service区域
[root@localhost download]# cd /etc/corosync/ [root@localhost corosync]# ls corosync.conf.example service.d corosync.conf.example.udpu uidgid.d [root@localhost corosync]# cp corosync.conf.example corosync.conf [root@localhost corosync]# vim corosync.conf
配置结果
# Please read the corosync.conf.5 manual page
compatibility: whitetank
totem {
version: 2
secauth: on
threads: 0
interface {
ringnumber: 0
bindnetaddr: 192.168.1.1
mcastaddr: 226.94.1.1
mcastport: 5405
ttl: 1
}
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: no
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
service {
ver:0
name:pacemaker
}
aisexec {
user :root
group:root
}
amf {
mode: disabled
}生成密钥
[root@localhost corosync]# mv /dev/random /dev/xrandom [root@localhost corosync]# mv /dev/urandom /dev/random [root@localhost corosync]# corosync-keygen Corosync Cluster Engine Authentication key generator. Gathering 1024 bits for key from /dev/random. Press keys on your keyboard to generate entropy. Writing corosync key to /etc/corosync/authkey. [root@localhost corosync]# mv /dev/random /dev/urandom [root@localhost corosync]# mv /dev/xrandom /dev/random
查看一下生成后的文件属性(authkey的属性必须的600否则corosync无法启动)
[root@localhost corosync]# ll total 24 -r-------- 1 root root 128 Apr 30 09:25 authkey -rw-r--r-- 1 root root 480 Apr 30 09:21 corosync.conf
将配置好的文件复制到节点web2上
[root@localhost corosync]# scp authkey corosync.conf essun.web2.org:/etc/corosync/ The authenticity of host 'essun.web2.org (192.168.1.109)' can't be established. RSA key fingerprint is b8:9d:cb:7b:4d:ad:c2:fb:a4:00:23:b0:f2:6b:3f:ad. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'essun.web2.org' (RSA) to the list of known hosts. authkey 100% 128 0.1KB/s 00:00 corosync.conf 100% 480 0.5KB/s 00:00
启动服务
root@essun web]# service pacemaker start Starting Pacemaker Cluster Manager [ OK ] [root@essun web]# service corosync start Starting Corosync Cluster Engine (corosync): [ OK ]
查看在线节点
[root@essun web]# crm crm(live)# status Last updated: Wed Apr 30 15:16:37 2014 Last change: Wed Apr 30 14:21:31 2014 via crmd on Stack: classic openais (with plugin) Current DC: essun.web2.org - partition with quorum Version: 1.1.10-14.el6_5.3-368c726 2 Nodes configured, 2 expected votes 0 Resources configured Online: [ essun.web2.org ]
2、编译mariadb(此文中有详细的介绍)
安装nfs
#yum install -y nfs*
指定共享目录
#mkdir -p /web/share #vim /etc/exports /web/share *(insecure,rw,async,no_root_squash) # exportfs -rav exporting *:/web/share # service nfs restart Shutting down NFS daemon: [ OK ] Shutting down NFS mountd: [ OK ] Shutting down NFS quotas: [ OK ] Shutting down NFS services: [ OK ] Shutting down RPC idmapd: [ OK ] Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ] Starting RPC idmapd: [ OK ]
安装Discuz
# unzip Discuz_X3.1_SC_UTF8.zip # mv readme/ upload/ utility/ /web/share/ # chmod -R 777 upload/
挂载到web1上
[root@essun download]# mount -t nfs 192.168.1.110:/web/share /www/web/
使用网页访问安装Discuz
第一步
第二步
第三步
第四步
第五步
第六步
这样在web1上可以访问了,在web2上只要挂载nfs(1.110:/web/share),在站点目录就可以访问了
3、实现 web高可用
禁用stonith及忽略投票功能
crm(live)configure# property stonith-enabled=false
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show
node
node essun.web2.org
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6_5.3-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore"定义vip
crm(live)configure# primitive webip ocf:heartbeat:IPaddr params ip=192.168.1.100 crm(live)configure# verify crm(live)configure# commit
挂载文件系统
crm(live)configure# primitive webnfs ocf:heartbeat:Filesystem params device="192.168.1.110://web/share" directory="/www/web" fstype="nfs" op monitor interval=60s timeout=60s op start timeout=60s op stop timeout=60s crm(live)configure# verify crm(live)configure# commit
定义web、php-fpm服务
crm(live)configure# primitive webserver lsb:httpd24
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# primitive webphp lsb:php-fpm
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show
node
node essun.web2.org
primitive webip ocf:heartbeat:IPaddr \
params ip="192.168.1.100"
primitive webnfs ocf:heartbeat:Filesystem \
params device="192.168.1.110://web/share" directory="/www/web" fstype="nfs" \
op monitor interval="60s" timeout="60s" \
op start timeout="60s" interval="0" \
op stop timeout="60s" interval="0"
primitive webphp lsb:php-fpm
primitive webserver lsb:httpd24
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6_5.3-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore"将多个资源整合在一起(此处也可以使用排列约束)
crm(live)configure# group webservice webip webnfs webserver webphpcrm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show
node
node essun.web2.org
primitive webip ocf:heartbeat:IPaddr \
params ip="192.168.1.100"
primitive webnfs ocf:heartbeat:Filesystem \
params device="192.168.1.110:/web/share" directory="/www/web" fstype="nfs" \
op monitor interval="60s" timeout="60s" \
op start timeout="60s" interval="0" \
op stop timeout="60s" interval="0"
primitive webphp lsb:php-fpm
primitive webserver lsb:httpd24
group webservice webip webnfs webserver webphp
property $id="cib-bootstrap-options" \
dc-version="1.1.10-14.el6_5.3-368c726" \
cluster-infrastructure="classic openais (with plugin)" \
expected-quorum-votes="2" \
stonith-enabled="false" \
no-quorum-policy="ignore"注:
集群内节点资源都不要开机自动启动。
在web1测试一下
crm(live)# status
Last updated: Wed Apr 30 16:32:55 2014
Last change: Wed Apr 30 16:32:47 2014 via cibadmin on
Stack: classic openais (with plugin)
Current DC: essun.web2.org - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured, 2 expected votes
4 Resources configured
Online: [ essun.web2.org ]
Resource Group: webservice
webip (ocf::heartbeat:IPaddr): Started
webnfs (ocf::heartbeat:Filesystem): Started
webserver (lsb:httpd24): Started
webphp (lsb:php-fpm): Started
crm(live)#三、测试
访问192.168.1.100/upload
模拟节点web1故障,看看所有的资源是不是能够转移
crm(live)node# standby
crm(live)node# cd ..
crm(live)# status
Last updated: Wed Apr 30 16:38:07 2014
Last change: Wed Apr 30 16:38:02 2014 via crm_attribute on
Stack: classic openais (with plugin)
Current DC: essun.web2.org - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured, 2 expected votes
4 Resources configured
Node : standby
Online: [ essun.web2.org ]
Resource Group: webservice
webip (ocf::heartbeat:IPaddr): Started essun.web2.org
webnfs (ocf::heartbeat:Filesystem): Started essun.web2.org
webserver (lsb:httpd24): Started essun.web2.org
webphp (lsb:php-fpm): Started essun.web2.org结果完全无影响

























