听小董谝存储 三( 三 )


:当数据变成dead,那么也就意味着3个副本里,最多只有2个了 。2个自然比3个危险一些,那么就需要进行数据搬迁,dead的data shard里面的数据都搬迁走了之后,dead就变成了状态了 。这个状态的意思就是说,我里面的数据虽然已经不完全了,但是在别地方已经有新的数据了 。
小菜:如果真的发生了类似断电的情况,那么数据具体怎么搬迁呢?
老鸟:不要着急,这是层考虑的问题 。另外图四只是最常见的data shard状态跳转,有一些不常见的情况,为了方便大家理解就没有画到图里 。
4.3怎么知道路由变更了 有一个组件会循环的ping各个,如果在一定周期内,某个机器多次ping不通,就任务它dead了,组件就会上报到当出现某些问题后(非断电或网络问题),用户请求失败,就会打印错误日志 。有一个组件会扫描的日志,当某个机器上的请求失败率超过某个比例,就任务这个机器dead了,组件就上报到机器上本身就部署着一个组件,它循环扫描机器的硬件情况,包括内存,cpu,磁盘ip等等信息,当发现异常信息后,就上报给,让把这个机器置dead 。
4.4变更了之后,怎么做
先修改自己保存的路由,然后通知设置服务不可用 。
4.5 保证各个路由一致
老鸟:我们知道在整个集群中的作用主要是“管理”,用户的请求路径并不直接通过 。用户请求的是,那么现在的一个功能就是得把路由信息推送给 。
小菜:如果有多个,修改了自己的路由后,然后也通知了设置了服务不可用 。然后遍历把新的路由推送给他们就OK么 。那么怎么知道推送完成了呢?
老鸟:引入路由版本号 。
小菜:明白了,每次路由变更的时候都把自己的版本号加1 。然后推送 。
老鸟:是的 。其实在保证路由一致这块的逻辑里,与就是保持心跳连接
1 问,亲爱的,你的版本号是多少?
2 回复,自己的版本号 。
3 把收到的版本号和自己的最新版本号比较一下 。如果一样,就说明一切OK,等一会再问问就OK 。如果不一样,就说明这边有更新了,然后推送一部分路由过去 。
【听小董谝存储 三】4 收到路由后更新下自己的版本号,然后再把新的版本号回复给
5 再检查一下版本号 。如果一致说明一次同步就已经把路由都推过去了 。如果不一致,说明还没有同步完,再重复3 4 5的步骤 。
小菜:有个问题,路由的同步是单线程遍历操作的,那如果某个还没有收到某个已经被置dead的路由,这个时候请求又通过这个被导入那个,那不是读到脏数据了?
老鸟:请参与4.4的后半部分 。另外我乏了,跪安吧 。再另外:我爱glt 。