MySQL 兼容性可以做到什么程度支持事务复制、行级复制 已验证工具或系统 • MySQL/MariaDB • PolarDB-X 性能指标 • 1.5w rps • 1s 延迟* 下一步 • 多流 • GTID事务并行复制 • 更多源端完全兼容 MySQL 吗 03 History doesn't repeat itself but it often rhymes.Short Answer:No and NO0 码力 | 18 页 | 3.02 MB | 6 月前3
CurveFs 用户权限系统调研限检查推迟到文件系统,除了文件系统的任何权限检查之外,内核还会进行检查,并且两者都必须成功才能允许操作 。 。 。 内核执行标准的 UNIX 权限检查 如果文件系统在打开设备 fd 时的初始功能协商期间启用了 ACL 支持,则此挂载选项将被隐式激活。 在这种情况下,内核执行 ACL 和标准的 unix 权限检查 疑问:协商期间do_init()中的启用ACL的flags如何设置? 初始化时的 w 写权限2 x 执行权限1 特殊权限(SUID, SGID, STICKY)© XXX Page 17 of 33 SUID: 可执行的文件上。默认情况下,当用户执行此类可执行文件时,被发起的进程的所有者不是进程发起者,而是可执行文件的所有者;换句话说, 。 仅设置在 进程以所有者的身份运行 权限所显示的位置在文 件的属主的权限位中的执行权限位上,如果属主本来就具有执行权限,则显示为“s ”,如果本来没有执行权限,则显示为“S”。 # SUID # chmod u+s FILE # chmod 4755 FILE wanghai01@pubbeta1-nostest2:~/tmp$ ls -l total 0 -rwxr-xr-x 1 wanghai01 neteaseusers 0 Jul 29 10:37 file1 -rw-r-xr-x 1 wanghai01 neteaseusers0 码力 | 33 页 | 732.13 KB | 6 月前3
Curve文件系统元数据持久化方案设计工作正式开始 (3) 在 rehash 进行期间, 每次对字典执行添加、删除、查找或者更新操作时, 程序除了执行指定的操作以外, 还会顺带将 ht[0] 哈希表在 rehashidx 索引上的所有键值对 rehash 到 ht[1], 当 rehash 工作完成之后, 程序将 rehashidx 属性的值增一 (4) 随着字典操作的不断执行, 最终在某个时间点上, ht[0] 的所有键值对都会被 rehash rehash 至 ht[1], 这时程序将 rehashidx 属性的值设为 -1, 表示 rehash 操作已完成 哈希表渐进式 rehash 执行期间的哈希表操作: 因为在进行渐进式 rehash 的过程中, 字典会同时使用 ht[0] 和 ht[1] 两个哈希表, 所以在渐进式 rehash 进行期间, 字典的删除 (delete)、查找(find)、更新(update) 等操作会在两个哈希表上进行: 里面进行查找,如果没找到的话,就会继续到 ht[1] 里面进行查找,诸如此类 另外, 在渐进式 rehash 执行期间, 新添加到字典的键值对一律会被保存到 ht[1] 里面, 而 ht[0] 则不再进行任何添加操作: 这一措施保证了 ht[0] 包含的键值对数量会只减不增, 并随着 rehash 操作的执行而最终变成空表© XXX Page 12 of 12 参考 leveldb/boltdb/redis0 码力 | 12 页 | 384.47 KB | 6 月前3
CurveFS S3数据整理(合并碎片、清理冗余)chunkid_version_index (index为obj在chunk内的index) 执行步骤 数据整理作为一个后台服务(线程池), 运行于metaserver, 遍历metaserver的inode进行数据整理的尝试, 入队inodekey, 如果是已有inode任务, enqueue直接返回, 不入队 任务开始执行, 尝试根据inodekey获取inode信息, 获取不到就退出; 不是s3类型的inode退出 保证mds已经告知client缓存失效, 需要更新为新的s3chunkinfolist // 需不需要这个步骤@xuchaojie @chenwei确认 - 删除老的object 问题与风险 在执行变更时, 在bcd步挂掉时, 会造成s3数据的残留 当同时有多个变更inode元数据(s3chunkinfolist)的动作时, 目前的updateinode的实现是直接的覆盖, 如果数据整理和cl XXX Page 3 of 3 2. 1. 2. 1. 2. 需要进行一个merge的步骤 在做变更时如果有其他op可能会产生的冲突: 读: 在执行变更删除原来的s3 object时, 执行读的客户端的缓存可能还是原有的chunkinfolist, 可能会去读已经删除的object, 这种时候读会失败 可以使用双重保证 读失败的时候retry, 或许可以重拉metadata0 码力 | 3 页 | 101.58 KB | 6 月前3
curvefs client删除文件和目录功能设计当nlink字段减到0时,才真正删除inode。所以在实现unlink接口或rmdir接口时,需要判断unlink字段的当前值,当nlink字段大于1时,只减nlink字段就可以了,当nlink字段减到0时,才真正的执行删除inode。 目录的nlink字段与文件的nlink字段不同, , 并且在目录下, , 删除目录nlink相应的减1。 目录的nlink字段初始值为2 每创建一个新目录,nlink字段也会+1 文件已经进入回收 若其trashtime大于0 站。 通过META文件系统来访问trash 通过trash机制,可实现文件的恢复UNDEL 回收站实现了一个timer,定期判断trashtime,执行定期清理回收站 清理时,当文件仍处于打开状态,则还需要进入下sustained/reserve中。 sustained机制/reserve机制 当一个trashtime等于0的TYPE_F de tree和free list中移除。 chubaofs中实现了forget接口:首先client端,在删除inode时,如果判断到nlink减到0,则加入client端维护 。forget接口执行时,判断inode是否在 中,如果在Orpha 的OrphanInodeList OrphanInodeList nInodeList中,则向metaserver发送EvictInodeRequest,0 码力 | 15 页 | 325.42 KB | 6 月前3
Raft在Curve存储中的工程实践给其他的服务器,让他们复制这条⽇志。 3. 当这条⽇志条⽬被安全的复制,leader会应⽤这条⽇ 志条⽬到它的状态机中。 4. 然后把执⾏的结果返回给客户端。 • 提供命令在多个节点之间有序复制和执行,当多个节 点初始状态一致的时候,保证节点之间状态一致。 raft日志复制RAFT协议简介 raft配置变更 • 配置:加入一致性算法的服务器集合。 • 集群的配置不可避免会发生变更,比如替换宕机的机器。 的同时发送 entry 给其 他副本(ChunkServer)。 4. 本地持久化 log entry 成功,且另一个副本也写入 log entry 成功则 commit。 5. commit 后执行 apply,apply 把数据写入chunk。 6. 返回client写入成功。Curve块存储RAFT应用 raft apply • 由于chunk可以覆盖写,所以chunk的写入天然具有幂 Curve文件系统与Curve块存储的实现区别CURVE的RAFT配置变更 心跳 • 通过心跳维持mds和chunkserver/metaserve的 数据交互 • mds发起配置变更,copyset复制组执行 • 在curve自动容错和负载均衡时,需要进行raft配 置变更。 • 自动容错保证常见异常(如坏盘、机器宕机)导 致的数据丢失不依赖人工处理,可以自动修复。 • 负载均衡和资源均衡保证集群中的磁盘、cpu、内0 码力 | 29 页 | 2.20 MB | 6 月前3
Curve支持S3 数据缓存方案Flush流程 1.根据InodeId找到对应的FileCacheManager,执行Flush函数。 2.在Flush函数中,加写锁,通过swap获取FileCacheManager的chunkCacheMap_到临时变量tmp,并清空chunkCacheMap_,解写锁。遍历tmp中的DataCache列表,执行Flush函数,并更新对应的元数据。 3.Flush返回成功。 4.如果DataC lush的过程中有新的cache加入,则需要进行合并,合并的规则是新的cache如果和老的cache有重叠则覆盖老的cache。 FsSync流程 1.循环获取FileCacheManager,执行Flush函数。© XXX Page 9 of 9 后台流程 1.在FsCacheManager中增加一个DataCacheNum_字段,如果该字段为0,表示没有cache需要flush,则线程由条件变量控制处于wait状态。0 码力 | 9 页 | 179.72 KB | 6 月前3
Curve核心组件之mds – 网易数帆根据 chunkserver 上报的 copyset 信息更新拓扑 中的信息。 • ConfGenerator: 将当前上报的 copyset 信息提交给调度模块, 获取该 copyset 上可能需要执行的任务。 • HealthyChecker: 检查集群中的 chunkserver 在当前时间点距 离上一次心跳的时间,根据这个时间差更新chunkserver状态。 Chunkserver端:chunkserver ChunkServerInfo/CopySetInfo: 获取当前 chunkserver 上的 copyset 信息上报给 MDS。 • Order ConfigChange: 将 MDS 下发的任务提交给对应的 对应 模块执行。HEARTBEAT Chunk server的状态更新: • Online: chunk server在线,正常服务。 • Unstable: chunk server一段时间没收到心跳(默认 Schdedule的具体实现 Coordinator: 调度模块的对外接口。心跳会将 chunkserver上报上来的copyset信息提交给 Coordinator,内部根据该信息判断当前copyset是否 有配置变更任务执行,如果有任务则下发。 任务计算: 任务计算模块包含了多个定时任务 和 触 发任务。 • 定时任务由调度模块定时触发。 • 触发任务由外部触发,管理员通过工具触发。 • TopoAdapter0 码力 | 23 页 | 1.74 MB | 6 月前3
Open Flags 调研是相对于进程当前工作目录的相对路径,此时等同于open。 open flags flags定义 flags通过宏定义实现,定义见 ,主要包括如下flag fcntl.h # 红色是不支持且会执行结果错误;橙色是暂不确定但不影响写入结果;紫色为暂时无法测试;黑色是已经支持 #define O_RDONLY 00000000 #define O_WRONLY 00000001 #define flag,且值使用原O_SYNC的值,但为了兼容老版本的O_SYNC,现在O_SYNC=O_DSYNC|04000000)。 FASYNC: 异步的,启用signal-driven I/O。 : 直接I/O,执行磁盘I/O时绕过缓冲区高速缓存,从用户空间直接将数据传递到文件或磁盘设备。 O_DIRECT : 使得32位操作系统对大文件支持(_FILE_OFFSET_BITS=64)。 O_LARGEFILE access time(进程uid=文件uid或者进程在它的user namespace有CAP_FOWNER, 而文件的uid在这个namespace中有一个映射)。 O_NOATIME : 在进程执行exec系统调用时关闭此打开的文件描述符,防止父进程泄露打开的文件给子进程。 O_CLOEXEC O_PATH: 使用 O_PATH 将不会真正打开一个文件,而只是准备好该文件的文件描述符,而且如0 码力 | 23 页 | 524.47 KB | 6 月前3
Curve核心组件之snapshotcloneCurveClient: • 负责管理快照和克隆源卷的引用计数。 SnapshotRef & CloneRef:快照总体流程 • 1.用户发起快照,生成快照任务,并持久化到 etcd,开始执行快照任务。 • 2.在curve中创建内部快照,并返回快照信息, 然后将快照信息更新到etcd。此时,即返回用 户快照成功,可以进行读写。 • 3.向mds查询快照的元数据,转储快照元数据 合并读取 c) 卷从未写过, 两者都没有,返回NOTEXIST 转储内部快照,即读内部快照的三种情况:克隆总体流程 • 1. 用户发起克隆,生成克隆任务,并持 久化任务元数据到etcd,开始执行克隆 任务。 • 2. 调用mds接口创建clone卷信息,该 clone卷是个临时卷,位于/clone目录下。 • 3. 调用mds接口为目的卷分配空间。 • 4. 根据目的卷的分配信息,调用0 码力 | 23 页 | 1.32 MB | 6 月前3
共 15 条
- 1
- 2













