测试使用vitess的时候发现vitess元数据的实现有多种方案,etcd, etcd2, zk,zk2, 由于刚开始测试的时候使用的是基于k8s集群+etcd的,以下就分步说明灾备实现方案:

1. 前置条件

 元数据实现方式必须选择etcd2, 即在启动的时候需要增加参数

-topo_implementation etcd2  #元数据实现方案, 此处一定需要选择etcd2, 如果选择etcd的话无法使用etcd API3提供的 etcdctl make-mirror进行数据同步
-topo_global_server_address http://etcd-global:4001
-topo_global_root "/vt" #此处也需要指定,默认元数据存储路径使用/vt, 此处不设置也行(但是如果不设置程序是可以正常使用但是使用工具无法获取元数据信息,至于为什么获取不到没有搞明白);这里呢可以保留默认配置使用/vt即可

使用etcd2实现的原因是etcd2使用API_V3进行开发, etcd使用的是API_V2进行开发的, API_V3中官方提供了etcdctl make-mirror 工具可以用来做两个集群元数据的同步操作, 这样在跨机房灾备的时候就可以实现两套etcd集群数据的同步操作,保证一个机房挂了另一个机房依然可以正常提供服务。

上面所说的配置需要分别更新vtctld, vtgate, vttablet三个程序对应的配置,保证配置一致系统才可以正常使用。

2. 灾备部署

  

  1. etcd集群

    etcd集群分别在廊坊机房和马驹桥机房分别部署一套,通过工具etcdctl make-mirror实现两个集群数据的同步

#此部分很重要, 使用make-mirror工具必须基于API3
$export ETCDCTL_API=3
#参数说明
#endpoints集群入口(需要备份的源集群)
#dest-prefix目标集群目录前缀
#prefix需要备份的目录
#127.0.0.1:2379目标集群地址,备份数据会被写入目标集群指定的dest-prefix目录下
$etcdctl make-mirror --endpoints=192.168.80.221: --dest-prefix="/vt" --prefix="/vt" 127.0.0.1:2379
#运行后如果有数据同步了会每隔30s输出一次当前更新的key的数量
#18
#19
#19
#29

  同步进程最好开启守护进程, 确保程序始终在运行, 这里我们设计的同步进程需要在每个机房启动一个,确保一个程序宕机之后依然还有一个在使用,避免元数据的丢失;两个进程同时写入的时候不会有影响,写入的时候默认etcd都返回OK,两个进程写入的数据是相同的,,所以不会有影响。

  对于删除的时候我们可以留意下, etcd删除数据的时候只返回影响的行数,所以我们无需担心同事启动两个进程对元数据产生影响,可以确保元数据始终和源是一样的。

# 先删除tt,由于tt不存在所以返回影响行数是0,这个是不会报错的
$ etcdctl --endpoints=192.168.80.221: del tt
$ 0
# 写入key tt1 value,返回OK
$ etcdctl --endpoints=192.168.80.221: put tt1 value
$ OK
# 查询刚才写入的key tt1
$ etcdctl --endpoints=192.168.80.221: get tt1
$ tt1
$ value
# 删除刚才写入的key tt1,返回影响行数1
$ etcdctl --endpoints=192.168.80.221: del tt1
$ 1
# 继续删除,返回影响行数0
$ etcdctl --endpoints=192.168.80.221: del tt1
$

  两个机房的etcd集群都分别使用自己的vip,把vip挂在到LVS下, 通过LVS的探活即可保证元数据的正常切换;

2. tablet部署

  tablet由于是依赖于etcd集群,上面我们已经解决了元数据集群的高可用,tablet的部署可以在一个机房部署两个实例,组成一个集群, 如果一个机房挂了, 可以很容易切换到另外一个机房。 只需把灾备机房的从提升为主即可正常提供服务; 这个中间数据是不会丢失的,如果服务中压力大可以随时再增加1-2个从。

3. vtgate

 vtgate的部署也是使用两个机房分别部署, 灾备机房可以不提供服务,两个机房的机器也可以通过挂在在LVS下,LVS进行探活,如果机房或者机器出现故障可以自动切换到灾备机房。

vitess元数据跨机房灾备解决方案的更多相关文章

  1. NOS跨分区灾备设计与实现

    本文来自网易云社区 作者:王健 摘要 NOS(网易对象存储)在实现多机房(杭州机房,北京机房等)部署后,允许一个用户在建桶时选择桶所属机房.在此基础上,我们实现了跨机房的数据复制,进一步实现了跨机房的 ...

  2. Oracle集群和灾备解决方案介绍

       Oracle本身有各种各样的解决方案,本文主要是对以下几种解决方案做一下简单的梳理. 1. Oracle Rac解决方案. Oracle Rac主要通过两台Oracle服务器来组件集群,提高Or ...

  3. etcd跨机房部署方案

    使用ETCD做为元数据方便快捷,但是谈到跨机房灾备可能就迷糊了,我们在做节日灾备的时候同样遇到了问题, 通过查阅官方文档找到了解决方案,官方提供make-mirror方法,提供数据镜像服务 注意: m ...

  4. 如何守护数据安全? 这里有一份RDS灾备方案为你支招

    当今世界是一个充满着数据的互联网世界,生活的方方面面都在不断产生着数据,比如出行记录.消费记录.浏览的网页.发送的消息等等.除了文本类型的数据,图像.音乐.声音都是数据.对于企业而言,数据更是重要的生 ...

  5. SQLServer 2014 本地机房HA+灾备机房DR解决方案

    SQLServer 2014 主数据中心HA+灾备机房DR解决方案 SQLServer 2008 的时候使用 local WSFC+DR Mirror方式,对象是单数据库 两个单独的 WSFC 上使用 ...

  6. Linux实战教学笔记48:openvpn架构实施方案(一)跨机房异地灾备

    第一章VPN介绍 1.1 VPN概述 VPN(全称Virtual Private Network)虚拟专用网络,是依靠ISP和其他的NSP,在公共网络中建立专用的数据通信网络的技术,可以为企业之间或者 ...

  7. 云区域(region),可用区(AZ),跨区域数据复制(Cross-region replication)与灾备(Disaster Recovery)(部分1)

    本文分两部分:部分1 和 部分2.部分1 介绍 AWS,部分2 介绍阿里云和OpenStack云. 1. AWS 1.1 AWS 地理组件概况 AWS 提供三种地理性组件: Regions:区域,即A ...

  8. 理解 OpenStack 高可用(HA)(1):OpenStack 高可用和灾备方案 [OpenStack HA and DR]

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  9. openStack灾备方案说明

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1) OpenStack 高可用方案概述 (2) Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3 ...

随机推荐

  1. freeswitch录音功能

    首先备份/usr/local/freeswitch/conf/dialplan/default.xml . 然后vi编辑default.xml ,在 <extension name=" ...

  2. 程序包javax.servlet.annotation不存在

    1.错误描写叙述 [INFO] Scanning for projects... [INFO] [INFO] --------------------------------------------- ...

  3. SVN使用(自己总结)

    1.第一次导入,注意要新建个readme.txt文件用于记录版本更改,每次导入时 要填写import message 2.第二次增加文件导入时 勾选未受控版本文件(新增加文件) 完成上传就可更新增加的 ...

  4. DockPanel的使用

    1.建立一个WinForm工程,默认生成了一个WinForm窗体Form1. 2.引用—>添加引用—>浏览—>weiFenLuo.winFormsUI.Docking.dll. 3. ...

  5. flex and bison学习笔记01

    工作需要,学习一下Flex and bison,以前在编译原理的课上听老师说过他们的前辈,lex and yacc.Flex and bison就是lex and yacc的升级版. 参考书:flex ...

  6. iOS开发之-收集的不常用却实用的小方法和技巧

    原文链接:http://blog.5ibc.net/p/90386.html 1.颜色转变成图片 - (UIImage *)createImageWithColor:(UIColor *)color ...

  7. 为什么43%前端开发者想学Vue.js

    根据JavaScript 2017前端库状况调查 Vue.js是开发者最想学的前端库.我在这里说明一下我为什么认为这也是和你一起通过使用Vue构建一个简单的App应用程序的原因. 我最近曾与Evan ...

  8. toString() 和 (String) 以及 valueOf() 三者的对照关系[java]

    简述 在Java中,往往需要把一个类型的变量转换成String 类型.作为菜鸟,有时候我会使用(String) data,有时候就使用data.toString(),如果不行还会试试 String.v ...

  9. JavaScript中数组常用方法的总结

    JavaScript中数组Array常用的方法总结 标签(空格分隔): JavaScript ECMAScript数组给我们提供了许多常用的方法,便于我们对数组进行操作,下面,就来总结一下这些方法. ...

  10. SyncML 同步协议 感谢 周鹏(我只是做一个备份)

    SyncML 同步协议(SyncML Sync Protocol) 翻译周鹏 2006-1-24 摘要 本规范定义了SyncML客户和服务的同步协议. 它规范了怎样使用SynML表示层协议去完成Syn ...