设为首页 收藏本站
查看: 1673|回复: 0

LEMP环境+corosync+pacemaker+drbd 小菜带你玩转高可用集群

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-8-4 09:39:02 | 显示全部楼层 |阅读模式
验开始前先做以下准备:
实验环境:RHEL6.4
    节点1:admin1.tuchao.com 192.168.18.201
    节点2:admin2.tuchao.com 192.168.18.202

首先两个节点安装DRBD,准备相同大小的分区。
yum install drbd-8.4.3-33.el6.i686.rpm  drbd-kmdl-2.6.32-358.el6-8.4.3-33.el6.i686.rpm -y
分区 (略)
接下来操作admin1.tuchao.com
1、配置/etc/drbd.d/global-common.conf
global {
        usage-count no;
        # minor-count dialog-refresh disable-ip-verification
}

common {
        protocol C;

        handlers {
                pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
                pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
                local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
                # fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
                # split-brain "/usr/lib/drbd/notify-split-brain.sh root";
                # out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
                # before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
                # after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
        }

        startup {
                #wfc-timeout 120;
                #degr-wfc-timeout 120;
        }

        disk {
                on-io-error detach;
                #fencing resource-only;
        }

        net {
                cram-hmac-alg "sha1";
                shared-secret "mydrbdlab";
        }

        syncer {
                rate 1000M;
        }
}
2、定义资源
vim /etc/drbd.d/mydrbd.res

resource mydrbd {
on admin1.tuchao.com {
  device        /dev/drbd0;
  disk          /dev/sdb1;
  address       192.168.18.201:7789;
  meta-disk     internal;
}
on admin2.tuchao.com {
  device        /dev/drbd0;
  disk          /dev/sdb1;
  address       192.168.18.202:7789;
  meta-disk     internal;
}
}
3、将配置文件同步到另一个节点
scp global_common.conf mydrbd.res  admin2:/etc/drbd.d/
4、在两个节点上初始化已定义的资源并启动服务
drbdadm create-md mydrbd
/etc/init.d/drbd start

查看状态,也可以使用drbd-overview命令来查看
cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-05-27 06:20:13
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
    ns:0 nr:4 dw:4 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
由此看出,目前两个节点都是(secondary)备用状态。
将admin1节点提升为(primary)主状态
drbdadm primary --force mydrbd
wKioL1PZ-M7ittS0AAGVU1gKATM160.jpg
同步完成
0:mydrbd/0  Connected Primary/Secondary UpToDate/UpToDate C r-----
创建文件系统在一个节点上操作就可以了,挂载。
mkfs.ext4 /dev/drbd0
mkdir /mnt/drbd
mount /dev/drbd0 /mnt/drbd
drbd基本配置完成,我们在里面创建一个文件夹。
mkdir /mnt/drbd/mydata
卸载/dev/drbd0,将状态转为备。
umount /dev/drbd0
drbdadm secondary mydrbd
在admin2上,把状态提升为primary
drbdadm primary --force mydrbd
mkdir /mnt/drbd
mount /dev/drbd0 /mnt/drbd
ls /mnt/drbd
wKiom1PZ-0jzjqwQAADmrbG3tI8969.jpg
这时我们再到两个节点上添加一个分区sdb3,做成drbd,用于存放网页数据。
资源配置文件如下:
wKioL1Pa8xCCx83QAAJNL5aqkZQ342.jpg
接下来初始化设备,提升状态,创建文件系统都和前面一样,这里略。






drbd资源mydrbd:

/dev/drbd0 挂载至  /mnt/drbd  

/mnt/drbd/mydata  --用于存放MySQL数据。
drbd资源webdrbd:
drbd1 挂载至  /mnt/http
/mnt/http/wordpress  --用于存放博客站点数据
/mnt/http/myadmin  --用于存放phpMyAdmin

提升primary状态,挂载文件系统,初始化数据库,测试启动数据库。
drbdadm primary --force mydrbd
./scripts/mysql_install_db --user=mysql --datadir=/mnt/drbd/mydata/
/etc/init.d/mysqld start
创建wpdb库,授权连接用户,用做博客站点。
create database wpdb;

grant all privileges on wpdb.* to 'wpuser'@'127.0.0.1' identified by '123456';
停止数据库,卸载drbd0,状态转为备用。
到另一个节点,提升为primary状态,挂载文件系统,启动服务。
注意这里不需要再次初始化数据库了,在一个节点上做了就可以了,数据会同步过来的。
要保证节点提升为primary挂载文件系统正常,MySQL能启动,MySQL这边就差不多完事了。



webdrbd资源提升primary,挂载文件系统,导入博客站点数据。
drbdadm primary --force webdrbd
mkdir /mnt/http
mkfs.ext4 /dev/drbd1

mount /dev/drbd1  /mnt/http/
tar zxvf wordpress-3.9-zh_CN.tar.gz
mkdir /mnt/http/wordpress
mkdir /mnt/http/myadmin
mv wordpress/* /mnt/http/wordpress/
配置wordpress 数据库接口。

cp config.sample.inc.php  config.inc.php

vim config.inc.php
wKioL1PbLErQAXHzAAFWdnG5Ew8060.jpg
导入phpMyAdmin数据。
unzip phpMyAdmin-4.0.5-all-languages.zip
cd phpMyAdmin-4.0.5-all-languages
mv phpMyAdmin-4.0.5-all-languages/* /mnt/http/myadmin/
生成一串随机数加入到config.inc.php文件。

配置php-fpm
vim /usr/local/php/etc/php-fpm.conf

wKiom1PbMMuBriAPAAGCsUBOweE241.jpg
完成后保存,启动php-fpm。


接下来配置Nginx,包含vhost目录下所有以.conf结尾的文件。
在http段中加入:
include vhost/*.conf;
为wordpress博客添加虚拟主机
vim /etc/nginx/vhost/www.tuchao.com.conf

wKioL1PbL2yBCOslAAElkTl150s689.jpg
为phpMyAdmin添加虚拟主机。
wKiom1PbLrqzk0h9AAEQy9rCjYo796.jpg
然后重启nginx服务,访问页面测试。
www.tuchao.com

wKioL1PbMSqxG6mUAAFw4N2Olic582.jpg
www.myadmin.com

wKiom1PbMCXg27gbAAFwSz6RbA0937.jpg


另一个节点安装好相应的应用程序,把配置文件同步过去。

数据则是通过drbd切换过去,然后把服务都启动起来测试一下能否正常工作,这里一定要测试。

这里我测试都工作正常,博客和php-MyAdmin都可以正常访问,操作和前面差不多,我就省略了。


资源定义有常用的两个工具,crmsh和pcs,这里介绍下pcs简单用法。
pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
pcs resource create vip ocf:heartbeat:IPaddr params ip=192.168.18.254 cidr_netmask=24
pcs resource create //创建资源
pcs constraint order vip then webstore then httpd  //定义顺序约束
pcs resource group add myservice  <res> <res> ... //定义资源组

在定义php-fpm为集群资源出错时,解决方法请参考:http://tchuairen.blog./3848118/1534231

接下来进入正题,定义资源,实现两个节点高可用。

我们需要定义的资源:
vip:192.168.18.254
mydrbd //需要定义为主从,当主节点出现故障后,从节点自动提升为主节点,实现高可用。
webdrbd //同上
为mydrbd定义文件系统挂载点,为MySQL提供存储。
为webdrbd定义文件系统挂载点,为站点程序提供存储。
mysqld //MySQL服务
nginx  //nginx服务
php-fpm //php-fpm服务

查看资源代理使用帮助信息
crm ra meta ocf:linbit:drbd
pcs resource describe ocf:linbit:drbd

由于我们没有stonith设备,所以要关闭stonith不然会报错。
crm configure property stonith-enabled=false
由于我们只有两个节点,配置忽略票数。
crm configure property no-quorum-policy=ignore

定义主从drbd参数。
master-max 有多少个可以提升为主节点的。
master-node-max 在单个节点上最多可以运行几个主资源
clone-max 最多可以运行多少个clone
clone-node-max 单个节点最多可以运行多少个clone
notify 是否启用通知机制

定义mydrbd资源代理
primitive mydrbd ocf:linbit:drbd \
        params drbd_resource="mydrbd" \
        op monitor role="Master" interval="10" timeout="20" \
        op monitor role="Slave" interval="20" timeout="20" \
        op start timeout="240" interval="0" \
        op stop timeout="100" interval="0"
定义mysqld
primitive mysqld lsb:mysqld \
        op monitor interval="15" timeout="15" \
        op start timeout="30" interval="0" \
        op stop timeout="30" interval="0"
定义drbd0挂载资源,为mysql提供数据存储。
primitive mystore ocf:heartbeat:Filesystem \
        params device="/dev/drbd0" directory="/mnt/drbd" fstype="ext4" \
        op monitor interval="60" timeout="50" \
        op start timeout="60" interval="0" \
        op stop timeout="60" interval="0"
定义nginx
primitive nginx lsb:nginx \
        op monitor interval="15" timeout="15" \
        op start timeout="15" interval="0" \
        op stop timeout="15" interval="0"
定义php-fpm
primitive php-fpm lsb:php-fpm
定义vip
primitive vip ocf:heartbeat:IPaddr \
        params ip="192.168.18.254" cidr_netmask="24" \
        op monitor interval="10" timeout="20" on-fail="restart" \
        op start timeout="20" interval="0" \
        op stop timeout="20" interval="0"
定义webdrbd资源代理
primitive webdrbd ocf:linbit:drbd \
        params drbd_resource="webdrbd" \
        op monitor role="Master" interval="10" timeout="20" \
        op monitor role="Slave" interval="20" timeout="20" \
        op start timeout="240" interval="0" \
        op stop timeout="100" interval="0"
定义webdrbd挂载资源,为网站程序提供数据存储。
primitive webstore ocf:heartbeat:Filesystem \
        params device="/dev/drbd1" directory="/mnt/http" fstype="ext4" \
        op monitor interval="60" timeout="50" \
        op start timeout="60" interval="0" \
        op stop timeout="60" interval="0"
定义资源组
group webserver mysqld nginx vip php-fpm
将mydrbd定义为主从类型
ms ms_mydrbd mydrbd \
        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
将webdrbd定义为主从类型
ms ms_webdrbd webdrbd \
        meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"

排列约束

定义mysql与mystore在同一节点运行
colocation mysqld_with_mystore inf: mystore mysqld
定义mystore与ms_mydrbd的主节点在同一节点运行
colocation mystore_with_ms_mydrbd inf: ms_mydrbd:Master mystore
定义webstore与ms_webdrbd的主节点在同一节点运行
colocation webstore_with_ms_webdrbd inf: webstore ms_webdrbd:Master
定义nginx与webstore在同一节点运行
colocation webstore_with_nginx inf: webstore nginx

顺序约束

定义先启动mystore,再启动mysqld。
order mysqld_after_mystore inf: mystore mysqld
定义先启动ms_mydrbd,再启动mystore。
order mystore_after_ms_mydrbd inf: ms_mydrbd:promote mystore:start
定义先启动webstore,再启动nginx。
order nginx_after_webstore inf: webstore nginx
定义先启动ms_webdrbd,再启动webstore。
order webstore_after_ms_webdrbd inf: ms_webdrbd:promote webstore:start

以下是crm configure show 整体信息:
wKioL1PcmPfwnibsAAMu0XI4LQc584.jpg
查看集群状态信息
wKioL1Pcmm2QK-eIAARj7Ghm63E395.jpg

我们去节点一检测:
wKioL1PcnF_TDZEMAAPapclTA2E156.jpg wKiom1Pcm1DxizVwAAOshZY8XA0089.jpg
wKioL1PcnHOTSjBUAAHyCbj1uXk157.jpg
wKiom1Pcm2PgnzOSAAGGMYwiQws027.jpg
访问博客站点
wKiom1PcnCTQabsrAAHPLjcMZXE460.jpg
php-MyAdmin可以正常登录
wKioL1PcnWCAE8uIAAKtdoq9Jjc533.jpg

这时我们把节点一关机,然后查看状态。
wKioL1Pcn9zAZ1w4AARcgsy939w122.jpg
服务访问也正常。

实验到这里就完成了,我这里漏了一点,在定义资源监控的时候没有在后面加on-fail="restart" 这个可以实现,资源在运行过程中停止了,资源管理器会自动把资源重启的。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-23173-1-1.html 上篇帖子: LNMP设置404错误页面 下篇帖子: wamp升级php5.3.10到5.4.31版本 小菜
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表