标签:切换 ice pwd 超时 opp 存在 文件中 disk prot
环境:
系统 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
[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:
[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@server2 ha.d]# mysqladmin -uroot ping //备节点操作
mysqladmin: connect to server at ‘localhost‘ failed
error: ‘Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2)‘
Check that mysqld is running and that the socket: ‘/var/lib/mysql/mysql.sock‘ exists!
[root@server1 ha.d]# service heartbeat stop //主节点操作
Stopping High-Availability services: Done.
[root@server2 ha.d]# ip a //备节点操作
inet 192.168.200.254/24 brd 192.168.0.255 scope global secondary eth0:0
[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
标签:切换 ice pwd 超时 opp 存在 文件中 disk prot
原文地址:http://www.cnblogs.com/pangbing/p/7782928.html