通过Corosync实现Mysql高可用,以及LVS+ldirectord高可用并状态检测
一、试验拓扑如下:http://blog.运维网.com/attachment/201208/180335757.png
二、配置File Server
1、这里建立个LVM逻辑卷,为了方便以后扩展
# pvcreate /dev/sda5
# vgcreate vg01 /dev/sda5
# lvcreate -n mydata -L 10G vg01
# mke2fs -j /dev/vg01/mydata
2、设置开机自动挂载
# cat /etc/fstab
/dev/vg01/mydata /share ext3 defaults 0 0
# mkdir /share
# mount -a
3、添加mysql用户
(这里要注意的是node1,node2,File Server三台的mysql用户UID要一样)
# useradd -r -u 200 mysql
# chown -R mysql.mysql /share/
4、设置NFS共享
# cat /etc/exports
/share172.16.15.20(rw,no_root_squash) 172.16.15.30(rw,no_root_squash)
# service nfs restart
三、配置node1和node2
1、修改主机名
# vim /etc/sysconfig/network
HOSTNAME=node1.peace.com
2、修改hosts
# vim /etc/hosts
172.16.15.20node1.peace.com node1
172.16.15.30node2.peace.com node2
3、配置ssh双机互信
# ssh-keygen -t rsa
# ssh-copy-id -i .ssh/id_rsa.pubroot@node2
4、配置mysql
[*]# useradd -r -u 200 mysql
[*]# mkdir /data/mydata -p
[*]# mount -t nfs 172.16.15.60:/share /data/mydata/
[*]
[*]# tar -xf mysql-5.5.24-linux2.6-i686.tar.gz-C /usr/local/
[*]# cd /usr/local/
[*]# ln -s mysql-5.5.24-linux2.6-i686/ mysql
[*]# cd mysql
[*]
[*]# chown -R mysql.mysql .
[*]# scripts/mysql_install_db --user=mysql --datadir=/data/mydata/
[*]# chown -R root .
[*]
[*]# cp support-files/my-large.cnf /etc/my.cnf
[*]# vim /etc/my.cnf
[*]thread_concurrency = 2
[*]datadir = /data/mydata
[*]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[*]# chmod +x /etc/rc.d/init.d/mysqld
[*]
[*](这里可以启动服务测试下是否正常,之后一定要关闭服务并且卸载)
[*]# umount /data/mydata/
[*]
[*](注:node2配置和node1的配置一样不过不需要初始化的步骤,只需将/usr/local/下的权限改为如下,并且复制修配置改文件即可)
[*]
[*]# cd /usr/local/mysql/
[*]# chown -R root.mysql .
四、node1和node2配置高可用
1、安装软件,(软件包后面给出)
# yum -y --nogpgcheck localinstall *.rpm
# cd /etc/corosync/
# cp corosync.conf.example corosync.conf
2、修改配置文件
[*]# vim corosync.conf
[*]compatibility: whitetank //兼容老版本
[*]
[*]totem { //集群节点间通信协议
[*] version: 2 //版本号
[*] secauth: on //是否开启安全认证功能
[*] threads: 0 //多少线程
[*] interface { //心跳信息
[*] ringnumber: 0
[*] bindnetaddr: 172.16.0.0 //绑定的网络,本地那个网卡
[*] mcastaddr: 226.94.1.1 //通过那个多播地址向外多播
[*] mcastport: 5405 //端口号
[*] }
[*]}
[*]
[*]logging { //日志
[*] fileline: off
[*] to_stderr: no //是否发到标准错误输出上
[*] to_logfile: yes //是否记录日志文件中
[*] to_syslog: no //是否记录进系统日志
[*] logfile: /var/log/corosync.log //日志位置
[*] debug: off //是否开启调试信息
[*] timestamp: on //是否记录时间
[*] logger_subsys {
[*] subsys: AMF
[*] debug: off
[*] }
[*]}
[*]
[*]amf { //AIS
[*] mode: disabled
[*]}
[*](添加以下信息)
[*]service {
[*] ver: 0
[*] name: pacemaker//使用pacemaker
[*]}
[*]
[*]aisexec {
[*] user: root
[*] group:root
[*]}
3、其他配置
[*]# corosync-keygen //生成authkey密钥
[*]# scp -p authkey corosync.conf node2:/etc/corosync/
[*]# service corosync start
[*]
[*]可以通过以下命令查看日志错误信息:
[*]# grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/corosync.log
[*]# grep TOTEM /var/log/corosync.log
[*]# grep ERROR: /var/log/corosync.log | grep -v unpack_resources
[*]# grep pcmk_startup /var/log/corosync.log
五、corosync配置信息
1、建立资源
[*]# crm
[*]crm(live)# configure
[*]crm(live)configure# primitive vip ocf:heartbeat:IPaddr params ip=172.16.15.100 //配置VIP
[*]crm(live)configure# primitive mynfs ocf:heartbeat:Filesystem params device="172.16.15.60:/share" directory="/data/mydata" fstype="nfs" op start timeout=60s op stop timeout=60s //配置nfs
[*]crm(live)configure# primitive mysql lsb:mysqld //配置mysql
2、设置约束
[*]crm(live)configure# colocation mysql_with_mynfs_with_vip inf: vip mynfs mysql //排列约束,规定vip,mynfs,mysql在一起
[*]crm(live)configure# order mysql_after_mynfs mandatory: mynfs mysql //顺序约束,定义先启动mynfs在启动mysql
[*]crm(live)configure# commit //提交生效
[*]crm(live)configure# quit
3、测试
通过crm status命令查看状态,并且可以看到3306端口已经在node1上了:
http://blog.运维网.com/attachment/201208/173930714.png
在node1通过crm node statnd 模拟挂机,可以看到node2上已经有3306端口,crm node online命令可以重新上线:
http://blog.运维网.com/attachment/201208/173930648.png
Corosync/openais + lvs + ldirectord 实现高可用+检测状态
(这里的lvs,Corosync相关安装就不写了可以参照前面的文档)
一、拓扑如下:
http://blog.运维网.com/attachment/201208/195016591.png
二、安装ldirectord
[*]# yum -y --nogpgcheck localinstall perl-MailTools-1.77-1.el5.noarch.rpm heartbeat-ldirectord-2.1.4-9.el5.i386.rpm
[*]# cp /usr/share/doc/heartbeat-ldirectord-2.1.4/ldirectord.cf /etc/ha.d/
[*]# cd /etc/ha.d/
三、修改配置文件,
1、node1和node2一样
[*]# egrep -v "^$|^#" ldirectord.cf
[*]checktimeout=3 //超时时间
[*]checkinterval=1 //检查时间
[*]autoreload=yes //是否自动加载文件
[*]logfile="/var/log/ldirectord.log"//定义日志
[*]quiescent=yes //静默模式
[*]virtual=172.16.15.100:80 //定义LVS虚拟服务
[*] real=172.16.15.70:80 gate
[*] real=172.16.15.60:80 gate
[*]fallback=127.0.0.1:80 gate
[*] service=http //服务
[*] request=".test.html" //健康状况检查的文件
[*] receive="ok" //文件中包含的字符串
[*] scheduler=rr //调度算法
[*] protocol=tcp
[*] checktype=negotiate //协商模式
[*] checkport=80
[*]
[*]# scp -p ldirectord.cf node2:/etc/ha.d/
2、分别在RS1和RS2的/var/www/html/建立个.test.html文件,内容为ok
# echo "ok" > /var/www/html/.test.html
# chkconfig ldirectord off
(注:node1和node2也安装http服务,但不启动 fallback=127.0.0.1:80 gate 选项设置的是当节点都失效后的访问页面)
四、配置corosync配置
[*]#crm
[*]crm(live)# configure
[*]crm(live)configure# primitive vip ocf:heartbeat:IPaddr params ip=172.16.15.100//配置VIP
[*]crm(live)configure# primitive ipvsadm lsb:ipvsadm //配置ipvsadm
[*]crm(live)configure# primitive web lsb:httpd //配置http
[*]crm(live)configure# colocation vip_ipvsadm_ldirectord_ipvs inf: vip ipvsadm ldirectord web
[*]crm(live)configure# commit
[*]crm(live)configure# quit
五、测试
首先看下配置信息,并且有了健康的信息,访问看看:
http://blog.运维网.com/attachment/201208/195016526.png
http://blog.运维网.com/attachment/201208/195016546.png http://blog.运维网.com/attachment/201208/195016765.png
之后可以模拟node1挂掉,发现已经跳到node2上,并且还可以访问
http://blog.运维网.com/attachment/201208/195410951.png
在模拟RS1挂掉,可以看到RS1已经挂掉了,访问都是RS2的页面:
http://blog.运维网.com/attachment/201208/195410402.png
下面在模拟RS2也挂掉,在访问可以发现了一个本机的80端口,这个就是ldirectord中的fallback=127.0.0.1:80 gate定义的:
http://blog.运维网.com/attachment/201208/195410700.png
并且访问的是本机的页面:
http://blog.运维网.com/attachment/201208/195410440.png
另:如有不足指出还望多多指出,谢谢!
附件:http://down.运维网.com/data/2361142
页:
[1]