1,安装drbd
安装依赖包:yum -y install gcc kernel-devel kernel-headers flex
个人建议直接安装开发包:yum -y groupinstall development
最新版本是9.0,本人推荐用8.4.4版本下载地址:
http://oss.linbit.com/drbd/
http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
解压缩:tar zxvf drbd-8.4.4.tar.gz
cd drbd-8.4.4
./configure --prefix=/usr/local/drbd --with-km
make KDIR=/usr/src/kernels/2.6.32-431.3.1.el6.x86_/
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
chkconfig --add drbd
chkconfig drbd on
【KDIR=中指定的系统内核源码路径,根据实际情况设置】
安装drbd模块
cd drbd
make clean
make KDIR=/usr/src/kernels/2.6.32-431.3.1.el6.x86_/
cp drbd.ko /lib/modules/`uname -r`/kernel/lib/
depmod
配置global_common.conf
vi /usr/local/drbd/etc/drbd.d/global_common.conf
========================================================================
global {
usage-count no;
# minor-count dialog-refresh disable-ip-verification
}
common {
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 {
# 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 {
# 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
protocol C;
}
}
===========================
=============================================
配置r0
vi /usr/local/drbd/etc/drbd.d/r0.res
========================================================================
resource r0 {
protocol C;
handlers {
# pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
# pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
# local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
# fence-peer "/usr/lib/heartbeat/drbd-peer-outdater -t 5";
# pri-lost "echo pri-lost. Have a look at the log files. | mail -s 'DRBD Alert' root";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
}
net {
# timeout 60;
# connect-int 10;
# ping-int 10;
# max-buffers 2048;
# max-epoch-size 2048;
cram-hmac-alg "sha1";
shared-secret "MySQL-HA";# DRBD同步时使用的验证方式和密码信息。
}
disk {
on-io-error detach;
fencing resource-only;#使用dpod功能(drbd outdate-peer daemon)保证在数据不同步时不进行切换。
}
startup {
wfc-timeout 120;
degr-wfc-timeout 120;
}
device /dev/drbd0;
on node1 {
#每个主机的说明以on开头,后面是hostname(uname -n),在后面的{}中为这个主机的配置。
disk /dev/sdb1;#/dev/drbd0使用的磁盘分区是/dev/sdf1。
address 192.168.1.246:7788;#设置DRBD的监听端口,用于与另一台主机通信。
meta-disk internal;
}
on node2 {
disk /dev/sdb1;
#/dev/drbd0使用的磁盘分区是/dev/sdb1。
address 192.168.1.236:7788;#设置DRBD的监听端口,用于与另一台主机通信。
meta-disk internal; #drbd的元数据存放方式。
}
}
========================================================================
建立resource
modprobe drbd //载入 drbd 模块
lsmod | grep drbd //确认 drbd 模块是否载入
dd if=/dev/zero of=/dev/sdb1 bs=1M count=100 //把一些资料塞到 sda3 內 (否则 create-md 时会报错)
umount /dev/sdb1 //需要同步数据的设备
drbdadm create-md r0 //建立 drbd resource
drbdadm up r0
========================================================================
========================================================================
注:以上每一步骤,都需要在主备服务器上进行配置设置。
注:以下每一步骤,都需要在主服务器上进行配置设置。
========================================================================
========================================================================
设置Primary Node 在主服务器上执行我这里是node1
执行下面命令
drbdsetup /dev/drbd0 primary –o
或者执行下面命令也是可以的
drbdadm -- --overwrite-data-of-peer primary all
常用命
令:
设置为主服务器:drbdadm primary all
设置为备服务器:drbdadm secondary all
开始同步磁盘数据输入下面命令查看同步状态等待100%10G需要5分钟左右
我的是虚拟机时间根据磁盘大小和电脑性能决定。
查看同步状态:service drbd status
创建DRBD文件系统:mkfs.ext4 /dev/drbd0
========================================================================
========================================================================
注:以上每一步骤,都需要在主服务器上进行配置设置。
========================================================================
========================================================================
安装heartbeat
为了解决依赖关系和编译时候访问国外服务器问题建议采用yum安装
下载源:wget ftp://mirror.switch.ch/pool/1/mirror/scientificlinux/6rolling/x86_/os/Packages/epel-release-6-5.noarch.rpm
安装源:rpm -ivUh epel-release-6-5.noarch.rpm
安装Heartbet:yum --enablerepo=epel install heartbeat -y
安装mysql:
yum -y install mysql-server mysql-devel mysql mysql-bench mysql-test
启用mysql:/etc/init.d/mysqld start
关闭mysql:/etc/init.d/mysqld stop
关闭mysql后把数据文件放到drbd 分区上:cp -R /var/lib/mysql /data/mysql
修改/etc/my.cnf文件,在[mysqld]组增加如下配置:
datadir = /data/mysql
在heartbeat资源脚本目录建立mysql启动脚本的软连接:
ln -s /etc/init.d/mysqld /usr/local/ha/etc/ha.d/resource.d/mysqld
最后,重启MySQL服务即可
/etc/my.cnf
========================================================================
server-id = 1 #服务器ID。服务器之间不能有重复ID,一般master是1
log-bin=mysql-bin #打开mysql的binlog功能,后面的名字可以自己指定,如果不改名字的话,默认是以主机名字命名
binlog-do-db=socom #socom是需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可
binlog-ignore-db=mysql#不需要备份的数据库名称,如果需要忽略备份多个数据库,重复设置这个选项即可
========================================================================
设置Slave主机
编辑/etc/my.cnf文件,在[mysqld]中添加如下内容即可:
server-id = 2
log-bin=mysql-bin
binlog-do-db=socom
binlog-ignore-db=mysql
其他的Slave以此类推,保证server-id全局唯一即可。
在slave上执行如下命令:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.135',
-> MASTER_USER='repl_user',
-> MASTER_PASSWORD='repl_password',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=98;
执行完之后执行:
mysql> slave start;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\\G
从输出可以看到:Slave_IO_Running和Slave_SQL_Running如果都为Yes时,表示配置成功。
【MASTER_LOG_FILE MASTER_LOG_POS两个数据从主服务器中来 登录mysql后 show master sta
tus】
配置heartbeat:
认证文件authkeys 权限设置为:chmod 600 authkeys
内容如下:
========================================================================
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
========================================================================
ha.cf主要配置文件
========================================================================
#debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 120
#mcast eth1 225.0.0.1 694 1 0
ucast eth1 192.168.1.236
auto_failback on
node node1
node node2
#ping 192.168.1.1
#ping_group group1 192.168.1.10 192.168.1.10
#apiauth pingd gid=haclient uid=hacluster
#respawn hacluster /usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s
#crm yes
#crm respawn
========================================================================
haresources文件内容如下
========================================================================
node1 drbddisk::r0 Filesystem::/dev/drbd0::/data mysqld IPaddr::192.168.1.135/24/eth1
========================================================================
【drbddisk和drbdupper从/usr/src/kernels/drbd-8.4.4/scripts/drbddisk这里复制】
【authkeys ha.cf haresources从/usr/share/doc/heartbeat-3.0.4这里复制】下载本文