Centos5.6 x86下部署安装DRBD+Heartbeat+MySQL

网友投稿 616 2023-04-25

Centos5.6 x86下部署安装DRBD+Heartbeat+MySQL

Centos5.6 x86下部署安装DRBD+Heartbeat+MySQL

【独家特稿】报错信息如下所示:

Operation refused. Command 'drbdmeta 0 v08 /dev/sda2 internal create-md' terminated with exit code 40 drbdadm create-md r0: exited with code 40

这个时候我们需要使用dd命令覆盖文件系统中的设备块信息,如下所示:

dd if=/dev/zero of=/dev/sda2 bs=1M count=128

这个时候请一定要注意dd命令要清除的分区信息,不要搞错了,不然很容易将系统损坏,我第一次实验时就遇到了这个问题;如果部署DRBD时的分区信息是不需要写进/etc/fstab表的,即不需要在安装系统时就挂载,不然重启系统时很容易发生Emergency信息,签于以上情况,所以我这里建议大家还是用独立硬盘作为DRBD的设备。

两台机器的基本情况如下所示:

Heartbeat的vip为 192.168.11.30

两台机器的hosts文件内容如下所示:

实验中暂时先用千M交换机的网络作为心跳线线路,等实验搭建成功后再考虑加双绞线作为心跳线,两台机器的hostname及ntp对时这些在实验前就应该配置好,iptables和SElinux关闭,具体情况略过。

一、DRBD的部署安装

两台机器分别用如下命令来安装drbd软件,如下所示:

yum -y install drbd83 kmod-drbd83 modprobe drbd lsmod | grep drbd

正确显示如下类似信息,表示DRBD已成功安装:

drbd                  300440  4

两台机器的drbd.conf配置文件内容如下所示(两台机器的配置是一样的):

1.创建DRBD元数据信息,执行命令如下所示(两台机器都需要执行此步):

[root@centos1 ~]# drbdadm create-md r0 md_offset 8589930496 al_offset 8589897728 bm_offset 8589635584 Found some data  ==> This might destroy existing data! <== Do you want to proceed? [need to type 'yes' to confirm] yes Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. [root@centos2 ~]# drbdadm create-md r0 md_offset 8589930496 al_offset 8589897728 bm_offset 8589635584 Found some data  ==> This might destroy existing data! <== Do you want to proceed? [need to type 'yes' to confirm] yes Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created.

2.启动DRBD设备,两台机器上分别执行如下命令:

service drbd start

3.在centos1的机器上我们查看DRBD状态,命令如下所示:

[root@centos1 ~]# service drbd status drbd driver loaded OK; device status: version: 8.3.13 (api:88/proto:86-96) GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-05-07 11:56:36 m:res  cs         ro                   ds                         p  mounted  fstype 0:r0   Connected  Secondary/Secondary  Inconsistent/Inconsistent  C

4.将centos1的机器作为DRBD的Primary机器,命令如下所示:

[root@centos1 ~]# drbdsetup /dev/drbd0 primary -o  [root@centos1 ~]# drbdadm primary r0

然后我们再查看其状态,命令如下所示:

[root@centos1 ~]# service drbd status drbd driver loaded OK; device status: version: 8.3.13 (api:88/proto:86-96) GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-05-07 11:56:36 m:res  cs          ro                 ds                     p  mounted  fstype ...    sync'ed:    3.9%               (7876/8188)M 0:r0   SyncSource  Primary/Secondary  UpToDate/Inconsistent  C

我们发现,Primary/Secondary关系已形成,而且数据在进行同步,已同步了3.9%,我们稍为等待段时间,再查看Primary机器的DRBD状态,如下所示:

[root@centos1 ~]# service drbd status drbd driver loaded OK; device status: version: 8.3.13 (api:88/proto:86-96) GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-05-07 11:56:36 m:res  cs         ro                 ds                 p  mounted  fstype 0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C

UpToDate/UpToDate表示数据已经同步完成了。

5.在两台机器上都建立/drbd分区,准备将其作为MySQL的挂载目录,命令如下所示:

mkdir /drbd

6.格式化Primary机器的DRBD分区并挂载使用。

mkfs.ext3 /dev/drbd0  mount /dev/drbd0 /drbd/

注:Secondary节点上是不允许对DRBD设备进行任何操作,包括只读,所以的读写操作都只能在Primary节点上进行,只有当Primary节点挂掉时,Secondary代替主节点作为Primary节点时才能进行读写操作。

7.两台机器都将DRBD设为自启动服务,命令如下:

chkconfig drbd on

二、Heartbeat的安装和部署

1.两台机器上分别用yum来安装heartbeat,如下命令操作二次:

yum -y install heartbeat

如果你只操作一次,你会惊奇的发现,heartbeat第一次时并没有安装成功。

2.两个节点的heartbeat配置文件,分别如下所示:

3.编辑双机互连验证文件authkeys,如下所示:

cat /etc/ha.d/authkeys auth 1 1 crc

需要将此文件设定为600权限,不然启动heartbeat服务时会报错,命令如下所示:

chmod 600 /etc/ha.d/authkeys

4.编辑集群资源文件/etc/ha.d/haresource

这个文件在两台机器上都是一样的,这个就不要轻易改动了。

mysqld为mysql服务器启动、重启及关闭脚本,这个是安装MySQL自带的,我们等会会在安装MySQL提到此步。

三、源码编译安装mysql5.1.47并部署haresource

1.在MySQL官方网站上下载mysql5.1.47的源码包,在两台机器上分别安装,具体步骤如下所示:

安装gcc等基础库文件

yum install gcc gcc-c++ zlib-devel libtool ncurses-devel libxml2-devel

生成mysql用户及用户组

groupadd mysql useradd -g mysql mysql

源码编译安装mysql5.1.47

tar zxvf mysql-5.1.47.tar.gz cd mysql-5.1.47 ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=all --enable-thread-safe-client --enable-assembler --with-readline --with-big-tables --with-plugins=all  --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static make make install

2.对mysql进行权限配置,使其能顺利启动。

cd /usr/local/mysql cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld cp /usr/local/mysql/share/mysql/mysql.server /etc/ha.d/resource.d/mysqld chmod +x /etc/init.d/mysqld  chmod +x /etc/ha.d/resource.d/mysqld chown -R mysql:mysql /usr/local/mysql

3.两台机器上的/etc/my.cnf的[mysqld]项下面重新配置下mysql运行时的数据存放路径

datadir=/drbd/data

4.在Primary机器上运行如下命令,使其数据库目录生成数据,Secondary机器不需要运行此步。

/usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/drbd/data

注意:这里是整个实验环境的一个重要环节,我起初在搭建此步时出过几次问题,我们运行MySQL是在启动DRBD设备之后,即正确将/dev/drbd0目录正确挂载到/drbd目录,而并非没挂载就去启动MySQL,这会导致整个实验完全失败,大家做到此步时请注意。做完这步以后,我们不需要启动MySQL,它可以靠脚本来启动,如果已经启动了MySQL请手动关闭。

四、在两台机器上将DRBD和Heartbeat都设成自启动方式

service drbd start

chkcfonig drbd on

service heartbeat start

chkconfig heartbeat on

通过观察Primary机器上的信息,我们得知,Primary机器已经正确启动了MySQL和Heartbaet了,信息如下所示:

[root@centos1 data]# ip addr  1: lo:  mtu 16436 qdisc noqueue      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo 2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000     link/ether 00:0c:29:48:2e:9f brd ff:ff:ff:ff:ff:ff     inet 192.168.11.32/24 brd 192.168.11.255 scope global eth0     inet 192.168.11.30/24 brd 192.168.11.255 scope global secondary eth0:0

通过查看到3306端口被占用情况,我们得知mysql服务已被正常开启。

[root@centos1 data]# lsof -i:3306 COMMAND  PID  USER   FD   TYPE DEVICE SIZE NODE NAME mysqld  4341 mysql   18u  IPv4   9807       TCP *:mysql (LISTEN)

五、其余的工作其实就比较好测试了,我们主要是模拟Primary机器重启或死机时,看Secondary机器能不能自动接管过来并启动MySQL,我们重启Primary机器后在Secondary机器上观察,命令如下所示:

稍等片刻我们会发现,Secondary机器会自动接管VIP,并启动MySQL服务,如下所示:

[root@centos2 data]# ip addr  1: lo:  mtu 16436 qdisc noqueue      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo 2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000     link/ether 00:0c:29:34:ee:af brd ff:ff:ff:ff:ff:ff     inet 192.168.11.33/24 brd 192.168.11.255 scope global eth0 inet 192.168.11.30/24 brd 192.168.11.255 scope global secondary eth0:0

实施整个过程需要注意有以下几点:

一、Secondary主机用来做DRBD的硬盘可以跟Primar主机的不一样大小,但请不要小于Primary主机,以免发生数据丢失的现象;

二、服务器网卡及交换机我都推荐千M系列的,在测试中发现其同步速率介于100M-200M之间,这里采用官方的建议,以最小值的30%带宽来设置rate速率,即100M*30%,大家也可根据自己的实际网络环境来设定此值;

三、DRBD对网络环境要求很高,建议用单独的双绞线来作为二台主机之间的心跳线,如果条件允许,可以考虑用二根以上的心跳线;如果这个环节做得好,基本上脑裂的问题是不存在的。其实整个实验初期都可以在同一网络下实现,后期再加心跳线也是可行的。

四、安装Heartbeat时需要安装二遍,即yum -y install heartbeat要执行二次;

五、建议不要用根分区作为MySQL的datadir,不然你show database时会发现会出现名为#mysql50#lost+found的数据库,这也是我将MySQL的数据库目录设置成/drbd/data的原因。

六、就算发生脑裂的问题,DRBD也不会丢失数据的,手动解决就是;正因为DRBD可靠,MySQL也推荐将其作为MySQL实现高可用方案之一。

七、MySQL的DRBD此方案不能达到毫秒级的切换速度,MyISAM引擎的表在系统宕机后需要很长的修复时间,而且也有可能发生表损坏的情况,建议大家将所有除了系统表之外的所有表引擎改为InnoDB引擎。

【编辑推荐】

MySQL源码学习:MDL字典锁MySQL Cluster开发环境简明部署MySQL的四种不同查询的分析MySQL的四种不同查询的分析MySQL内存表的特性与使用介绍

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Oracle数据库查询高效分页
下一篇:Linux下Sybase数据库安装注意的问题
相关文章