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

[经验分享] sql server 本地复制订阅 实现数据库服务器 读写分离

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-6-27 09:06:48 | 显示全部楼层 |阅读模式
再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离
比起mysql的复制,SQL server 复制相对强大
一、 名词解释1、复制的 机构组成(类比报纸流通):  1)、发布服务器(报社出版)      生产维护数据源,审阅所有出版数据的更改 发送给 分发服务器(邮局)
  2)、分发服务器 (邮局)      分发服务器包括分发数据库,并且存储元数据、历史数据和事务。
  3)、订阅服务器(订报人,读者)      保持数据的副本,并接收对所修改出版的更改。取决于所实现的复制选项,可能还允许更新者更新数据,并将其复制回服务器或者其它订阅者。
2、复制类型    1)快照复制      快照复制是完全按照数据和数据库对象出现时的状态来复制和分发它们的过程。快照复制不需要连续地监控数据变化,因为已发布数据的变化不被增量地传播到订阅服务器,而是周期性的被一次复制。  适用于 数据主要是静态的,比如将数据仓库复制到数据集市中一段时间内允许有已过时的数据拷贝的情况
  2)事务复制      使用事务复制,初始快照数据将被传播到订阅服务器,因此该订阅服务器就具有了一个所谓的初始负载,这是可以开始工作的内容。当出版服务器上发生数据修改时,这些单独的事务会被及时捕获并复制到订阅服务器。并保留事务边界,当所有的改变都被传播后,所有订阅服务器将具有与传播服务器相同的值         需要数据修改经常在其发生的几秒钟内被传播到订阅服务器需要事务是原子性的         订阅服务器在通常是连接到出版服务器上的         应用程序不能忍受订阅服务器接收改变的高延迟
  3)合并复制          合并复制允许一组站点自治工作,在线或离线。然后在将来的某个时刻,数据按照在多个已复制站点上发生的修改或插入情况被合并成一个统一的结果。在订阅服务器上应用初始快照,作为其初始负载,然后SQL Server跟踪在出版服务器上和订阅服务器上已发布数据的更改。数据按照预先定义或调度的时间,或者按需在服务器间同步。然后更新被独立应用在多个服务器上。这意味着相同的数据可能由出版服务器或多个订阅服务器进行了更新,因而当数据更新合并时将发生冲突。  多个订阅服务器需要在不同时刻更新数据,并将这些数据传播到出版服务器和其他订阅服务器。  订阅服务器需要接收数据,脱机更改数据,然后将更改同步到出版服务器和其他订阅服务器  应用程序的延迟需求可高可低  站点的自治性很关键
3、复制模式  1)、推模式(Push)      分发代理程序在分发服务器上运行,即为推模式   
  2)、拉模式(Pull)          分发代理在订阅服务器运行,即为拉模式
二、工作流程1、快照复制
  1)、发布服务器,将要发布的数据库整个做一个快照,
  2)、订阅服务器的快照代理程序把发布服务器的快照读取过来,放在本地的快照文件夹内
  3)、订阅服务器的发布代理程序把快照文件夹中的快照发布到订阅服务器上。历史记录和快照记录在分发服务器中。
  161314497469655.jpg  2、事务复制  1)、初始数据和架构(通过快照复制来完成),从这里可以体现出来快照复制,是所有复制的基础 。快照复制在订阅服务器上建立了订阅数据库。
  2)、发布服务器的数据修改后,写事务日志,
  3)、分发服务器的日志读取代理读取发生改变的数据的事务日志,把这些事务日志保存在发布服务器的发布数据库中。
  4)、分发服务器的分发代理程序 将分发数据库中的事务日志分发到各个订阅服务器上,然后把历史记录和错误记录在分发数据库中
161311402464282.jpg
三、具体操作流程 1、发布复制(推送模式)  1)、展开SQL Server 2008 服务器下的 【复制】 节点,会发现有【本地发布】和【本地订阅】两个节点,右击【本地发布】节点,选择【新建发布】
     161330115901726.jpg
  2)、设置分发服务器和发布服务器为同一台(推送模式)
            161339344028551.jpg
  3)、选择数据元位置
       161341082463882.jpg
这里最好选择别的路径存储,否则出错的概率比较大
  4、选择同步的数据库对象
         161345469964389.jpg
     5、发布复制类型
       161343373244971.jpg
    6、设置同步计划
   161346587939521.jpg
  7、设置代理安全性
          161348271366097.jpg
   8、发布完成取名字
            161349393403172.jpg 161350378089342.jpg   
2、订阅复制  1)、右键点击【本地订阅】节点,打开,【新建订阅向导】对话框
     161354352931925.jpg
 2)搜索发布服务器去订阅
       161355484185085.jpg
  3)、由于上面发布的和分发的是同一台服务器所以选择推送订阅
     161357187461789.jpg

    4)、选择订阅接受的对象(也就是获取数据的数据库,上面发布了 test 库 pce_admin_info,这里用本机的test1来接受,同步时如果没有表会自动在test1库创建表)
     161400018409994.jpg
    5)、设置连接安全性
             161402155745939.jpg
         6)后面一直默认点下一步,完成订阅
             161404161837691.jpg

   3、查看效果           同步上面步骤,把 A服务器的 test 库 的 pce_admin_info 表同步到 B服务器的 test1 ,在第一次执行订阅后自动创建了表,之后会根据计划设置同步的更新表pce_admin_info
         161406570589243.jpg
         161410382619664.jpg 161410558243866.jpg


四、注意事项1、无论是发布复制还是订阅服务 一定要在sql server安装的服务器本机操作,不能是远程连接操作
2、将这个文件夹共享出来,然户用共享文件夹的UNC路径作为快照文件夹路径。这个文件夹要赋予SQL Server Service和Agent Service读写权限。
3、sql server 另外一种镜像实现数据副本,镜像是只能主服务器读写,从服务器是不支持读写的,而复制是可以从服务器读 主服务器写。所以我们实现读写分离往往是通过数据库的复制来实现。
4、UNC 可以做的网络驱动映射或者FTP连接
5、再发布服务器设置订阅的时候 系统会提示使用计算机名,而在不同的网络内计算机名不可以直接访问,这个时候需要设置别名,别名要注意64 client 和32client都要加
五、补充 同步复制的时候订阅服务器会生成相应的表的删除,修改,添加的存储过来来执行数据
311332345941308.jpg --> 311333043448929.jpg
左边的存储过程由右边的调用存储过程控制,选项可以选择其他的就不会生成存储过程
当我们业务需要 需要对存储过程进行修改,我们修改存储过程后,如果改变了源数据的结构,这个时候存储过程又会初始化,如果我们想让存储过程保持不变可以做以下修改
311334468605050.jpg 311335062355136.jpg
上面右图的true 改为false 就 ok


运维网声明 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-21128-1-1.html 上篇帖子: sql server日期时间转字符串 下篇帖子: SQLSERVER数据库连接问题 服务器 server 数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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