MySQL之-MySQL高可用实现的详细介绍

一、 基本环境介绍及基本环境配置<br>

节点1: node1.hulala.com      192.168.1.35     centos6.5_64    添加8G新硬盘<br>节点2: node2.hulala.com      192.168.1.36     centos6.5_64    添加8G新硬盘<br>vip   192.168.1.39  <br><br>节点1与节点2均需配置<br>修改主机名:

vim /etc/sysconfig/network  HOSTNAME=node1.hulala.com

配置hosts解析:<br>

vim /etc/hosts  192.168.1.35    node1.hulala.com node1  192.168.1.36    node2.hulala.com node2

同步系统时间:<br>

ntpdate cn.pool.ntp.org

关闭防火墙与SELINUX<br>

service iptables stop  chkconfig iptables off  cat /etc/sysconfig/selinux  SELINUX=disabled

以上配置在两个节点都需要配置,配置完成之后重启两个节点

二:配置ssh互信<br>

[root@node1~]#ssh-keygen -t rsa -b 1024  [root@node1~]#ssh-copy-id root@192.168.1.36  [root@node2~]#ssh-keygen -t rsa -b 1024  [root@node2~]#ssh-copy-id root@192.168.1.35

三:DRBD的c(node1和node2执行相同操作)

[root@node1~]#wget -c http://www.php.cn/  [root@node1~]#wget -c http://www.php.cn/  [root@node1~]#rpm -ivh *.rpm

获取一个sha1值做为shared-secret<br>

[root@node1~]#sha1sum /etc/drbd.conf  8a6c5f3c21b84c66049456d34b4c4980468bcfb3  /etc/drbd.conf

创建并编辑资源c:/etc/drbd.d/dbcluster.res<br>

[root@node1~]# vim /etc/drbd.d/dbcluster.res  resource dbcluster {      protocol C;      net {          cram-hmac-alg sha1;          shared-secret "8a6c5f3c21b84c66049456d34b4c4980468bcfb3";          after-sb-0pri discard-zero-changes;  after-sb-1pri discard-secondary;          after-sb-2pri disconnect;          rr-conflict disconnect;      }      device    /dev/drbd0;      disk      /dev/sdb1;  meta-disk internal;      on node1.hulala.com {          address   192.168.1.35:7789;      }      on node2.hulala.com {          address   192.168.1.36:7789;      }  }

以上配置所用参数说明:<br>RESOURCE: 资源名称<br>PROTOCOL: 使用协议”C”表示”同步的”,即收到远程的写入确认之后,则认为写入完成.<br>NET: 两个节点的SHA1 key是一样的<br>after-sb-0pri : “Split Brain”发生时且没有数据变更,两节点之间正常连接<br>after-sb-1pri : 如果有数据变更,则放弃辅设备数据,并且从主设备同步<br>rr-conflict: 假如前面的设置不能应用,并且drbd系统有角色冲突的话,系统自动断开节点间连接<br>META-DISK: Meta data保存在同一个磁盘(sdb1)<br>ON : 组成集群的节点<br>将DRBD配置拷贝到node机器:<br>

[root@node1~]#scp /etc/drbd.d/dbcluster.res root@192.168.1.36:/etc/drbd.d/

创建资源及c:<br>创建分区(未格式化过)<br>在node1和node2上创建LVM分区:<br>

[#root@node1~]fdisk /dev/sdb

在node1和node2上给资源(dbcluster)创建meta data:<br>

[root@node1~drbd]#drbdadm create-md dbcluster

激活资源(node1和node2都得查看)<br>– 首先确保drbd c已经加载<br>查看是否加载:<br>

# lsmod | grep drbd

若未加载,则需加载:<br>

# modprobe drbd  # lsmod | grep drbd  drbd                  317261  0  libcrc32c               1246  1 drbd

– 启动drbd后台进程:<br>

[root@node1 drbd]# drbdadm up dbcluster  [root@node2 drbd]# drbdadm up dbcluster

查看(node1和node2)drbd状态:<br>

[root@node2 drbd]# /etc/init.d/drbd status  GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2016-10-23 08:16:10  m:res        cs         ro                   ds                         p  mounted  fstype  0:dbcluster  Connected  Secondary/Secondary  Inconsistent/Inconsistent  C

从上面的信息可以看到,DRBD服务已经在两台机器上运行,但任何一台机器都不是主机器(“primary” host),因此无法访问到资源(block device).<br>开始同步:

仅在主节点操作(这里为node1)<br>

[root@node1 drbd]# drbdadm — –overwrite-data-of-peer primary dbcluster

查看同步状态:<br>

<br>

上面的输出结果的一些说明:<br>cs (connection state): 网络连接状态<br>ro (roles): 节点的角色(本节点的角色首先显示)<br>ds (disk states):硬盘的状态<br>复制协议: A, B or C(本配置是C)<br>看到drbd状态为”cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate”即表示同步结束.<br>也可以这样查看drbd状态:<br>

[root@centos193 drbd]# drbd-overview    0:dbcluster/0  Connected Secondary/Primary UpToDate/UpToDate C r—–

创建文件系统:<br>在主节点(Node1)创建文件系统:<br>

[root@node1 drbd]# mkfs -t ext4 /dev/drbd0  mke2fs 1.41.12 (17-May-2010)  Filesystem label=  OS type: Linux  Block size=4096 (log=2)  …….  180 days, whichever comes first.  Use tune2fs -c or -i to override.

注:没必要在辅节点(Node2)做同样的操作,因为DRBD会处理原始磁盘数据的同步.<br>另外,我们也不需要将这个DRBD系统挂载到任何一台机器(当然安装c的时候需要临时挂载来安装mysql),因为集群管理软件会处理.还有要确保复制的文件系统仅仅挂载在Active的主服务器上.<br>

四:mysql的安装

MySQL的安装也可以参见博文《MySQL之——CentOS6.5 编译安装MySQL5.6.16》<br>

1,在node1和node2节点安装mysql:<br>

yum install mysql* -y

2.node1和node2都操作停止mysql服务<br>

[root@node1~]# service mysql stop  Shutting down MySQL.        [  OK  ]

3.node1和node2都操作创建数据库目录并将该目录权限属主修改为mysql<br>

[root@host1 /]# mkdir -p /mysql/data  [root@host1 /]# chown -R mysql:mysql /mysql

4,关闭mysql临时挂载DRBD文件系统到主节点(Node1)<br>

[root@node1 ~]# mount /dev/drbd0  /mysql/

5.node1和node2都操作修改my.cnf文件修改<br>在[mysqld]下添加新的数据存放路径<br>

datadir=/mysql/data

6.将默认的数据路径下的所有文件和目录cp到新的目录下(node2不用操作)<br>

[root@host1 mysql]#cd /var/lib/mysql  [root@host1 mysql]#cp -R * /mysql/data/

node1和node2都操作这里注意copy过去的目录权限属主需要修改为mysql,这里直接修改mysql目录即可.<br>

[root@host1 mysql]# chown -R mysql:mysql /mysql

7.启动node1上的mysql进行登陆测试<br>

[root@host1 mysql]# mysql

8.在节点Node1卸载DRBD文件系统<br>

[root@node1 ~]# umount /var/lib/mysql_drbd  [root@node1 ~]# drbdadm secondary dbcluster

9.将DRBD文件系统挂载节点Node2<br>

[root@node2 ~]# drbdadm primary dbcluster  [root@node2 ~]# mount /dev/drbd0 /mysql/

10.节点Node2上配置MySQL并测试<br>

[root@node1 ~]# scp node2:/etc/my.cnf /etc/my.cnf  [root@node2 ~]# chown mysql /etc/my.cnf  [root@node2 ~]# chmod 644 /etc/my.cnf

11. node2上做mysql登陆测试<br>

[root@node2 ~]# mysql

12.在Node2上卸载DRBD文件系统,交由集群管理软件Pacemaker来管理<br>

[root@node2~]# umount /var/lib/mysql_drbd  [root@node2~]# drbdadm secondary dbcluster  [root@node2~]# drbd-overview    0:dbcluster/0  Connected Secondary/Secondary UpToDate/UpToDate C r—–  [root@node2~]#

五:Corosync和Pacemaker的安装配置(node1和node2都需安装)

安装Pacemaker必须依赖:<br>

[root@node1~]#yum -y install automake autoconf libtool-ltdl-devel pkgconfig python glib2-devel libxml2-devel   libxslt-devel python-devel gcc-c++ bzip2-devel gnutls-devel pam-devel libqb-devel

安装Cluster Stack依赖:<br>

[root@node1~]yum -y install clusterlib-devel corosynclib-devel

安装Pacemaker可选依赖:<br>

[root@node1~]yum -y install ncurses-devel openssl-devel cluster-glue-libs-devel docbook-style-xsl

Pacemaker安装:<br>

[root@node1~]yum -y install pacemaker

crmsh安装:<br>

[root@node1~]wget http://www.php.cn/:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo  [root@node1~]yum -y install crmsh

1,配置corosync<br>Corosync Key<br>– 生成节点间安全通信的key:<br>

[root@node1~]# corosync-keygen
– 将authkey拷贝到node2节点(保持authkey的权限为400):  [root@node~]# scp /etc/corosync/authkey node2:/etc/corosync/  2,[root@node1~]# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf

编辑/etc/corosync/corosync.conf:<br>

# Please read the corosync.conf.5 manual page  compatibility: whitetank  aisexec {          user: root          group: root  }  totem {          version: 2  secauth: off  threads: 0  interface {  ringnumber: 0  bindnetaddr: 192.168.1.0  mcastaddr: 226.94.1.1  mcastport: 4000  ttl: 1  }  }  logging {  fileline: off  to_stderr: no  to_logfile: yes  to_syslog: yes  logfile: /var/log/cluster/corosync.log  debug: off  timestamp: on  logger_subsys {  subsys: AMF  debug: off  }  }  amf {  mode: disabled  }

– 创建并编辑/etc/corosync/service.d/pcmk,添加”pacemaker”服务<br>

[root@node1~]# cat /etc/corosync/service.d/pcmk  service {  	# Load the Pacemaker Cluster Resource Manager  	name: pacemaker  	ver: 1  }

将上面两个配置文件拷贝到另一节点<br>

[root@node1]# scp /etc/corosync/corosync.conf node2:/etc/corosync/corosync.conf  [root@node1]# scp /etc/corosync/service.d/pcmk node2:/etc/corosync/service.d/pcmk

3,启动corosync和Pacemaker<br> 分别在两个节点上启动corosync并检查.<br>

[root@node1]# /etc/init.d/corosync start  Starting Corosync Cluster Engine (corosync):               [  OK  ]  [root@node1~]# corosync-cfgtool -s  Printing ring status.  Local node ID -1123964736  RING ID 0  id = 192.168.1.189  status = ring 0 active with no faults  [root@node2]# /etc/init.d/corosync start  Starting Corosync Cluster Engine (corosync):               [  OK  ]

– 在两节点上分别启动Pacemaker:<br>

[root@node1~]# /etc/init.d/pacemaker start  Starting Pacemaker Cluster Manager:                        [  OK  ]  [root@node2~]# /etc/init.d/pacemaker start  Starting Pacemaker Cluster Manager:

六、资源配置

<br>配置资源及约束                 <br>配置默认属性<br>查看已存在的配置:

[root@node1 ~]# crm configure property stonith-enabled=false  [root@node1 ~]# crm_verify -L

禁止STONITH错误:<br>

[root@node1 ~]# crm configure property stonith-enabled=false  [root@node1 ~]# crm_verify -L

让集群忽略Quorum:<br>

[root@node1~]# crm configure property no-quorum-policy=ignore

防止资源在恢复之后移动:<br>

[root@node1~]# crm configure rsc_defaults resource-stickiness=100

设置操作的默认超时:<br>

[root@node1~]# crm configure property default-action-timeout="180s"

设置默认的启动失败是否为致命的:

[root@node1~]# crm configure property start-failure-is-fatal="false"

配置DRBD资源<br>– 配置之前先停止DRBD:<br>

[root@node1~]# /etc/init.d/drbd stop  [root@node2~]# /etc/init.d/drbd stop

– 配置DRBD资源:<br>

[root@node1~]# crm configure  crm(live)configure# primitive p_drbd_mysql ocf:linbit:drbd params drbd_resource="dbcluster" op monitor interval="15s"   op start timeout="240s" op stop timeout="100s"

– 配置DRBD资源主从关系(定义只有一个Master节点):<br>

crm(live)configure# ms ms_drbd_mysql p_drbd_mysql meta master-max="1" master-node-max="1"   clone-max="2" clone-node-max="1" notify="true"

– 配置文件系统资源,定义挂载点(mount point):<br>

crm(live)configure# primitive p_fs_mysql ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/lib/mysql_drbd/" fstype="ext4"

配置VIP资源<br>

crm(live)configure# primitive p_ip_mysql ocf:heartbeat:IPaddr2 params ip="192.168.1.39" cidr_netmask="24" op   monitor interval="30s"

配置MySQL资源<br>

crm(live)configure# primitive p_mysql lsb:mysql op monitor interval="20s"   timeout="30s" op start interval="0" timeout="180s" op stop interval="0" timeout="240s"

七、组资源和约束

通过”组”确保DRBD,MySQL和VIP是在同一个节点(Master)并且确定资源的启动/停止顺序.<br>

启动: p_fs_mysql–&gt;p_ip_mysql-&gt;p_mysql  停止: p_mysql–&gt;p_ip_mysql–&gt;p_fs_mysql
crm(live)configure# group g_mysql p_fs_mysql p_ip_mysql p_mysql

组group_mysql永远只在Master节点:<br>

crm(live)configure# colocation c_mysql_on_drbd inf: g_mysql ms_drbd_mysql:Master

MySQL的启动永远是在DRBD Master之后:<br>

crm(live)configure# order o_drbd_before_mysql inf: ms_drbd_mysql:promote g_mysql:start

配置检查和提交<br>

crm(live)configure# verify  crm(live)configure# commit  crm(live)configure# quit

查看集群状态和failover测试<br>状态查看:<br>

[root@node1 mysql]# crm_mon -1r

Failover测试:<br>将Node1设置为Standby状态<br>

[root@node1 ~]# crm node standby

过几分钟查看集群状态(若切换成功,则看到如下状态):<br>

[root@node1 ~]# crm status

将Node1恢复online状态:<br>

[root@node1 mysql]# crm node online  [root@node1 mysql]# crm status

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享