登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

ideality

@linux c 编程@

 
 
 

日志

 
 
 
 

mysql+drbd+heartbeat实现mysql双机热备(转)  

2010-07-26 08:10:59|  分类: 后台架构 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1、什么是DRBD
DRBD(Distributed Replicated Block Device),DRBD 号称是 "网络 RAID",开源软件,由 LINBIT 公司开发。
       2、DRBD的主要功能

DRBD 实际上是一种块设备的实现,主要被用于Linux平台下的高可用(HA)方案之中。他是有内核模块和相关程序而

组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能。也就是说当你将数据写入本地的

DRBD设备上的文件系统时, 数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在一个文

件系统中(实际上文件系统的创建也是由DRBD的同步来实现的)。本地节点(主机)与远程节点(主机)的数

据可以保证实时的同步,并保证IO的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一

份完全相同的数据,可以继续使用,以达到高可用的目的。
       3、 DRBD的主要应用
        如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多

的实现服务器冗余的解决方案中,heartbeat 为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat

+ drbd在Linux下创建一个高可用(HA)的集群服务器,在高可用(HA)解决方案中使用DRBD的功能,可以代替使用一

个共享盘阵存储设备。因为数据同时存在于本地主机和远程主机上,在遇到需要切换的时候,远程主机只需要使用它

上面的那份备份数据,就可以继续提供服务了。
    DRBD 的出现的确对 MySQL 集群的可用性有很大提高。而且,有独到的特点,非常适合面向互联网的应用。因为

是在存储层的数据块同步,很容易的做到应用层的 IO 负载均衡(备机承担一定的读压力),不但支持数据库失败

接管,还能做到 IP 失败接管,接管时间小于 30 秒,真是穷人的绝佳集群解决方案。
IP地址说明:
主服务器的主机名改为master
从服务器的主机名改为slave

master   192.168.10.7  
slave    192.168.10.8
VIP      192.168.10.9


1、主从服务器的/etc/hosts加入

192.168.10.7   master
192.168.10.8   slave


2、安装mysql(主从服务器安装相同)

# tar -zxvf mysql-5.1.45.tar.gz
# cd mysql-5.1.45
# groupadd mysql
# useradd -g mysql -s /sbin/nologin -M mysql
# ./configure --prefix=/usr/local/mysql --with-charset=gbk --localstatedir=/var/data --with-extra-charsets=all --enable-thread-safe-client
# make && make install
# cp support-files/my-large.cnf /etc/my.cnf
# chown -R mysql.mysql /usr/local/mysql/
# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld
# chmod 755 /etc/rc.d/init.d/mysqld
加入服务队列:
# chkconfig --add mysqld


注:不要开机自启动!
配置库文件搜索路径

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


添加/usr/local/mysql/bin到环境变量PATH中

# echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
# source /etc/profile


3、DRBD的安装和设置
(1)安装DRBD(主从服务器安装相同)

# tar -zxvf drbd-8.3.2.tar.gz
# cd drbd-8.3.2
# make
# make install
# modprobe drbd
# lsmod | grep drbd
drbd                  233268  0


(2)更改drbd配置文件(主从服务器相同)
准备drbd要使用的分区,该分区最好是干净的分区,我在虚拟机中重新划分了一个分区/dev/sdb1为drbd使用
注:分区不要格式化!

# vi /usr/local/drbd/etc/drbd.conf

global {
  usage-count yes;
}
common {
  protocol C;
}

resource r0 {
  startup {
    degr-wfc-timeout 120;
     }
  disk {
    on-io-error   detach;
      }
  net {
    cram-hmac-alg sha1;
    shared-secret "FooFunFactory";
  }
  syncer {
    rate 100M;
  }
  on master{
#master为主服务器的主机名
    device     /dev/drbd0;
    disk       /dev/sdb1;
    address    192.168.10.7:7788;
    meta-disk  internal;
  }
  on slave{
#master为从服务器的主机名
    device    /dev/drbd0;
    disk      /dev/sdb1;
    address   192.168.10.8:7788;
    meta-disk internal;
  }
}


(3)创建matadata(主从服务器)

# drbdadm create-md all

启动drbd:

#  /etc/init.d/drbd  start

在启动第一个节点上的DRBD服务的时候,他会等待第2个节点的DRBD服务的启动,此时启动第2个节点上的DRBD服务即可。
设置为主节点:

# drbdadm  primary all
如果不成功使用这个命令
# drbdsetup /dev/drbd0 primary -o


查看drbd的运行状态

# cat /proc/drbd   

version: 8.3.2 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by root@slave, 2010-06-23 09:33:38
 0: cs:SyncTarget ro:Secondary/Secondary ds:Inconsistent/UpToDate C r----
    ns:0 nr:1558420 dw:1558420 dr:0 al:0 bm:98 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:538204
        [====>...............] sync'ed: 28.9% (538204/750448)K
        finish: 0:00:17 speed: 30,320 (30,320) K/sec


此时可以看到,已经开始同步数据了。设置完之后的第一次同步耗时比较长,因为需要把整个分区的数据全部同步一遍。
在新设备上面创建文件系统(主服务器)

# mkfs.ext3 /dev/drbd0


挂载文件系统,先停止mysql,安装一下数据文件

# mount /dev/drbd0 /var/data
# /usr/local/mysql/bin/mysql_install_db --user=mysql
# chown -R mysql.mysql /var/data


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

# umount /var/data
# drbdadm secondary all


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

# drbdadm primary all
# mount /dev/drbd0 /var/data/
# ls /var/data


查看一下数据同步过来没
4、安装配置heartbeat(主从服务器的安装和配置相同):
(1)安装libnet

# tar -zxvf libnet-1.1.4.tar.gz
# cd libnet-1.1.4
# ./configure
# make
# make install


(2)安装heartbeat
下载地址:http://hg.linux-ha.org/dev/archive/STABLE-2.1.3.tar.bz2

# groupadd haclient
# useradd -g haclient -s /sbin/nologin -M hacluster
# tar -jxvf Heartbeat-3-0-STABLE-2.1.3.tar.bz2.tar
# cd Heartbeat-3-0-STABLE-2.1.3
# ./ConfigureMe configure --disable-swig --disable-snmp-subagent
# make
# make install
# cp doc/ha.cf /etc/ha.d/
# cp doc/haresources /etc/ha.d/
# cp doc/authkeys /etc/ha.d/


(3)Authkeys配置
# chmod 600 /etc/ha.d/authkeys
#主节点和从节点间数据校验用的

# vi /etc/ha.d/authkeys
   auth 3
   #1 crc
   #2 sha1 HI!
   3 md5 Hello!


(4)资源文件haresources配置
# vi /etc/ha.d/haresources
在配置文件中添加如下一行

master drbddisk Filesystem::/dev/drbd0::/var/data::ext3  mysqld 192.168.10.9

上面资源组中的各项含义如下:
master            当前primary节点名(uname -n)
192.168.10.9      这里是让heartbeat帮你管理一个service ip,会跟着主节点一起漂移
drbddisk::r0      定义使用的drbd资源
Filesystem        这里是告诉heartbeat需要管理文件系统资源,其实实际上就是执行mount/umount命令,后面的"::"符号之后是跟的 Filesystem的参数设备名和mount点)
mysqld            告诉需要管理mysql
(5)ha.cf配置
# vi /etc/ha.d/ha.cf

#debugfile /var/log/ha-debug的注释去掉
#keepalive 2    去注释
#deadtime 15    去注释
#warntime 10    去注释把10改成5
#initdead 120   去注释
#udpport 694    去注释
#bcast eth0    #Linux   去注释
#watchdog /dev/watchdog  去注释也可以不打开
#node den3    把den3改成master  这里要注要它是主节点名称下面的是副节点名称,一定要与uname -n一致.
#node dathy   把dathy改成slave
#ping_group group1 10.10.10.254 10.10.10.253 去注释改:ping_group group1 192.168.10.7  192.168.10.8
#respawn hacluster /usr/lib/heartbeat/ipfail 去注释
#apiauth ipfail gid=haclient uid=hacluster 去注释
#hopfudge 1 去注释  它就是集群中活跃节点的数量


(6)启动heartbeat加到开机自启动

# /etc/init.d/heartbeat start
# echo "/etc/init.d/drbd start" >>/etc/rc.local
# echo "/etc/init.d/heartbeat start" >>/etc/rc.local


(7)查看是否启动成功
在主服务器上

# ifconfig
eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:7C:3F:5C  
          inet addr:192.168.10.9  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:185 Base address:0x2024


# netstat -ant
看mysql是否启动
5、测试
可以拔掉主服务器的网线或者停止heartbeat服务,看看有什么情况发生,测试是否正常?
然后再把网线插回去或者启动heartbeat,MySQL服务能否自动切换回来?


  评论这张
 
阅读(3567)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018