sele 发表于 2019-1-5 10:08:01

通过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]
查看完整版本: 通过Corosync实现Mysql高可用,以及LVS+ldirectord高可用并状态检测