生产环境drbd+heartbeat+mysql(mysql一主多从)部署安装

时间:2021-06-01 03:11:03

 

生产环境drbd+heartbeat+mysql(mysql一主多从)部署安装

 

一、环境准备:

 

1.1 网卡及IP资源

名称

   接口

IP

  用途

Master(主)

  eth0(自管)

172.20.28.41

  外网管理IP,用于WAN数据转发

  eth1(受管)

192.168.10.41

  用于mysql服务间的心跳连接(直连)和数据同步

  vip(绑定在eth0网卡上

10.1.6.41

  用于提供对外mysql数据库服务VIP漂移IP

Slave(备)

  eth0(自管)

172.20.28.42

  外网管理IP,用于WAN数据转发

  eth1(受管)

192.168.10.42

  用于mysql服务间的心跳连接(直连)

  vip(绑定在eth0网卡上

10.1.6.42

  用于提供对外mysql数据库服务VIP漂移IP

小结:

1、在配置网卡的时候,需要明确各个网址的作用。

2、两台服务器eth1网卡配置参数

[root@i-e0zg6o7f network-scripts]# cat ifcfg-eth1

DEVICE=eth1

TYPE=Ethernet

IPADDR=192.168.10.41

BOOTPROTO=static

NETMASK=255.255.255.0

ONBOOT=yes

NM_CONTROLLED=yes

HWADDR=52:54:52:95:E6:AD

[root@i-ylibhc7r network-scripts]# cat ifcfg-eth1

DEVICE=eth1

TYPE=Ethernet

IPADDR=192.168.10.42

BOOTPROTO=static

NETMASK=255.255.255.0

ONBOOT=yes

NM_CONTROLLED=yes

HWADDR=52:54:98:2F:B1:45

 

3、由于此处配置是在生产环境,路由是直连的,所以不需要配置eth1的路由。

[root@i-e0zg6o7f network-scripts]# route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

0.0.0.0         172.20.28.1     0.0.0.0         UG    0      0        0 eth0

172.20.28.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0

192.168.10.0    0.0.0.0         255.255.255.0   U     1      0        0 eth1

[root@i-ylibhc7r network-scripts]# route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

0.0.0.0         172.20.28.1     0.0.0.0         UG    0      0        0 eth0

172.20.28.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0

192.168.10.0    0.0.0.0         255.255.255.0   U     1      0        0 eth1

补充:如果是测试环境则需要手动添加路由:

[root@data-master network-scripts]# route add -host 192.168.10.42  dev eth1

[root@data-slave  network-scripts]# route add -host 192.168.10.41  dev eth1

 

4、两台服务器上添加vip

[root@data-master ha.d]# ip addr add 10.1.6.41/24 dev eth0

[root@data-slave ha.d]#  ip addr add 10.1.6.42/24 dev eth0

小结:详情请参考网址:http://www.jianshu.com/p/d9a0a4d82047

 

 

1.2 主机hosts及硬盘规划

[root@data-master ha.d]# cat /etc/hosts

192.168.10.41 data-master

192.168.10.42 data-slave

[root@data-slave ha.d]# cat /etc/hosts

192.168.10.41 data-master

192.168.10.42 data-slave

小结:

1、此处配置的IP是eth1网卡的IP,此网卡的作用是mysq服务器间的心跳连接和drbd数据同步。

2、检查两个节点是否通畅。

 

1.3 单主热备模式架构图

 生产环境drbd+heartbeat+mysql(mysql一主多从)部署安装

 

小结:此处借鉴了老男孩老师的架构图,特别感谢老师!

 

二、分别在两台服务器上部署安装heartbeat(快速安装文档)

 

2.1 下载安装

[root@data-master~]#wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm

[root@data-master~]#rpm -ivh epel-release-6-8.noarch.rpm

[root@data-slave ~]# yum install heartbeat -y

 

2.2 拷贝配置文件

[root@data-master ~]# cp /usr/share/doc/heartbeat-3.0.4/{ha.cf,authkeys,haresources} /etc/ha.d/

[root@data-master ~]# ll /etc/ha.d/

total 44

-rw-r--r-- 1 root root   645 Dec  1 10:21 authkeys

-rw-r--r-- 1 root root 10502 Dec  1 10:21 ha.cf

-rwxr-xr-x 1 root root   745 Dec  3  2013 harc

-rw-r--r-- 1 root root  5905 Dec  1 10:21 haresources

drwxr-xr-x 2 root root  4096 Dec  1 10:18 rc.d

-rw-r--r-- 1 root root   692 Dec  3  2013 README.config

drwxr-xr-x 2 root root  4096 Dec  1 10:18 resource.d

-rw-r--r-- 1 root root  2082 Mar 24  2017 shellfuncs

 

2.3 修改heartbeat配置文件(两台服务上的这三个文件全部要一样

[root@data-master ha.d]# cat ha.cf

#the start by zhangjunchao

 

debugfile /var/log/ha-debug

logfile /var/log/ha-log

logfacility local1

keepalive 2

deadtime 30

warntime 10

initdead 60

udpport 694

mcast eth0 225.0.0.1 694 1 0

auto_failback on

node    data-master

node data-master

crm no

 

[root@data-master ha.d]# (echo -ne auth 1 "\n" 1  sha1 ; dd if=/dev/urandom bs=512 count=1 | openssl md5) >/etc/ha.d/authkeys

1+0 records in

1+0 records out

512 bytes (512 B) copied, 3.9232e-05 s, 13.1 MB/s

[root@data-master ha.d]# cat /etc/ha.d/authkeys

auth 1

 1 sha1(stdin)= 54d87827a906472acc453f9b6f3d08d9

总结:删掉(stdin)= 这一部分。

 

[root@data-master ha.d]# chmod 600 authkeys

 

[root@data-slave ha.d]# cat /etc/ha.d/haresources

#zhangjunchao services

 

data-master IPaddr::10.1.6.41/24/eth0      #此处的IP是VIP,提供对外mysql服务的IP。

 

2.4 分别在两端启动heartbeat服务

[root@data-master ha.d]# /etc/init.d/heartbeat start

[root@data-master ha.d]# chkconfig heartbeat off  #建议开机不要启动heartbeat,避免问题。

 

三、分别在两端部署安装drbd

 

3.1 分别在两台服务器上准备两块磁盘(/dev/sdb)

分区(两个去,一个是存储数据,一个是meta磁盘储存drbd状态信息的,不能格式化)

 Device Boot        Start         End      Blocks   Id  System

/dev/sdb1               1        1025     1049584   83  Linux

/dev/sdb2            1026       10240     9436160   83  Linux

刷新磁盘,通知内核

[root@data-master ~]# partx /dev/sdb

# 1:        32-  2099199 (  2099168 sectors,   1074 MB)

# 2:   2099200- 20971519 ( 18872320 sectors,   9662 MB)

# 3:         0-       -1 (        0 sectors,      0 MB)

# 4:         0-       -1 (        0 sectors,      0 MB)

 

[root@data-master ~]# lsblk

NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

sda      8:0    0  20G  0 disk

└─sda1   8:1    0  20G  0 part /

sdb      8:16   0  10G  0 disk

├─sdb1   8:17   0   1G  0 part

└─sdb2   8:18   0   9G  0 part

sdc      8:32   0   4G  0 disk [SWAP]

 

3.2 下载安装drbd的yum源

[root@data-master ~]# wget http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

--2017-12-01 11:54:24--  http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm

Resolving www.elrepo.org... 69.195.83.87

Connecting to www.elrepo.org|69.195.83.87|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 7796 (7.6K) [application/x-rpm]

Saving to: “elrepo-release-6-8.el6.elrepo.noarch.rpm”

 

100%[===================================================================================================================================================>] 7,796       --.-K/s   in 0s      

 

2017-12-01 11:54:27 (540 MB/s) - “elrepo-release-6-8.el6.elrepo.noarch.rpm” saved [7796/7796]

 

[root@data-master ~]# rpm -ivh elrepo-release-6-8.el6.elrepo.noarch.rpm

Preparing...                ########################################### [100%]

   1:elrepo-release         ########################################### [100%]

 

3.3 安装drbd软件

[root@data-master ~]# yum install drbd kmod-drbd84 -y

 

3.4 加载内核模块

[root@data-master ~]# modprobe drbd

[root@data-master ~]# lsmod  | grep drbd

drbd                  319501  0

lru_cache               8465  1 drbd

libcrc32c               1388  1 drbd

[root@data-master ~]# echo "modprobe drbd" >> /etc/rc.local   #添加至开机启动

小结:如果当前系统的内核版本低于3.0,建议升级内核,升级方式详情参考我的文档。http://blog.csdn.net/m0_37814112/article/details/78675550

 

3.5 编辑drbd配置文件

[root@data-master drbd.d]# vi  /etc/drbd.conf

global {

       usage-count no;

}

 

common {

 

      syncer {

      rate 20M;

      verify-alg crc32c;

      }

}

 

resource data {

         protocol C;

 

    disk {

         on-io-error detach;

    }

 

   on data-master {

      device    /dev/drbd0;

      disk      /dev/sdb2;

      address   192.168.10.41:7788;

      meta-disk /dev/sdb1[0];

    }

 

   on data-slave {

           device    /dev/drbd0;

           disk      /dev/sdb2;

           address   192.168.10.42:7788;

           meta-disk /dev/sdb1[0];

    }

}

 

3.6 初始化drbd

[root@data-master drbd.d]# drbdadm create-md  data

initializing activity log

NOT initializing bitmap

Writing meta data...

New drbd meta data block successfully created.

 

3.7 启动drbd

[root@data-master drbd.d]# drbdadm up data

[root@data-master drbd.d]# cat /proc/drbd

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

srcversion: E5B188AA2E7FBFC9F82CDB4

 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

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

 

[root@data-slave drbd.d]# drbdadm up data

[root@data-slave drbd.d]# cat /proc/drbd

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

srcversion: E5B188AA2E7FBFC9F82CDB4

 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----

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

 

小结:出现上述,则表明启动成功,因为现在是无主的状态,所以两边都是从的状态。

 

3.8 设置主,同步数据到对端

[root@data-master drbd.d]# drbdadm -- --overwrite-data-of-peer primary data

[root@data-master drbd.d]# cat /proc/drbd

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

srcversion: E5B188AA2E7FBFC9F82CDB4

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

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

[>....................] sync'ed:  1.0% (9124/9212)M

finish: 0:05:08 speed: 30,204 (30,204) K/sec

小结:

1、这一步操作,在主的一端设置,不需要在两端同时设置为主,那样会冲突导致drbd报错。

2、过几分钟在检查drbd的状态,因为两端同步是需要时间的。

3、drbd详细参数解释详情请参考我的文档drbd状态信息详解。


[root@data-slave drbd.d]# cat /proc/drbd

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

srcversion: E5B188AA2E7FBFC9F82CDB4

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

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



3.9 分别在两端创建一个data目录

补充说明:

1、这个data目录是放置数据库的目录

2、mysql用二进制安装。

[root@data-master ~]# mkdir /data

[root@data-slave ~]# mkdir /data


3.10 格式化drbd0(备节点不用格式化)

[root@data-master ~]# mkfs.ext4 /dev/drbd0

 

3.11 检查master端和slave端数据是否同步

Master:在主的节点上的/data目录创建多个文件

Slave:在备的节点上先停掉drbd服务:drbdadm down data  #这个data是drbd.conf配置文件里面定义的data,资源名称

      mount  /dev/sdb2  /data

       检查/data目录是否有相同多的文件

 

3.12  错误问题总结

a、脑裂解决方法:

[root@data-slave ~]# cat /proc/drbd

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

srcversion: E5B188AA2E7FBFC9F82CDB4

 0: cs:WFconnected ro:Secondary/Unknown ds:UpToDate/DupToDate C r-----

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

 

解决:

1、在备节点slave操作:

[root@data-slave ~]# modprobe drbd

[root@data-slave ~]# lsmod | grep drbd

drbd                  319501  3

lru_cache               8465  1 drbd

libcrc32c               1388  1 drbd

[root@data-slave ~]# drbdadm secondary data

[root@data-slave ~]# drbdadm up data

[root@data-slave ~]# drbdadm disconnect data

[root@data-slave ~]# drbdadm -- --discard-my-data connect data

 

2、在主节点master上,通过cat /proc/drbd查看状态,如果不是WFConnection状态,就需要手动drbdadm connect data




b、无法卸载/data目录

[root@data-slave data]# umount /data

umount: /data: device is busy.

        (In some cases useful info about processes that use

         the device is found by lsof(8) or fuser(1))

解决:

[root@data-slave data]# fuser -v /data

                     USER        PID ACCESS COMMAND

/data:               root      22677 ..c.. bash

[root@data-slave data]# kill -9 22677

[root@data-slave ~]# umount /data

小结:通过杀pid的方式强行关闭。

 

 

四、主节点配合heartbeat调试drbd服务配置,同时拷贝一份到备节点

分别在两个节点先停掉heartbeat服务

[root@data-slave ~]# /etc/init.d/heartbeat stop

Stopping High-Availability services: Done.

 

[root@data-master resource.d]# cat /etc/ha.d/haresources

#zhangjunchao services

 

data-master IPaddr::10.1.6.41/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4

 

分别在两个节点启动heartbeat服务

[root@data-slave ~]# /etc/init.d/heartbeat start

Starting High-Availability services: INFO:  Resource is stopped

Done.

 

查看drbd状态信息,看是否自动执行

/usr/lib/ocf/resource.d//heartbeat/IPaddr(IPaddr_10.1.6.41)[29139]: 2017/12/01_14:26:21 INFO:  Success

ResourceManager(default)[29015]: 2017/12/01_14:26:21 info: Running /etc/ha.d/resource.d/drbddisk data start

/usr/lib/ocf/resource.d//heartbeat/Filesystem(Filesystem_/dev/drbd0)[29292]: 2017/12/01_14:26:21 INFO:  Resource is stopped

ResourceManager(default)[29015]: 2017/12/01_14:26:21 info: Running /etc/ha.d/resource.d/Filesystem /dev/drbd0 /data ext4 start

Filesystem(Filesystem_/dev/drbd0)[29380]: 2017/12/01_14:26:21 INFO: Running start for /dev/drbd0 on /data

/usr/lib/ocf/resource.d//heartbeat/Filesystem(Filesystem_/dev/drbd0)[29372]: 2017/12/01_14:26:21 INFO:  Success

Dec 01 14:26:21 data-master heartbeat: [28825]: info: remote resource transition completed.

小结:从上述状态信息查看分析heartbeat自动执行脚本。

 

 

停掉主节点的heartbeat服务,看备节点是否能自动接管

 

停掉前:

[root@data-master resource.d]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              20G  1.3G   18G   7% /

tmpfs                 2.0G     0  2.0G   0% /dev/shm

/dev/drbd0            8.8G   59M  8.3G   1% /data

 

停掉后:

[root@data-master resource.d]# /etc/init.d/heartbeat stop

Stopping High-Availability services: Done.

 

[root@data-master resource.d]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              20G  1.3G   18G   7% /

tmpfs                 2.0G     0  2.0G   0% /dev/shm

小结:这是发现/data目录已经卸载了。

 

查看备节点:

接管前:

[root@data-slave ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              20G  1.3G   18G   7% /

tmpfs                 2.0G     0  2.0G   0% /dev/shm

 

接管后

[root@data-slave ~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              20G  1.3G   18G   7% /

tmpfs                 2.0G     0  2.0G   0% /dev/shm

/dev/drbd0            8.8G   59M  8.3G   1% /data

小结:这是发现备节点已经接管了drbd服务。

 

启动主节点的heartbeat服务,看是否能从备节点处重新接管drbd服务

[root@data-master resource.d]# /etc/init.d/heartbeat start

Starting High-Availability services: INFO:  Resource is stopped

Done.

 

[root@data-master resource.d]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda1              20G  1.3G   18G   7% /

tmpfs                 2.0G     0  2.0G   0% /dev/shm

/dev/drbd0            8.8G   59M  8.3G   1% /data

小结:主节点从备节点接管服务,测试正常。

 

五、安装mysql服务

172.20.28.41

Master(主节点)

Mysql(active mysql-master)

172.20.28.42

Slave(备用节点)

Mysql(inactive mysql-master)

172.20.28.43

从数据库(主从复制的从库)

Mysql(active-salve)

补充说明:

1、mysql服务建议用二进制包安装,且放在同步目录/data目录下。

2、由于heartbeat和drbd都分别状态172.20.28.41和172.20.28.42这两台服务器上,为了实现mysql服务的高可用,在两个节点上(主机点和备用节点)分别安装mysql服务。

3、172.20.28.41的heartbeat服务停止,备用heartbeat节点接管vip,为了实现mysql服务备用节点的mysql主库和172.20.28.43上的从库的数据一致,在做主从同步的时候,在主节点的mysql上,授权复制用户,授权的IP为VIP,这样才能保证,当主节点挂了的时候,备用节点接管时,能保证备用节点的数据和从库的数据一致。

4、172.20.28.41和172.20.28.43这两台服务器做主从同步,在主节点上授权复制用户,命令如下所示:

mysql> grant replication slave on *.* to 'tomcat'@'10.1.6.%' identified by 'tomcat'; #这里的10.1.6.%是vip的网段

mysql> flush privileges;

5、mysql二进制安装及主从复制的过程,在这里我就记录了,详情可参考我的文档http://blog.csdn.net/m0_37814112/article/details/78606593

 

六、测试主节点和备节点的高可用切换

1、先分别停掉主节点和备节点的heartbeat服务。 /etc/init.d/heartbeat stop

2、修改/etc/ha.d/haresources文件,具体修改内容如下:

[root@data-master ~]# cat  /etc/ha.d/haresources

#zhangjunchao services

data-master IPaddr::10.1.6.41/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4mysqld   #这里的mysqld是脚本

3、mysqld脚本拷贝至/etc/init.d/下或者/etc/ha.d/resource.d/目录下,同时给予执行权限

4、在主节点端停止heartbeat服务,在备节点上查看:1、vip是漂移到备节点2、/data目录是否挂载到备节点;3、cat /proc/drbd备节点的信息是否正常;4、mysql服务是否正常启动

 

七、当主节点宕机,备节点接管mysql服务,测试备节点的mysql服务是否同从库的数据一致

补充说明:简单的说,当mysql-active这台挂了,mysql-inactive接管mysql服务,与mysql-slave数据是否同步。

1、重点说明,要实现备节点mysql服务和从库数据一致,前提是主节点的vip要漂移过来

2、要测试数据是否一致,在备节点上创建文件,查看从库是否有这几个文件,如果有,则数据一致。

 

 

八、总结

1、此次文档的编写,首先非常感谢老男孩老师,感谢老师的视频,讲的非常好。

2、重在思想,重在总结,重在态度,重在方法,这也将是我运维之路前行的目标。

3、在生产环境部署,要先规划好服务器、IP资源分配、软件版本及部署节点,做到心中有数。

4、Mysql高可用的方案不仅仅是这个,还有很多,后面我会根据的自己的总结,慢慢分享。