本帖最后由 starry 于 2016-3-5 21:59 编辑
global {
usage-count no; #是否参加DRBD使用统计,默认为yes
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; #使用DRBD的同步协议
handlers {
# These are EXAMPLE handlers only.
# They may have severe implications,
# like hard resetting the node under certain circumstances.
# Be careful when chosing your poison.
# pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
# pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
# local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
}
options {
# cpu-mask on-no-data-accessible
}
disk {
on-io-error detach; 配置io出错后的处理策略
# size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes
# disk-drain md-flushes resync-rate resync-after al-extents
# c-plan-ahead c-delay-target c-fill-target c-max-rate
# c-min-rate disk-timeout
}
net {
cram-hmac-alg "sha1"; #设置加密算法
shared-secret "123456"; #设置验证口令
# protocol timeout max-epoch-size max-buffers unplug-watermark
# connect-int ping-int sndbuf-size rcvbuf-size ko-count
# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
# after-sb-1pri after-sb-2pri always-asbp rr-conflict
# ping-timeout data-integrity-alg tcp-cork on-congestion
# congestion-fill congestion-extents csums-alg verify-alg
# use-rle
}
syncer {
rate 40M; #设置主备节点同步时的网络速率
}
}
注释: on-io-error 策略可能为以下选项之一
resource mysql {
on CentOS-1 { #DRBD节点主机名
device /dev/drbd1; #DRBD设备名称
disk /dev/sdb1; 映射的分区
address 192.168.1.111:7789; #设置DRBD监听地址与端口
meta-disk internal;
}
on CentOS-2 {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.1.112:7789;
meta-disk internal;
}
}
拷贝配置文件
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
Starting DRBD resources: [
create res: mysql
prepare disk: mysql
adjust disk: mysql
adjust net: mysql
]
tcp 0 0 192.168.1.112:53739 192.168.1.111:7789 ESTABLISHED
tcp 0 0 192.168.1.112:7789 192.168.1.111:57520 ESTABLISHED
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@CentOS-1, 2016-03-05 17:01:40
1: 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:f oos:2096348
cs:资源连接状态 ro:资源角色(自己/对方) ds:银盘状态
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@CentOS-1, 2016-03-05 17:01:40
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:435428 nr:0 dw:0 dr:436092 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1660920
[===>................] sync'ed: 20.9% (1660920/2096348)K
finish: 0:01:08 speed: 24,188 (24,188) K/sec
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@CentOS-1, 2016-03-05 17:01:40
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:2096348 nr:0 dw:0 dr:2097012 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
创建文件系统
测试
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth1 192.168.1.112 #这里我偷懒,没有添加新的网卡做心跳线
auto_failback on
node CentOS-1
node CentOS-2
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail
root@192.168.1.112's password:
ha.cf 100% 263 0.3KB/s 00:00
authkeys 100% 644 0.6KB/s 00:00
haresources 100% 6011 5.9KB/s 00:00
DRBD安装
概念:
DRBD安装配置、工作原理及故障恢复 http://www.linuxidc.com/Linux/2013-09/90321.htm
DRBD分布式复制块设备(Distributed Replicated Block Device) ,类型网络RAID-1,是由内核模块和相关脚本构成,它允许用户在远程机器上建立一个本地磁盘的实时镜像,其原理是以网络的方式将本地设备上的内容同步到另一个节点设备上。
DRBD 9 beta 发布,支持多节点高可用性。
DRBD的三个同步协议:
- A:异步复制协议,一旦本地磁盘写入已经完成,数据包已在发送队列中,则写被认为是完成的。
- B:内存同步(半同步)复制协议,一旦本地磁盘写入已完成,且复制数据包达到了对等节点,则认为写在主节点上被认为是完成的。
- C:同步复制协议,只有在本地和远程节点的磁盘已经确认了写操作完成,则写才被认为完成。
DRBD的三个进程:
- drbd0--worker: 主进程
- drbd0--asender: primary上drbd0的数据发送进程
- drbd0--receiver: secondary上drbd0的数据接受进程
实验环境:
CentOS-1:192.168.1.111(eth1)
CentOS-2:192.168.1.112
(eth1)
安装:
添加一块新硬盘分区,2个节点的分区大小应该一致
# fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261):
Using default value 261
Command (m for help): w
The partition table has been altered!
# partx /dev/sda
让内核重新读取分区
查看内核有没有识别分区,如果没有需要重新启动
# cat /proc/partitions
major minor #blocks name
8 0 20971520 sda
8 1 102400 sda1
8 2 2048000 sda2
8 3 18820096 sda3
8 16 2097152 sdb
8 17 2096451 sdb1
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261):
Using default value 261
Command (m for help): w
The partition table has been altered!
# partx /dev/sda
让内核重新读取分区
查看内核有没有识别分区,如果没有需要重新启动
# cat /proc/partitions
major minor #blocks name
8 0 20971520 sda
8 1 102400 sda1
8 2 2048000 sda2
8 3 18820096 sda3
8 16 2097152 sdb
8 17 2096451 sdb1
更改hosts文件
# cat>>/etc/hosts< 192.168.1.111 CentOS-1
> 192.168.1.112 CentOS-2
> EOF
首先需要升级内核版本
# yum install -y kernel kernel-devel kernel-headers gcc flex libxslt
# reboot 重启
去官网下载源码包http://oss.linbit.com/drbd/
# cd /usr/local/src/
# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.3.tar.gz
# tar -zxvf drbd-8.4.6.tar.gz
# cd drbd-8.4.3
# ./configure --prefix=/usr/local/drbd --with-km # --prefix是制定安装路径,--with-km是启用内核模块;
# make KDIR=/usr/src/kernels/2.6.32-573.el6.i686/ # KDIR指的是自己的内核路径;
# make install
# mkdir -p /usr/local/drbd/var/run/drbd # 这里必须创建则这个目录, 不然启动会报错;
# cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/ #将drbd拷贝到/etc/init.d/目录下;
# chkconfig --add drbd
# chkconfig drbd on
# cd drbd
# make clean
# make KDIR=/usr/src/kernels/2.6.32-573.el6.i686/ #安装drbd模块;
# cp drbd.ko /lib/modules/2.6.32-573.el6.i686/kernel/lib/
# modprobe drbd #加载内核模块
# lsmod | grep drbd
drbd 325389 0
libcrc32c 841 1 drbd
配置
# chkconfig drbd on
# cd drbd
# make clean
# make KDIR=/usr/src/kernels/2.6.32-573.el6.i686/ #安装drbd模块;
# cp drbd.ko /lib/modules/2.6.32-573.el6.i686/kernel/lib/
# modprobe drbd #加载内核模块
# lsmod | grep drbd
drbd 325389 0
libcrc32c 841 1 drbd
配置
[
root@CentOS-1
drbd.d]
# cd /usr/local/drbd/etc/drbd.d/[
root@CentOS-1
drbd.d]
# vim global_common.conf global {
usage-count no; #是否参加DRBD使用统计,默认为yes
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C; #使用DRBD的同步协议
handlers {
# These are EXAMPLE handlers only.
# They may have severe implications,
# like hard resetting the node under certain circumstances.
# Be careful when chosing your poison.
# pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
# pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
# local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
}
options {
# cpu-mask on-no-data-accessible
}
disk {
on-io-error detach; 配置io出错后的处理策略
# size max-bio-bvecs on-io-error fencing disk-barrier disk-flushes
# disk-drain md-flushes resync-rate resync-after al-extents
# c-plan-ahead c-delay-target c-fill-target c-max-rate
# c-min-rate disk-timeout
}
net {
cram-hmac-alg "sha1"; #设置加密算法
shared-secret "123456"; #设置验证口令
# protocol timeout max-epoch-size max-buffers unplug-watermark
# connect-int ping-int sndbuf-size rcvbuf-size ko-count
# allow-two-primaries cram-hmac-alg shared-secret after-sb-0pri
# after-sb-1pri after-sb-2pri always-asbp rr-conflict
# ping-timeout data-integrity-alg tcp-cork on-congestion
# congestion-fill congestion-extents csums-alg verify-alg
# use-rle
}
syncer {
rate 40M; #设置主备节点同步时的网络速率
}
}
注释: on-io-error 策略可能为以下选项之一
detach 分离:这是默认和推荐的选项,如果在节点上发生底层的硬盘I/O错误,它会将设备运行在Diskless无盘模式下
pass_on:DRBD会将I/O错误报告到上层,在主节点上,它会将其报告给挂载的文件系统,但是在此节点上就往往忽略(因此此节点上没有可以报告的上层)
local-in-error:调用本地磁盘I/O处理程序定义的命令;这需要有相应的local-io-error调用的资源处理程序处理错误的命令;这就给管理员有足够自由的权力命令命令或是脚本调用local-io-error处理I/O错误
添加资源文件
[
root@CentOS-1
drbd.d]
# vim mysql.res resource mysql {
on CentOS-1 { #DRBD节点主机名
device /dev/drbd1; #DRBD设备名称
disk /dev/sdb1; 映射的分区
address 192.168.1.111:7789; #设置DRBD监听地址与端口
meta-disk internal;
}
on CentOS-2 {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.1.112:7789;
meta-disk internal;
}
}
拷贝配置文件
[root@CentOS-1 drbd.d]# scp mysql.res global_common.conf 192.168.1.112:/usr/local/drbd/etc/drbd.d/
root@192.168.1.112's password:
mysql.res 100% 330 0.3KB/s 00:00
global_common.conf 100% 1953 1.9KB/s 00:00
root@192.168.1.112's password:
mysql.res 100% 330 0.3KB/s 00:00
global_common.conf 100% 1953 1.9KB/s 00:00
初始化资源并启动服务
[
root@CentOS-1
drbd.d]
# drbdadm create-md mysqlWriting meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
[
root@CentOS-1
drbd.d]
# /etc/init.d/drbd startStarting DRBD resources: [
create res: mysql
prepare disk: mysql
adjust disk: mysql
adjust net: mysql
]
[
root@CentOS-1
drbd.d]
# netstat -an|grep 7789 # 查看监听的地址和端口tcp 0 0 192.168.1.112:53739 192.168.1.111:7789 ESTABLISHED
tcp 0 0 192.168.1.112:7789 192.168.1.111:57520 ESTABLISHED
[
root@CentOS-1
drbd.d]
# cat /proc/drbd #查看服务状态version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@CentOS-1, 2016-03-05 17:01:40
1: 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:f oos:2096348
cs:资源连接状态 ro:资源角色(自己/对方) ds:银盘状态
(自己/对方)
手动启用和禁用资源
drbdadm up
drbdadm down
注释:
resource:为资源名称;当然也可以使用all表示[停用|启用]所有资源
drbdadm down
注释:
resource:为资源名称;当然也可以使用all表示[停用|启用]所有资源
升级和降级资源角色
drbdadm primary
drbdadm secondary
drbdadm secondary
[
root@CentOS-1
drbd.d]
# drbdadm -- --overwrite-data-of-peer primary mysql #初始化设备同步
[
root@CentOS-1
drbd.d]
# cat /proc/drbd #查看同步进度version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@CentOS-1, 2016-03-05 17:01:40
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:435428 nr:0 dw:0 dr:436092 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:1660920
[===>................] sync'ed: 20.9% (1660920/2096348)K
finish: 0:01:08 speed: 24,188 (24,188) K/sec
[
root@CentOS-1
drbd.d]
# cat /proc/drbdversion: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@CentOS-1, 2016-03-05 17:01:40
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:2096348 nr:0 dw:0 dr:2097012 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
创建文件系统
文件系统只能挂载在主(Primary)节点上,因此在设置好主节点后才可以对DRBD设备进行格式化操作
[
root@CentOS-1
drbd.d]
# mkfs.ext4 /dev/drbd1[
root@CentOS-1
drbd.d]
# mkdir -p /data/mysql[
root@CentOS-1
drbd.d]
# mount /dev/drbd1 /data/mysql/测试
[
root@CentOS-1
drbd.d]
# dd if=/dev/zero of=/data/mysql/tt bs=1024K count=100切换主备节点
[
root@CentOS-1
drbd.d]
# umount /dev/drbd1[
root@CentOS-1
drbd.d]
# drbdadm secondary mysql[root@CentOS-2 ~]# drbdadm primary mysql
[root@CentOS-2 ~]# mkdir -p /data/mysql
[root@CentOS-2 ~]# mount /dev/drbd1 /data/mysql/
[root@CentOS-2 ~]# ll /data/mysql/
总用量 102416
drwx------ 2 root root 16384 3月 5 18:20 lost+found
-rw-r--r-- 1 root root 104857600 3月 5 18:28 tt
=================================================
DRBD脑裂故障解决方式:
当DRBD出现脑裂后,会导致drbd两边的磁盘不一致,处理方法如下:
如果在确定要将CentOS-2作为从节点,切换成secondary,并放弃该资源的数据时,执行一下操作:
卸载从节点上的设备,资源角色降级,重新连接资源,主节点上重新建立连接资源
[root@CentOS-2 ~]
# umount /mnt/ [root@CentOS-2 ~]
# drbdadm secondary mysql [root@CentOS-2 ~]
# drbdadm connect --discard-my-data mysql[root@CentOS-1 ~]
# drbdadm connect drbd =================================================
MySQL安装
首先使用命令uname –i查看系统位数,然后选择相应mysql免编译安装包进行下载。
# cd /usr/local/src
# wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.73-linux-i686-glibc23.tar.gz
# tar -xzvf mysql-5.1.73-linux-i686-glibc23.tar.gz
# mv mysql-5.1.73-linux-i686-glibc23 /usr/local/mysql
# 移动mysql包到/usr/local/目录下
# cd /usr/local/mysql
# useradd -M -s /sbin/nologin mysql
# 创建运行mysql服务的账户
# mkdir -p /data/mysq
# 创建mysql数据文件存放目录
# chown -R mysql:mysql /data/mysql
# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql #如果你是安装这片文章之前的操作做的,那么这一步这需要在CentOS-2上做
# 初始化mysql服务,--user指定运行mysql服务的账户,--datadir指定数据文件存放目录。这一步骤很关键,如果你看到两个“OK”说明执行正确,否则,请仔细查看错误信息。
# cd /usr/local/src
# wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.73-linux-i686-glibc23.tar.gz
# tar -xzvf mysql-5.1.73-linux-i686-glibc23.tar.gz
# mv mysql-5.1.73-linux-i686-glibc23 /usr/local/mysql
# 移动mysql包到/usr/local/目录下
# cd /usr/local/mysql
# useradd -M -s /sbin/nologin mysql
# 创建运行mysql服务的账户
# mkdir -p /data/mysq
# 创建mysql数据文件存放目录
# chown -R mysql:mysql /data/mysql
# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql #如果你是安装这片文章之前的操作做的,那么这一步这需要在CentOS-2上做
# 初始化mysql服务,--user指定运行mysql服务的账户,--datadir指定数据文件存放目录。这一步骤很关键,如果你看到两个“OK”说明执行正确,否则,请仔细查看错误信息。
下面是两个常见的错误,如果你正好遇到了,那就照着下面的解决办法解决一下。
(1)遇到错误: ./bin/mysqld: error while loading shared libraries: libstdc++.so.5: cannot open shared object file:
解决办法:
# yum install -y compat-libstdc++-33
(2)遇到错误: ./scripts/mysql_install_db: ./bin/my_print_defaults: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
这是因为,你的系统版本和 mysql 版本不一致。比如,你的系统是 32 位,结果你下载了一个 64 位的包。所以,解决办法是,下载合适的包。
(1)遇到错误: ./bin/mysqld: error while loading shared libraries: libstdc++.so.5: cannot open shared object file:
解决办法:
# yum install -y compat-libstdc++-33
(2)遇到错误: ./scripts/mysql_install_db: ./bin/my_print_defaults: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
这是因为,你的系统版本和 mysql 版本不一致。比如,你的系统是 32 位,结果你下载了一个 64 位的包。所以,解决办法是,下载合适的包。
# cp support-files/my-large.cnf /etc/my.cnf
cp:是否覆盖"/etc/my.cnf"? y
# 使用安装包中提供的配置模版文件到替代系统自带/etc/my.cnf文件(my.cnf只能存放在/etc/或者是dasedir目录下)
# cp support-files/mysql.server /etc/init.d/mysqld
# chmod 755 /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld off #mysql服务由heartbeat启动所以这里将它关闭
# 使用安装包中提供的启动脚本文件,将mysql加入到系统服务列表里。
# service mysqld start
Starting MySQL.Manager of pid-file quit without updating fi[失败]
# 启动失败,提示pid文件没有更新。解决方法:编辑启动配置文件/etc/init.d/mysqld,设置basedir=/usr/local/mysql、datadir=/data/mysql
# service mysqld start
Starting MySQL. [确定]
# ps aux|grep mysql
# netstat -lnp|grep mysql
# 查看服务是否启动成功。
放了能够方便使用mysql的命令,我们应该将路径/usr/local/mysql/bin加入PATH变量中
# vi /etc/profile.d/path.sh
PATH=$PATH:/usr/local/mysql/bin/
# source /etc/profile.d/path.sh
heartbeat安装配置cp:是否覆盖"/etc/my.cnf"? y
# 使用安装包中提供的配置模版文件到替代系统自带/etc/my.cnf文件(my.cnf只能存放在/etc/或者是dasedir目录下)
# cp support-files/mysql.server /etc/init.d/mysqld
# chmod 755 /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld off #mysql服务由heartbeat启动所以这里将它关闭
# 使用安装包中提供的启动脚本文件,将mysql加入到系统服务列表里。
# service mysqld start
Starting MySQL.Manager of pid-file quit without updating fi[失败]
# 启动失败,提示pid文件没有更新。解决方法:编辑启动配置文件/etc/init.d/mysqld,设置basedir=/usr/local/mysql、datadir=/data/mysql
# service mysqld start
Starting MySQL. [确定]
# ps aux|grep mysql
# netstat -lnp|grep mysql
# 查看服务是否启动成功。
放了能够方便使用mysql的命令,我们应该将路径/usr/local/mysql/bin加入PATH变量中
# vi /etc/profile.d/path.sh
PATH=$PATH:/usr/local/mysql/bin/
# source /etc/profile.d/path.sh
现将mysql停止
# service mysqld stop
# service mysqld stop
# yum -y install epel-release
# yum install -y heartbeat* libnet
# chkconfig heartbeat off
# echo "/etc/init.d/heartbeat start">>/etc/rc.d/rc.local
主节点上(CentOS-1)的配置
[root@CentOS-1 ha.d]# cd /usr/share/doc/heartbeat-3.0.4/
[root@CentOS-1 ha.d]# cp authkeys ha.cf haresources /etc/ha.d/
[root@CentOS-1 ha.d]# cd /etc/ha.d
[
root@CentOS-1
ha.d]
# vim authkeysauth 3
3 md5 Hello!
3 md5 Hello!
[
root@CentOS-1
ha.d]
# chmod 600 authkeys [
root@CentOS-1
ha.d]
# vim haresources添加
CentOS-1 IPaddr::192.168.1.120/24/eth1:1 mysql_umount mysqld
[
root@CentOS-1
ha.d]
# vim ha.cf debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth1 192.168.1.112 #这里我偷懒,没有添加新的网卡做心跳线
auto_failback on
node CentOS-1
node CentOS-2
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail
[
root@CentOS-1
ha.d]
# scp ha.cf authkeys haresources 192.168.1.112:/etc/ha.d/root@192.168.1.112's password:
ha.cf 100% 263 0.3KB/s 00:00
authkeys 100% 644 0.6KB/s 00:00
haresources 100% 6011 5.9KB/s 00:00
[root@CentOS-2 ha.d]# cat ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth1 192.168.1.111
auto_failback on
node CentOS-1
node CentOS-2
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth1 192.168.1.111
auto_failback on
node CentOS-1
node CentOS-2
ping 192.168.1.1
respawn hacluster /usr/lib/heartbeat/ipfail
[root@CentOS-1 ha.d]# vim resource.d/mysql_umount
#!/bin/bash
unset LC_ALL; export LC_ALL
unset LANGUAGE; export LANGUAGE
prefix=/usr
exec_prefix=/usr
. /etc/ha.d/shellfuncs
case "$1" in
'start')
#/sbin/drbdadm -- --do-what-I-say primary all
/sbin/drbdadm primary all
#drbdsetup /dev/drbd1 primary -o
/bin/mount /dev/drbd1 /data/mysql
;;
'pre-start')
;;
'post-start')
;;
'stop')
/bin/umount /data/mysql
/sbin/drbdadm secondary all
;;
'pre-stop')
;;
'post-stop')
;;
*)
echo "Usage: $0 { start | pre-start | post-start | stop | pre-stop | post-stop }"
;;
esac
exit 0
unset LC_ALL; export LC_ALL
unset LANGUAGE; export LANGUAGE
prefix=/usr
exec_prefix=/usr
. /etc/ha.d/shellfuncs
case "$1" in
'start')
#/sbin/drbdadm -- --do-what-I-say primary all
/sbin/drbdadm primary all
#drbdsetup /dev/drbd1 primary -o
/bin/mount /dev/drbd1 /data/mysql
;;
'pre-start')
;;
'post-start')
;;
'stop')
/bin/umount /data/mysql
/sbin/drbdadm secondary all
;;
'pre-stop')
;;
'post-stop')
;;
*)
echo "Usage: $0 { start | pre-start | post-start | stop | pre-stop | post-stop }"
;;
esac
exit 0
[root@CentOS-1 ha.d]
# chmod +x resource.d/mysql_umount[root@CentOS-1 ha.d]
# scp resource.d/mysql_umount 192.168.1.112:/etc/ha.d/resource.d/测试:
# /etc/init.d/heartbeat start
[root@CentOS-2 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@CentOS-2, 2016-03-05 17:06:34
1: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
ns:400 nr:728 dw:1128 dr:3785 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@CentOS-1 ~]# /etc/init.d/heartbeat stop
[root@CentOS-2 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@CentOS-2, 2016-03-05 17:06:34
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:708 nr:964 dw:1672 dr:7582 al:9 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
[root@CentOS-2 ~]# mysqladmin password "123456"
[root@CentOS-2 ~]# mysql -uroot -p123456 -e "grant all on *.* to 'root'@'192.168.1.%' identified by '123456';"
[root@CentOS-1 ~]# mysql -uroot -h192.168.1.120 -p123456
mysql> quit
Bye
[root@CentOS-1 ~]# /etc/init.d/heartbeat start
[root@CentOS-1 ~]# cat /proc/drbd
Bye
[root@CentOS-1 ~]# /etc/init.d/heartbeat start
[root@CentOS-1 ~]# cat /proc/drbd
version: 8.4.6 (api:1/proto:86-101)
GIT-hash: 833d830e0152d1e457fa7856e71e11248ccf3f70 build by root@CentOS-1, 2016-03-05 17:24:47
1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:1220 nr:984 dw:2204 dr:11367 al:10 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
服务启动的顺序:
DRBD-->heartbeat-->MySql
将DRBD添加到系统启动服务列表中,开机启动,将MySQL添加系统服务列表中但是不开机启动,由heartbeat启动。为了确保heartbeat在DRBD之后启动,所以将heartbeat在chkconfig中设置为off,将启动语句"/etc/init.d/heartbeat start"添加到rc.local文件中即可
编辑回复