MySQL+Heartbeat+DRBD架构部署

MySQL高可用生成业务需求

在企业实际生产场景中,一主多从的MYSQL数据库架构是最常用的DB架构方案,该架构方案部署简单,维护方便,并且通过配置简单的代理或者通过程序的方式就可以实现应用服务队主从库的读写分离,且多个从库还可以通过LVS或者Haproxy等代理实现多个从库的负载均衡,分担读的压力,同时排除单点问题

但是MYSQL数据库架构中,我们不难发现,虽然从库是多个,但是主库仅有一个,也就是说主库一旦宕机,所以写的业务都会终止,而从库宕机1个就没什么影响,那么如何解决这个主库单点的问题呢,其实最简单的方案就是做好监控,然后主库单机后,有管理人为手工选择最快的从库改为主,然后让其它从库和新的主同步,这个方案是简单易行的,但是需要人工处理,对有些高要求场合高度不够,那样就需要下面说的MySQL+Heartbeat+DRBD架构方案

MySQL+Heartbeat+DRBD架构方案说明:

正常情况下:

1、heartbeat通过串口线或者以太网网线直链网卡对对端的服务做监控检查,并负责执行drbd,mysql,vip等资源的自动切换

2、MYSQL_S作为MYSQL_M的高可用热备,正常情况下MYSQL_M提供一个分区sdb1给MYSQL使用。

3、物理磁盘做RAID10或者RAID0,根据性能和冗余需求来选择

4、服务器之间,服务器和交换机直接都是千兆网卡做bongding

5、应用服务(包括但不限于web)通过VIP访问MYSQL从库,通过不同的VIP访问负载均衡的从库池。

故障情况下:

1、MYSQL_S的heartbeat通过串口线或者以太网网线对MYSQL_M做健康检查,发现MYSQL_M挂掉后,自动在MYSQL_S上启动DRBD/MYSQL等服务及负载VIP的动态切换,确保主库业务被正常接管,自动通过对外提供服务

2、MYSQL_M上的MYSQL在/dev/sdb1分区中,故障后在MYSQL_S上同时实现高可用切换

3、故障后MYSQL客户端,从库等。通过VIP和MYSQL_S的MYSQL 服务相连,MYSQL对外正常提供服务

4、当MYSQL_M故障修复后,可以设置自动把自己原来的业务,从MYSQL_S中取回来,但是一般不建议这样做。如果两台服务器之前存在性能的差异,最好也是人工进行切换

2、MYSQL高可以生产需求描述

本案例假设有3台MYSQL服务器,他们的IP分别是

MYSQL_M 10.0.0.3

MYSQL_S 10.0.0.4

MYSQL_C 10.0.0.5

MYSQL_M的MYSQL目录为/data,前端提供的访问VIP是10.0.0.103

配置目标:一段主MYSQL服务器MYSQL_M宕机,该服务器上的MYSQL和虚拟IP会自动切换当热备服务器MYSQL_S上继续提供服务,从而达到MYSQL高可用宕机后无业务影响的目的

这里会有一个特别的问题,就是以前的多个从库如何能和新的主库同步,经过实践,通过DRBD的方式同步的MYSQL数据库,以及做从库MYSQL时使用和主库VIP为同步VIP,当主MYSQL宕机后,VIP漂移到热备主MYSQL,默认情况在60秒内,从库就可以连接到新的VIP,从而自动和新的主库同步,这里需要强调的下,通过MYSQL同步做双主的方式,是难以做到主库单机从库和新的主库自动同步的。这也是这个架构的难点。

提示:本文讲解的MYSQL数据库服务主备高可用模式,对于MYSQL数据库服务高可用,也可以是主主的双向高可用模式。

3、系统环境

##MYSQL_M                 #主库,主服务器

eth0:10.0.0.3            #管理IP,用于LAN内数据转发

eth1:172.16.1.3           #MYSQL服务器间心跳连接(直链)

VIP:10.0.0.103            #用于提供对外MYSQL存储系统服务VIP

##MYSQL_S                 #主库的备用服务器

eth0:10.0.0.4

eth1:172.16.1.4

##MYSQL_C                #mysql从库

eth0:10.0.0.5

同时在MYSQL_M需要添加一个1G的磁盘,MYSQL_S需要添加一个1.5G的磁盘。测试用

4、部署前准备

#要配置主机名和hosts文件.

主机名称要以uname -n为准

[[email protected]_S ~]# uname -n

MYSQL_S

[[email protected]_S ~]# uname -m

x86_64

[[email protected]_S ~]#

================================

MYSQL_M

cp /etc/hosts /etc/hosts.bak

cp /etc/sysconfig/network /etc/sysconfig/network.bak

sed -i ‘$a 10.0.0.3 MYSQL_M‘ /etc/hosts

sed -i ‘$a 10.0.0.4 MYSQL_S‘ /etc/hosts

sed -i ‘/HOSTNAME=/d‘ /etc/sysconfig/network

sed -i ‘/$/aHOSTNAME=MYSQL_M‘ /etc/sysconfig/network

===============================

MYSQL_S

sed -i ‘$a 10.0.0.3 MYSQL_M‘ /etc/hosts

sed -i ‘$a 10.0.0.4 MYSQL_S‘ /etc/hosts

sed -i ‘/HOSTNAME=/d‘ /etc/sysconfig/network

sed -i ‘/$/aHOSTNAME=MYSQL_S‘ /etc/sysconfig/network

############################start测试:

[[email protected]_S ~]# ping MYSQL_M

PING MYSQL_M (10.0.0.3) 56(84) bytes of data.

64 bytes from MYSQL_M (10.0.0.3): icmp_seq=1 ttl=64 time=0.347 ms

64 bytes from MYSQL_M (10.0.0.3): icmp_seq=2 ttl=64 time=0.297 ms

^C

--- MYSQL_M ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1424ms

rtt min/avg/max/mdev = 0.297/0.322/0.347/0.025 ms

[[email protected]_S ~]# ping MYSQL_S

PING MYSQL_S (10.0.0.4) 56(84) bytes of data.

64 bytes from MYSQL_S (10.0.0.4): icmp_seq=1 ttl=64 time=0.027 ms

64 bytes from MYSQL_S (10.0.0.4): icmp_seq=2 ttl=64 time=0.043 ms

^C

--- MYSQL_S ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1226ms

rtt min/avg/max/mdev = 0.027/0.035/0.043/0.008 ms

[[email protected]_S ~]#

===========================

[[email protected]_M ~]# ping MYSQL_S

PING MYSQL_S (10.0.0.4) 56(84) bytes of data.

64 bytes from MYSQL_S (10.0.0.4): icmp_seq=1 ttl=64 time=0.720 ms

64 bytes from MYSQL_S (10.0.0.4): icmp_seq=2 ttl=64 time=0.346 ms

64 bytes from MYSQL_S (10.0.0.4): icmp_seq=3 ttl=64 time=0.329 ms

^C

--- MYSQL_S ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2150ms

rtt min/avg/max/mdev = 0.329/0.465/0.720/0.180 ms

[[email protected]_M ~]# ping MYSQL_M

PING MYSQL_M (10.0.0.3) 56(84) bytes of data.

64 bytes from MYSQL_M (10.0.0.3): icmp_seq=1 ttl=64 time=0.022 ms

64 bytes from MYSQL_M (10.0.0.3): icmp_seq=2 ttl=64 time=0.131 ms

^C

--- MYSQL_M ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1388ms

rtt min/avg/max/mdev = 0.022/0.076/0.131/0.055 ms

[[email protected]_M ~]#

###########################end

#两台服务器都添加下面的心跳路由   生产环境建议加route。现在不加也不影响搭建.

/sbin/route add -host 172.16.1.4 dev eth1

/sbin/route add -host 172.16.1.3 dev eth1

echo ‘/sbin/route add -host 172.16.1.3 dev eth1‘ >> /etc/rc.local

echo ‘/sbin/route add -host 172.16.1.4 dev eth1‘ >> /etc/rc.local

#######################start

[[email protected]_M ~]# ping 172.16.1.4

PING 172.16.1.4 (172.16.1.4) 56(84) bytes of data.

64 bytes from 172.16.1.4: icmp_seq=1 ttl=64 time=1.56 ms

64 bytes from 172.16.1.4: icmp_seq=2 ttl=64 time=0.310 ms

^C

--- 172.16.1.4 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1267ms

rtt min/avg/max/mdev = 0.310/0.935/1.561/0.626 ms

[[email protected]_M ~]#

============================

[[email protected]_S ~]# /sbin/route add -host 172.16.1.3 dev eth1

[[email protected]_S ~]#

[[email protected]_S ~]# ping 172.16.1.3

PING 172.16.1.3 (172.16.1.3) 56(84) bytes of data.

64 bytes from 172.16.1.3: icmp_seq=1 ttl=64 time=0.391 ms

^C

--- 172.16.1.3 ping statistics ---

1 packets transmitted, 1 received, 0% packet loss, time 897ms

rtt min/avg/max/mdev = 0.391/0.391/0.391/0.000 ms

[[email protected]_S ~]#

3、安装heartbeat

a、下载并安装epel包.两台服务器都要操作

mkdir -p /home/lvnian/tools && cd /home/lvnian/tools

wget http://mirrors.opencas.cn/epel/6/x86_64/epel-release-6-8.noarch.rpm

rpm -qa |grep epel

[ epel-release-6-8.noarch.rpm ]&& rpm -ivh epel-release-6-8.noarch.rpm

rpm -qa |grep epel

b、安装heartbeat,下面是在centos版本系统中部署,.两台服务器都要操作。所有用yum install heartbeat* -y

yum install heartbeat -y

c、拷贝ha的配置文件,资源文件以及授权文件到/etc/ha.d/下面

ll /usr/share/doc/heartbeat-3.0.4/

cd /usr/share/doc/heartbeat-3.0.4/

cp ha.cf haresources  authkeys /etc/ha.d/

d、开始配置

cd /etc/ha.d

mv ha.cf ha.bak

mv authkeys authkeys.bak

mv haresources haresources.bak

注意点:下面ha.cf、authkeys、haresources这三个文件在主备都是一样的

########配置ha.cf

cat>/etc/ha.d/ha.cf<<eof

#the start by lvnian 20150881

debugfile /var/log/ha-debug

logfile /var/log/ha-log

#logfacility local1

keepalive 2

deadtime 30

warntime 10

initdead 60

#bcast eth1

mcast eth1 225.0.0.181 694 1 0

#ucast eth1 172.16.1.4

auto_failback off          #服务器正常后,不接管备用设备资源

node MYSQL_M

node MYSQL_S

crm  no

#the end by lvnian 20150881

eof

####配置authkeys

cat >/etc/ha.d/authkeys<<eof

auth 1

1 sha1 b900cbbdfa0a850444fa3dae47a9d354   #这个字符串是随便写的,但是需要主备都是一样的

eof

chmod 600 /etc/ha.d/authkeys

#####配置haresources

cat > /etc/ha.d/haresources <<eof

#lvnian services

#10.0.0.103 www.etianetian.org

MYSQL_M IPaddr::10.0.0.103/24/eth0

#MYSQL_M IPaddr::10.0.0.103/24/eth0 httpd

#10.0.0.104 bbs.etianetian.org

MYSQL_S IPaddr::10.0.0.104/24/eth0

#mysql MYSQL_M mysqlm.etianetian.org

#MYSQL_M IPaddr::10.0.0.103/24/eth0

#MYSQL_M IPaddr::10.0.0.103/24/eth0 mysqld

#mysql slave mysqlm.etianetian.org

#MYSQL_S IPaddr::10.0.0.104/24/eth0

eof

#########

f、启动heartbeat 服务

/etc/init.d/heartbeat start

/etc/init.d/heartbeat stop

/etc/init.d/heartbeat restart

g、设置开机自启动heartbeat

chkconfig heartbeat on

用ip add 查看vip

查看 cat /var/log/ha-log日志文件

检查:出现虚拟VIP才算部署heartbeat成功

[[email protected]_M ~]# ip addr |grep 10.0.0

inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0

inet 10.0.0.103/24 brd 10.0.0.255 scope global secondary eth0

[[email protected]_M ~]#

============================

[[email protected]_S ha.d]# ip addr |grep 10.0.0

inet 10.0.0.4/24 brd 10.0.0.255 scope global eth0

inet 10.0.0.104/24 brd 10.0.0.255 scope global secondary eth0

[[email protected]_S ha.d]#

出现上面的VIP,代表Heartbeat部署没问题

============================

##########################################

5、对磁盘进行分区,这里模拟大于2T硬盘进行分区

###MYSQL_M

parted /dev/sdb mklabel gpt

yes

parted /dev/sdb mkpart primary 0 600

Ignore

parted /dev/sdb p

parted /dev/sdb mkpart primary 600 1024

Ignore

parted /dev/sdb p

###MYSQL_S

parted /dev/sdb mklabel gpt                   ##创建一个分区表

yes

parted /dev/sdb mkpart primary 0 1024 ##创建一个主分区

Ignore

parted /dev/sdb p

parted /dev/sdb mkpart primary 1024 1500

Ignore

parted /dev/sdb p

===========================

[[email protected]_M ~]# parted /dev/sdb p

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 1074MB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Number  Start   End     Size   File system  Name     Flags

1      17.4kB  600MB   600MB               primary

2      600MB   1024MB  424MB               primary

[[email protected]_M ~]#

===============================

[[email protected]_S ha.d]# parted /dev/sdb p

Model: VMware, VMware Virtual S (scsi)

Disk /dev/sdb: 1611MB

Sector size (logical/physical): 512B/512B

Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags

1      17.4kB  1024MB  1024MB               primary

2      1024MB  1500MB  476MB                primary

[[email protected]_S ha.d]#

================================

6、正式开始部署DRBD。两台服务器都要部署。操作相同

mkdir -p /home/lvnian/tools/

cd /home/lvnian/tools/

export LC_ALL=C

echo $LC_ALL

cd /home/lvnian/tools/

wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz

ll drbd-8.4.4.tar.gz

tar xf drbd-8.4.4.tar.gz

cd drbd-8.4.4

./configure --prefix=/application/drbd-8.4.4  --with-km --with-heartbeat --sysconfdir=/etc/

make KDIR=/usr/src/kernels/$(uname -r)

make install

##加载drbd到内核

lsmod |grep drbd

modprobe drbd

#这个加载,在重启之后失效,可以把它放在rc.local中。但也可以用heartbeat挂载

lsmod |grep drbd

##设置开机自启动挂载drbd

echo ‘modprobe drbd‘ >>/etc/rc.local

##配置drbd.conf 两个服务去的配置文件时一样的

cat>/etc/drbd.conf <<eof

global {

usage-count no;

}

common {

syncer {

rate 10M;

verify-alg crc32c;

}

}

resource data {

protocol C;

disk{

on-io-error  detach;

}

on MYSQL_M {

device    /dev/drbd0;

disk      /dev/sdb1;

address   10.0.0.3:7788;

meta-disk  /dev/sdb2[0];

}

on MYSQL_S {

device    /dev/drbd0;

disk      /dev/sdb1;

address   10.0.0.4:7788;

meta-disk  /dev/sdb2[0];

}

}

eof

cat /etc/drbd.conf

#######初始化话meta data分区

drbdadm create-md data

##drbd 启动

mkdir -p /application/drbd-8.4.4/var/run/drbd

drbdadm up data

cat /proc/drbd

##################################################33

报错:

[[email protected] ~]# drbdadm up data

/application/drbd-8.4.4/var/run/drbd: No such file or directory

/application/drbd-8.4.4/var/run/drbd: No such file or directory

[[email protected] ~]#

解决:

mkdir -p /application/drbd-8.4.4/var/run/drbd

drbdadm up data

#指定其中一台为主drbd(注意。选其中一台为主)

drbdadm -- --overwrite-data-of-peer primary data

#格式化分区:

mkfs.ext4 -b 4096 /dev/drbd0

tune2fs -c -1 /dev/drbd0

#挂载分区:

mkdir /data

mount /dev/drbd0 /data   ##用drbd0挂载,而不是用/dev/sdb2物理分区挂载。

注意:仅仅是在主drbd中挂载,但是需要分别在进行主备切换,看能不能都成功进行挂载,只要能手工切换准备,并且能成功挂载,才算成功。才能继续下面的整合。

#修改heartbeat,也就是仅仅修改这个文件就可以了,其他不用变

cat >/etc/ha.d/haresources<<eof

#lvnian services

#10.0.0.103 www.etianetian.org

MYSQL_M IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4

#MYSQL_M IPaddr::10.0.0.103/24/eth0 httpd

#10.0.0.104 bbs.etianetian.org

MYSQL_S IPaddr::10.0.0.104/24/eth0

#mysql MYSQL_M mysqlm.etianetian.org

#MYSQL_M IPaddr::10.0.0.103/24/eth0

#MYSQL_M IPaddr::10.0.0.103/24/eth0 mysqld

#mysql slave mysqlm.etianetian.org

#MYSQL_S IPaddr::10.0.0.104/24/eth0

eof

===================================================

##解析下面命令:

MYSQL_M IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4

上面命令相对于依次在主节点上执行下面命令,如果主节点宕机了,就依次在被节点上执行

/etc/ha.d/resource.d/IPaddr 10.0.0.103/24/eth0 start/stop

/etc/ha.d/resource.d/drbddisk data start/stop

/etc/ha.d/resource.d/Filesystem /dev/drbd0 /data ext4 start/stop

依次在主备上单独在命令行上面执行上面的命令。如果都能成功,那就可以用heartbeat使用了。

注意drbd需要在up状态在执行上面的命令。也就是先执行drbdadm up data 再执行上面的命令

===================================================

#在重启heartbeat之前,必须把drbd的给启动起来,可以都是从

/etc/init.d/heartbeat stop

/etc/init.d/heartbeat restart

用下面命令,查看是否成功。之后左右重启服务器,切换主备。和用命令切换主备,让其能正常切换,才算成功

df

cat /proc/drbd

/usr/share/heartbeat/hb_standby

/usr/share/heartbeat/hb_takeover

##注意要drbd设置开启自启动,只有设置开启自启动,heartbeat才能管理他,不然他无法挂载/dev/drbd0/,因为开机的是否,如果drbd不启动,就不存在/dev/drbd0分区。

所以heartbeat和drbd都要设置开机自启动。

但是在生产环境中,最好还是不要设置drbd和heartbeat开启自启动,我们仅仅需要让主服务故障的时候能够切换到备用设备就好了。这时候主的修复,最好还是人工介入。

但是这个实验为了能够体现主备可以相互接管等,在服务器出现故障重启,也能正常接管,所以设置了开启自启动

对于heartbeat配合drbd联合调试小结

1、主或备节点有heartbeat控制的资源的启动顺序是相同,资源启动顺序为

a、vip的启动

b、drbd启动和设置

c、drbd分区的挂载

2、发生切换时主或备节点释放资源的顺序是相同,但是和上面启动的顺序是相反的。

a、drbd分区的卸载

b、drbd服务角色等变为slave

c、vip的停止

所以/etc/ha.d/haresources里面的资源顺序是不可以表的,必须如下:

MYSQL_M IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4

故障解决思路:

出现故障,就根据分别执行下面命令,看日志,看哪里出错,之后进行处理

/etc/ha.d/resource.d/IPaddr 10.0.0.103/24/eth0 start/stop

/etc/ha.d/resource.d/drbddisk data start/stop

/etc/ha.d/resource.d/Filesystem /dev/drbd0 /data ext4 start/stop

#####################################################################################

##########################################安装MySQL

下面是一键安装mysql脚本,要一键安装成功的前提是,必须把

在/home/lvnian/tools/目录下存在mysql-5.5.32-linux2.6-x86_64.tar.gz、data-mysql.cnf.tar.gz、这两个包。

一个是mysql的软件包,一个是mysql的配置文件包。

mysql的配置包内容如下

########################################################################

[[email protected]_M tools]# vim mysql.simple.sh

#!/bin/sh

#一键安装单实例mysql

#xiaogao 20190921

#创建相关mysql用户

groupadd mysql

useradd -s /sbin/nologin -g mysql -M mysql

tail -1 /etc/passwd

#安装mysql依赖库

yum -y install ncurses-devel

#开启安装mysql,记得先上传安装包到/home/lvnian/tools/

cd /home/lvnian/tools/

tar zxf mysql-5.1.72.tar.gz

cd mysql-5.1.72

./configure \

--prefix=/application/mysql5.1.72 \

--with-unix-socket-path=/application/mysql5.1.72/tmp/mysql.sock \

--localstatedir=/application/mysql5.1.72/data \

--enable-assembler \

--enable-thread-safe-client \

--with-mysqld-user=mysql \

--with-big-tables \

--without-debug \

--with-pthread \

--enable-assembler \

--with-extra-charsets=complex \

--with-readline \

--with-ssl \

--with-embedded-server \

--enable-local-infile \

--with-plugins=partition,innobase \

--with-mysqld-ldflags=-all-static \

--with-client-ldflags=-all-static

#--with-plugin-PLUGIN \

make && make install

echo $?

#制作软连接:

ln -s /application/mysql5.1.72  /application/mysql

#创建msyql数据库文件

cd /home/lvnian/tools/mysql-5.1.72/support-files/

ls my*.cnf -l

/bin/cp my-small.cnf /etc/my.cnf

mkdir /application/mysql/data -p

chown -R mysql.mysql /application/mysql/data/

#初始化数据库

/application/mysql/bin/mysql_install_db --basedir=/application/mysql --datadir=/application/mysql/data --user=mysql

#启动mysql数据库

#/application/mysql/bin/mysqld_safe &

#启动方法2

echo "-----------启动方法mysql 2---------------"

cp /home/lvnian/tools/mysql-5.1.72/support-files/mysql.server /etc/init.d/mysqld

chmod 700 /etc/init.d/mysqld

/etc/init.d/mysqld restart

sleep 5

netstat -lnt|grep 3306

lsof -i :3306

#设置mysql命令全局使用路径

echo ‘PATH=$PATH:/application/mysql/bin‘ >> /etc/profile

source /etc/profile

which mysql

mysql

[[email protected]_M tools]#

########################################################################

###测试看是否安装成功

[[email protected]_M tools]# netstat -lntup|grep 3306

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      47525/mysqld

[[email protected]_M tools]# /etc/init.d/mysqld restart

Shutting down MySQL.. SUCCESS!

Starting MySQL. SUCCESS!

[[email protected]_M tools]# netstat -lntup|grep 3306

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      47742/mysqld

[[email protected]_M tools]#

######安装成功mysql

修改MYSQL数据库的数据目录

因为的drbd要挂载到/data目录上,所以我需要把上面的mysql数据目录移除。重新初始化数据库文件到/data目录,同时要确保/data目录现在已经挂载到drbd0上操作如下

df

[[email protected]_M ~]# df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda3       11150604 2498092   8086088  24% /

tmpfs             247112       0    247112   0% /dev/shm

/dev/sda1         198337   29670    158427  16% /boot

/dev/drbd0        576696   38308    509092   3% /data          《=====此时/dev/drbd0已经挂载到/data目录

[[email protected]_M ~]#

/etc/init.d/mysqld stop

mv /application/mysql/data /tmp/

/application/mysql/bin/mysql_install_db --basedir=/application/mysql --datadir=/data --user=mysql

##执行上面初始数据库目录脚本时,必须要把drbd的/dev/drbd0 挂载到/data 目录上

初始化数据目录到/data目录后,直接用脚本启动数据库会出现下面错误

/etc/init.d/mysqld start

[[email protected]_M ~]# /etc/init.d/mysqld start

Starting MySQL. ERROR! Manager of pid-file quit without updating file.

[[email protected]_M ~]#

上面的故障解决:

修改/etc/init.d/mysqld 启动目录的47 行,修改为如下内容:

47 datadir=/data

或者用sed替换,命令如下:

sed -i ‘s#^datadir=#datadir=/data#‘ /etc/init.d/mysqld

=====================

/etc/init.d/mysqld start

netstat -lntup |grep 3306

=====================

[[email protected]_M ~]#  sed -i ‘s#^datadir=#datadir=/data#‘ /etc/init.d/mysqld

[[email protected]_M ~]# /etc/init.d/mysqld start

Starting MySQL. SUCCESS!

[[email protected]_M ~]# netstat -lntup|grep 3306

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      48830/mysqld

[[email protected]_M ~]#

[[email protected]_M ~]# df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda3       11150604 2498092   8086088  24% /

tmpfs             247112       0    247112   0% /dev/shm

/dev/sda1         198337   29670    158427  16% /boot

/dev/drbd0        576696   38308    509092   7% /data

[[email protected]_M ~]#

[[email protected]_M ~]# ls /data/

a1  a10  a2  a3  a4  a5  a6  a7  a8  a9  ibdata1  ib_logfile0  ib_logfile1  lost+found  mysql  MYSQL_M.err  MYSQL_M.pid  test

[[email protected]_M ~]#

=====================

注意 两台mysql的数据目录都要改为/data。确保此时的/data目录已经是挂载到drbd0上的应为我们通过heartbeat漂移到备用mysql服务器,也会挂载到/data目录下,所以我们必要要在这两台服务器上面测试把数据目录改到/data目录下,依旧可以正常启动mysql服务。

其实我们可以也可以直接用mv 命令,把源数据文件/application/mysql/data 到 /data 里面,再修改mysql启动脚本即可。操作如下:

netstat -lntup|grep 3306

/etc/init.d/mysqld stop

netstat -lntup|grep 3306

mv /application/mysql/data /

sed -i ‘s#^datadir=#datadir=/data#‘ /etc/init.d/mysqld

/etc/init.d/mysqld start

netstat -lntup|grep 3306

==========================================

[[email protected]_S tools]# netstat -lntup|grep 3306

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      48234/mysqld

[[email protected]_S tools]#

[[email protected]_S tools]# /etc/init.d/mysqld stop

Shutting down MySQL. SUCCESS!

[[email protected]_S tools]# netstat -lntup|grep 3306

[[email protected]_S tools]# mv /application/mysql/data /

mv: overwrite `/data‘? y

[[email protected]_S tools]#  sed -i ‘s#^datadir=#datadir=/data#‘ /etc/init.d/mysqld

[[email protected]_S tools]# /etc/init.d/mysqld start

Starting MySQL. SUCCESS!

[[email protected]_S tools]# netstat -lntup|grep 3306

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      48396/mysqld

[[email protected]_S tools]#

==========================================

因为我们需要实现的是高可用,所以只需要只要一台数据文件/data。

所以现在我们需要做的是把备用服务器也就是10.0.0.4服务器的/data目录移走。

以后通过drbd漂移挂载/data 目录(mount /dev/drbd0 /data )存储数据

把备用服务器的/data 欲走后,备用服务器如果没有接管主服务器它将无法启动.在备服务器,也就是10.0.0.4上操作

mkdir /tmp/data

mv  /data/* /tmp/data

/etc/init.d/mysqld start

=====================

[[email protected]_S tools]# /etc/init.d/mysqld start

Starting MySQL.. ERROR! Manager of pid-file quit without updating file.

[[email protected]_S tools]#

发送此时把/data目录的内容移走之后,mysql数据库无法正常启动

=====================================

##测试,把备份服务器上的drbd停止,挂载/dev/drbd0到/data 目录,让其能正常启动。只有正常启动才能,让heartbeat管理主库mysql的高可用

##命令如下:

pkill mysql

pkill mysqld

drbdadm create-md data

drbdadm down data

drbdadm create-md data

drbdadm up data

cat /proc/drbd

drbdadm down data

mkdir /data

mount /dev/sdb1 /data

df

ll /data/

pkill mysql

pkill mysqld

ps -ef|grep mysql

netstat -lntup|grep 3306

/etc/init.d/mysqld start

netstat -lntup

netstat -lntup|grep 330

==============================

[[email protected]_S ~]# drbdadm down data

[[email protected]_S ~]#

[[email protected]_S ~]# mkdir /data

[[email protected]_S ~]#

[[email protected]_S ~]# mount /dev/sdb1 /data

[[email protected]_S ~]# df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda3       11150604 2513892   8070288  24% /

tmpfs             247112       0    247112   0% /dev/shm

/dev/sda1         198337   29670    158427  16% /boot

/dev/sdb1         576696   38304    509096   7% /data

[[email protected]_S ~]# ll /data/

total 20508

-rw-rw---- 1 mysql mysql 10485760 Nov  5 09:48 ibdata1

-rw-rw---- 1 mysql mysql  5242880 Nov  5 09:54 ib_logfile0

-rw-rw---- 1 mysql mysql  5242880 Nov  4 23:55 ib_logfile1

drwx------ 2 mysql mysql     4096 Nov  4 23:55 mysql

-rw-r----- 1 mysql mysql     3683 Nov  5 09:54 MYSQL_M.err

-rw-rw---- 1 mysql mysql        5 Nov  5 09:54 MYSQL_M.pid

-rw-r----- 1 mysql mysql     6190 Nov  5 09:19 MYSQL_S.err

-rw-rw---- 1 mysql mysql        6 Nov  5 00:45 MYSQL_S.pid

drwx------ 2 mysql mysql     4096 Nov  4 23:55 test

[[email protected]_S ~]#

[[email protected]_S ~]# pkill mysql

[[email protected]_S ~]# pkill mysqld

[[email protected]_S ~]# ps -ef|grep mysql

root     61189 50623  0 09:56 pts/1    00:00:00 grep mysql

[[email protected]_S ~]# netstat -lntup|grep 3306

[[email protected]_S ~]# /etc/init.d/mysqld start

Starting MySQL SUCCESS!

[[email protected]_S ~]# netstat -lntup

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name

tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1075/rpcbind

tcp        0      0 0.0.0.0:53845               0.0.0.0:*                   LISTEN      1093/rpc.statd

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1243/sshd

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1551/master

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      61313/mysqld

tcp        0      0 :::111                      :::*                        LISTEN      1075/rpcbind

tcp        0      0 :::37716                    :::*                        LISTEN      1093/rpc.statd

tcp        0      0 :::22                       :::*                        LISTEN      1243/sshd

tcp        0      0 ::1:25                      :::*                        LISTEN      1551/master

udp        0      0 0.0.0.0:111                 0.0.0.0:*                               1075/rpcbind

udp        0      0 225.0.0.181:694             0.0.0.0:*                               51656/heartbeat: wr

udp        0      0 0.0.0.0:826                 0.0.0.0:*                               1075/rpcbind

udp        0      0 0.0.0.0:55103               0.0.0.0:*                               51656/heartbeat: wr

udp        0      0 0.0.0.0:68                  0.0.0.0:*                               918/dhclient

udp        0      0 127.0.0.1:845               0.0.0.0:*                               1093/rpc.statd

udp        0      0 0.0.0.0:53339               0.0.0.0:*                               1093/rpc.statd

udp        0      0 :::111                      :::*                                    1075/rpcbind

udp        0      0 :::826                      :::*                                    1075/rpcbind

udp        0      0 :::56276                    :::*                                    1093/rpc.statd

[[email protected]_S ~]# netstat -lntup|grep 330

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      61313/mysqld

[[email protected]_S ~]#

注意:切换到备用服务器之后,无法挂载,注意/data/目录的属主问题,一定要把/data属主和UID设置相同

根据上面的操作,可以知道备用mysql数据库用主mysql数据库的数据文件,能够正常启动。

=======================================================================

测试备库可以成功使用主mysql数据库的数据文件,下面把备库的drbd正常启动起来

/etc/init.d/mysqld stop

umount /data

netstat -lntup|grep 330

ps -ef|grep mysql

drbdadm up data

cat /proc/drbd

================================

[[email protected]_S ~]# umount /data

[[email protected]_S ~]# !net

netstat -lntup|grep 330

[[email protected]_S ~]# !ps

ps -ef|grep mysql

root     61384 50623  0 10:01 pts/1    00:00:00 grep mysql

[[email protected]_S ~]# drbdadm up data

[[email protected]_S ~]# !cat

cat /proc/drbd

version: 8.4.4 (api:1/proto:86-101)

GIT-hash: 74402fecf24da8e5438171ee8c19e28627e1c98a build by [email protected]_S, 2015-11-04 22:59:05

0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----

ns:0 nr:12 dw:12 dr:0 al:0 bm:1 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

[[email protected]_S ~]#

================================

下面用heartbeat管理drbd和mysql数据库,

#####实现mysql自动接管

##操作需要在两个服务器内进行

cat >/etc/ha.d/haresources<<eof

#gao services

#10.0.0.103 www.etianetian.org

MASTER IPaddr::10.0.0.103/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4 mysqld

#MASTER IPaddr::10.0.0.103/24/eth0 httpd

#10.0.0.104 bbs.etianetian.org

MYSQL_S IPaddr::10.0.0.104/24/eth0

#mysql master mysqlm.etianetian.org

#MASTER IPaddr::10.0.0.103/24/eth0

#MASTER IPaddr::10.0.0.103/24/eth0 mysqld

#mysql slave mysqlm.etianetian.org

#MYSQL_S IPaddr::10.0.0.104/24/eth0

eof

##把启动mysql的文件放到/etc/ha.d/resource.d/,并且授予执行权限

cp /mysql /etc/ha.d/resource.d/

chmod +x /etc/ha.d/resource.d/mysql

ll  /etc/ha.d/resource.d/mysql

#############查看备用服务器是否启动mysql

[[email protected]_S ~]# lsof -i :3306

[[email protected]_S ~]# netstat -lnt|grep 3306

###把heartbeat关闭

/etc/init.d/heartbeat stop

##查看maste服务器现在的转态

[[email protected] tools]# netstat -lnt|grep 3306

[[email protected] tools]# df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda3       11150604 3886464   6697716  37% /

tmpfs             247112       0    247112   0% /dev/shm

/dev/sda1         198337   29670    158427  16% /boot

[[email protected] tools]# ip add |grep 10.0.0

inet 10.0.0.3/24 brd 10.0.0.255 scope global eth0

[[email protected] tools]# df

Filesystem     1K-blocks    Used Available Use% Mounted on

/dev/sda3       11150604 3886464   6697716  37% /

tmpfs             247112       0    247112   0% /dev/shm

/dev/sda1         198337   29670    158427  16% /boot

[[email protected] tools]#

启动heartbeat

/etc/init.d/heartbeat start

用下面命令,查看是否成功。之后左右重启服务器,切换主备。和用命令切换主备,让其能正常切换,才算成功

df

cat /proc/drbd

/usr/share/heartbeat/hb_standby

/usr/share/heartbeat/hb_takeover

这里就不列举具体的切换过程了,就用上面的命令在主备中切换。看能否切换成功。

切换延迟大概在10秒左右

######################################################配置mysql主从同步

配置mysql主从同步,用mysql_c,ip为:10.0.0.5作为mysql数据库的从库。

其中mysql的安装和上面的一样,也就是用上面的脚本一键安装即可。数据目录保留为原目录即可。

主数据上面操作(也就是需要在两台主mysql服务器上操作)

开启主数据的binlog参数,和设置server-id

egrep "server-id|log-bin" /etc/my.cnf

sed -i ‘s%#log-bin=mysql-bin%log-bin=mysql-bin%g‘ /etc/my.cnf

egrep "server-id|log-bin" /etc/my.cnf

=======================================

[[email protected]_S ~]# egrep "server-id|log-bin" /etc/my.cnf

server-id       = 1

#log-bin=mysql-bin

[[email protected]_S ~]#  sed -i ‘s%#log-bin=mysql-bin%log-bin=mysql-bin%g‘ /etc/my.cnf

[[email protected]_S ~]# egrep "server-id|log-bin" /etc/my.cnf

server-id       = 1

log-bin=mysql-bin

[[email protected]_S ~]#

=======================================

重启数据库()

/etc/init.d/mysqld restart

netstat -lntup|grep 3306

########################################

[[email protected]_S ~]# /etc/init.d/mysqld restart

Shutting down MySQL..... SUCCESS!

Starting MySQL. SUCCESS!

[[email protected]_S ~]# netstat -lntup|grep 3306

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      904/mysqld

[[email protected]_S ~]#

########################################

查看是否记录bin_log日志

[[email protected]_S ~]# ll /data/

total 20524

-rw-rw---- 1 mysql mysql 10485760 Nov  5 10:48 ibdata1

-rw-rw---- 1 mysql mysql  5242880 Nov  5 10:48 ib_logfile0

-rw-rw---- 1 mysql mysql  5242880 Nov  4 23:55 ib_logfile1

drwx------ 2 mysql mysql     4096 Nov  4 23:55 mysql

-rw-rw---- 1 mysql mysql      106 Nov  5 10:48 mysql-bin.000001         ##有这个,证明在记录主从同步

-rw-rw---- 1 mysql mysql       19 Nov  5 10:48 mysql-bin.index

-rw-r----- 1 mysql mysql     8427 Nov  5 10:29 MYSQL_M.err

-rw-r----- 1 mysql mysql     9010 Nov  5 10:48 MYSQL_S.err

-rw-rw---- 1 mysql mysql        4 Nov  5 10:48 MYSQL_S.pid

drwx------ 2 mysql mysql     4096 Nov  4 23:55 test

[[email protected]_S ~]#

########################################

##在主数据中创建测试用的数据库和表。

mysql

create database lvnian;

use lvnian;

create table test(

id int(4) not null auto_increment,

name char(20) not null,

primary key(id)

);

flush privileges;

quit;

mysql -uroot -e "use lvnian; select * from test;"

for n in `seq 100`;do mysql -uroot -e "use lvnian;insert test values($n,‘lvnian$n‘); " ;done;

mysql -uroot -e "use lvnian; select * from test;"

############################################

##############

查看是否开启binlog

[[email protected]_S ~]#  mysql -uroot  -e "show variables like ‘log_bin‘"

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin       | ON    |

+---------------+-------+

[[email protected]_S ~]#

############################################

创建用于同步数据的账号rep

mysql> grant replication slave on *.* to ‘rep‘@‘10.0.0.%‘ identified by ‘lvnian123456‘;

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

=========

或者用下面命令:

mysql -uroot -e "grant replication slave on *.* to ‘rep‘@‘10.0.0.%‘ identified by ‘lvnian123456‘; flush privileges;"

mysql -uroot -e "select user,host from mysql.user;" |grep rep

------

[[email protected]_S ~]# mysql -uroot -e "select user,host from mysql.user;" |grep rep

rep     10.0.0.%

[[email protected]_S ~]#

############################################

锁表

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

或者用下面命令:

mysql -uroot -e "flush tables with read lock;"

################################################################################

查看当前日志名称和位置

mysql -uroot -e " show master status;"

mysql -uroot -e "show master logs;"

########################################

[[email protected]_S ~]# mysql -uroot -e " show master status;"

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 |    10447 |              |                  |

+------------------+----------+--------------+------------------+

[[email protected]_S ~]# mysql -uroot -e "show master logs;"

+------------------+-----------+

| Log_name         | File_size |

+------------------+-----------+

| mysql-bin.000001 |     10447 |

+------------------+-----------+

[[email protected]_S ~]#

######################################

备份当前主数据库的数据

另开一个窗口

mysqldump -uroot  -A -B -F --master-data=2 --events | gzip > /tmp/mysql_bak.$(date +%F).sql.gz

##################

[[email protected]_S ~]#  mysqldump -uroot  -A -B -F --events --master-data=2 | gzip > /tmp/mysql_bak.$(date +%F).sql.gz

[[email protected]_S ~]# ll /tmp/

total 148

drwxr-xr-x 4 mysql mysql   4096 Nov  5 09:43 data

-rw-r--r-- 1 root  root  145589 Nov  5 11:05 mysql_bak.2015-11-05.sql.gz

[[email protected]_S ~]#

给主数据解锁

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

或者:

mysql -uroot -e " unlock tables;"

###############################################

继续往主数据写数据

for n in `seq 100 150`;do mysql -uroot -e "use lvnian;insert test values($n,‘lvnian$n‘); " ;done;

mysql -uroot -e "use lvnian; select * from test;"

############################################################################

启动备数据也就是从库(10.0.0.5)

/etc/init.d/mysqld restart

[[email protected]_C ~]# /etc/init.d/mysqld restart

Shutting down MySQL.... SUCCESS!

Starting MySQL. SUCCESS!

[[email protected]_C ~]#

#####################################################

把备份数据备份到备数据

scp [email protected]0.0.4:/tmp/mysql_bak* .

ls

cp mysql_bak.2015-11-05.sql.gz  /tmp/

gzip -d mysql_bak.2015-11-05.sql.gz

mysql -uroot < mysql_bak.2015-11-05.sql

mysql -uroot -e "show databases;"

mysql -uroot -e "use lvnian;select * from test;"

=========================================

[[email protected]_C ~]# scp [email protected]:/tmp/mysql_bak* .

[email protected]‘s password:

mysql_bak.2015-11-05.sql.gz                                                                        100%  142KB 142.2KB/s   00:00

[[email protected]_C ~]# ls

anaconda-ks.cfg  chu.sh  gao.txt  hosts  install.log  install.log.syslog  mysql_bak.2015-11-05.sql.gz

[[email protected]_C ~]#

##########

[[email protected]_C ~]# gzip -d mysql_bak.2015-11-05.sql.gz

[[email protected]_C ~]# mysql -uroot < mysql_bak.2015-11-05.sql

[[email protected]_C ~]# mysql -uroot -e "show databases;"

+--------------------+

| Database           |

+--------------------+

| information_schema |

| lvnian             |

| mysql              |

| test               |

+--------------------+

[[email protected]_C ~]# mysql -uroot -e "use lvnian;select * from test;"

+-----+-----------+

| id  | name      |

+-----+-----------+

|   1 | lvnian1   |

|   2 | lvnian2   |

|   3 | lvnian3   |

|   4 | lvnian4   |

....

....

....

|  95 | lvnian95  |

|  96 | lvnian96  |

|  97 | lvnian97  |

|  98 | lvnian98  |

|  99 | lvnian99  |

| 100 | lvnian100 |

+-----+-----------+

[[email protected]_C ~]#

全部恢复到备数据成功

###############################################

开始设置主从同步

修改从库的server-id,修改和主库不一样,这里修改为20

egrep "server-id" /etc/my.cnf

sed -i ‘s/^server-id/#server-id/g‘ /etc/my.cnf

egrep "server-id" /etc/my.cnf

sed -i ‘/#server-id/aserver-id      = 20‘ /etc/my.cnf

egrep "server-id" /etc/my.cnf

###重启mysql

更改主数据刚才的文件名称和位置点,等到下面的内容

mysql

======

CHANGE MASTER TO

MASTER_HOST=‘10.0.0.103‘,

MASTER_PORT=3306,

MASTER_USER=‘rep‘,

MASTER_PASSWORD=‘lvnian123456‘,

MASTER_LOG_FILE=‘mysql-bin.000001‘,

MASTER_LOG_POS=10447;

######################

start slave;

show  slave status\G;

###################################

mysql> CHANGE MASTER TO

-> MASTER_HOST=‘10.0.0.103‘,           <===注意,必须要用VIP

-> MASTER_PORT=3306,

-> MASTER_USER=‘rep‘,

-> MASTER_PASSWORD=‘lvnian123456‘,

-> MASTER_LOG_FILE=‘mysql-bin.000003‘,

-> MASTER_LOG_POS=302;

Query OK, 0 rows affected (0.08 sec)

mysql>

mysql> start slave;

Query OK, 0 rows affected (0.03 sec)

mysql> show  slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 10.0.0.4

Master_User: rep

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000004

Read_Master_Log_Pos: 9759

Relay_Log_File: S_MYSQL-relay-bin.000005

Relay_Log_Pos: 9905

Relay_Master_Log_File: mysql-bin.000004

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 9759

Relay_Log_Space: 10106

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

1 row in set (0.00 sec)

ERROR:

No query specified

mysql>

成功的表现:

[[email protected]_MYSQL ~]# mysql -uroot -e "show  slave status\G;"|egrep "Slave_IO_Runnin|Slave_SQL_Running"

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

[[email protected]_MYSQL ~]#

出现上面两个yes证明数据库主从同步成功了

################################################################################

再次用heartbeat让mysql主库进行主备切换。看看mysql客户端,也就是从库的状态。

用下面命令看在从库10.0.0.5看主备切换,从库数据同步的情况:

mysql -uroot -e "show  slave status\G;"|egrep "Slave_IO_Runnin|Slave_SQL_Running"

for i in `seq 100`;do  mysql -uroot -e "show  slave status\G;"|egrep "Slave_IO_Runnin|Slave_SQL_Running";sleep 10;echo -e "========$i=======\n" ; done

用下面命令进行主备切换

/usr/share/heartbeat/hb_standby

/usr/share/heartbeat/hb_takeover

往主库写数据

for n in `seq 2000 2300`;do mysql -uroot -e "use lvnian;insert test values($n,‘lvnian$n‘);"; sleep 10 ;done;

for n in `seq 100`;do  mysql -uroot -e "use lvnian; select * from test;"|tail -5 ;sleep 10;echo -e "=========$i==========" ;done;

mysql -uroot -e "use lvnian; select * from test;"

######################################################

[[email protected]_C ~]# for i in `seq 100`;do  mysql -uroot -e "show  slave status\G;"|egrep "Slave_IO_Runnin|Slave_SQL_Running";sleep 10;echo -e "========$i=======\n" ; done

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

========1=======

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

========2=======

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

========3=======

Slave_IO_Running: No

Slave_SQL_Running: Yes

========4=======

Slave_IO_Running: No

Slave_SQL_Running: Yes

========5=======

Slave_IO_Running: No

Slave_SQL_Running: Yes

========6=======

Slave_IO_Running: No

Slave_SQL_Running: Yes

========7=======

Slave_IO_Running: No

Slave_SQL_Running: Yes

========8=======

Slave_IO_Running: No

Slave_SQL_Running: Yes

========9=======

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

####################################

通过上面的主备切换时,从库同步主库的情况,因为每次查看同步情况,是10秒,所以得出结论:在主备进行切换时,mysql可不得大概会有1分钟的延迟,导致无法正常进行使用mysql数据库

时间: 2024-08-08 14:03:40

MySQL+Heartbeat+DRBD架构部署的相关文章

MySQL主从多种架构部署及常见错误问题解析

本文的主要内容有mysql复制原理,mysql一主多从.双主架构的示例解读,以及mysql在主从复制架构实践中的常见错误问题和解决方法. 一 mysql复制原理 1 原理解读 mysql的复制(replication)是异步复制,即从一个mysql实列或端口(Master)复制到另一个mysql实列的或端口(slave):复制操作由3个进程完成,其中2个(SQL进程和I/O进程)在Slave上,另一个在Master上:要实现复制,必须打开Master端的二进制日志(log-bin),log-bi

MySQL+Heartbeat+DRBD+LVS+keepalived实现数据库高可用群集

DRBD  概述 一.DRBD简介          DRBD 的全称为:Distributed ReplicatedBlock Device(DRBD)分布式块设备复制,DRBD 是由内核模块和相关脚本而组成,用来构建数据的高可用性集群.其实现方式是通过网络来镜像整个磁盘设备(数据).你可以把它看作是一种基于网络的 RAID1.它允许用户在远程机器上建立一个本地块设备的实时镜像. 二.DRBD工作原理          (DRBD Primary)负责接收数据,把数据写到本地磁盘并发送给另一台

mysql+heartbeat+drbd安装

环境: 系统           IP地址            主机名             软件包列表 centos6.5  192.168.200.101      server1       DRBD.heartbeat.mysql centos6.5  192.168.200.102     server2       DRBD.heartbeat.mysql 安装前准备配置: 所有主机需要添加一块20G 的SCSI 接口硬盘. 将两台机器的硬盘分区(10G),分区不需要格式化,过程

mysql+heartbeat+DRBD+LVS集群

ysql+heartbeat+DRBD+LVS实现mysql高可用

在企业应用中,mysql+heartbeat+DRBD+LVS是一套成熟的集群解决方案,通过heart+DRBD实现mysql的主 节点写操作的高可用性,而通过mysql+LVS实现数据库的主从复制和mysql的读操作的负载均衡.整个方案在读写方面进行了分离,融合了写操作的高 可用和读操作的负载均衡,是一个完美又廉价的企业应用解决方案 目前流行的高可用解决方案: mysql的复制功能是通过建立复制关系和两台和多台机器环境中,一台机器出现故障切换到另一台机器上保证一定程度的可用性 mysql的复制

15、 Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节

15. Heartbeat+DRBD+MySQL高可用架构方案与实施过程细节 参考自:http://oldboy.blog.51cto.com/2561410/1240412 heartbeat和keepalived应用场景及区别 很多网友说为什么不使用keepalived而使用长期不更新的heartbeat,下面说一下它们之间的应用场景及区别: 1.对于web,db,负载均衡(lvs,haproxy,nginx)等,heartbeat和keepalived都可以实现 2.lvs最好和keepa

Heartbeat+drbd+mysql的高可用部署

Heartbeat+drbd+mysql的高可用1.规划    VIP:192.168.1.30    myhost1:        内网IP:192.168.1.11        heartbeat心跳IP:192.168.74.11        drbd传输IP:192.168.223.11    myhost2:        内网IP:192.168.1.12        heartbeat心跳IP:192.168.74.12        drbd传输IP:192.168.22

Heartbeat+Drbd+Mysql主从高可用实现

在上一篇中已经实现了MySQL服务的高可用,MySQL的数据目录放在drbd的共享目录中,并且只有获取到heartbeat资源的VIP才能挂载共享目录,从而启动MySQL服务,但是两端的数据使用drbd同步,保证发生故障时,服务和资源能够从一个节点切换到另外一个节点,下面是一个简略的架构图: 对于MySQL服务,一般在生产环境中都要做主从结构,从而保证数据的完整性,所以这次要在这个架构的前提下,在两个heartbeat节点下再部署一台MySQL从库,而主库是heartbeat集群中的一台(主库的

Mysql+DRBD+Heartbeat 实现mysql高可用的双机热备(mysql+heartbeat篇)

*************************************部署MYSQL******************************************* yum -y install  gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* make cmake bison* useradd mysql -d /usr/loc