好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

heartbeat+drbd+mysql

SUSE11 下的 Heartbeat+DRBD+Mysql 安装配置 系统环境: 我用的虚拟机为 vmware ,安装的 linux 系统为 opensuse11. 两台电脑(两个节点)用路由器链接,两个节点的信息如下: 节点一(主机) :主机名: laborc , ip : 192.168.0.110 节点二(备用机):

SUSE11 下的 Heartbeat+DRBD+Mysql 安装配置

系统环境:

我用的虚拟机为 vmware ,安装的 linux 系统为 opensuse11. 两台电脑(两个节点)用路由器链接,两个节点的信息如下:

节点一(主机) :主机名: laborc , ip : 192.168.0.110

节点二(备用机):主机名: linux-xua5 , ip : 192.168.0.111

这里需要注意一下,虚拟机默认的网络链接为 NAT ,但是我发现两台虚拟机的 linux 无法相互 ping 对方,然后我把网络链接改为了 Bridged 然后把两台虚拟机的 ip 改为同个网段就可以相互 ping 了,具体为什么 NAT 不能相互 ping ,我不是很清楚。

1. Heartbeat 安装配置

1.1. 安装 heartbeat

在安装 heartbeat 之前需要安装 libnet ,安装方法如下:

tar -xzvf libnet.tar.gz
cd libnet
./configure
make
make install

然后安装 heartbeat ,安装方法如下:

tar -xzvf heartbeat-2.1.2.tar.gz
cd heartbeat-2.1.2
useradd -u 694 -g haclient hacluster
./ConfigureMe configure
make
make install

1.2. 配置 /etc/hosts 和 /etc/HOSTNAME

这里对 node1 进行配置, node2 与 node1 一样 , 修改主机名如下:

#vi /etc/HOSTNAME

对主机名字修改,我把我的虚拟机名字改为 laborc.site (可以改成自己所要的)。

修改 hosts 如下:

#vi /etc/hosts

在 node1 中的 hosts 里面需要添加以下内容, node2 也添加相同内容。

192.168.0.110 laborc # 前面的 ip 为 node1 的 ip ,后面的那个是 node1 主机名

192.168.0.111 linux-xua5 # 前面的 ip 为 node2 的 ip ,后面的那个是 node2 主机名。

我的修改结果如下:

两个节点修改以上配置以后,需要重启系统。

1.3. 配置文件

运行 Heartbeat 需要配置三个文件,分别为 ha.cf , haresources 和 authkeys 。首先把三个文件复制到 /etc/ha.d/ 文件夹下,操作如下:

#cp ha.cf /etc/ha.d/

#cp haresources /etc/ha.d/

#cp authkeys /etc/ha.d/

1.3.1. 对 ha.cf 进行配置

我对 ha.cf 的配置如下

Name

Value

description

debugfile

/var/log/ha-debug

该文件保存 heartbeat 的调试信息

logfile

/var/log/ha-log

heartbeat 的日志文件

logfacility

local0

keepalive

2

心跳的时间间隔,默认时间单位为秒

deadtime

10

超出该时间间隔未收到对方节点的心跳,则认为对方已经死亡

initdead

120

在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为 deadtime 的两倍。

udpport

694

设置广播通信使用的端口, 694 为默认使用的端口号。

baud

19200

设置串行通信的波特率。

serial

/dev/ttyS0

选择串行通信设备,用于双机使用串口线连接的情况。如果双机使用以太网连接,则应该关闭该选项。

bcast

eth0

设置广播通信所使用的网络接口卡。

auto_failback

on

heartbeat 的两台主机分别为主节点和从节点。主节点在正常情况下占用资源并运行所有的服务, 在该选项设为 on 的情况下,一旦主节点恢复运行,则自动获取

node

laborc

设置节点

node

linux-xua5

设置节点

1.3.2. 配置 haresources 文件

配置如下:

laborc IPaddr::192.168.0.112 apache #laborc 为主机名 192.168.0.112 为集群对外公布的 ip ,后面跟这的是服务,这里是 apache , apache 的配置后面会说到。

我的结果如下:

1.3.3. 配置 authkeys

配置如下:

auth 1

1 crc

我的结果如下:

这里需要对 autokeys 文件的权限进行修改,修改如下:

#chmod 600 /etc/ha.d/authkeys

如不修改为 600 , heartbeat 服务会无法开启。

到这里,对配置文件的修改完成,把三个文件复制到 node2 下的 /etc/ha.d/ 下,注意 node1 和 node2 中的这三个文件确保相同。

1.4. 安装 apache

软件包: httpd-2.2.6.tar.gz

我把软件包放在了 /home/laborc

1. 解压缩

#cd /home/laborc

#tar -zvxf httpd-2.2.6.tar.gz

#cd httpd-2.2.6

2. 创建安装目录

#mkdir -p /usr/local/apache2

#./configure --prefix=/usr/local/apache2 --enable-modules=so --enable-rewrite

#make

#make install

到这里 apache 安装完成, node2 安装过程如上。为了区别 node1 和 node2 的 apache 服务,我把 apache 的默认页面进行了修改, node1 改为 laborc work , node2 改为 linux-xua5 work

1.5. 建立 http 服务切换启动脚本的链接文件

# mv apache apache-bak (node2 上也要做这步 )
# ln -s /var/local/apache/bin/apachectl apache (node2 上也要做这步 )

1.6. 启动 heartbeat

#cd /etc/init.d

#./heartbeat start

node2 如上启动 heartbeat

1.7. 测试

启动 heartbeat 以后,从另外的电脑输入 http://192.168.0.112, 查看的结果如下

然后拔掉 node1 的网线,再次刷新页面,发现 node2 的 apach 接收了 node1 的 apace ,结果如下:

把网线插到 node1 中, node1 的 apache 恢复正常,再次刷新页面,结果如下


2. DRBD 安装配置

2.1. 下载 DRBD

下载地址: http://software.opensuse.org/search?baseproject=ALL&p=1&q=drbd

根据自己的版本下载合适的包

需要下载两个包, DRBD 和 drbd-kmp-desktop ,我的版本如下:

DRBD : drbd-8.3.4-2.4.i586.rpm

drbd-kmp-desktop : rbd-kmp-xen-8.3.4_2.6.31.5_0.1-2.4.i586.rpm

这里需要注意,如果不安装 drbd-kmp-desktop ,那 DRBD 在启动的时候会报 can not load drbd module ,网上说是 opensuse 默认不能加载 drbd module ,需要升级一下内核,具体我也不是很清楚。

2.2. 安装 DRBD

# rpm –ivh drbd-8.3.4-2.4.i586.rpm

# rpm –ivh drbd-kmp-desktop-8.3.4_2.6.31.5_0.1-2.4.i586.rpm

2.3. 配置 drbd.conf

我的配置如下:

#

# please have a a look at the example configuration file in

# /usr/share/doc/packages/drbd/drbd.conf

#

global{

usage-count yes; # (是否参加使用者统计, yes 为参加)

}

common{

syncer{ rate 300M;}

}

resource r0{

protocol C; # (数据同步协议, C 为收到数据并写入后返回,确认成功)

disk{

on-io-error detach;

size 5G; # (由于实验环境下两台服务器硬盘大小不同,所以需要设置 drbd 的大小)

}

net{

after-sb-0pri disconnect;

rr-conflict disconnect;

}

on laborc{

device /dev/drbd0;

disk /dev/sdb5;

address 192.168.0.110:7788;

meta-disk internal;

}

on linux-xua5{

device /dev/drbd0;

disk /dev/sdb5;

address 192.168.0.111:7788;

mate-disk internal;

}

}

上面的 disk /dev/cdb5; 中的 cdb5 一定要注意,这个分区必须是未挂载的,

如果是已挂载的启动 DRBD 的时候会报如下错误:( Restarting all DRBD resources:# r0:

Failure: (114) Lower device is already claimed. This usually means it is mounted. ),如果系统中

没有未挂载的分区,需要创建新分区,如果创建下面会提到。

图如下:

2.4. 创建新分区

首先在虚拟机上添加一个硬盘,我添加了 20G ,一旦添加以后,我系统就有了两块硬盘,

分别为: /dev/sda 和 /dev/sdb (新添加的),现在需要对 sdb 分区,我使用 fdisk 进行分区,操作如下:

1.fdisk /dev/sdb # 进入新硬盘 sdb

2.p # 查看硬盘现有哪些分区,现在查看应该还无分区

3.n # 添加一个分区

4.e # 添加扩展分区,然后它会提示让您输入一些属性,输入完以后,扩展分区就建好了

5.n # 这里将会创建逻辑分区

6.l # 添加逻辑分区,然后它会提示让您输入一些属性,输入完以后,逻辑分区就建好了

7.w # 把创建好的分区写入磁盘表

以下是操作的图:

2.5. 创建数据块

# drbdadm create-md r0 ( r0 是我在 drbd.conf 中配置的 resource ),结果如下图

2.6. 启动 DRBD

# /etc/init.d/drbd srart 结果如下图:

可以用 cat /proc/drbd 查看数据同步的进度,如下图

等数据同步完查看 DRBD 的状态,如下图

第一次同步耗时比较长,因为需要把整个分区的数据全部同步一遍。

2.7. 设置主节点

上面图中 st:Secondary/Secondary ,说明还未设置主节点,我们可以使用一下命令来设置

# drbdadm primary db

可能第一次设置会出现一下错误:
State change failed: (-2) Refusing to be Primary without at least one UpToDate disk
Command ‘drbdsetup /dev/drbd0 primary’ terminated with exit code 11

可以看到,第一次设置主节点时用 drbdadm 命令会失败,所以先用 drbdsetup 来做,以后就可以用 drbdadm 了。
# drbdsetup /dev/drbd0 primary –o

再次查看 2 台服务器的 drbd 状态,见下图:

可以看到 st:Secondary/Secondary 变成了 st:Primary/Secondary

2.8. 测试同步数据

第一次同步完成之后,就可以对 drbd 的设备创建文件系统了:
# mkfs.ext3 /dev/drbd0
将文件系统 mount 上:
# mount /dev/drbd0 /drbddata
在主节点上写入测试数据到 /drbddata

然后,我们把 node1 的 primary 降级成 secondary ,把 secondary 提升成 primary :

# umount /drbddata/

# drbdadm secondary r0

把 node2 的 primary 降级前,一定要先 umount 设备才行。然后提升 secondary :

# drbdadm primary r0
# mount /dev/drbd0 /drbddata/


3. Mysql 安装配置

3.1. 编译安装 mysql

我使用的 mysql 为 mysql-5.0.40.tar.gz

按照以下步骤进行编译安装:

# tar -zxvf mysql-5.0.40.tar.gz
# cd mysql-5.0.40
# groupadd mysql
# useradd -g mysql -s /sbin/nologin -M mysql
# ./configure --prefix=/urs/local/mysql --with-charset=gbk --localstatedir=/drbddata/drbd/data --with-extra-charset=all --enable-thread-safe-client
# make && make install
# cp support-files/my-large.cnf /etc/my.cnf
# chown -R mysql.mysql /urs/local/mysql/
# /urs/local/mysql/bin/mysql_install_db --user=mysql
# chown -R root.root /urs/local/mysql/
# chown -R mysql.mysql /drbddata/drbd/data

启动数据库服务,并添加到自启动

# /urs/local/mysql/bin/mysqld_safe --user=mysql &

# cp support-files/mysql.server /etc/rc.d/init.d/mysqld

# chm od 755 /etc/rc.d/init.d/mysqld

加入服务队列:

# chkconfig --add mysqld

配置 库文件搜索路径

# echo "/urs/local/mysql/lib/mysql">>/etc/ld.so.conf

# ldconfig

# ldconfig -v

添加 /usr/local/mysql/bin 到环境变量 PATH 中
#echo "export PATH=$PATH:/urs/local/mysql/bin">>/etc/profile
#source /etc/profile

如果在编译的时候出现: checking for termcap functions library... configure: error: No curses/termcap library found 。原因是缺少 ncurses 。

如果在 make 的时候出现以下错误: exec g++ not found 。原因是缺少 gcc-c++ 包,安装好以后需要重新 configure


4. 集成 Mysql 和 DRBD 至 Heartbeat

4.1. 集成 DRBD 至 Heartbeat

把 DRBD 集成至 Heartbeat 只需要修改 /etc/ha.d/haresources 这个文件,修改方法和内容如下:

# vi /etc/ha.d/haresources
laborc 192.168.0.112 drbddisk::r0 Filesystem::/dev/drbd0::/drbddata/drbd:ext3 apache

上面那行解释如下:
laborc # 定义 laborc 为 heartbeat 的主机
192.168.0.12 # 定义对外服务的 IP 地址,这个 IP 自动在主从机之间切换
drbddisk::r0 # 定义使用的 drbd 资源
Filesystem::/dev/drbd0::/drbddata/drbd:ext3 # 定义挂载文件系统

apache # 定义其他需要切换的服务(用空格隔开)

4.2. 集成 Mysql 至 Heartbeat

1. 如果 Mysql 服务还开着,请把服务服务关掉

#service mysqld stop

2. 把 my.cnf 复制到 drbd 设备中(我这里是硬盘, drbd0 所挂载的文件系统 /drbddata/drbd )

#cp /etc/my.cnf /drbddata/drbd

3. 把 mysql 的 data 文件复制到 drbd 设备中(我这里是硬盘, drbd0 所挂载的文件系统 /drbddata/drbd ),我的 mysql 的 data 文件放在 /drbddata/data 文件下

#cp –R /drbddata/data /drbddata/drbd /data

4. 修改 mysql 的启动脚本,修改 mysql 的 data 文件的路径

#vi /etc/init.d/mysqld

datadir = /drbddata/drbd /data

5. 创建 /etc/my.cnf 到 DRBD 文件系统中新配置文件的链接

#ln –s /drbddata/drbd /my.cnf /etc/my.cnf

6. 修改 /etc/ha.d/haresources 这个文件,在其后面添加 Mysql 的服务

laborc 192.168.0.112 drbddisk::r0 Filesystem::/dev/drbd0::/drbddata/drbd:ext3 apache mysqld


5. 效率测试

首先我在 node1 中创建了一张测试表 test ,结构如下:

然后创建一个存储过程,如下:

create procedure t_procedure()

begin

declare a int;

set a = 1;

while a

insert into test_procedure(id,name) values(a,'asd');

set a = a+1;

end while;

end;

//

执行存储过程:

Call t_procedure();

我插入了两千万条数据,两个节点同步所需的时间如下图:

以下是 node1 中的数据查询:

以下是 node2 中的数据查询:

以下是同步的详细信息:

查看更多关于heartbeat+drbd+mysql的详细内容...

  阅读:48次