drbd和mysql_DRBD+MYSQL实现高可用的数据库环境

运行环境:Ubuntu8.0.4

DRBD-8.0.11

MySQL-5.1.36-log

服务器名称及IP:DBTest1 192.168.0.101 primary node

DBTest2 192.168.0.102 secondary node

步骤:

一,编译安装MySQL

在DBTest1和DBTest2上分别执行如下步骤

#tar -zxvf mysql-5.1.36.tar.gz

#cat mysql-5.1.36

#./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-plugins=max-no-ndb

#make

#make install

#adduser mysql

到此mysql安装完成,先不急着运行mysql下面安装DRBD

二,安装DRBD

在DBTest1和DBTest2上分别执行如下步骤

#sudo apt-get install drbd8-utils

安装完成后查看drbd是否安装成功

#lsmod | grep drbd

drbd                  213256  4

cn                      9632  1 drbd

看到上面的信息则表示安装成功了

三,增加磁盘分区

在我的测试环境中有一个新的磁盘/dev/sdb 现在在这个磁盘上分一个区/dev/sdb1用于drbd, 注册DBTEST1和DBTEST2上的磁盘分区大小最好相同。

#fdisk /dev/sdb

四,配置DRBD

DRBD 的配置文件一般位于/etc/drbd.conf,修改这个文件,注意在DBTEST1和DBTEST2中这个文件要完成相同

global {

usage-count no;

}

common {

syncer { rate 10M; }

}

resource mysql {

protocol C;

on DBTest1 {

device     /dev/drbd0;

disk       /dev/sdb1;

address    192.168.0.101:7788;

flexible-meta-disk  internal;

}

on DBTest2 {

device    /dev/drbd0;

disk      /dev/sdb1;

address   192.168.0.102:7788;

meta-disk internal;

}

}

五,启动DRBD

在DBTEST1(主节点)上执行如下命令

1) 创建matadata:

#drbdadm create-md all

2) 启动drbd:

#/etc/init.d/drbd start

3) 设置为主节点:

#drbdadm  primary all

4) 在新设备上面创建文件系统

#mkfs.ext3 /dev/drbd0

5) 将文件系统mount上

#mkdir /dbfile

#mount /dev/drbd0 /dbfile

在DBTEST2(从节点)上执行如下命令:

1) 创建matadata:

#drbdadm create-md all

2) 启动drbd:

#/etc/init.d/drbd start

注:在从节点上不用创建文件系统(因为这些信息都会从主节点同步过来的)

六,检查DRBD的服务状态:

在DBTEST1上执行如下命令:

#pa -aux | grep drbd

root@DBTest1:~# ps aux | grep drbd

root      5761  0.1  0.0      0     0 ?        S    14:44   0:09 [drbd0_worker]

root      5763  0.4  0.0      0     0 ?        S    14:44   0:29 [drbd0_receiver]

root      5768  0.1  0.0      0     0 ?        S    14:44   0:08 [drbd0_asender]

root      6413  0.0  0.4   1784   536 pts/1    R+   16:41   0:00 grep drbd

#cat /proc/drbd

root@DBTest1:~# cat /proc/drbd

version: 8.0.11 (api:86/proto:86)

GIT-hash: b3fe2bdfd3b9f7c2f923186883eb9e2a0d3a5b1b build by phil@mescal, 2008-02-12 11:56:43

0: cs:Connected st:Primary/Secondary ds:Inconsistent/UpToDate C r---

ns:88796 nr:1060 dw:89856 dr:0 al:42 bm:28 lo:0 pe:0 ua:0 ap:0

resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0

act_log: used:0/257 hits:22157 misses:66 starving:0 dirty:24 changed:42

在DBTEST2上执行如下命令

root@DBTest2:/tools/mysql-5.1.36# ps -aux |grep drbd

Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html

root      5672  0.0  0.0      0     0 ?        S    14:38   0:00 [drbd0_worker]

root      5673  0.3  0.0      0     0 ?        S    14:38   0:26 [drbd0_receiver]

root      5695  0.0  0.0      0     0 ?        S    14:44   0:03 [drbd0_asender]

root      6097  0.0  0.4   1788   576 pts/0    S+   16:42   0:00 grep drbd

version: 8.0.11 (api:86/proto:86)

GIT-hash: b3fe2bdfd3b9f7c2f923186883eb9e2a0d3a5b1b build by phil@mescal, 2008-02-12 11:56:43

0: cs:Connected st:Secondary/Primary ds:UpToDate/Inconsistent C r---

ns:3302 nr:88796 dw:89856 dr:2615 al:9 bm:8 lo:0 pe:0 ua:0 ap:0

resync: used:0/31 hits:0 misses:0 starving:0 dirty:0 changed:0

act_log: used:0/257 hits:256 misses:9 starving:0 dirty:0 changed:9

看到以上信息说明DRBD已经正确启动了。其中drbd0_worker是drbd的主进程,而drbd0_asender是块发送进程,drbd0_receiver是块接收进程. cat /proc/drbd 中的信息如下

Field        说明                  值:

cs         连接状态               出现的值:

o Unconfigured:设备在等待配置。

o Unconnected:连接模块时的过渡状态。

o WFConnection:设备等待另一测的配置。

o WFReportParams:过渡状态,等待新TCP 连接的第一个数据包时。.

o SyncingAll:正将主节点的所有模块复制到次级节点上。.

o SyncingQuick:通过复制已被更新的模块(因为现在次级节点已经离开了集群)来更新次级节点。

o Connected:一切正常。

o Timeout:过渡状态。

st         状态(设备的作用)      可能的值为:

o 本地/远程一级状态

o 二级状态

o 未知(这不是一种作用)

ns    网络发送    模块号码

nr    网络接收    模块号码

dw   磁盘写入    模块号码

DR   磁盘读取    模块号码

of    运行中(过时的)模块号码

pe   待解决的    模块号码

ua    未答复的    模块号码(最好为0)

七,配置MySQL

#cd /usr/local/mysql

#bin/mysql_install_db --datadir=/dbfile --user=mysql

#vi /dbfile/my.cnf

[client]

#password       = your_password

port            = 3306

socket          = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server

[mysqld]

port            = 3306

socket          = /tmp/mysql.sock

skip-locking

key_buffer_size = 16K

max_allowed_packet = 1M

table_open_cache = 4

sort_buffer_size = 64K

read_buffer_size = 256K

read_rnd_buffer_size = 256K

net_buffer_length = 2K

thread_stack = 128K

datadir=/dbfile

basedir=/usr/local/mysql

server-id       = 2

log-bin=DBTest_bin

# binary logging format - mixed recommended

#binlog_format=mixed

# Uncomment the following if you are using InnoDB tables

#innodb_data_home_dir = /opt/data/innodb

#innodb_data_file_path = ibdata1:10M:autoextend

#innodb_log_group_home_dir = /usr/local/mysql/var/

# You can set .._buffer_pool_size up to 50 - 80 %

# of RAM but beware of setting memory usage too high

#innodb_buffer_pool_size = 2M

#innodb_additional_mem_pool_size = 1M

# Set .._log_file_size to 25 % of buffer pool size

#innodb_log_file_size = 5M

#innodb_log_buffer_size = 1M

#innodb_flush_log_at_trx_commit = 2

#innodb_lock_wait_timeout = 50

#Slave Configure

#master-host=192.168.0.101

#master-port=3306

#master-user=repl #同步用户帐号

#master-password=oursaadmin

#master-connect-retry=60 #预设重试间隔60秒

#replicate-do-db=crn #告诉slave只做blog数据库的更新

#relay-log=mysqld-relay-bin

[mysqldump]

quick

max_allowed_packet = 16M

[mysql]

no-auto-rehash

# Remove the next comment character if you are not familiar with SQL

#safe-updates

[myisamchk]

key_buffer_size = 8M

sort_buffer_size = 8M

[mysqlhotcopy]

interactive-timeout

八,测试

在DBTEST1中启动MYSQL

#cd /usr/local/mysql

# bin/mysqld_safe --defaults-file=/dbfile/my.cnf --user=mysql &

#mysql > create database crn;

#mysql > create table t(i int);

#mysql > insert into t values(1),(2),(3)

#mysql> select * from t;

+------+

| i    |

+------+

|    1 |

|    2 |

|    3 |

+------+

3 rows in set (0.00 sec)

退出mysql,并在DBTEST1上关闭MYSQL,将主节点切换到DBTEST2

# bin/mysqladmin shutdown

#umount /dbfile

#drbdadm secondary  all

在DBTEST2 上执行如下命令

#drbdadmin primary all

#mount /dev/drbd0 /dbfile

#cd /usr/local/mysql

#bin/mysqld_safe --defaults-file=/dbfile/my.cnf --user=mysql &

#mysql > use crn;

#mysql > select * from t;

+------+

| i    |

+------+

|    1 |

|    2 |

|    3 |

+------+

3 rows in set (0.00 sec)

查看数据完成一致,说明DRBD的同步已经成功了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Re: MySQL 高可用工具 DRBD 实战部署详解 ========================================# DRBD 是什么(用三句话总结) 目的:类似于 rsync + inotify 数据目录(/data)变化时,实现数据同步 功能:类似于本地磁盘阵列 raid-1,保持磁盘或者分区的一致性,但最终的目的是(/data)数据目录的一致性。 原理:类似于MySQL的主从复制,一份写在磁盘中,一份写在二进制日志中;DRBD原理也是一份写在磁盘中,另一份通过DRBD软件,经过tcp/ip协议,基于block变化,传输到远程磁盘中做记录。 # DRBD 的功能 Distributed Replicated Block Divice(缩略:DRBD)(分布式复制块设备) 基于高可用 HA 服务器之间的数据同步解决方案 基于块设备在不同的高可用服务器之间同步和镜像数据的软件,通过它可以实现在网络中的两台服务器之间基于“块”(block)设备级别的实时或异步镜像或同步复制(【原理】:类似MySQL主从复制) # DRBD 的目的 类似于DRBD ≈(rsync + inotify)的架构:单inotify基于文件系统‘上层’,当文件系统中有数据发生变化,就调用 rsync 服务,将文件系统中的文件同步到备库。 但是DRBD是基于文件系统底层(主要区别),即 block 块级别的更‘底层’,而 inotify是在文件系统之上的实际物理文件(文件复制),因此DRBD效率更高(类似克隆方式 GHOST 克隆软件)! 相对而言:(rsync + inotify)工作原理(效率低...)... # DRBD 的应用 heartbeat + DRBD + nfs/mfs/gfs    下章演示... heartbeat + DRBD + mysql    本章演示... heartbeat + DRBD + oracle   甚至放弃 Oracle 原厂 RAC + DataGuard 等标配 HA方案        

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值