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

[经验分享] 基于DRBD构建高可用主从MySQL服务器

[复制链接]

尚未签到

发表于 2018-9-27 13:14:42 | 显示全部楼层 |阅读模式
  前言:构建双节点高可用Mysql服务器,用DRBD个人感觉是比较合适的,只需要两台Server即可,用IP SAN的话先不说SAN的设备,主机也得需要4台,NFS是行不通的。
  目标:两台mysql服务器基于drbd构建高可用主从服务器,平时DR1服务器接受请求,DR2基于DRBD数据备份,当DR1出现问题时,DR2接替DR1的工作接受用户请求。
  规划:
  


  • DR1:172.16.1.16 hostname dr1.laoguang.me

  • DR2:172.16.1.17 hostname dr2.laoguang.me

  • VIP:172.16.1.1
  

  环境:RedHat5.8 内核:2.6.18-308.el5  Selinux已经关闭  Yum 配置完好
  注:如果没说在哪台机器上配置则默认是dr1
  一.配置准备工作,hostname设置,/etc/hosts解析的与对方hostname -n 一致,ssh互信,时间统一
  1.1 hostname设置在dr1上演示设置
  


  • hostname dr1.laoguang.me
  • vi /etc/hosts  ##添加如下解析
  • 172.16.1.16     dr1.laoguang.me dr1
  • 172.16.1.17     dr2.laoguang.me dr2
  

  1.2 ssh互信设置dr1上演示
  


  • ssh-keygen -t rsa -P ""     ##回车,生成密钥在/root/.ssh下
  • ssh-copy-id -i /root/.ssh/id_rsa.pub dr2   ##公钥拷贝到dr2上,再次登录dr2不需要密码
  • 同样dr2也这么设置
  

  1.3 同步时间(如果有NTP就同步NTP的时间)
  


  • date -s 20121127;ssh dr2 'date -s 20121127'
  

  二.dr1,dr2上安装DRBD
  DRBD分为两部分,一部分是工作内核中的模块部分,一部分是工件在用户空间的管理工具,2.6.33以后的内核中已经集成了DRBD的模块,只安装管理工具即可,旧内核需要为内核打补丁才可以,有爱好者把补丁做成了rpm包名字为kmod-drbd,安装它即可,补丁包一定与内核版本一致。下面安装与软件。
  2.1 dr1,dr2安装内核补丁与软件 kmod-drbd83-8.3.8-1.el5.centos.i686.rpm,drbd83-8.3.8-1.el5.centos.i386.rpm
  


  • rpm -ivh kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
  • rpm -ivh drbd83-8.3.8-1.el5.centos.i386.rpm
  • rpm -ql drbd83     ##查看生成文件
  

  2.2 配置DRBD(注如果没说在哪台机器上配置则默认是dr1)
  /etc/drbd.conf 为主配置文件,它把/etc/drbd.d下子配置文件包含进来,通过查看drbd.conf我们可以发现一样例文件/usr/share/doc/drbd83-8.3.8/drbd.conf,用它覆盖这个空的配置文件。
  


  • cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/
  

  编辑/etc/drbd.d/global_common.conf 这个全局配置文件如下:
  


  •    global {
  •         usage-count no;
  •         # minor-count dialog-refresh disable-ip-verification
  •     }

  •     common {
  •         protocol C;

  •         handlers {
  •                 用默认即可
  •         }

  •         startup {
  •                 #wfc-timeout 120;
  •                 #degr-wfc-timeout 120;
  •         }

  •         disk {
  •                 on-io-error detach;           ##IO错误的处理方法
  •                 #fencing resource-only;
  •         }

  •         net {
  •                 cram-hmac-alg "sha1";         ##指定校验算法,校验是为保证数据完整
  •                 shared-secret "laoguang.me";  ##指定校验密码
  •         }

  •         syncer {
  •                 rate 1000M;                   ##指定同步时用多少带宽
  •         }
  •     }
  

  2.3 dr1,drs上创建大小一样的分区,不演示了
  dr1上的为/dev/sda5 1G    ##注:记的partprobe,不要格式化
  dr2上的为/dev/sda5 1G
  2.4 为DRBD添加磁盘资源
  


  • vim /etc/drbd.d/mysql.res
  •     resource mysql {
  •         on dr1.laoguang.me {
  •         device    /dev/drbd0;        ##DRBD用的设备
  •         disk      /dev/sda5;         ##映射的磁盘
  •         address   172.16.1.16:7789;  ##drbd启动后监听端口7789
  •         meta-disk internal;          ##元数据存放
  •         }
  •         on dr2.laoguang.me {
  •         device    /dev/drbd0;
  •         disk      /dev/sda5;
  •         address   172.16.1.17:7789;
  •         meta-disk internal;
  •         }
  •     }
  

  2.5 拷贝到时dr2上一份
  


  • scp -r /etc/drbd.* dr2:/etc/
  

  2.6 dr1,dr2上初始化drbd资源,并启动服务
  


  • drbdadm create-md mysql       ##如果没出现successful可能是你没有partprobe哦
  • service drbd start
  • drbd-overview  ##查看起动状态
  • 0:mysql  Connected Secondary/Secondary Inconsistent/Inconsistent C r----
  

  2.7 将其中dr1节点先设置为Primary,让磁盘同步一次
  


  • drbdsetup /dev/drbd0 primary –o
  • drbd-overview ##查看状态,可知dr2开始同步dr1的数据,等待同步完成
  • 0:mysql  SyncSource Primary/Secondary UpToDate/Inconsistent C r----  
  • [==>.................] sync'ed: 15.3% (841880/987896)K delay_probe: 11
  

  2.8 格式化drbd0,挂载使用。注意,由于没有锁管理,所以不要同时挂载使用,一般只有primaty可使用
  


  • mke2fs -j -L DRBD /dev/drbd0
  • mkdir /data/mydata -pv   ##dr1,dr2都建立该目录,为以后mysql安装准备
  • mount /dev/drbd0 /data/mydata
  • cd /data/mydata  ##查看是否成功,建立文件测试能否同步
  • cp /etc/fstab .
  • umount /data/mydata
  • drbdadm secondary mysql  ##把自己转换为Secondary
  • dr2上操作:
  • drbdadm primary mysql    ##dr2切换为Primary
  • mount /dev/drbd0 /data/mydata  ##挂载,并查看是否有数据
  • ls /data/mydata
  

  到此DRBD设置完毕。一会儿我们会把drbd定义为资源,所以禁止drbd开机启动
  


  • chkconfig drbd off
  

  三.dr1,dr2上安装Mysql
  primary切换到dr1,挂载drbd0到/data/mydata,开始安装Mysql,本段不再演示,如有需要去看http://laoguang.blog.51cto.com/6013350/1039208
  主要更改datadir到 /data/mydata ,另外注意dr1,dr2的mysql用户uid,gid须一致
  安装完测试能否启动,如果能,请继续。
  停止mysql,卸载drbd,primary切换到dr2,挂载drbd0到/data/mydata,mysql不需要初始化了,拷贝配置文件,启动脚本即可。测试能否启动
  不许mysql开机启动
  


  • chkconfig mysqld off
  

  四.基于corosync,pacemaker部署高可用集群
  4.1 安装covosync,pacemaker及依赖包
  


  •     ls   ##查看当前目录下的所有包,http://clusterlabs.org/rpm/下载适合你平台的包
  •     cluster-glue-1.0.6-1.6.el5.i386.rpm
  •     cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
  •     corosync-1.2.7-1.1.el5.i386.rpm
  •     corosynclib-1.2.7-1.1.el5.i386.rpm
  •     heartbeat-3.0.3-2.3.el5.i386.rpm    ##安装heartbeat是因为pacemake会依赖它的某些库
  •     heartbeat-libs-3.0.3-2.3.el5.i386.rpm
  •     libesmtp-1.0.4-5.el5.i386.rpm
  •     pacemaker-1.1.5-1.1.el5.i386.rpm
  •     pacemaker-cts-1.1.5-1.1.el5.i386.rpm
  •     pacemaker-libs-1.1.5-1.1.el5.i386.rpm
  •     perl-TimeDate-1.16-5.el5.noarch.rpm
  •     resource-agents-1.0.4-1.1.el5.i386.rpm
  

  ------------------------------centos5.x x86_64bit安装方法----------------------------
  


  • rpm -ivh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
  • wget -O /etc/yum.repos.d/pacemaker.repo http://clusterlabs.org/rpm/epel-5/clusterlabs.repo
  • yum -y install heartbeat-stonith
  • yum -y install pacemaker corosync
  

  --------------------------------------------------------------------------------------
  安装它们
  


  • yum -y --nogpgcheck localinstall *.rpm   ##必须在rpm所在目录哦
  

  4.1 修改covosync配置文件
  


  • cd /etc/corosync
  •     mv corosync.conf.example corosync.conf
  •     vi corosync.conf
  •     totem {
  •         version: 2
  •         secauth: on      ##启用认证,不能让其它主机随意加入集群
  •         threads: 0
  •         interface {
  •                 ringnumber: 0
  •                 bindnetaddr: 172.16.0.0  ##绑定端口
  •                 mcastaddr: 226.94.11.19  ##组播地址,建议修改
  •                 mcastport: 5405          ##组播端口
  •         }
  •     }

  •     logging {                            ##定义日志
  •         fileline: off
  •         to_stderr: no
  •         to_logfile: yes                  ##日志写入独立file
  •         to_syslog: no                    ##不用写到syslog中了
  •         logfile: /var/log/cluster/corosync.log   ##日志path,需要手动建立
  •         debug: off                       ##调试
  •         timestamp: on
  •     logger_subsys {
  •                 subsys: AMF
  •                 debug: off
  •         }
  •     }

  •     amf {
  •         mode: disabled
  •     }
  •     service {                            ##定义资源管理服务
  •         ver: 0
  •         name: pacemaker                  ##启动pacemaker
  •     }
  •     aisexec {                            ##运行corosync的user
  •         user: root
  •         group: root
  •     }
  

  4.2 建立日志目录,建立认证密钥
  


  • mkdir /var/log/cluster ##dr2中也建立
  • corosync-keygen    ##生成密钥
  • ##配置文件同步到dr2上一份
  • scp -p authkey corosync.conf dr2:/etc/corosync/
  

  4.3 dr1,dr2启动corysync,等待一会儿查看状态
  


  • service corysync start
  • crm status      ##查看状态,如果显示Online: [ dr2.laoguang.me dr1.laoguang.me ] 则正常
  

  4.4 定义covosync的一些属性,我们没有stonith设备,我们就两个节点,假如一个挂点quorum就不会大于1/2,集群还运行于否
  


  • crm                    ##进入crn命令行,以后管理集群就靠它了
  • crm(live)# configure   ##进入配置状态
  • crm(live)configure# property no-quorum-policy="ignore"    ##定义quorum不足一半时继续运行
  • crm(live)configure# property stonith-enabled="false"      ##禁用stonish,生产环境中应该定义的
  • crm(live)configure# verify                                ##校验是否有语法错误
  • crm(live)configure# commit                                ##没有错误,提交
  • crm(live)configure# show                                  ##查看
  

  4.5 定义drbd为主从资源
  


  • crm(live)configure# primitive Mysql_DRBD ocf:linbit:drbd \
  • params drbd_resource=mysql op start timeout=240 op stop timeout=100

  • ##先定义为本地资源,指定资源类型,资源name,指定用的RA,后面的是RA的语法需要
  • ##drbd_resource是指你定义的drbd的名字
  


  • crm(live)configure# master Ms_Mysql_DRBD Mysql_DRBD meta \
  • master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
  • ##master关键字定义主从资源,后面指定资源name,meta 指定额外参选数,master-max指定最多有几个master,
  • ##master-node-max指定一个节点最多运行几个master,clone-max指定有几个clone资源,
  • ##clone-node-max指定一个节点最多运行几个clone资源,notify指当出现故障时是否通知对方
  


  • crm(live)configure# verify
  • crm(live)configure# commit
  • crm(live)configure# quit
  • drbd-overview   ##查看drbd是不是启动了
  

  4.6 定义Filesystem资源
  定义Filesystem挂载
  


  • crm(live)configure# primitive MysqlFS ocf:heartbeat:Filesystem params \
  • device=/dev/drbd0 directory=/data/mydata fstype="ext3" op start timeout=60 \
  • op stop timeout=60
  

  挂载的drbd的一方必须是primary的主机,所以我们还得定义排列约束,Filesystem必须挂载到drbd的primary上,drbd服务必须先于Filesystem启动
  


  • crm(live)configure# colocation MysqlFS_with_Ms_Mysql_master inf: MysqlFS Ms_Mysql_DRBD:Master
  • crm(live)configure# order MysqlFS_after_Ms_Mysql_DRBD inf: Ms_Mysql_DRBD:promote MysqlFS:start
  • crm(live)configure# verify
  • crm(live)configure# commit
  • crm(live)configure# show 查看CIB库
  • crm(live)configure# quit
  • crm_mon  ##查看资源运行状况
  • mount 查看master上drbd0挂载上没有
  

  4.7 定义Mysql资源,定义顺序约束与排列约束
  


  •     crm(live)configure# primitive Mysql_Server lsb:mysqld
  •     crm(live)configure# order Mysql_Server_after_MysqlFS inf: MysqlFS Mysql_Server
  •     crm(live)configure# colocation Mysql_Server_with_MysqlFS inf: Mysql_Server MysqlFS
  •     crm(live)configure# verify
  •     crm(live)configure# commit
  •     crm(live)configure# quit
  •     crm status
  •     [root@dr1 ~]# crm status
  •     ============
  •     Last updated: Wed Nov 28 15:11:26 2012
  •     Stack: openais
  •     Current DC: dr1.laoguang.me - partition with quorum
  •     Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
  •     2 Nodes configured, 2 expected votes
  •     3 Resources configured.
  •     ============

  •     Online: [ dr2.laoguang.me dr1.laoguang.me ]

  •     Master/Slave Set: Ms_Mysql_DRBD [Mysql_DRBD]
  •         Masters: [ dr2.laoguang.me ]
  •         Slaves: [ dr1.laoguang.me ]
  •     MysqlFS (ocf::heartbeat:Filesystem):    Started dr2.laoguang.me
  •     Mysql_Server    (lsb:mysqld):   Started dr2.laoguang.me
  

  4.8 定义一个IP资源并定义顺序、排列约束
  


  •     crm(live)configure# primitive Mysql_IP ocf:heartbeat:IPaddr params ip=172.16.1.1
  •     crm(live)configure# colocation Mysql_IP_with_Mysql_Server inf: Mysql_IP Mysql_Server
  •     crm(live)configure# order Mysql_IP_after_Mysql_Server inf: Mysql_Server Mysql_IP
  •     crm(live)configure# verify
  •     crm(live)configure# commit
  •     crm(live)configure# quit
  •     crm status
  •     [root@dr1 ~]# crm status
  •     ============
  •     Last updated: Wed Nov 28 15:17:03 2012
  •     Stack: openais
  •     Current DC: dr1.laoguang.me - partition with quorum
  •     Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
  •     2 Nodes configured, 2 expected votes
  •     4 Resources configured.
  •     ============

  •     Online: [ dr2.laoguang.me dr1.laoguang.me ]

  •     Master/Slave Set: Ms_Mysql_DRBD [Mysql_DRBD]
  •         Masters: [ dr2.laoguang.me ]
  •         Slaves: [ dr1.laoguang.me ]
  •     MysqlFS (ocf::heartbeat:Filesystem):    Started dr2.laoguang.me
  •     Mysql_Server    (lsb:mysqld):   Started dr2.laoguang.me
  •     Mysql_IP    (ocf::heartbeat:IPaddr):    Started dr2.laoguang.me
  

  4.9 资源定义完毕,简单的集群构建完毕,测试能否正常转移
  由4.8可知Master为dr2,我们在dr2上转移测试
  


  • crm node standby
  • crm status   ##查看Master是否变为了dr1
  

  继续测试,休眠dr1虚拟机,看能否转移到时dr2
  mysql中建立数据库与表格,standby测试数据是否能同步
  到此实验结束。做个实验也许1个小时能完成,但写成文档却花了半天时间。



运维网声明 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-602847-1-1.html 上篇帖子: 谁干的mysql无密码登录? 下篇帖子: 【原创】基于MySQL 水平分区的优化示例
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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