Ubuntu下Mysql+drbd+heartbeat高性能服务集群配置

2 篇文章 0 订阅
1 篇文章 0 订阅

Ubuntu下Mysql+drbd+heartbeat高性能服务集群配置。

环境如下:

VMware下的两台虚拟机,

drbd01    192.168.1.22

drbd02    192.168.1.23

vip       192.168.100.120(heartbeat会自动给我们配好,不用担心)

Ubuntu    disk:/dev/sdb1(一个5G的分区)

一、            安装drbd

1.      修改hosts文件和主机名

在drbd01上

echo "192.168.1.22     drbd2" >> /etc/hosts

echo "drbd01" > /etc/hostname

在drbd02上

echo "192.168.1.23     drbd1" >> /etc/hosts

echo "drbd02" > /etc/hostname      

(需要reboot后设置生效)

2.      安装drbd(主从都要安装)

apt-get install drbd8-utils

3.      配置drbd.conf(/etc/drbd.conf)的配置文件(主从都要做)

vim /etc/drbd.conf  默认信息为:

include "/etc/drbd.d/global_common.conf";

include "/etc/drbd.d/*.res";

 

这样你需要去配置global_common.conf以及新建一个以res结尾的资源文件,这里为r0.res。

vim /etc/drbd.d/global_common.conf

global {

 usage-count no;   //帮LINBIT公司统计drbd使用量

}

 

common {

 protocol C;   //C为最安全同时也是性能最好的一种确认写操作完成的方法

 syncer {

  rate 100M;    //同步的速率

 }

}

    

     vim /etc/drbd.d/r0.res

     resourcer0 {            //r0资源名称,以后很多地方会用到

       on drbd01 {

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

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

       address  192.168.1.22:7788;  //主节点

       meta-disk internal;

     }

      on drbd02 {

      device   /dev/drbd0;

      disk     /dev/sdb1;

      address  192.168.1.23:7788;    //从节点

      meta-disk internal;

    }

}

4.      初始化drbd的metadata (在主节点上操作)

drbdadm create-md r0

(如果出现如下错误:

md_offset21467942912

al_offset21467910144

bm_offset21467254784

Foundext3 filesystem

20964792kB data area apparently used

20964116kB left usable by current configuration

Devicesize would be truncated, which

wouldcorrupt data and result in'access beyond end of device' errors.

You needto either

* useexternal meta data (recommended)

* shrinkthat filesystem first

* zeroout the device (destroy the filesystem)

Operationrefused.

Command 'drbdmeta 1 v08 /dev/sdb1 internal create-md'terminated with exit code 40

drbdadm create-md r0exited with code 40 )

执行如下命令:

dd if=/dev/zero bs=1M count=1of=/dev/sdb1;sync

再次执行drbdadm create-md r0看到success则表示成功。

5.      启动drbd服务(主从都执行)

/etc/init.d/drbd start

cat /proc/drbd

ro:Secondary/ Secondary表示还没有建立主盘

ds:Inconsistent/Inconsistent表示两节点的逻辑设备(即/dev/drbd0)中的数据未同步

6.      初始化网络硬盘(主节点执行)

drbdsetup /dev/drbd0 primary –o

cat /proc/drbd

ro: primary / Secondary表示在主节点建立了主盘

ds: UpToDate /Inconsistent表示两节点正在同步数据

等同步完后将会变成

ds: UpToDate / UpToDate

7.      格式化磁盘,现在讲磁盘格式化后并可以向其中写数据,这些数据会同步到从节点中。

在drbd01上(主节点)

mkfs.ext4 /dev/drbd0

mount /dev/drbd0 /mnt/data

(注意:只有主盘节点才能挂载磁盘)

cd /mnt/data

mkdir testfile                 //新建名为testfile的测试文件

umount /dev/drbd0          //卸载磁盘

drbdadm secondary r0        //主降为次,即刚开始主节点的磁盘是主盘,现在降为从盘,往主盘里写数据,从从盘里读数据。

在drbd02上(从节点)

drbdadm primary r0            //次升为主,即将从节点的磁盘升为主盘资格这样才能从从节点的机器读取磁盘的数据。

mount /dev/drbd0 /mnt/data    //升主后才有挂在权限

cd /mnt/data                

ls –l

将会看到我们在主节点中建立的名为testfile的文件夹。

(啰嗦一下:

要想完成主从Mysql数据的备份,到这里大家应该有点启发了,我么只需要将Mysql的数据保存到/mnt/data(我们将/dev/drbd0挂在的路径)中即可这样主Mysql往这个区域写数据,drbd会帮我们自动将这些数据同步到从节点中,这样装在从节点机器上的Mysql也从这里读取数据。这样便实现了两份数据的自动备份。

二、            安装Mysql(在两个节点上)

1.      安装Mysql

apt-get install mysql-server

2.      更改Mysql数据库的存储位置

默认情况下数据库的存储位置是/var/lib/mysql(可以在/etc/mysql/my.cnf中的datadir位置找到),现在要将其改为存在/mnt/data下。

将/var/lib/mysql下的数据复制到/mnt/data下

cp –r /var/lib/mysql /mnt/data/

vim /etc/mysql/my.cnf

找到datadir这一行将其值改为/mnt/data/mysql

自Ubuntu 7.10开始,

Ubuntu就开始使用一种安全软件叫做AppArmor,这个安全软件会在你的文件系统中创建一个允许应用程序访问的区域(专业术语:应用程序访问控制)。如果不为MySQL修改AppArmor配置文件,永远也无法为新设置的存储位置启动服务。

       配置AppArmor:

       nano /etc/apparmor.d/usr.sbin.mysqld

找到/var/lib/mysql/这两行,注释掉这两行,在这两行前分别添加一个符号“#”即可注释,在这两行之前或之后加上下面内容:

/mnt/data/mysql/r,

/mnt/data/mysql/**rwk,

3.      测试

在drbd01上启动mysql 建立一个名为test的数据库。

之后关闭数据服务

service mysql stop

drbdadm secondary r0

umount /dev/drbd0

在drbd02上

drbdadm primary r0

mount /dev/drbd0

service mysql start

进去mysql中查看是否已有从drbd01同步过来的名为test的数据库。

OK至此测试就完成了。

(啰嗦下:聪明的读者可能会问,每次都这样操作效率也太低了吧,对的,接下来heartbeat会自动帮我们做好这些事,它会监听服务,一旦服务停止,则从服务会接管服务)

三、            安装heartbeat(让切换更智能)

1.      安装heartbeat

apt-get install heartbeat

(ps: Heartbeat的主要配置文件有ha.cf、haresources和authkeys。在Heartbeat安装后,默认并没有这3个文件, 可以从官方网站下载得到,也可以直接从解压的源码目录中找到)

2.      配置ha.cf

logfacilitylocal0 #这个是设置heartbeat的日志,这里是用的系统日志

keepalive500ms #多长时间检测一次

deadtime10 #连续多长时间联系不上后认为对方挂掉了(单位是妙)

warntime5 #连续多长时间联系不上后开始警告提示

initdead100 #这里主要是给重启后预留的一段忽略时间段(比如:重启后启动网络等,

如果在网络还没有通,keepalive检测肯定通不过,但这时候并不能切换)

bcasteth0

auto_failbackoff #恢复正常后是否需要再自动切换回来

nodedrbd01 #节点名(必须是集群中机器的主机名,通过uname -n取得)

nodedrbd02 #节点名(必须是集群中机器的从机名,通过uname -n取得)

 

ping10.0.65.250(默认网关,可以通过route命令得到)

respawn root/usr/lib/heartbeat/ipfail #这里是配置ip绑定和切换的功能,

ipfail就是控制ip切换的程序

apiauthipfail gid=root uid=root #控制ip切换的时候所使用的用户

deadping5

3.      配置资源文件(/etc/ha.d/haresources)(参考了:http://www.elain.org/?p=361)

Haresources文件用于指定双机系统的主节点、集群IP、子网掩码、广播地址以及启动的服务等集群资源,文件每一行可以包含一个或多个资源脚本名,资源之间使用空格隔开,参数之间使用两个冒号隔开,在两个HA节点上该文件必须完全一致,此文件的一般格式为:

 

    node-name network  <resource-group>

 

node-name表示主节点的主机名,必须和ha.cf文件中指定的节点名一致。network用于设定集群的IP地址、子网掩码和网络设备标识 等。需要注意的是,这里指定的IP地址就是集群对外服务的IP地址,resource-group用来指定需要Heartbeat托管的服务,也就是这些服务可以由Heartbeat来启动和关闭。如果要托管这些服务,就必须将服务写成可以通过start/stop来启动和关闭的脚步,然后放到/etc /init.d/或者/etc/ha.d/resource.d/目录下,Heartbeat会根据脚本的名称自动去/etc/init.d或者/etc /ha.d/resource.d/目录下找到相应脚步进行启动或关闭操作。

 

下面对配置方法进行具体说明:

 

drbd01IPaddr::192.68.100.120/24/eth0:0 drbddisk::r0Filesystem::/dev/drbd0::/mnt/data::ext4 mysql

(ps: 在上面的例子中,提供了对mysql资源的启动和关闭,所以需要在/etc/ha.d/resource.d这个目录下去创建一个控制该资源启动脚本,命令为: ln -s /etc/init.d/mysql /etc/ha.d/resource.d/mysql)

其中,drbd01是HA集群的主节点,IPaddr为heartbeat自带的一个执行脚本,Heartbeat首先将执行/etc/ha.d/resource.d/IPaddr192.68.100.120/24 start的操作,也就是虚拟出一个子网掩码为255.255.255.0,IP为192.68.100.120的地址。此IP为Heartbeat对外提供服务的网络地址,同时指定此IP使用的网络接口为eth0。接着,Heartbeat将执行共享磁盘分区的挂载操作," Filesystem::/dev/drbd0::/mnt/data::ext4"相当于在命令行下执行mount操作,即"mount-t ext4 /dev/drbd0 /mnt/data",最后mysql服务。

注意 主节点和备份节点中资源文件haresources要完全一样。

因此对于我们应该这样写

drbd01IPaddr::192.68.100.120/24/eth0:0 drbddisk::r0Filesystem::/dev/drbd0::/mnt/data::ext4 mysql

不要写成如下这样:

    drbd01 drbddisk::r0Filesystem::/dev/drbd0::/mnt/data::ext4 mysql 192.68.100.120

会报heartbeat Cannotuse default route w/o netmask的错误,具体原因见:

http://lists.linux-ha.org/pipermail/linux-ha/2002-November/005911.html

4.      配置认证文件(/etc/ha.d/authkeys)

authkeys文件用于设定Heartbeat的认证方式,共有3种可用的认证方式,即crc、md5和sha1。3种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果Heartbeat集群运行在安全的网络上,可以使用 crc方式;如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高;如果是处于网络安全和系统资源之间,可以使用md5认证方式。这里我们使用crc认证方式,设置如下:

 

    auth 1 

    1 crc 

    #2 sha1 sha1_any_password 

    #3 md5 md5_any_password

 

需要说明的一点是:无论auth后面指定的是什么数字,在下一行必须作为关键字再次出现,例如指定了"auth 6",下面一定要有一行"6 认证类型"。

 

最后确保这个文件的权限是600(即-rw——-)。

5.      配置备份节点的Heartbeat

在备份节点上也需要安装Heartbeat,安装方式与在主节点安装过程一样,这里不再重述。在备份节点上使用scp命令把主节点配置文件传输到备份节点。

6.      设置主节点和备份节点时间同步

在双机高可用集群中,主节点和备份节点的系统时间也非常重要,因为节点之间的监控都是通过设定时间来实现的。主备节点之间的系统时间相差在10秒以内是正常的,如果节点之间时间相差太大,就有可能造成HA环境的故障。解决时间同步的办法有两个:一个办法是找一个时间服务器,两个节点通过 ntpdate命令定时与时间服务器进行时间校准;另一个办法是让集群中的主节点作为ntp时间服务器,让备份节点定时去主节点进行时间校验

7.      启动和查看heartbeat日志(两个节点上操作)

service heartbeat start //启动heartbeat

ifconfig eth0:0    //查看heartbeat为我们生成的浮动IP是否为192.68.100.120

                //通过这个IP向外提供服务

tail –f /var/log/ha-log  //能够查看heartbeat的运行情况

在主节点drbd01上

service heartbeat standby   

执行上面的命令,就会将haresources里面指定的资源从drbd01正常的转移到drbd02上,这时通过cat /proc/drbd在两台机器上查看,角色已发生了改变,mysql的服务也已在从服务器上成功开启,通过查看两台机器上的heartbeat日志便可清楚可见资源切换的整个过程(tail –f /var/log/ha-log)

 


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值