视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Mysql高可用集群应用drbd heartbeat lvs keepalived mysql
2025-09-24 11:03:10 责编:小OO
文档
操作系统:CentOS release 6.5 kernel 2.6.32-431.el6.x86_

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这里复制】下载本文

显示全文
专题