Corosync+Pacemaker+DRBD实现LAMP双机热备
2012-11-28 16:45
357 查看
操作思考:通过DRBD实现数据同步,通过Corosync+Pacemaker(下图简称CP)实现检测故障并转移,常规状态下仅其中一台工作,另一台仅检测和同步数据,当有故障时,Server2自动接管一切业务,并向另一台同步数据(当然,此时不一定能同步成功..)。图示如下:
操作环境:
rhel5.8 (光盘yum源)
192.168.88.20 demo1.mos.com demo1
192.168.88.21 demo1.mos.com demo2
内核:2.6.18-308.el5PAE
检查Selinux关闭之
检查Iptables清空之
若无特殊说明,笔者都在demo1(192.168.88.20)操作
所需软件包,笔者直接打包放到网盘了:
md5校验:6ac5ae5b40a1021e1fcc3ce6d372a6a7
http://pan.baidu.com/share/link?shareid=131508&uk=1678158691
第一步:设置实验环境(时间同步,双机互信,hosts解析)
1. demo1(192.168.88.21)操作如下:
2.时间同步,11281050等于11月28号10点50分
第二步:安装配置DRBD
DRBD(Distributed Replicated Block Device),类似于iSCSI,都是块级别的共享,都不能检测文件系统是否正常或崩溃,但是其默认的情况下的主从工作模式中,仅允许主服务的设备可以被操作,从设备仅接收主设备的所有数据更改,不能被程序操作,甚至读也不行。
在其主的一方故障时,由高可用集群软件迅速切换主从角色,以实现快速故障转移。其核心功能通过Linux内核实现。
1. 下载并安装所需软件包
2. 复制配置文件模板,并创建自定义配置文件
3. 创建drbd数据同步所需的分区
demo1,demo2都要有,大小自定,但必须保持两个主机的磁盘大小和编号一致,笔者只给了1G,两个主机均为:/dev/sda5和/dev/sda6
这个笔者操作就不写了,真的需要的话,笔者的shell编程里面,有个能自动创建的磁盘分区,有兴趣的去看看,得改几个变量..
4. 将刚才的几个配置文件同步到demo2,并创建对应的drbd设备
5. 启动服务,并格式化磁盘
6. 简单测试,正常后取消其开机自动启动,由于下一步需要,暂不停止服务
7. 查看drbd状态及错误处理
如果遭遇如下图错误时,一般就是传说中闹裂了。
解决方法是,在你认为是备用数据的节点上执行如下操作:清空本地不一致数据
然后在主节点上重新连接资源即可:# drbdadm connect all
第三步: 安装Apache、MySQL和PHP及简单搭建一个Wordpress
1. MySQL安装,笔者偷个懒,直接下载的tar.gz,解压后,简单配置即可使用
2 .安装Apache、PHP和wordpress
# 打开浏览器输入 http://192.168.88.200 输入用户名密码后稍作等待即可.
3. 在demo2做简单测试,仍直接在demo1上操作
至此,再次打开浏览器,查看http://192.168.88.200 若正常,则应该出现wordpress界面
第四步: 使用pacemaker的crm配置corosync
配置高可用集群时,需确保所调用管理的服务,设备,IP等资源都处于没有使用以及没有开机启动状态。因此,第一步,检查并关闭所有之前开启的资源等。
1.检查并修改为节点所需状态
2.配置两个节点的corosync配置文件
3. 各种约束,各种配置..
1) 实验环境,关闭stonith设备支持;并且,由于是两个节点的特殊高可用集群,因此也关闭quorum投票机制。
2)配置DRBD资源,笔者更喜欢进入crm操作(你猜我会说是因为它能命令补全么..)..
3)配置DRDB资源为主从类资源(两个节点,只有一个能在工作状态)
4)配置存储类资源(LAMP所需的web文件和mysql数据)
5)配置服务类资源和IP资源(LAMP所需的服务和IP)
6)配置位置约束(LAMP需要都运行在一起),以及考虑demo2性能略好于demo1,因此,尽量让服务都运行在demo2上。
7)配置启动次序约束(例如,如果MySQL数据没挂载,就启动MySQL服务..你懂的)
8) 检查语法是否错误,并提交操作
9) 最后配置完成执行:# crm configure show 见下图:
4. 检查当前状态,并做简单测试即可
# crm status #查看当前服务工作状态,如下图,也可以打开网页192.168.88.200查看是否工作
# crm node standby 模拟故障,可以看到demo1不在线,处于待命状态如下图:同时刷新网页,正常工作,没有问题,可以打开网页192.168.88.200查看是否正常
# crm node online 恢复demo1的状态为在线,然后就会又看到第一个图
# ssh demo2 'service corosync stop' 停止掉demo2的服务,查看如下:
此时服务又转移到demo1上去了..看,很神奇,不是吗…哈哈
对了,如果使用 crm status查看到如下错误时,使用: # crm resource cleanup NFS (NFS是笔者上次定义的资源,这个名字是自己取的)清除一下错误的资源缓存神马的...估计就问题不大了。见下图:
今天笔者实验时又遇到了这个问题,后来仔细排查,是因为 顺序约束有些逻辑冲突(A在B后启动,又在C后启动,C又在A后启动之类的错误,总之肯定会出事的),后来修改后就OK了…
操作环境:
rhel5.8 (光盘yum源)
192.168.88.20 demo1.mos.com demo1
192.168.88.21 demo1.mos.com demo2
内核:2.6.18-308.el5PAE
检查Selinux关闭之
检查Iptables清空之
若无特殊说明,笔者都在demo1(192.168.88.20)操作
所需软件包,笔者直接打包放到网盘了:
md5校验:6ac5ae5b40a1021e1fcc3ce6d372a6a7
http://pan.baidu.com/share/link?shareid=131508&uk=1678158691
第一步:设置实验环境(时间同步,双机互信,hosts解析)
1. demo1(192.168.88.21)操作如下:
# ssh-keygen (几下回车即可) # cd /root/.ssh # cat id_rsa.pub >> authorized_keys # > known_hosts # scp * 192.168.88.21:/root/.ssh/ (输入其密码) # vim /etc/hosts 192.168.88.20 demo1.mos.com demo1 192.168.88.21 demo1.mos.com demo2 # scp /etc/hosts demo2:/etc # vim /etc/sysconfig/network (demo2上修改为demo2) NETWORKING=yes HOSTNAME=demo1.mos.com
2.时间同步,11281050等于11月28号10点50分
# ssh demo2 'date 11281050'; date 11281050
第二步:安装配置DRBD
DRBD(Distributed Replicated Block Device),类似于iSCSI,都是块级别的共享,都不能检测文件系统是否正常或崩溃,但是其默认的情况下的主从工作模式中,仅允许主服务的设备可以被操作,从设备仅接收主设备的所有数据更改,不能被程序操作,甚至读也不行。
在其主的一方故障时,由高可用集群软件迅速切换主从角色,以实现快速故障转移。其核心功能通过Linux内核实现。
1. 下载并安装所需软件包
# mkdir pv /root/download 笔者软件目录 # cd /root/download # tar xf all.tar.gz 上面链接里面的软件包 # yum -y --nogpgcheck localinstall *.rpm 其实drbd只需要其中两个含有drbd名字的包即可,但是下几步操作会需要,便一起安装了,如果之前有安装过openais需删除,命令:yum remove openais -y
2. 复制配置文件模板,并创建自定义配置文件
# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc # vim /etc/drbd.d/global-common.conf 主配置文件,简单修改即可 global { usage-count no; } common { protocol C; #协议C,同步复制协议,保证数据的有效性,但占用带宽 handlers { ----此处两段不做修改即可,太多了不贴了 disk { on-io-error detach; 对磁盘的定义,哪个IO错误就拆哪个 } net { cram-hmac-alg "sha1"; #加密传输 shared-secret "mydrbdlab"; #加密用的随机字符串 } syncer { rate 100M; #可用带宽多少 } } # vim /etc/drbd.d/http.res #定义http资源 resource http { device /dev/drbd1; disk /dev/sda6; meta-disk internal; on demo1.mos.com { address 192.168.88.20:7799; } on demo2.mos.com { address 192.168.88.21:7799; } } # vim /etc/drbd.d/mysql.res #定义mysql资源,效果一样 resource mysql { on demo1.mos.com { device /dev/drbd0; disk /dev/sda5; address 192.168.88.20:7789; meta-disk internal; } on demo2.mos.com { device /dev/drbd0; disk /dev/sda5; address 192.168.88.21:7789; meta-disk internal; } }
3. 创建drbd数据同步所需的分区
demo1,demo2都要有,大小自定,但必须保持两个主机的磁盘大小和编号一致,笔者只给了1G,两个主机均为:/dev/sda5和/dev/sda6
这个笔者操作就不写了,真的需要的话,笔者的shell编程里面,有个能自动创建的磁盘分区,有兴趣的去看看,得改几个变量..
4. 将刚才的几个配置文件同步到demo2,并创建对应的drbd设备
# scp /etc/drbd.conf demo2:/etc/ # scp /etc/drbd.d/* demo2:/etc/drbd.d/ # drbdadm create-md mysql # drbdadm create-md http # ssh demo2 'drbdadm create-md mysql' # ssh demo2 'drbdadm create-md http'
5. 启动服务,并格式化磁盘
# service drbd start # ssh demo2 'service drbd start' # drbdsetup /dev/drbd0 primary -o #将本机的设置为主 # drbdsetup /dev/drbd1 primary -o # watch -n1 'drbd-overview' 观察数据同步情况,ctrl+c退出。 # drbd-overview #查看状态,当为下面内容时,进行下一步操作 0:mysql Connected Primary/Secondary UpToDate/UpToDate C r---- 0:http Connected Primary/Secondary UpToDate/UpToDate C r---- # mke2fs -j /dev/drbd0 # mke2fs -j /dev/drbd1 # mount /dev/drbd0 /data/ #此处/data没有的话,自行创建
6. 简单测试,正常后取消其开机自动启动,由于下一步需要,暂不停止服务
# echo 'This is a test message' > /data/a.txt # umount /data # drbdadm secondary mysql #drbd提供的管理工具,具体用法见man # ssh demo2 # drbdadm Primary mysql # mount /dev/drbd0 /data/ 检查/data里面是否有a.txt,且自身是否可写即可 # echo 'This is a test message demo2' > /data/b.txt # drbdadm secondary mysql # umount /data && chkconfig drbd off && logout # drbdadm primary mysql # drbdadm primary http # chkconfig drbd off
7. 查看drbd状态及错误处理
如果遭遇如下图错误时,一般就是传说中闹裂了。
解决方法是,在你认为是备用数据的节点上执行如下操作:清空本地不一致数据
然后在主节点上重新连接资源即可:# drbdadm connect all
第三步: 安装Apache、MySQL和PHP及简单搭建一个Wordpress
1. MySQL安装,笔者偷个懒,直接下载的tar.gz,解压后,简单配置即可使用
# cd ~/download # wget http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.28-linux2.6-i686.tar.gz # tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local/ # cd /usr/local/ # ln -sv mysql-5.5.28-linux2.6-i686 mysql # cd mysql # useradd -r mysql # 必须保证两个节点的mysql用户的uid和gid一致 # chown -R root.mysql . # mount /dev/drbd0 /data # chown -R mysql. /data # scripts/mysql_install_db --user=mysql --datadir=/data # cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf # vim /etc/my.cnf thread_concurrency = 2 #修改 datadir = /data #添加到[mysqld]段内即可 # cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld # service mysqld start # echo 'MANPATH /usr/local/mysql/man' >> /etc/man.config # ln -sv /usr/local/mysql/include /usr/include/mysql # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf && ldconfig # echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh # . /etc/profile.d/mysql.sh # service mysqld start # mysql <---直接敲回车,为wordpress提供数据库及认证信息 mysql> create database wp; mysql> GRANT ALL ON wp.* TO 'blog'@'192.168.88.200' IDENTIFIED BY '123'; mysql> FLUSH PRIVILEGES ; mysql> \q # chkconfig --add mysqld # chkconfig mysqld off ----给demo2提供相关的mysql文件------------ # cd ~/download # scp mysql-5.5.28-linux2.6-i686.tar.gz demo2:~/download/ # ssh demo2 # useradd -r mysql #请务必保证跟demo1的mysql的uid和gid一致 # tar xf mysql-5.5.28-linux2.6-i686.tar.gz -C /usr/local/ # echo 'MANPATH /usr/local/mysql/man' >> /etc/man.config # ln -sv /usr/local/mysql/include /usr/include/mysql # echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf && ldconfig # echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh # . /etc/profile.d/mysql.sh # scp demo1:/etc/my.cnf /etc/ # chkconfig --add mysqld # chkconfig mysqld off && logout
2 .安装Apache、PHP和wordpress
# yum install httpd php53 php53-mysql –y # ssh demo2 'yum install httpd php53 php53-mysql –y' # service httpd start # mount /dev/drbd1 /var/www/html # cd /var/www/html # wget http://cn.wordpress.org/wordpress-3.4.2-zh_CN.tar.gz # tar xf wordpress-3.4.2-zh_CN.tar.gz # mv wordpress/* . # cp wp-config-sample.php wp-config.php # vim wp-config.php #仅修改前四行有效行 define('DB_NAME', 'wp'); define('DB_USER', 'blog'); define('DB_PASSWORD', '123'); define('DB_HOST', '192.168.88.200'); ........... # ifconfig eth0:0 192.168.88.200
# 打开浏览器输入 http://192.168.88.200 输入用户名密码后稍作等待即可.
3. 在demo2做简单测试,仍直接在demo1上操作
# cd # service network restart #清除刚才定义的网卡 # service mysqld stop # service httpd stop # umount /data && umount /var/www/html # drbdadm secondary mysql # drbdadm secondary http # ssh demo2 # drbdadm primary mysql # drbdadm primary http # mount /dev/drbd0 /data #/data若无,则自行创建 # mount /dev/drbd1 /var/www/html # service mysqld start # service httpd start # ifconfig eth0:0 192.168.88.200/24
至此,再次打开浏览器,查看http://192.168.88.200 若正常,则应该出现wordpress界面
第四步: 使用pacemaker的crm配置corosync
配置高可用集群时,需确保所调用管理的服务,设备,IP等资源都处于没有使用以及没有开机启动状态。因此,第一步,检查并关闭所有之前开启的资源等。
1.检查并修改为节点所需状态
# chkconfig httpd off && service httpd stop # chkconfig mysqld off && service mysqld stop # chkconfig drbd off && service drbd stop # umount /data && umount /var/www/html # ssh demo2 # chkconfig httpd off && service httpd stop # chkconfig mysqld off && service mysqld stop # chkconfig drbd off && service drbd stop # umount /data && umount /var/www/html
2.配置两个节点的corosync配置文件
# cd /etc/corosync/ # cp corosync.conf.example corosync.conf # vim corosync.conf # Please read the corosync.conf.5 manual page compatibility: whitetank totem { version: 2 secauth: on threads: 1 interface { ringnumber: 0 bindnetaddr: 192.168.88.1 mcastaddr: 226.94.11.13 mcastport: 5405 } } 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 } } amf { mode: disabled } service { var: 0 name: pacemaker } aisexec { user: root group: root } # corosync-keygen # mkdir /var/log/cluster # ssh demo2 'mkdir /var/log/cluster' # scp authkey corosync.conf demo2:/etc/corosync/ # service corosync start;ssh demo2 'service corosync start’
3. 各种约束,各种配置..
1) 实验环境,关闭stonith设备支持;并且,由于是两个节点的特殊高可用集群,因此也关闭quorum投票机制。
# crm configure property stonith-enabled=false # crm configure property no-quorum-policy=ignore
2)配置DRBD资源,笔者更喜欢进入crm操作(你猜我会说是因为它能命令补全么..)..
# crm crm(live)# configure crm(live)configure # primitive DRBD ocf:linbit:drbd params drbd_resource="mysql" op start interval="0" timeout="240" op stop interval="0" timeout="100" crm(live)configure # primitive WEB ocf:linbit:drbd params drbd_resource="http" op start interval="0" timeout="240" op stop interval="0" timeout="100"
3)配置DRDB资源为主从类资源(两个节点,只有一个能在工作状态)
crm(live)configure # master MS_DRBD DRBD meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" crm(live)configure # master MS_WEB WEB meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
4)配置存储类资源(LAMP所需的web文件和mysql数据)
crm(live)configure # primitive FS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/data" fstype="ext3" op start interval="0" timeout="60" op stop interval="0" timeout="60" crm(live)configure # primitive WEBFS ocf:heartbeat:Filesystem params device="/dev/drbd1" directory="/var/www/html" fstype="ext3" op start interval="0" timeout="60" op stop interval="0" timeout="60"
5)配置服务类资源和IP资源(LAMP所需的服务和IP)
crm(live)configure # primitive HTTP lsb:httpd crm(live)configure # primitive MySQL lsb:mysqld crm(live)configure # primitive IP ocf:heartbeat:IPaddr2 params ip="192.168.88.200"
6)配置位置约束(LAMP需要都运行在一起),以及考虑demo2性能略好于demo1,因此,尽量让服务都运行在demo2上。
crm(live)configure # colocation FS_on_MS_DRBD inf: FS MS_DRBD:Master DRBD的mysql主资源要和使用的文件系统在一起 crm(live)configure # colocation HTTP_on_IP inf: HTTP IP 网页和IP要在一起,约束了两个主资源在一起 crm(live)configure # colocation HTTP_on_WEBFS inf: WEBFS HTTP 网页文件要和Apache在一起 crm(live)configure # colocation IP_with_MS_DRBD inf: IP MS_DRBD:Master IP要和MySQL资源在一起 crm(live)configure # colocation MySQL_with_FS inf: MySQL FS 数据库服务要和其数据资源在一起 crm(live)configure # colocation WEBFS_on_MS_WEB inf: WEBFS MS_WEB:Master 网页文件要和DRBD的http主资源在一起 crm(live)configure # location DEMO2 MS_DRBD inf: demo2.mos.com 只要有一点可能,就要让所有服务工作在 demo2.mos.com
7)配置启动次序约束(例如,如果MySQL数据没挂载,就启动MySQL服务..你懂的)
crm(live)configure # order FS_after_MS_DRBD inf: MS_DRBD:promote FS:start DRBD的mysql资源为主,然后再挂载到/data crm(live)configure # order WEBFS_after_MS_WEB inf: MS_WEB:promote WEBFS:start DRBD的http资源为主,然后再挂载/var/www/html crm(live)configure # order MySQL_after_FS inf: FS MySQL MySQL数据挂载后,再启动MySQL服务 crm(live)configure # order HTTP_after_WEBFS inf: WEBFS HTTP 网页文件挂载后再启动
8) 检查语法是否错误,并提交操作
crm(live)configure # verify 没提示,就是好消息 crm(live)configure # commit 提交
9) 最后配置完成执行:# crm configure show 见下图:
4. 检查当前状态,并做简单测试即可
# crm status #查看当前服务工作状态,如下图,也可以打开网页192.168.88.200查看是否工作
# crm node standby 模拟故障,可以看到demo1不在线,处于待命状态如下图:同时刷新网页,正常工作,没有问题,可以打开网页192.168.88.200查看是否正常
# crm node online 恢复demo1的状态为在线,然后就会又看到第一个图
# ssh demo2 'service corosync stop' 停止掉demo2的服务,查看如下:
此时服务又转移到demo1上去了..看,很神奇,不是吗…哈哈
对了,如果使用 crm status查看到如下错误时,使用: # crm resource cleanup NFS (NFS是笔者上次定义的资源,这个名字是自己取的)清除一下错误的资源缓存神马的...估计就问题不大了。见下图:
今天笔者实验时又遇到了这个问题,后来仔细排查,是因为 顺序约束有些逻辑冲突(A在B后启动,又在C后启动,C又在A后启动之类的错误,总之肯定会出事的),后来修改后就OK了…
相关文章推荐
- Corosync+Pacemaker+DRBD实现LAMP双机热备
- corosync+pacemaker+drbd 实现lamp(Discuz)高可用集群 推荐
- corosync + pacemaker + drbd 实现mysql存储的高可用(二)
- Corosync+pacemaker实现基于drbd分散式存储的mysql高可用集群
- Linux集群之corosync+pacemaker+drbd实现MySQL高可用
- corosync+drbd+pacemaker实现mysql服务器的HA集群
- HA集群之四:Corosync+Pacemaker+DRBD实现HA Mysql
- 基于Corosync+Pacemaker+DRBD实现MySQL高可用集群
- 共享存储之drbd+corosync+pacemaker+mysql实现mysql共享存储高可用实现全过程(二)
- corosync+pacemaker and drbd实现mysql高可用集群 推荐
- Corosync+Pacemaker+DRBD+MySQL 实现MySQL高可用
- drbd+corosync+pacemaker实现web应用的高可用
- Corosync/openais+pacemaker+DRBD实现DRBD服务高可用集群
- corosync+pacemaker+drbd实现web服务高可用
- postgresql双机热备、高可用方案(采用pacemaker+corosync实现)
- corosync+pacemaker+mysql+drbd 实现mysql的高可用
- Corosync/Pacemaker+DRBD实现高可用集群与DRBD共享
- 编译安装MySQL实现corosync+pacemaker+drbd+mysql高可用
- 群集和存储管理之mysql服务器的HA集群之corosync+drbd+pacemaker实现
- corosync+openais+pacemaker+web+drbd实现高可用群集