码迷,mamicode.com
首页 > 数据库 > 详细

mysql+heartbeat+drbd安装

时间:2017-11-04 13:29:57      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:切换   ice   pwd   超时   opp   存在   文件中   disk   prot   

环境:

系统           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

[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:

 

 

 

 

 


[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@server2 ha.d]# mysqladmin -uroot ping //备节点操作
mysqladmin: connect to server at ‘localhost‘ failed
error: ‘Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)‘
Check that mysqld is running and that the socket: ‘/var/lib/mysql/mysql.sock‘ exists!
[root@server1 ha.d]# service heartbeat stop //主节点操作
Stopping High-Availability services: Done.
[root@server2 ha.d]# ip a //备节点操作
inet 192.168.200.254/24 brd 192.168.0.255 scope global secondary eth0:0
[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

 

 

 

 

 

 

mysql+heartbeat+drbd安装

标签:切换   ice   pwd   超时   opp   存在   文件中   disk   prot   

原文地址:http://www.cnblogs.com/pangbing/p/7782928.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!