设为首页 收藏本站
查看: 576|回复: 0

[经验分享] MySQL高可用性之MySQL+DRBD+Heartbeat

[复制链接]

尚未签到

发表于 2018-9-27 09:40:33 | 显示全部楼层 |阅读模式
  一、环境介绍
DSC0000.jpg

  1、DRDB存储软件
  DRBD是一个软件来实现数据实时、同步、异步的数据镜像块存储复制解决方案,主要功能是通过Linux内核实现。
  DRBD类似网络RAID-1功能写入本地的文件会通过网络以相同方式写在另一文件系统。
  对于实现Mysql高可用,DRBD性能比较差,因为每次更新的数据,都会全部同步一次。
  三种模式:
  单主模式:具有故障转移功能,高可用集群方式采用。
  双主模式:需要采用共享cluster文件系统,如GFS和OCFS2。用于需要从2个节点并发访问数据的场合,需要特别配置。
  复制模式:有三种不同复制方式,协议A、协议B、协议C,一般使用协议C,只有在本地和远程节点的磁盘已经确认了写操作完成,写才会被认为完成,没有任何数据丢失。
  2、Heartbeat集群系统软件
  heartbeat(Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未受到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。
  Heartbeat:(心跳检测)本身是整个集群的基础(cluster messaging layer),负责维护集群各节点的信息以及它们之前通信;只提供主从备份功能,并不能对各个节点进行监控,需要安装ldirectord。
  Resource-agent:(资源代理)就是各种的资源的ocf脚本,这些脚本将被LRM调用从而实现各种资源启动、停止、监控等等。
  Cluster-glue:相当于一个中间层,可以将heartbeat和crm(pacemaker)联系起来,主要包含2个部分,LRM和STONITH;
  Ldirectord:主要配合LVS使用,负责real-server健康检查,自动将real-server中宕机的机器移除,不再分配请求。
  3、IP分配
  系统:CentOS6.4_x64
  
主机名角色IP地址db-master主MySQL  eth0:192.168.0.10/24
  eth0:172.0.0.1/24
db-backup备MySQL  eth0:192.168.0.20/24
  eth0:172.0.0.2/24
VIP192.168.0.100/24  4、配置两台节点解析主机名
  vi /etc/hosts
  192.168.0.202   db-master
  192.168.0.203   db-backup
  二、安装MySQL
[root@db-master ~]# yum install -y mysql mysql-server  #两个节点简单安装,仅做测试用  
[root@db-master ~]# vi /etc/my.cnf
  
datadir=/data  #修改后的数据库存放目录
  
[root@db-master ~]# /etc/init.d/mysqld start
  三、安装DRBD(两个节点配置是完全一样的)
  drbd软件下载:http://oss.linbit.com/drbd/
  1、下载并安装对应的drbd内核组件:
  http://mirror.symnds.com/distributions/elrepo/elrepo/el6/x86_64/RPMS/
  
  
  
  
[root@db-master ~]# yum install -y gcc gcc-c++ make perl kernel-devel kernel-headers flex #安装依赖包  
[root@db-master ~]# rpm -vih drbd84-utils-8.4.4-2.el6.elrepo.x86_64.rpm kmod-drbd84-8.4.4-1.el6.elrepo.x86_64.rpm
  
[root@db-master ~]# tar zxvf drbd-8.4.4.tar.gz
  
[root@db-master ~]# cd drbd-8.4.4
  
[root@db-master drbd-8.4.4]# ./configure --prefix=/usr/local/drbd --with-km #--with-km,启用内核模块
  
[root@db-master drbd-8.4.4]# make KDIR=/usr/src/kernels/2.6.32-358.23.2.el6.x86_64/ #指定内核源码路径,根据自己系统来
  
[root@db-master drbd-8.4.4]# make install
  
[root@db-master drbd-8.4.4]# chkconfig --add drbd
  
[root@db-master drbd-8.4.4]# chkconfig drbd on
  
[root@db-master drbd-8.4.4]# cp drbd/drbd.ko /lib/modules/`uname -r`/kernel/lib/   #加载DRBD模块到内核中
  
[root@db-master ~]# modprobe drbd
  
[root@db-master ~]# lsmod | grep drbd  #由此查看drbd模块已经加载
  
drbd                  333755  0
  
libcrc32c               1246  1 drbd
  2、配置DRBD
[root@db-master drbd-8.4.4]# cd /usr/local/drbd/  
[root@db-master drbd]# cat etc/drbd.conf #主配置是加载全局配置文件和资源配置文件
  
include "drbd.d/global_common.conf";
  
include "drbd.d/*.res";
  
  
  
  
  
  
  
[root@db-master drbd]# vi etc/drbd.d/global_common.conf  #全局配置文件  
global {
  
    usage-count yes; #参加DRBD使用者统计
  
    }
  
common {
  
    protocol C;      #使用同步协议C,收到写入确认就认为完成了写入操作
  
disk {
  
    on-io-error detach;  #当磁盘错误时,不连接
  
    }
  
syncer
  
    {
  
    rate 100M;       #设置主设备节点同步时的网络速率最大值,默认最大1G
  
    }
  
}
  
resource mysql {   #mysql定义资源的名字
  
          on  db-master {             #on开头,后面是主机名称
  
          device    /dev/drbd0;       #drbd设备名称
  
          disk      /dev/sdb1;        #drbd0使用的磁盘分区为sdb1
  
          address  192.168.0.10:7789; #设置drbd监听地址与端口
  
          meta-disk  internal;
  
      }
  
          on  db-backup {             #on开头,后面是主机名称
  
          device    /dev/drbd0;       #drbd设备名称
  
          disk      /dev/sdb1;        #drbd0使用的磁盘分区为sdb1
  
          address  192.168.0.20:7789; #设置drbd监听地址与端口
  
          meta-disk  internal;
  
      }
  
}
  3、创建供DRBD记录信息数据块
[root@db-master ~]# drbdadm create-md mysql  
Writing meta data...
  
initializing activity log
  
NOT initializing bitmap
  
New drbd meta data block successfully created.
  
success
[root@db-backup ~]# drbdadm create-md mysql  #启动两台DRBD
  
  
[root@db-master~]# mkdir -p /usr/local/drbd/var/run/drbd  #创建资源目录  
[root@db-master drbd]# service drbd start
  
[root@db-master drbd]# netstat -tuplna | grep 7789 #查看已经启动drbd
  
tcp  0  0 192.168.0.10:7789    192.168.0.203:33216  ESTABLISHED -
  
tcp  0  0 192.168.0.10:7789    192.168.0.203:44977
  4、默认没有分主备节点的,需要设置
[root@db-master drbd]# cat /proc/drbd #查看drbd状态,显示两个节点默认都处于Secondary状态  
version: 8.4.4 (api:1/proto:86-101)
  
GIT-hash: 599f286440bd633d15d5ff985204aff4bccffadd build by phil@Build64R6, 2013-10-14 15:33:06
  
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C
  说明:
  cs:两台数据连接状态
  ro:两台主机的状态
  ds:磁盘状态是“UpToDate/UpToDate”,同步状态。
  #初始化设备并设置主备节点
[root@db-master drbd]# drbdadm primary mysql #指定本机为主节点  
/dev/drbd0: State change failed: (-2) Need access to UpToDate data   #报错,执行下条命令
  
[root@db-master drbd]# drbdadm -- --overwrite-data-of-peer primary all
  
[root@db-backup ~]# drbdadm secondary mysql   #本机设置从节点
  
  
  #再查看状态
[root@masternfs ~]# drbd-overview  
  0:mysql/0  Connected Primary/Secondary UpToDate/UpToDate C r-----
  5、格式化并挂载分区到/data目录
[root@db-master drbd]# mkfs.ext3 /dev/drbd0  
[root@db-master drbd]# mkdir /data
  
[root@db-master drbd]# mount /dev/drbd0 /data/
  四、安装Heartbeat(主备节点配置相同)
  软件下载:http://www.linux-ha.org/wiki/Downloads
  安装依赖包:
yum install-y gcc gcc-c++ autoconf libtool pkgconfig glib2-devel libxslt-devel libxml2-devel bzip2-devel libtool-ltdl-devel libuuid-devel docbook-style-xsl  创建需要的组和用户
groupadd haclient  
useradd-g haclient -s /sbin/nologin-Mhacluster
  
  1.安装资源接管服务(要先安装资源接管服务,否则安装心跳服务会报错)
  
  
  
  
  
  
  
  
tar zxvf Reusable-Cluster-Components-glue--glue-1.0.9.tar.bz2  
cd Reusable-Cluster-Components-glue--glue-1.0.9
  
./autogen.sh
  
./configure
  
make && make install
  2.安装心跳检测服务
  
  
  
  
  
  
tar jxvf Heartbeat-3-0-7e3a82377fa8.tar.bz2  
cd Heartbeat-3-0-7e3a82377fa8
  
./ConfigureMeconfigure
  
make && make install
  3.安装资源代理服务
  
  
tar jxvf ClusterLabs-resource-agents-v3.9.2-0-ge261943.tar.gz  
cd ClusterLabs-resource-agents-b735277
  
./autogen.sh
  
./configure
  
make && make install
  4、配置heartbeat
[root@db-master ~]# vi /etc/ha.d/ha.cf  
logfile /var/log/ha-log
  
logfacility local0 #如果未定义上述日志,默认写入/var/log/message
  
keepalive 2      #心跳间隔
  
deadtime 30      #死亡阀值
  
warntime 10      #警告时间
  
initdead 120     #首次启动heartbeat,等待多久才启动主服务资源
  
udpport 694      #连接端口
  
ucast eth1 172.0.0.2 #对方IP,采用网卡的eth1组织心跳,后跟接口IP
  
auto_failback on #当主节点故障恢复后,自动获取资源并取代从节点
  
node master      #主节点主机名
  
node slave       #备份节点主机名
  
ping 192.168.0.1 #选择ping节点,ping的越好对HA集群越稳定,建议使用网关
[root@db-master ~]# vi /etc/ha.d/authkeys  
auth 2
  
2 sha1 HI!
[root@db-master ~]# vi /etc/ha.d/haresources  
db-master IPaddr::192.168.0.100/24/eth0:0 drbddisk::mysql Filesystem::/dev/drbd0::/data::ext4 mysqld
  说明:
  db-master IPaddr::192.168.0.204/24/eth0:0  #主机名,后跟虚拟IP地址和接口
  drbddisk::data  #启动drbd data资源
  Filesystem::/dev/drbd0::/data::ext4  #挂载/dev/drbd0到/data
  mysqld   #服务启动脚本,相当于/etc/init.d/mysql stop/start
  五、测试主从切换
  主服务器
[root@db-master ~]# umount /data  
[root@db-master ~]# mkdir /data/test #创建一个测试文件
  
[root@db-master ~]# drbdadm secondary r0
  备服务器
[root@db-master ~]# drbdadm primary r0  
[root@db-master ~]# mount /dev/drbd0 /data
  
[root@db-master ~]# ls /data  #查看test目录存在
  六、DRBD使用中问题解决
  1>.服务器重启,必须手动执行modprobe drbd才能加载模块
  答:这个是可以设置的,如加入rc.local里面,但不推荐。
  主服务器故障恢复后,DRBD应该保留人工介入启动,主备切换已经算完成了高可用任务了,所以涉及数据方面还是谨慎为好,修复故障机应该人工来操作的。
  2>.主从切换没问题,master故障后,所有写的数据都在备机上,当master恢复后,此时,数据会同步过去吗?试验说明,数据被master上数据覆盖,备机新增数据丢失。
  情况一:开启了auto_failback on参数。
  主机故障恢复后,先不要启动heartbeat,先加载DRBD到内核并启动DRBD资源,确保当前提供服务的备机和故障主机数据一致,可以cat /proc/drbd查看状态,如果两边不一致,需要把数据推回到故障机,保持两边同步,然后再启动heartbeat完成自动切换。
  情况二:没有开启或关闭了auto_failback参数
  主机故障恢复后,将DRBD加载到内核,启动heartbeat,正常情况DRBD状态应该是同步状态或正在同步状态。如果未同步,可以先启动DRBD资源,确保当前提供服务的备机和故障主机数据一致,然后在当前提供服务的备机执行hb_standby命令完成切换。
  3>.两台数据库都需要关机,启动后造成脑裂(这次脑裂原因是开机自动DRBD造成的)
  查看状态cat /porc/drbd可以看到:
  0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown C
  解决方法:首先在备机节点设置从 drbdadm secondary all
  如果主机连接状态显示WFConnection则执行drbdadm connect all,再设置主 drbdadm -- --overwrite-data-of-peer primary all
  最后查看状态 cat /porc/drbd已经恢复了主从,数据也是同步状态。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-602634-1-1.html 上篇帖子: Mysql备份讲解(全备和增量备份) 下篇帖子: 10,mysql事务管理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表