mysql+heartbeat+drbd安装
阅读原文时间:2023年07月08日阅读:2

环境:

系统           IP地址            主机名             软件包列表

centos6.5  192.168.200.101      server1       DRBD、heartbeat、mysql

centos6.5  192.168.200.102     server2       DRBD、heartbeat、mysql

安装前准备配置:

所有主机需要添加一块20G 的SCSI 接口硬盘。

将两台机器的硬盘分区(10G),分区不需要格式化,过程省略

主从更改主机名以及host

[root@localhost ~]# vim /etc/sysconfig/network

HOSTNAME=server1

[root@localhost ~]# hostname server1

[root@localhost ~]# bash

[root@server1 ~]# vim /etc/hosts

192.168.200.101 server1

192.168.200.102 server2

Heartbeat 安装:

主从都需要安装

将软件包上传

[root@server1 ~]# yum -y install perl-TimeDate cluster-glue-libs kernel-devel kernel-headers flex

进入到上传的软件包目录下

[root@server1 ~]# rpm -ivh cluster-glue-1.0.5-6.el6.x86_64.rpm

[root@server1 ~]# yum -y localinstall heartbeat-*

安装配置DRBD

主从都需要安装

[root@server1 ~]# tar xf drbd-8.4.3.tar.gz

[root@server1 ~]# cd drbd-8.4.3

[root@server1 drbd-8.4.3]#./configure --prefix=/usr/local/drbd --with-km --with-heartbeat

make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/ && make &&

make install

红色部分要看本机的版本,主机不同,版本不同

[root@server1 drbd-8.4.3]# mkdir -p /usr/local/drbd/var/run/drbd

[root@server1 drbd-8.4.3]# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/

[root@server1 drbd-8.4.3]# chkconfig --add drbd

[root@server1 drbd-8.4.3]# cd drbd

[root@server1 drbd]# make clean

make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/

cp drbd.ko /lib/modules/2.6.32-431.el6.x86_64/kernel/lib/

[root@server1 drbd]# depmod

[root@server1 drbd]# cp -R /usr/local/drbd/etc/ha.d/resource.d/* /etc/ha.d/resource.d/

[root@server1 drbd]# cd /usr/local/drbd/etc/drbd.d/

vim  /usr/local/drbd/etc/drbd.conf

include "drbd.d/global_common.conf";

include "drbd.d/*.res";  //此目录下所有以.res 结尾的都为资源文件

1、配置global_common.conf 文件(主从一致)

[root@server1 drbd.d]# pwd

/usr/local/drbd/etc/drbd.d

[root@server1 drbd.d]# cp global_common.conf{,-$(date +%s)}

[root@server1 drbd.d]# vim global_common.conf

global {

usage-count yes; //是否对使用信息作统计,默认为yes

}

common {

startup {

wfc-timeout 120; //等待连接的超时时间

degr-wfc-timeout 120;

}

disk {

on-io-error detach; //当IO 出现错误时执行的动作

}

net {

protocol C; //复制模式为第3 种

}

2、配置资源文件(主从一致)

[root@server1 drbd.d]# vim r0.res

resource r0 {        //r0 资源名称

on server1 {

device /dev/drbd0;              //逻辑设备路径

disk /dev/sdb1;                 //物理设备

address 192.168.200.101:7788; //主节点

meta-disk internal;

}

on server2 {

device /dev/drbd0;

disk /dev/sdb1;

address 192.168.200.102:7788; //备节点

meta-disk internal;

}

}

注意:将内容复制到文件中的时候,将注释删除掉,否则报错(文件是细新建的)

[root@server1 drbd.d]# scp global_common.conf r0.res

192.168.200.102:/usr/local/drbd/etc/drbd.d

3、创建元数据(两个节点上操作)

[root@server1 drbd.d]# modprobe drbd

[root@server1 drbd.d]# lsmod | grep drbd

drbd 310268 0

libcrc32c 1246 1 drbd

[root@server1 drbd.d]# dd if=/dev/zero bs=1M count=1 of=/dev/sdb1

[root@server1 drbd.d]# drbdadm create-md r0 //输出以下信息

. //当输出成功信息后可Ctrl+C 结束

注意:

当执行命令”drbdadm create-md r0”时,出现以下错误信息。

Device size would be truncated, which

would corrupt data and result in
You need to either
* use external meta data (recommended)
* shrink that filesystem first
* zero out the device (destroy the filesystem)
Operation refused.
Command 'drbdmeta 0 v08 /dev/xvdb internal create-md' terminated with exit code 40
drbdadm create-md r0: exited with code 40

解决办法:初始化磁盘文件格式, dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync

启动 DRBD(主从节点都要执行)

[root@server1 ~]#  /etc/init.d/drbd start

这里的yes是指的终止等待

[root@server1 ~]# netstat -anpt | grep 7788

tcp        0      0 192.168.200.101:7788        0.0.0.0:*                   LISTEN      -

手动验证主从切换:

在server1上执行

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

cat /proc/drbd

数据同步测试(主节点上操作前 6 步骤,次节点上操作后三步骤)
[root@server1 drbd.d]# mkfs.ext4 /dev/drbd0[root@server1 drbd.d]# **mkdir /mysqldata
**[root@server1 drbd.d]# **mount /dev/drbd0 /mysqldata
**[root@server1 drbd.d]# echo www.crushlinux.com > /mysqldata/file //建立测试文件
[root@server1 ~]# **umount /dev/drbd0
**[root@server1 ~]# drbdadm secondary r0 //主降为次

[root@server2 drbd.d]# drbdadm primary r0 //次升为主
[root@server2 drbd.d]# **mkdir /mysqldata
**[root@server2 drbd.d]# **mount /dev/drbd0 /mysqldata
**[root@server2 drbd.d]# ls /mysqldata //在备节点上查看数据
file lost+found      //可以看到创建的文件

安装 MySQL
更改 Mysql 数据库的存储位置为共享目录(主从都要执行)
[root@server1 ~]# yum -y install mysql mysql-server
[root@server1 ~]# vim /etc/my.cnf
2 datadir=/mysqldata/mysql
[root@server1 ~]# chown -R mysql.mysql /mysqldata
[root@server1 ~]# chkconfig mysqld on
注意: 此时我们修改了数据目录和其属主和权限,有时会因为此操作导致数据库无法启动,
解决方法:
一,查看你的 selinux 是否处于打开状态,将其关闭。
二, /etc/apparmor.d/usr.sbin.mysqld 文件中,有两行内容规定了 mysql 使用数据文件的路径权限,改掉即可,重启/etc/init.d/apparmor restart。

进行数据库测试
因为此前的操作,现在把 server2 节点降为次
[root@server2 ~]#**umount /dev/drbd0
*[root@server2 ~]#*drbdadm secondary r0
*把 server1 升为主节点 [root@server1 ~]#*drbdadm primary r0
*[root@server1 ~]#*mount /dev/drbd0 /mysqldata
**[root@server1 ~]# **/etc/init.d/mysqld start
**在 server1 上创建一个库 crushlinux,然后主降为备,把 server2 升为主查看库有没有同步。
[root@server1 ~]# mysql
mysql> create database crushlinux;
Query OK, 1 row affected (0.00 sec)
mysql> exit

[root@server1 ~]# service mysqld stop

[root@server1 ~]# umount /dev/drbd0

[root@server1 ~]# drbdadm secondary r0

[root@server2 drbd.d]# drbdadm primary r0

[root@server2 drbd.d]# mount /dev/drbd0 /mysqldata

[root@server2 drbd.d]# service mysqld start

[root@server2 drbd.d]# ls /mysqldata/mysql/
crushlinux ibdata1 ib_logfile0 ib_logfile1 mysql test

配置 heartbeat
1、配置 ha.cf 文件(主从大体一致)
[root@server1 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@server1 heartbeat-3.0.4]# cp ha.cf authkeys haresources /etc/ha.d/
[root@server1 heartbeat-3.0.4]# cd /etc/ha.d/
[root@server1 ha.d]# vim ha.cf
29 logfile /var/log/ha-log
34 logfacility local0
48 keepalive 2              //多长时间检测一次
56 deadtime 10              //连续多长时间联系不上后认为对
61 warntime 5               //连续多长时间联系不上开始警告
71 initdead 100             //主要是给重启后预留的一段忽略
76 udpport 694              //UDP 端口
121 ucast eth0 192.168.200.102 //填写对方 IP(主从的差异点)
157 auto_failback on        //节点修复后是否切换回来
211 node server1         //节点名称
212 node server2         //节点名称
253 respawn hacluster /usr/lib64/heartbeat/ipfail

//控制 IP 切换的程序
2、配置 haresources 文件(主从一致)[root@server1 ha.d]# vim haresources

添加以下内容

server1 IPaddr::192.168.200.254/24/eth0:0 drbddisk::r0
Filesystem::/dev/drbd0::/mysqldata::ext4 mysqld

IPaddr::192.168.200.254/24/eth0:0:用IPaddr脚本配置浮动VIP

drbddisk::r0:用drbddisk脚本实现DRBD主从节点资源组的挂载和卸载

Filesystem::/dev/drbd0::/mysqldata::ext4:用Filesystem脚本实现磁盘挂载和卸载

[root@server1 ha.d]# ln -s /etc/init.d/mysqld /etc/ha.d/resource.d/mysqld

3配置 authkeys 文件(主从一致)

[root@server1 ha.d]# vim authkeys
23 auth 1
24 1 crc
[root@server1 ha.d]# chmod 600 authkeys

4 HA 验证:

主从节点启动 heartbeat
[root@server1 ha.d]# **service heartbeat start
**查看主节点 VIP 是否存在

启动报错1:

解决:vim /etc/ha.d/ha.cf

//系统是64位的,所以路径应该在/usr/lib64/目录

启动报错2:

解决:

在haresources文件中添加内容必须写在一行

启动成功提示:

[root@server1 ha.d]# /etc/init.d/heartbeat start

Starting High-Availability services: INFO:  Resource is stopped

Done.

[root@server1 ha.d]# ip a //需要等待 10 inet 192.168.200.254/24 brd 192.168.200.255 scope global secondary eth0:0

验证:先停掉 server1 上的 heartbeat 服务,查看 VIP 是否能转移

此时 server2 的 mysql 服务是关闭的

[root@server1 ha.d]# service heartbeat stop //主节点操作
Stopping High-Availability services: Done.

IP地址已经成功漂移到server2上了

[root@server2 ha.d]# mysqladmin -uroot ping //备节点操作,发现 mysql 随之启动
Mysqld is alive

此时还不具备停掉 mysql 后 VIP 漂移的功能,需要添加脚本实现,当发现 mysql 服务出现挂
掉,就停掉 heartbeat 服务,实现 VIP 转移(双方都要在后台执行)
[root@server1 ~]# vim chk_mysql.sh
#!/bin/bash
mysql="/etc/init.d/mysqld"
mysqlpid=$(ps -C mysqld --no-header | wc -l)
if [ $mysqlpid -eq 0 ];then
$mysql start
sleep 3
13 / 13
mysqlpid=$(ps -C mysqld --no-header | wc -l)
if [ $mysqlpid -eq 0 ];then
/etc/init.d/heartbeat stop
echo "heartbeat stopped,please check your mysql !" | tee -a
/var/log/messages
fi
fi
[root@server1 ha.d]# bash chk_mysql.sh &
[root@server1 ha.d]# echo “bash chk_mysql.sh &” >> /etc/rc.local

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章