构建 MySQL+DRDB+heartbeat 高可用

sbjoso

贡献于2012-12-25

字数:0 关键词: MySQL 数据库服务器 SQL

构建 MySQL+DRDB+heartbeat 高可用 DRDB:分布式复制磁盘块设备,是一个软件级别的,不提供任何共享实现的分布式的磁盘镜 像解决方案。 实现方式:在数据写入磁盘前通过 TCP/IP 网络发送给另外一个服务器,在另外一个服务器 上存储一份,从节点 drdb 设备不能读写也不能挂载。 复制模型: Protocol A:异步: 数据被送到本地的发送缓冲区即返回成功 Protocol B:半异步:数据发送到对方的缓冲区返回成功 Protocol C:同步:数据存储到对方磁盘后才返回成功 一、 环境 介绍 一、 环境 介绍 一、 环境 介绍 一、 环境 介绍 master: 192.168.56.101 slave: 192.168.56.102 mysql 版本:5.5.24 系统版本:RedHat 5.8 x86_32 注意:1、同步两个节点的时间 2、通过修改 hosts 文件可以使两个节点间能够互相通过主机名访问 3、确保 uname -n 得到的结果和主机名保持一致 4、禁止 mysqld 服务开机自动启动 二、 二、 二、 二、 DRDB DRDB DRDB DRDB 部署 部署 部署 部署 1111、创建 DRBD DRBD DRBD DRBD 使用的磁盘分区 最好使用相同大小的单独分区,也可以使用 LVM,创建分区过程这里不再给出,可参考其他 文档,假设使用的分区情况如下: master: /dev/sda5 5G slave: /dev/sda5 5G 创建完成后不要格式化 2222、安装软件包 kmod-drbd83 drbd83 可以使用 yum 安装,在系统安装光盘就附带的有,需要在两个节点都安装。 3333、配置 DRBDDRBDDRBDDRBD 复制配置文件样例 [root@master ~]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc cp:是否覆盖“/etc/drbd.conf”? y 打开该配置文件后发现只有两行内容: include "drbd.d/global_common.conf"; include "drbd.d/*.res"; 就是读取 drbd.d 下的 global_common.conf 和drbd.d 下所有以 res 结尾的文件,所以不用 做任何修改 配置 global_common.conf [root@master ~]# cp /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.bak //先备份该配置文件 [root@master ~]# vim /etc/drbd.d/global_common.conf //编辑该配置文件 ... global { usage-count no; //是否对使用信息作统计,默认为 yes } startup { wfc-timeout 120; //等待连接的超时时间 degr-wfc-timeout 120; } disk { on-io-error detach; //当IO出现错误时执行的动作 fencing resource-only; //隔离级别 } net { cram-hmac-alg "sha1"; //同步时使用的验证方式 shared-secret "drdb-test"; //使用的密码 } syncer { rate 100M; //同步时占用网络速率的最大值 } ... 创建资源文件,从drbd.conf 配置文件中可以看到读取的是以 res 结尾的文件,所以创建的 资源文件必须为 res 结尾 [root@master ~]# vim /etc/drbd.d/mysql.res resource mysql {//定义资源名称为 mysql,名字不能包含空格 on master {//定义 mastre 节点的配置 device /dev/drbd0; //设置 drbd 设备 disk /dev/sda5; //定义使用的哪个磁盘分区 address 192.168.56.101:7788; //设置本节点的 IP和对应端口,用来和另外一个节点通信 } on slave { device /dev/drbd0 disk /dev/sda5; address 192.168.56.102:7788; meta-disk internal; } } 复制配置文件至 slave 节点 [root@master ~]# cd /etc/drbd.d/ [root@master drbd.d]# scp -p global_common.conf mysql.res root@192.168.56.102:/etc/drbd.d/ [root@master drbd.d]# scp -p /etc/drbd.conf root@192.168.56.102:/etc/ 4444、初始化两个节点 初始化主节点: [root@master drbd.d]# drbdadm create-md mysql Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. 初始化备用节点: [root@slave ~]# drbdadm create-md mysql Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. 5555、启动服务并同步磁盘 分别在两个节点上执行: [root@master ~]# service drbd start [root@slave ~]# service drbd start 单独启动一个节点时,会一直处在等待另一个节点上线状态。 查看 drbd 磁盘状态 [root@master ~]# cat /proc/drbd version: 8.3.8 (api:88/proto:86-94) GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:4891572 可以看到两个节点并未同步而且都处于 Secondary 状态 设置 master 节点成为主节点 [root@master ~]# drbdadm ----overwrite-data-of-peer primary mysql [root@master ~]# cat /proc/drbd //查看状态 version: 8.3.8 (api:88/proto:86-94) GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---- ns:139176 nr:0 dw:0 dr:147072 al:0 bm:8 lo:1 pe:10 ua:247 ap:0 ep:1 wo:b oos:1820920 [>...................] sync'ed: 7.4% (1820920/1959800)K delay_probe: 13 finish: 0:01:44 speed: 17,360 (17,360) K/sec 可以看到已经开始同步 7.4% 6666、同步完成后格式化并挂载测试 等待同步完成后磁盘状态将转变为 UpToDate/UpToDate [root@master ~]# mke2fs -j /dev/drbd0 挂载测试 [root@master ~]# mount /dev/drbd0 /mnt/ [root@master ~]# ls /mnt/ lost+found [root@master ~]# cp /etc/fstab /mnt/ [root@master ~]# umount /mnt/ [root@master ~]# drbdadm secondary mysql //使当前节点的 mysql 资源转为备用 在备用节点测试 [root@slave ~]# drbdadm primary mysql [root@slave ~]# mount /dev/drbd0 /mnt/ [root@slave ~]# ls /mnt/ fstab lost+found 可以看到在备用节点成功测试. 三、 部署 三、 部署 三、 部署 三、 部署 mysqlmysqlmysqlmysql 1111、安装 mysql mysql mysql mysql 数据库 安装过程这里不再给出,请参考其他文档,这里假设 mysql 安装目录:/usr/local/mysql mysql 配置主文件:/etc/my.cnf mysql 数据文件目录:/mysqldata 且能够使用 service mysqld {start|stop|status}控制 2222、在主节点初始化 mysql mysql mysql mysql 数据库 [root@slave ~]# umount /mnt //在备用节点卸载已挂载的 drbd 设备 [root@slave ~]# drbdadm secondary mysql //把mysql 资源转为备用 [root@master ~]# drbdadm primary mysql //在主节点上把 mysql 资源转为主 [root@master ~]# mount /dev/drbd0 /mysqldata/ //挂载 drbd 设置到 mysql 的数据目录 [root@master ~]# cd /usr/local/mysql/ [root@master mysql]# scripts/mysql_install_db --user=mysql --datadir=/mysqldata/ //初始化 mysql [root@master mysql]# service mysqld start //测试是否能成功启动 [root@master mysql]# service mysqld stop //测试正常后停止 mysqld 四、 部署 四、 部署 四、 部署 四、 部署 heartbeatheartbeatheartbeatheartbeat 1111、在两个节点安装 heartbeatheartbeatheartbeatheartbeat 依赖软件包: heartbeat heartbeat-pils heartbeat-stonith libnet libtool-ltdl openhpi-libs 2222、配置 heartbeatheartbeatheartbeatheartbeat [root@master ~]# cd /usr/share/doc/heartbeat-2.1.4/ [root@master heartbeat-2.1.4]# cp authkeys haresources ha.cf /etc/ha.d/ [root@master heartbeat-2.1.4]# cd /etc/ha.d/ [root@master ha.d]# vim ha.cf //添加如下三行 bcast eth0 //定义广播心跳信息从哪个接口发出 node master //定义节点 node slave 编辑认证文件 [root@master ha.d]# vim authkeys auth 1 1 md5 HelloDrbd //md5 后边的字符串为密码 [root@master ha.d]# chmod 600 authkeys //更改配置文件权限为 600 定义资源 VIP,DRBD 设备挂载,mysqld 服务 [root@master ha.d]# vim haresources master 192.168.56.200/24/eth0 drbddisk::mysql Filesystem::/dev/drbd0::/mysqldata mysqld 拷贝配置文件至 slave 节点 [root@master ha.d]# scp -p authkeys haresources ha.cf root@192.168.56.102:/etc/ha.d/ 五、 验证 五、 验证 五、 验证 五、 验证 启动主从节点的 heartbeat 服务 [root@master ha.d]# service heartbeat start [root@master ha.d]# ssh slave 'service heartbeat start' //从节点的服务由 ssh 通过 主节点启动 验证主节点是否正常: [root@master ha.d]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:EF:F7:44 inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:791844 errors:0 dropped:0 overruns:0 frame:0 TX packets:5157760 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:252879346 (241.1 MiB) TX bytes:3409833888 (3.1 GiB) eth0:0 Link encap:Ethernet HWaddr 08:00:27:EF:F7:44 inet addr:192.168.56.200 Bcast:192.168.56.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:40 errors:0 dropped:0 overruns:0 frame:0 TX packets:40 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:4643 (4.5 KiB) TX bytes:4643 (4.5 KiB) [root@master ha.d]# netstat -tnlp | grep 3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 13341/mysqld 可以看到 VIP 和mysql 服务已经成功启动,接下来在主节点上创建一个 tesdb 数据库,以便 在slave 节点上测试: [root@master ha.d]# /usr/local/mysql/bin/mysqladmin create testdb 使主节点转为备用状态,测试 slave 节点是否能够成功接管 [root@master ha.d]# /usr/lib/heartbeat/hb_standby 2012/08/07_00:26:55 Going standby [all]. 在slave 节点验证: [root@slave ~]# ifconfig eth0 Link encap:Ethernet HWaddr 08:00:27:DB:A2:9B inet addr:192.168.56.102 Bcast:192.168.56.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5277955 errors:0 dropped:0 overruns:0 frame:0 TX packets:659808 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3599112588 (3.3 GiB) TX bytes:64444784 (61.4 MiB) eth0:0 Link encap:Ethernet HWaddr 08:00:27:DB:A2:9B inet addr:192.168.56.200 Bcast:192.168.56.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:38 errors:0 dropped:0 overruns:0 frame:0 TX packets:38 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:4598 (4.4 KiB) TX bytes:4598 (4.4 KiB) [root@slave ~]# netstat -tnlp | grep 3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 11936/mysqld 可以看到VIP和mysql服务器已经成功接管,现在进入数据查看在master 节点上创建testdb 数据库是否正常: [root@slave ~]# /usr/local/mysql/bin/mysql -u root -p mysql> SHOW DATABASES; +---------------------+ | Database | +---------------------+ | information_schema | | #mysql50#lost+found | | mysql | | performance_schema | | test | | testdb | +---------------------+ 6 rows in set (0.03 sec) 成功转移! 本篇文章来源于 Linux 公社网站(www.linuxidc.com) 原文链接: http://www.linuxidc.com/Linux/2012-09/71471p2.htm

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 0 人已下载

下载文档

相关文档