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

[经验分享] drbd+heartbeat实现mysql主备并自动切换

[复制链接]

尚未签到

发表于 2019-1-7 08:15:02 | 显示全部楼层 |阅读模式
一、阐述
1、DRBD:
DistributedReplicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)。
  
工作原理:
在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。

2、Heartbeat:
Heartbeat 项目是Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。

工作原理:
heartbeat(Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。

3、MySQL:
MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabase Management System:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。具体详情访问官方网站http://www.mysql.com/
二、安装部署
1、规划
  database1192.168.1.167
  database2192.168.1.168
  VIP  192.168.1.171
  
2、修改主机名和域名解析
  # sshroot@192.168.1.167
  # vim/etc/hosts
  192.168.1.167database1
  192.168.1.168database2
  [root@database1~]# vim /etc/sysconfig/network
  NETWORKING=yes
  HOSTNAME=database1
  
  # sshroot@192.168.1.168
  # vim/etc/hosts
  192.168.1.167database1
  192.168.1.168database2
  #hostname database2
  [root@database2~]# vim /etc/sysconfig/network
  NETWORKING=yes
  HOSTNAME=database2
  
3、安装DRBD
  [root@database1~]# cd /usr/local/src/
  [root@database1src]# tar xf drbd-heartbeat-8.4.4-2.el6.tar.gz
  [root@database1src]# rpm -ivh drbd-*.rpm
  
  [root@database2~]# cd /usr/local/src/
  [root@database2src]# tar xf drbd-heartbeat-8.4.4-2.el6.tar.gz
  [root@database2src]# rpm -ivh drbd-*.rpm
  
  # 加载drbd模块,查看模块情况
  [root@database1src]# modprobe drbd
  [root@database1src]# lsmod | grep drbd
  drbd                  337142 0
  libcrc32c               1246  1 drbd
  
  [root@database2src]# modprobe drbd
  [root@database2src]# lsmod | grep drbd
  drbd                  337142  0
  libcrc32c               1246  1 drbd
  
  # 查看第二块磁盘名称,这里是/dev/sdb
  [root@database1src]#fdisk –l
  ……
  [root@database2src]#fdisk –l
  ……
  
  # 分区
  [root@database1src]# parted /dev/sdb
  (parted)mklabel gpt
  (parted)p
  (parted)mkpart
  Partitionname?  []? database
  Filesystem type?  [ext2]?
  Start?0
  End? 100%
  Ignore/Cancel?I
  (parted)p
  (parted)q
  # database2如上操作
  
  [root@database1src]# vim /etc/drbd.d/database.res
  resourcedb {
         protocol C;
         startup {
                 wfc-timeout 0;
                 degr-wfc-timeout 120;
         }
         disk {
                 on-io-error detach;
         }
         net {
                 after-sb-0pridiscard-zero-changes;
                 after-sb-1pri discard-secondary;
                 after-sb-2pri disconnect;
                 max-buffers 2048;
                 ko-count 4;
         }
         syncer {
                 rate 100M;
         }
         on database1 {
                 device /dev/drbd0;
                 disk /dev/sdb1;
                 address 192.168.1.167:7801;
                 meta-disk internal;
                         }
         on database2 {
                 device /dev/drbd0;
                 disk /dev/sdb1;
                 address 192.168.1.168:7801;
                 meta-disk internal;
         }
  }
  
  [root@database1src]# scp -r /etc/drbd.d database2:/etc/
  
  # 初始化DRBD分区
  [root@database1src]# drbdadm create-md db
  
  [root@database2src]# drbdadm create-md db
  
  # 启动DRBD服务,两边一起启动
  [root@database1src]# /etc/init.d/drbd start
  
  [root@database2src]# /etc/init.d/drbd start
  
  [root@database1src]# service drbd status
  drbddriver loaded OK; device status:
  version:8.4.4 (api:1/proto:86-101)
  GIT-hash:599f286440bd633d15d5ff985204aff4bccffadd build by root@Database2, 2013-11-2914:02:29
  m:res  cs        ro                   ds                         p  mounted fstype
  0:db   Connected Secondary/Secondary Inconsistent/Inconsistent  C
  
  #设置database1为主节点
  [root@database1src]# drbdadm -- --overwrite-data-of-peer primary all
  [root@database1src]# drbdadm primary db
  
  # 数据正在同步
  [root@database1src]# service drbd status
  drbddriver loaded OK; device status:
  version:8.4.4 (api:1/proto:86-101)
  GIT-hash:599f286440bd633d15d5ff985204aff4bccffadd build by root@Database2, 2013-11-2914:02:29
  m:res  cs         ro                 ds                     p  mounted fstype
  0:db   SyncSource Primary/Secondary UpToDate/Inconsistent  C
  ...    sync'ed:   7.8%               (4724/5116)M
  
  等待同步完成后…
  # 格式化并挂载drbd分区/dev/drbd0
  [root@database1src]# mkfs.ext4 /dev/drbd0
  [root@database1src]# mount /dev/drbd0 /mnt
  
  # drbd服务开机自启动
  [root@database1~]# chkconfig drbd on
  [root@database2~]# chkconfig drbd on
  
4、迁移MySQL
  # 默认已经安装了mysql-service,设置mysql的启动状态为关闭,即不自动启动
  [root@database1src]# chkconfig mysql off
  [root@database2src]# chkconfig mysql off
  
  # 迁移mysql数据库
  [root@database1src]# cp -r /var/lib/mysql/* /mnt
  [root@database1src]#umount /mnt
  
  #将/dev/drbd0挂载到原来的mysql数据目录
  [root@database1src]#mount /dev/drbd0 /var/lib/mysql
  
  # 修改挂载后目录的属主属组,启动mysql
  [root@database1lib]#chown –R mysql.mysql mysql
  [root@database1src]#/etc/init.d/mysql start
  
5、安装Heartbeat
  [root@database1~]# tar fxvz heartbeat-3.0.4.el6.tar.gz
  [root@database1~]# rpm -ivh *.rpm
  [root@database2~]# tar fxvz heartbeat-3.0.4.el6.tar.gz
  [root@database2~]# rpm -ivh *.rpm
  [root@database1~]#cp /usr/share/doc/heartbeat-3.0.4/authkeys /usr/share/doc/heartbeat-3.0.4/ha.cf/usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
  
  # 注意ucast后面跟的心跳地址是对方的,需要更新的内核支持。换成bcast
  [root@database1~]# grep -vE '^$|^#' /etc/ha.d/ha.cf
  logfile/var/log/ha-log
  logfacilitylocal0
  keepalive2
  deadtime15
  bcast   eth0            # Linux
  respawnroot /usr/lib64/heartbeat/ipfail
  apiauthipfail gid=root uid=root
  auto_failbackoff
  nodedatabase1
  nodedatabase2
  
  # 注意bcast后面跟的心跳地址是对方的
  [root@database2~]# grep -vE '^$|^#' /etc/ha.d/ha.cf
  logfile/var/log/ha-log
  logfacilitylocal0
  keepalive2
  deadtime15
  bcast   eth0            # Linux
  respawnroot /usr/lib64/heartbeat/ipfail
  apiauthipfail gid=root uid=root
  auto_failbackoff
  nodedatabase1
  nodedatabase2
  
  # 编辑验证文件
  [root@database1~]# vim /etc/ha.d/authkeys
  auth 1
  1 crc
  [root@database1~]# chmod 600 /etc/ha.d/authkeys
  
  [root@database2~]# vim /etc/ha.d/authkeys
  auth 1
  1 crc
  [root@database2~]# chmod 600 /etc/ha.d/authkeys
  
  # 编辑集群资源文件
  [root@database1~]# vim /etc/ha.d/haresources
  # 这个文件两个机器是一样的,除了主机名部分
  [root@database1~]# grep -vE '^$|^#' /etc/ha.d/haresources
  database1192.168.1.171/24/eth0 drbddisk::db Filesystem::/dev/drbd0::/var/lib/mysql::ext4mysql
  [root@database2~]# grep -vE '^$|^#' /etc/ha.d/haresources
  database2192.168.1.171/24/eth0 drbddisk::db Filesystem::/dev/drbd0::/var/lib/mysql::ext4mysql
  
  # 设置heartbeat自启动
  [root@database1~]# chkconfig heartbeat on
  [root@database2~]# chkconfig heartbeat on
  
  #启动heartbeat
  [root@database1~]#/etc/init.d/heartbeat start
  [root@database2~]#/etc/init.d/heartbeat start
  
  # 重启任一一台主机mysql将会漂移到新的IP之上
  
  # 删除/var/lib/heartbeat/下文件,新版本的heartbeat为集群环境提供了一些功能。
  # 如果不删除会在关闭heartbeat服务时hanged,无法关闭
  [root@database1~]# rm -rf /var/lib/heartbeat/*
  [root@database2~]# rm -rf /var/lib/heartbeat/*
  
  ERROR:should_drop_message: attempted replay attack [test8]? [gen = 1213729710, curgen= 1213729711]
  
  可能原因:ha和ha2的uuid改变引起,可能ha2是通过VMware克隆复制方式产生的或hostname设置在安装heartbeat之后
  解决方案:让uuid重新生成,可以先卸载heartbeat,删除/var/lib/heartbeat目录(uuid文件就在这个目录下,该目录在卸载时不被删除,需手动删除,如果不手动删除,重新安装还会使用原来uuid)。
  

  交流群:374506612,提供源码和支持。




运维网声明 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-660149-1-1.html 上篇帖子: HA(高可用集群)heartbeat 下篇帖子: Linux平台-源码安装heartbeat 3.0集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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