mysql+heartbeat+drbd安装
环境:
系统 IP地址 主机名 软件包列表
centos6.5 192.168.200.101 server1 DRBD、heartbeat、mysql
centos6.5 192.168.200.102 server2 DRBD、heartbeat、mysql
安装前准备配置:
所有主机需要添加一块20G 的SCSI 接口硬盘。
将两台机器的硬盘分区(10G),分区不需要格式化,过程省略
主从更改主机名以及host
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=server1
[root@localhost ~]# hostname server1
[root@localhost ~]# bash
[root@server1 ~]# vim /etc/hosts
192.168.200.101 server1
192.168.200.102 server2
Heartbeat 安装:
主从都需要安装
将软件包上传
[root@server1 ~]# yum -y install perl-TimeDate cluster-glue-libs kernel-devel kernel-headers flex
进入到上传的软件包目录下
[root@server1 ~]# rpm -ivh cluster-glue-1.0.5-6.el6.x86_64.rpm
[root@server1 ~]# yum -y localinstall heartbeat-*
安装配置DRBD:
主从都需要安装
[root@server1 ~]# tar xf drbd-8.4.3.tar.gz
[root@server1 ~]# cd drbd-8.4.3
[root@server1 drbd-8.4.3]#./configure --prefix=/usr/local/drbd --with-km --with-heartbeat
make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/ && make &&
make install
红色部分要看本机的版本,主机不同,版本不同
[root@server1 drbd-8.4.3]# mkdir -p /usr/local/drbd/var/run/drbd
[root@server1 drbd-8.4.3]# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/init.d/
[root@server1 drbd-8.4.3]# chkconfig --add drbd
[root@server1 drbd-8.4.3]# cd drbd
[root@server1 drbd]# make clean
make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64/
cp drbd.ko /lib/modules/2.6.32-431.el6.x86_64/kernel/lib/
[root@server1 drbd]# depmod
[root@server1 drbd]# cp -R /usr/local/drbd/etc/ha.d/resource.d/* /etc/ha.d/resource.d/
[root@server1 drbd]# cd /usr/local/drbd/etc/drbd.d/
vim /usr/local/drbd/etc/drbd.conf
include "drbd.d/global_common.conf";
include "drbd.d/*.res"; //此目录下所有以.res 结尾的都为资源文件
1、配置global_common.conf 文件(主从一致)
[root@server1 drbd.d]# pwd
/usr/local/drbd/etc/drbd.d
[root@server1 drbd.d]# cp global_common.conf{,-$(date +%s)}
[root@server1 drbd.d]# vim global_common.conf
global {
usage-count yes; //是否对使用信息作统计,默认为yes
}
common {
startup {
wfc-timeout 120; //等待连接的超时时间
degr-wfc-timeout 120;
}
disk {
on-io-error detach; //当IO 出现错误时执行的动作
}
net {
protocol C; //复制模式为第3 种
}
2、配置资源文件(主从一致)
[root@server1 drbd.d]# vim r0.res
resource r0 { //r0 资源名称
on server1 {
device /dev/drbd0; //逻辑设备路径
disk /dev/sdb1; //物理设备
address 192.168.200.101:7788; //主节点
meta-disk internal;
}
on server2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.200.102:7788; //备节点
meta-disk internal;
}
}
注意:将内容复制到文件中的时候,将注释删除掉,否则报错(文件是细新建的)
[root@server1 drbd.d]# scp global_common.conf r0.res
192.168.200.102:/usr/local/drbd/etc/drbd.d
3、创建元数据(两个节点上操作)
[root@server1 drbd.d]# modprobe drbd
[root@server1 drbd.d]# lsmod | grep drbd
drbd 310268 0
libcrc32c 1246 1 drbd
[root@server1 drbd.d]# dd if=/dev/zero bs=1M count=1 of=/dev/sdb1
[root@server1 drbd.d]# drbdadm create-md r0 //输出以下信息
. //当输出成功信息后可Ctrl+C 结束
注意:
当执行命令”drbdadm create-md r0”时,出现以下错误信息。
Device size would be truncated, which
would corrupt data and result in
You need to either
* use external meta data (recommended)
* shrink that filesystem first
* zero out the device (destroy the filesystem)
Operation refused.
Command 'drbdmeta 0 v08 /dev/xvdb internal create-md' terminated with exit code 40
drbdadm create-md r0: exited with code 40
解决办法:初始化磁盘文件格式, dd if=/dev/zero bs=1M count=1 of=/dev/sdb1; sync
启动 DRBD(主从节点都要执行)
[root@server1 ~]# /etc/init.d/drbd start
这里的yes是指的终止等待
[root@server1 ~]# netstat -anpt | grep 7788
tcp 0 0 192.168.200.101:7788 0.0.0.0:* LISTEN -
手动验证主从切换:
在server1上执行
drbdadm -- --overwrite-data-of-peer primary r0
cat /proc/drbd
数据同步测试(主节点上操作前 6 步骤,次节点上操作后三步骤)
[root@server1 drbd.d]# mkfs.ext4 /dev/drbd0
[root@server1 drbd.d]# mkdir /mysqldata
[root@server1 drbd.d]# mount /dev/drbd0 /mysqldata
[root@server1 drbd.d]# echo www.crushlinux.com > /mysqldata/file //建立测试文件
[root@server1 ~]# umount /dev/drbd0
[root@server1 ~]# drbdadm secondary r0 //主降为次
[root@server2 drbd.d]# drbdadm primary r0 //次升为主
[root@server2 drbd.d]# mkdir /mysqldata
[root@server2 drbd.d]# mount /dev/drbd0 /mysqldata
[root@server2 drbd.d]# ls /mysqldata //在备节点上查看数据
file lost+found //可以看到创建的文件
安装 MySQL:
更改 Mysql 数据库的存储位置为共享目录(主从都要执行)
[root@server1 ~]# yum -y install mysql mysql-server
[root@server1 ~]# vim /etc/my.cnf
2 datadir=/mysqldata/mysql
[root@server1 ~]# chown -R mysql.mysql /mysqldata
[root@server1 ~]# chkconfig mysqld on
注意: 此时我们修改了数据目录和其属主和权限,有时会因为此操作导致数据库无法启动,
解决方法:
一,查看你的 selinux 是否处于打开状态,将其关闭。
二, /etc/apparmor.d/usr.sbin.mysqld 文件中,有两行内容规定了 mysql 使用数据文件的路径权限,改掉即可,重启/etc/init.d/apparmor restart。
进行数据库测试
因为此前的操作,现在把 server2 节点降为次
[root@server2 ~]#umount /dev/drbd0
[root@server2 ~]#drbdadm secondary r0
把 server1 升为主节点
[root@server1 ~]#drbdadm primary r0
[root@server1 ~]#mount /dev/drbd0 /mysqldata
[root@server1 ~]# /etc/init.d/mysqld start
在 server1 上创建一个库 crushlinux,然后主降为备,把 server2 升为主查看库有没有同步。
[root@server1 ~]# mysql
mysql> create database crushlinux;
Query OK, 1 row affected (0.00 sec)
mysql> exit
[root@server1 ~]# service mysqld stop
[root@server1 ~]# umount /dev/drbd0
[root@server1 ~]# drbdadm secondary r0
[root@server2 drbd.d]# drbdadm primary r0
[root@server2 drbd.d]# mount /dev/drbd0 /mysqldata
[root@server2 drbd.d]# service mysqld start
[root@server2 drbd.d]# ls /mysqldata/mysql/
crushlinux ibdata1 ib_logfile0 ib_logfile1 mysql test
配置 heartbeat:
1、配置 ha.cf 文件(主从大体一致)
[root@server1 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@server1 heartbeat-3.0.4]# cp ha.cf authkeys haresources /etc/ha.d/
[root@server1 heartbeat-3.0.4]# cd /etc/ha.d/
[root@server1 ha.d]# vim ha.cf
29 logfile /var/log/ha-log
34 logfacility local0
48 keepalive 2 //多长时间检测一次
56 deadtime 10 //连续多长时间联系不上后认为对
61 warntime 5 //连续多长时间联系不上开始警告
71 initdead 100 //主要是给重启后预留的一段忽略
76 udpport 694 //UDP 端口
121 ucast eth0 192.168.200.102 //填写对方 IP(主从的差异点)
157 auto_failback on //节点修复后是否切换回来
211 node server1 //节点名称
212 node server2 //节点名称
253 respawn hacluster /usr/lib64/heartbeat/ipfail
//控制 IP 切换的程序
2、配置 haresources 文件(主从一致)
[root@server1 ha.d]# vim haresources
添加以下内容
server1 IPaddr::192.168.200.254/24/eth0:0 drbddisk::r0
Filesystem::/dev/drbd0::/mysqldata::ext4 mysqld
IPaddr::192.168.200.254/24/eth0:0:用IPaddr脚本配置浮动VIP
drbddisk::r0:用drbddisk脚本实现DRBD主从节点资源组的挂载和卸载
Filesystem::/dev/drbd0::/mysqldata::ext4:用Filesystem脚本实现磁盘挂载和卸载
[root@server1 ha.d]# ln -s /etc/init.d/mysqld /etc/ha.d/resource.d/mysqld
3、配置 authkeys 文件(主从一致)
[root@server1 ha.d]# vim authkeys
23 auth 1
24 1 crc
[root@server1 ha.d]# chmod 600 authkeys
4、 HA 验证:
主从节点启动 heartbeat
[root@server1 ha.d]# service heartbeat start
查看主节点 VIP 是否存在
启动报错1:
解决:vim /etc/ha.d/ha.cf
//系统是64位的,所以路径应该在/usr/lib64/目录
启动报错2:
解决:
在haresources文件中添加内容必须写在一行
启动成功提示:
[root@server1 ha.d]# /etc/init.d/heartbeat start
Starting High-Availability services: INFO: Resource is stopped
Done.
[root@server1 ha.d]# ip a //需要等待 10 秒
inet 192.168.200.254/24 brd 192.168.200.255 scope global secondary eth0:0
验证:先停掉 server1 上的 heartbeat 服务,查看 VIP 是否能转移
此时 server2 的 mysql 服务是关闭的
[root@server1 ha.d]# service heartbeat stop //主节点操作
Stopping High-Availability services: Done.
IP地址已经成功漂移到server2上了
[root@server2 ha.d]# mysqladmin -uroot ping //备节点操作,发现 mysql 随之启动
Mysqld is alive
此时还不具备停掉 mysql 后 VIP 漂移的功能,需要添加脚本实现,当发现 mysql 服务出现挂
掉,就停掉 heartbeat 服务,实现 VIP 转移(双方都要在后台执行)
[root@server1 ~]# vim chk_mysql.sh
#!/bin/bash
mysql="/etc/init.d/mysqld"
mysqlpid=$(ps -C mysqld --no-header | wc -l)
if [ $mysqlpid -eq 0 ];then
$mysql start
sleep 3
13 / 13
mysqlpid=$(ps -C mysqld --no-header | wc -l)
if [ $mysqlpid -eq 0 ];then
/etc/init.d/heartbeat stop
echo "heartbeat stopped,please check your mysql !" | tee -a
/var/log/messages
fi
fi
[root@server1 ha.d]# bash chk_mysql.sh &
[root@server1 ha.d]# echo “bash chk_mysql.sh &” >> /etc/rc.local
mysql+heartbeat+drbd安装的更多相关文章
- 4 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之Lvs为Mysql-slave做负载均衡
preface Mysql+drbd+heart能够实现Mysql的高可用了,master出现故障的时候能够快速切换.在现在的业务情况下,读操作多,写操作少的情况下,一台DB server明显扛不住, ...
- 3 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之heartbeat的搭建
preface 在上节的说了mysql的搭建,这节我们在上节的基础上,继续搭建heartbeat. 安装和配置heartbeat 采用yum安装,dbmaster81和dbbackup136上都安装, ...
- 1 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建
preface 近来公司利润上升,购买了10几台服务器,趁此机会,把mysql的主从同步的架构进一步扩展,为了适应日益增长的流量.针对mysql架构的扩展,先是咨询前辈,后和同事探讨,准备采用Mysq ...
- 5 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之生产环境下drbd裂脑处理
preface 公司的业务变更,导致服务器要搬迁,所以需要关闭服务器,然后到新地在开启服务器. 关机前确定drbd+heartbeat+mysql是正常使用的,没有异常,Heartbeat和drbd都 ...
- 2 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之MySql的搭建
preface 上一节我们讲了DRBD的原理,以及如何部署DRBD,那么现在在上一节的基础上部署Mysql 安装并启动Mysql 为了方便,我一般采用yum安装Mysql.命令如下: 在172.16. ...
- mysql+heartbeat+DRBD+LVS集群
- ysql+heartbeat+DRBD+LVS实现mysql高可用
在企业应用中,mysql+heartbeat+DRBD+LVS是一套成熟的集群解决方案,通过heart+DRBD实现mysql的主 节点写操作的高可用性,而通过mysql+LVS实现数据库的主从复制和 ...
- CentOS7数据库架构之NFS+heartbeat+DRBD(亲测,详解)
目录 参考文档 理论概述 DRBD 架构 NFS 架构部署 部署DRBD 部署heartbeat 部署NFS及配合heartbeat nfs切记要挂载到别的机器上不要为了省事,省机器 参考文档 htt ...
- Heartbeat+DRBD+MySQL高可用方案
1.方案简介 本方案采用Heartbeat双机热备软件来保证数据库的高稳定性和连续性,数据的一致性由DRBD这个工具来保证.默认情况下只有一台mysql在工作,当主mysql服务器出现问题后,系统将自 ...
随机推荐
- 【编程思想】【设计模式】【结构模式Structural】适配器模式adapter
Python版 https://github.com/faif/python-patterns/blob/master/structural/adapter.py #!/usr/bin/env pyt ...
- Oracle常用函数(SQL语句)
使用sql函数,您可以在一个select语句的查询当中,直接计算数据库资料的平均值.总数.最小值.最大值.总和.标准差.变异数等统计.使用recordset对象时,也可使用这些sql函数. sql函数 ...
- ActiveMQ(三)——理解和掌握JMS(1)
一.JMS基本概念 JMS是什么JMS Java Message Service,Java消息服务,是JavaEE中的一个技术. JMS规范JMS定义了Java中访问消息中间件的接囗,并没有给予实现, ...
- 【C/C++】习题3-5 谜题/算法竞赛入门经典/数组和字符串
[题目] 有一个5*5的网络,恰好有一个格子是空的(空格),其他格子各有一个字母. 指令:A, B, L, R 把空格上.下.左.右的相邻字母移到空格中. [输入] 初始网格和指令序列(以数字0结束) ...
- IT过来人的10点经验谈
1 入行要趁早,正常是22岁本科或25岁硕士毕业入行.如果是零基础经培训班加持的,尽量在28岁前入行,30岁以后再想要入行IT的,千万慎重. 2 IT行业确实能挣大钱,而且能为学历一般学校一般家庭背景 ...
- df和du显示不同
目录 一.简介 二.原因分析 三.解决方法 一.简介 Linux服务器,使用df -h查看文件系统使用率,可以看到/dev/xvdb1磁盘占用了约27G,挂载目录为/opt. 但进入到opt目录中执行 ...
- 一道栈溢出babystack
我太天真了,师傅说让我做做这个平台的题,我就注册了个号,信心满满的打开了change,找到了pwn,一看第一道题是babystack,我想着,嗯,十分钟搞定他!直到我下载了题目,题目给了libc,然后 ...
- Java的对象与类,继承
Java的对象与类,继承 题目1.Java类的建立与使用 设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名.当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的 ...
- AT1445 乱数生成 题解
Description 有一个机器会等概率从 \(1\) 到 \(n\) 的正整数中选出一个整数.显然地,这个机器运行 \(3\) 次后会得到 \(3\) 个整数.求这 \(3\) 个整数的中位数是 ...
- CF742B Arpa's obvious problem and Mehrdad's terrible solution 题解
Content 有一个长度为 \(n\) 的数组,请求出使得 \(a_i \oplus a_j=x\) 且 \(i\neq j\) 的数对 \((i,j)\) 的个数.其中 \(\oplus\) 表示 ...