欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    mysql的主从 构架 复制半同步SSL加密复制的实现.doc

    • 资源ID:10254717       资源大小:27KB        全文页数:11页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    mysql的主从 构架 复制半同步SSL加密复制的实现.doc

    mysql的主从 构架 ,复制,半同步,SSL加密复制的实现mysql主从构架:在企业应用中,mysql经常采用主从构架,或者主主架构,这样可以实现mysql服务器的负载均衡,提升mysql服务器的性能。而关键是,可以实现mysql的数据同步复制功能,来为企业数据备份提供一种方便的机制。一.首先了解下mysql的复制功能:1)支持一主多从的机制,数据通过同步从主服务器复制都从服务器里2)支持多级结构,主从从从主主(互为主从)3)支持过滤的功能(可以只复制主服务的部分数据而非全部)二.关于主从构架的mysql,为了数据的一致性,修改数据只能在主服务器上执行,我们来了解一下它的复制类型1)基于语句的复制:把在主服务上执行的语句,在从服务器上在执行一次。这种方式有缺陷,如果是像updatat1SETSALRIS=SALARIS+1000,那么对每个需要更改的数据执行1000次,而不是基于行,大量浪费了系统资源。2)基于行的复制Row:改变以后的内容复制过去,而不是重新执行一遍。updatet1SETSALARIS=SALARIS+10003)混合类型复制:语句+行优先使用语句复制,如果语句复制的内容和数据精确,启用行复制但是想象一下,这种构架的复制单主服务器如果写的操作比较多,可能会成为系统瓶颈。而从服务器过多也会造成存储空间的浪费。所以这种构架只能为读操作提供优化,对数据的写入,只能依赖主服务器。复制的主要功用:1)实现数据的分布式存储(Datadistribution),但这种分布是指主从服务器都提供同样的数据。2)实现数据的负载均衡(主要指读,写需要别的机制实现),主要通过LVS集群或者mysql-proxy来实现。3)备份(backup)在从服务器上发出复制请求,主服务器将数据传输给从服务器后,进行热备或者温备,或者当需要备份的时候将服务停下来,进行冷备。4)提供高可用和及其故障转移功能:确保服务不会断掉。5)测试mysql的升级:将主服务上数据备份到从服务器,从服务升级如果可以使用,升级为主服务(如果性能较差,只是临时替代)。三.主要注意的地方:1)mysql复制过程在网络上传输时是明文的,不过支持SSL加密。2)mysql复制要求主从架构的服务器的serverid不能相同。=分割线=下面我们来实现主从构架的mysql服务器及复制过程,需要准备两台虚拟机,一台做主mysql,一台做从mysql,如下图:1)设置一个服务器成为主服务器#主服务器一定要设置成静态地址#5.5以下版本要将默认引擎设置为innodb,设置方法:在/etc/my.cf里添加default-engine=innodb,再重启服务,安装过程不再累赘,笔者采用二进制包的mysql5.5(1)配置好IP,ifconfigeth0172.16.14.11vim/etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0BOOTPROTO=staticONBOOT=yesHWADDR=00:0c:29:f5:6d:47IPADDR=172.16.14.11NETMASK=255.255.0.0GATEWAY=172.16.0.1ifconfigeth0172.16.14.11vim/etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0BOOTPROTO=staticONBOOT=yesHWADDR=00:0c:29:f5:6d:47IPADDR=172.16.14.11NETMASK=255.255.0.0GATEWAY=172.16.0.1(2)修改配置文件,使它成为主服务器vim/etc/my.cnf#添加或修改如下行#如果是5.0版本须添加:default-engine=innodblog-bin=mysql-binlog-bin-index=mysql-bin.indexbinlog_format=mixdserver_id=1servicemysqlrestartvim/etc/my.cnf#添加或修改如下行#如果是5.0版本须添加:default-engine=innodblog-bin=mysql-binlog-bin-index=mysql-bin.indexbinlog_format=mixdserver_id=1servicemysqlrestart(3)创建用户,授予权限mysqlmysqlGRANTREPLICATIONCLIENT,REPLICATIONSLAVEON*.*TOrepl172.16.%.%IDENTIFIEDBYredhat;#REPLICATIONCLIENT:用户有权询问附属者/控制者在哪里。REPLICATIONSLAVE:回复附属者所需。mysqlFLUSHPRIVILEGES;mysqlmysqlGRANTREPLICATIONCLIENT,REPLICATIONSLAVEON*.*TOrepl172.16.%.%IDENTIFIEDBYredhat;#REPLICATIONCLIENT:用户有权询问附属者/控制者在哪里。REPLICATIONSLAVE:回复附属者所需。mysqlFLUSHPRIVILEGES;2)设置一个服务器成为从服务器vim/etc/my.cnf#从服务器不需要二进制日志,只需要启动中继日志注释掉log-bin和binlog_formatrelay-log=relay-bin#从服务器需要开启中继日志relay-log-index=relay-bin.indexserver-id=11#id=1是主服务器,其余表示从服务器servicemysqdstartmysql#查看relay相关的变量设置,几server_id的值mysqlSHOWVARIABLESLIKErelay%;mysqlSHOWVARIABLESLIKEserver_id;#设置连接账号和密码,(可以设置使用SSL等)mysqlCHANGEMASTERTOMASTER_HOST=172.16.14.11,mysqlMASTER_USER=repl,#注意是逗号mysqlMASTER_PASSWORD=redhat;#查看下从服务的状态,是否开启mysqlSHOWSLAVESTATUSG#开启从服务器mysqlSTARTSLAVE#过一会,再使用SHOW命令查看状态。mysqlSHOWSLAVESTATUSG#如果错误,查看错误日志mysqlSHOWVARIABLESLIKE%erro%vim/etc/my.cnfslave_skip_erros=ONvim/etc/my.cnf#从服务器不需要二进制日志,只需要启动中继日志注释掉log-bin和binlog_formatrelay-log=relay-bin#从服务器需要开启中继日志relay-log-index=relay-bin.indexserver-id=11#id=1是主服务器,其余表示从服务器servicemysqdstartmysql#查看relay相关的变量设置,几server_id的值mysqlSHOWVARIABLESLIKErelay%;mysqlSHOWVARIABLESLIKEserver_id;#设置连接账号和密码,(可以设置使用SSL等)mysqlCHANGEMASTERTOMASTER_HOST=172.16.14.11,mysqlMASTER_USER=repl,#注意是逗号mysqlMASTER_PASSWORD=redhat;#查看下从服务的状态,是否开启mysqlSHOWSLAVESTATUSG#开启从服务器mysqlSTARTSLAVE#过一会,再使用SHOW命令查看状态。mysqlSHOWSLAVESTATUSG#如果错误,查看错误日志mysqlSHOWVARIABLESLIKE%erro%vim/etc/my.cnfslave_skip_erros=ON=#如果上面的过程一直mysql报错,那么我们可以使用下列选项忽略它在my.cnf里添加replicate-ignore-db=db在从服务器复制时忽略某个数据库#如果一直是mysql这个数据库报错,replicate-ignore-db=mysql,重启服务STOPSLAVE;STARTSLAVE;SHOWSLAVESTATUSG#确保无错才能进行下面的复制过程=3)数据库复制过程的实现(1)#在主服务器上创建一个数据库mysqlCREATEDATABASEMYDB;mysqlUSEMYDB;mysqlCREATETABLEt1(namevarchar(20);mysqlCREATEDATABASEMYDB;mysqlUSEMYDB;mysqlCREATETABLEt1(namevarchar(20);(2)从服务器设置,启动复制线程mysqlSTARTSLAVE;QueryOK,0rowsaffected(0.00sec)出现MYDB了,复制成功!=分割线=复制过程详解:假设我们现在有4台mysql服务器1主:A3从:BCD从服务器BCD同时发起复制请求后,主服务器A将数据传输给从服务器BCD,这个过程是异步的,A受到请求后,不管BCD是否同步完成,如果有修改数据的,继续写入数据,这在使用的时候是无法控制的,这样可能造成数据不一致(同步到一半断了而主服务器不管),而且耗时很长。后来goole为mysql引入了一个插件,实现半同步,大大缩减了同步花费的时间,那就是Semi-sync。半同步的概念:数据同步时,只等待其中至少一台从服务器(比如B)完成。这样再通过这台从服务器将数据同步给其他服务器(CD)但是半同步也会带来的问题:网络原因(比如网速很慢)造成同步迟迟不能进行。解决方法:在等不到某一个从服务器同步后,自动降级为异步。Semi-sync简介:Semi-sync最早是由Google实现的一个补丁,代码主要由MarkCallaghan、WeiLi(Google)等人贡献。Google原本是将需求提给Hekki的,但是后来等不及就自己实现了.。(现在MarkCallaghan已跳到Facebook,除了Google,他曾经还在Informix、Oracle工作过)在5.5之后由MySQLReplicationTeam按照Plugin的方式将代码移植过来,并将Semi-sync独立成MySQL的一个插件,主要代码移植者是ZhenxingHe(参考)。下面就介绍半同步的复制过程如何实现(基于上面的基础上):(1)加载插件如果使用的是5.5版的mysql,那么在/usr/local/mysql/lib/plugin/保存了相关的插件,而我们需要安装的是semisync_master.sosemisync_slave.socd/usr/local/mysql/lib/plugin/ls-asemisync_*semisync_master.sosemisync_slave.so#执行如下命令加载插件#在主服务器上mysqlINSTALLPLUGINrpl_semi_sync_masterSONAMEsemisync_master.so;#在从服务器上mysqlINSTALLPLUGINrpl_semi_sync_slaveSONAMEsemisync_slave.so;在初次加载插件后,Mysql会将该插件记录到系统表mysql.plugin中,下次启动系统自动加载。但是我们还需要在主服务器上的my.cnf里面增加如下记录来打开semi-syncrpl_semi_sync_master_enable=1rpl_semi_sync_master_timeout=1000在丛服务器上的my.cnf里添加如下记录rpl_semi_sync_slave_enable=1重启主从服务器上的Mysql服务cd/usr/local/mysql/lib/plugin/ls-asemisync_*semisync_master.sosemisync_slave.so#执行如下命令加载插件#在主服务器上mysqlINSTALLPLUGINrpl_semi_sync_masterSONAMEsemisync_master.so;#在从服务器上mysqlINSTALLPLUGINrpl_semi_sync_slaveSONAMEsemisync_slave.so;在初次加载插件后,Mysql会将该插件记录到系统表mysql.plugin中,下次启动系统自动加载。但是我们还需要在主服务器上的my.cnf里面增加如下记录来打开semi-syncrpl_semi_sync_master_enable=1rpl_semi_sync_master_timeout=1000在丛服务器上的my.cnf里添加如下记录rpl_semi_sync_slave_enable=1重启主从服务器上的Mysql服务=#也可通过设置全局变量的方式来设置,如下:setglobalrpl_semi_sync_master_enabled=1#取消加载插件mysqlUNINSTALLPLUGINrpl_semi_sync_master;=查看从服务器上的semi_sync是否开启查看主服务器上的semi_sync是否开启,注意clients变为1,证明主从半同步复制连接成功(2)在主服务器上创建一个数据库tests,在从服务器上启用复制,观察变化#从服务器上mysqlstopslave;mysqlstartslave;mysqlstopslave;mysqlstartslave;#主服务器上上面比较重要的状态值有:Rpl_semi_sync_master_tx_avg_wait_time:事务因开启Semi_sync,平均需要额外等待的时间Rpl_semi_sync_master_net_avg_wait_time:事务进入等待队列后,到网络平均等待时间依据上面两个状态值可以知道,Semi-sync的网络消耗有多大,给某个事务带来的额外的消耗有多大。Rpl_semi_sync_master_status则表示当前Semi-sync是否正常工作。从Rpl_semi_sync_master_no_times变量,可以知道一段时间内,Semi-sync是否有超时失败过,该计数器则记录了这样的失败次数。=分割线=使用SSL加密复制过程(很简单):见官方文档:补充:设置从服务器为只读,避免用户在从服务器上修改数据:SHOWVARIABLESLIKE%read%SETGLOBALread_only=on;-复制过程中过滤的实现:过滤可以在主服务器上也可以在从服务器上实现。binlog-do-db白名单指定打算复制哪个数据库binlog-ignore-db黑名单打算忽略哪个数据库注意:两个选项不要同时使用,如果同时使用,只有白名单生效一般不建议在主服务器上过滤,可能会造成二进制文件不完整,造成不能进行时间点恢复用法:过滤过个dbreplicate-do-db=mydb1replicate-do-db=mydb2replicate-do-table=table#可以使用符号匹配replicate-wild-do-table=db_parttern.tbl_pattern当定义了如下后,考虑,主服务器上的mysql数据库修改的语句是否会复制?replicate-ignore-db=mysql依然会复制,只是不保存,占用相关带宽。

    注意事项

    本文(mysql的主从 构架 复制半同步SSL加密复制的实现.doc)为本站会员(土8路)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开