一、试验拓扑如下:
二、配置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
/share 172.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.20 node1.peace.com node1
172.16.15.30 node2.peace.com node2
3、配置ssh双机互信
# ssh-keygen -t rsa
# ssh-copy-id -i .ssh/id_rsa.pub root@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上了:
在node1通过crm node statnd 模拟挂机,可以看到node2上已经有3306端口,crm node online命令可以重新上线:
Corosync/openais + lvs + ldirectord 实现高可用+检测状态
(这里的lvs,Corosync相关安装就不写了可以参照前面的文档)
一、拓扑如下:
二、安装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
五、测试
首先看下配置信息,并且有了健康的信息,访问看看:
之后可以模拟node1挂掉,发现已经跳到node2上,并且还可以访问
在模拟RS1挂掉,可以看到RS1已经挂掉了,访问都是RS2的页面:
下面在模拟RS2也挂掉,在访问可以发现了一个本机的80端口,这个就是ldirectord中的fallback=127.0.0.1:80 gate定义的:
并且访问的是本机的页面:
另:如有不足指出还望多多指出,谢谢!