采用MySQL读写分离的方案;而读写之间的数据同步采用MySQL的单项或者双向复制技术实现。 MySQL写操作采用基于heartbeat+DRBD+MySQL搭建高可用集群;读操作普遍采用基于LVS+keepalived搭建高可用扩展集群方案
本案例中暂时没部署MySQL,实现思路:dbmaster和dbbackup两台机器,分别安装nfs,heartbeat,dbmaster,DRBD。
nfs可以另找一台服务器搭建专门用为共享存储。
nfs的控制权交给了heartbeat。
架构拓扑
环境 全部都是CentOS 7.5 系统
主机名|IP|担任角色
--|--|--
dbmaster|192.168.111.3|drbd主,nfs server,heartbeat主
dbbackup|192.168.111.4|drbd被,heartbeat被
VIP|192.168.111.100
nfs客户端|192.168.111.5|挂载VIP共享的目录测试
所有主机配置hosts并且改为对应的主机名
所有主机保持网络状况的良好通信
所有主机安装最新的epel源
DRBD这两台各自分别添加了1GB硬盘供DRBD使用
同步时间
[root@localhost ~]# vim /etc/hosts 192.168.111.7 lvsmaster 192.168.111.8 lvsbackup 192.168.111.3 dbmaster 192.168.111.4 dbbackup 192.168.111.5 dbslave1 192.168.111.6 dbslave2 [root@dbmaster yum.repos.d]# uname -r 3.10.0-862.el7.x86_64 #这是旧的 [root@dbbackup ~]# yum install kernel* -y [root@dbbackup ~]# reboot [root@localhost ~]# uname -r 3.10.0-957.12.1.el7.x86_64 #这是新的 drbd 397041 0 libcrc32c 12644 4 xfs,drbd,nf_nat,nf_conntrack [root@dbbackup ~]# yum install https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm -y [root@dbbackup ~]# yum -y install drbd84-utils kmod-drbd84 #安装DRBD [root@localhost ~]# modprobe drbd #不出意外这样就OK了 [root@localhost ~]# lsmod |grep -i drbd分区
[root@localhost ~]# fdisk /dev/sdb 欢迎使用 fdisk (util-linux 2.23.2)。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 Device does not contain a recognized partition table 使用磁盘标识符 0x7ce5781e 创建新的 DOS 磁盘标签。 命令(输入 m 获取帮助):n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p 分区号 (1-4,默认 1): 起始 扇区 (2048-2097151,默认为 2048): 将使用默认值 2048 Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151): 将使用默认值 2097151 分区 1 已设置为 Linux 类型,大小设为 1023 MiB 命令(输入 m 获取帮助):w The partition table has been altered! Calling ioctl() to re-read partition table. 正在同步磁盘。 #以上关于DRBD和分区的操作在111.3和111.4机器上重复操作,master和backup分区大小一致。修改配置文件
[root@dbmaster ~]# vim /etc/drbd.conf #include "drbd.d/global_common.conf"; #注释掉这行,避免和我们自己写的配置产生冲突。 include "drbd.d/*.res"; include "drbd.d/*.cfg"; [root@localhost ~]# vim /etc/drbd.d/drbd_basic.cfg global { usage-count yes; #是否参与DRBD使用者统计,默认为yes,yes or no都无所谓 } common { syncer { rate 30M; } } #设置主备节点同步的网络速率最大值,默认单位是字节,我们可以设定为兆 resource r0 { #r0为资源名,我们在初始化磁盘的时候就可以使用资源名来初始化。 protocol C; #使用 C 协议。 handlers { pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f "; pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt "; local-io-error "echo o > /proc/sysrq-trigger ; halt -f"; fence-peer "/usr/lib4/heartbeat/drbd-peer-outdater -t 5"; pri-lost "echo pri-lst. Have a look at the log file.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 { cram-hmac-alg "sha1"; shared-secret "MySQL-HA"; #drbd同步时使用的验证方式和密码信息 } disk { on-io-error detach; fencing resource-only; # 使用DOPD(drbd outdate-peer deamon)功能保证数据不同步的时候不进行切换。 } startup { wfc-timeout 120; degr-wfc-timeout 120; } device /dev/drbd0; #这里/dev/drbd0是用户挂载时的设备名字,由DRBD进程创建 on dbmaster { #每个主机名的说明以on开头,后面是hostname(必须在/etc/hosts可解析) disk /dev/sdb1; #使用这个磁盘作为drbd的磁盘/dev/drbd0。 address 192.168.111.3:7788; #设置DRBD的监听端口,用于与另一台主机通信 meta-disk internal; #drbd的元数据存放方式 } on dbbackup { disk /dev/sdb1; address 192.168.111.4:7788; meta-disk internal; } }