1、MyShard介绍,欢聚时代:喻先兵,1,MyShard是什么,http:/ 位于应用程序和MySQL之间 截取用户SQL请求、SQLRewrite、转发到MySQL MyShard是一种高可用数据库 实现在主主复制功能 跨IDC部署,高可用系统,数据层,服务层,代理层,APP,高可用系统:透明的应用故障切换、消除单点故障 应用程序故障发生时,可以自动透明地切换到其他服务器上 应用程序和查询不会中断,用户感觉不到故障的发生 代理层服务层高可用 代理层智能路由 服务层多点连接 读写分离 数据层 集群容错技术 磁盘备份技术 多机房容灾技术,APP,为什么要开发MyShard,4,主数据库IDC1,
2、从数据库IDC2,从数据库IDC3,数据服务,读写分离,主数据库IDC1,主数据库IDC2,主数据库IDC3,数据服务,写代理,高可用,可伸缩,数据服务,Myshard IDC1,Myshard,Myshard,Myshard IDC3,Myshard IDC2,Myshard IDC1,开源的NoSQL,5,mongoDB,HBase,为什么不采用这些NoSQL? 跨IDC的高可用 全局第二索引,MyShard部署模型,高可用性、分区容错性、最终一致性 Multi-Master【主主服务】模型 专业灵活高效的版本冲突检测解决机制 可伸缩性 灵活的分布式策略和路由能力 海量存储能力 高并发服务
3、能力 其他特性 MySQL协议的服务能力和半关系型操作模型 高效可靠数据同步能力,MyShardIDC1,服务代理,客户端,同步服务,MySQL分区,MyShardIDC3,服务代理,客户端,同步服务,MySQL分区,MyShardIDC2,服务代理,客户端,同步服务,MySQL分区,binlog同步原理,Myshard(g1),MySQL,MySQL,中继日志,Binlog,Binlog,Myshard(g2),MySQL,MySQL,中继日志,Binlog,Binlog,CAP原理,Consistency,Availability,Toleerance to network Partiti
4、ons,C: Consistency 一致性A: Availability 可用性P: Tolerance of network Partition 分区容错性,传统关系型数据库:CA非关系型数据库: AP,BASE模型,Basically Availble基本可用 Soft-state软状态/柔性事务 Eventual Consistency最终一致性,Quorum NRW,N:复制的节点数量 R:成功读操作的最小节点数 W:成功写操作的最小节点数 W+RN,可以保证强一致性 典型的场景:强一致性:W=N,R=1高可用性:W=1,HBase:W=N,R=1 MyShard:W=1,R=1,最
5、终一致性模型,机房A,机房B,机房C,最近版本值,最近版本值,最近版本值,(k:0),(k:1),(k:0),(k:2),(k:0),(k:3),w (k:2),w (k:3),(k:3),w (k:1),w (k:3),(k:3),w (k:1),w (k:2),(k:3),实现简单,优化资源,高效适用,w (k:1),w (k:2),w (k:3),第二索引,MySQL,MySQL,MySQL,MyShard,用户表uid分区,按用户名查询怎么办?,MySQL,MySQL,MySQL,数据,第二索引,用户索引按用户名分区,MyShard,Select * from user where u
6、id=1 and name like=%; Select * from user where name=henry;,索引类型,全局第二索引,一致性第二索引,建表存储索引数据,存储所有字段,存储所有数据,create index idx_order_uid on order partition key uid sharding_rule hash_int_100;,CREATE QUICK INDEX idx_order_q ON order PARTITION KEY uid SHARDING_RULE hash_int_100 WITH type = “10“; select count(
7、*) from order where uid=1 and type=10;,建表存储索引数据,存储主键、索引、版本字段,可存储部分数据,以空间换时间,以效率换一致性,本地索引,在原表上建索引,mysql的索引格式,以空间换时间,ALTER TABLE order add INDEX idx_order_local ( prod_id,order_time) ;,sharding,MySQL,MySQL,MySQL,MyShard,数据,hash分区 根据分区键查询,支持in语法范围分区 根据范围查询,支持跨分片的范围查询,结构化数据模型和半关系操作模型,用户表,考分表,KV,HASET ta
8、ble_name SET V1=:v1,V2=:v2 WHERE K1=:k1 and K2=:k2 HADELETE table_name WHERE K1=:k1 and K2=:k2,读操作,Select * from a where partition_key=1 and ( 其他条件) ; Select f1,f2,f3 from a where partition_key=1 and ( 其他条件) ; Select t1.f2,count(t1.f3),sum(t2.f1) from a t1,b t2 where t1.partition_key=t2.partition_ke
9、y and t1.partition_key=1 and (其他条件)复杂条件可选,目前支持的其他条件有:i) 关系型比较 a = 1 ,a 1ii) between 语法: a between v1 and v2iii) like 语法: a like adfadfaiv) in 语法: a in ( v1,v2,v3)v) 函数: mysql的函数基本上都能支持 Select t1.f2,count(t1.f3),sum(t2.f1) from a t1,b t2 where t1.partition_key=t2.partition_key and t1.partition_key=1
10、and (其他条件),DML,INSERT INTO T ( f1,f2,f3) values (v1,v2,v3) UPDATE T set f2=v2 where f1=v1 and f3v3; DELETE FROM T where f1=v1 and f3123;,,对于数据进行批量更新和版本控制,对数据进行批量删除功能,批量插入主数据和第二索引,用于数据维护,快速的批量查询功能,批量SET,批量删除,批量插入,批量查询,批量处理功能,批量数据处理: 1、通过扩展MySQL语句实现,不增加程序复杂性; 2、把访问接口扩展为key-value访问,避免SQL解析; 3、提供大规模数据的访
11、问和存储能力;,统计查询功能,17,MySQL,MySQL导出文件格式(CSV格式) “1”,“abc”, “cde”rn” “2”, “cdf”,”ddd“,MySQL,MySQL,MetaData,Myshard,HiveMyshardHandler,Plugin,MySQLSerDe,Myshard订阅器,Myshard主库,,Myshard生态,Myshard(g3),Myshard(g2),Myshard(g1),Myshard从库(g0),Myshard发布系统,Rabbitmq 订阅器,内部队列 订阅器,文件订阅器,可扩展订阅框架,MySQL订阅器,MyShard的安装,1、准备
12、myshard_deploy.xml,business_name default_admin_port,default_sync_port, default_shard_port,redip db_collate,db_charset idc information,2、执行安装 python deploy_myshard.py,MyShard维护,DDL 创建/删除数据库 创建/删除表 创建/删除索引 添加字段,其他管理SQL语句 添加/删除红名单 添加/删除服务器 添加/删除分区规则,运维状态,1.节点故障,2.增删节点,工作状态,系统进入运维状态后,所有的请求都将会进行查询转移到其他的M
13、yshard上执行。,系统状态模型,3.创建删除表,4.创建删除索引,故障转移,自动选取下一个Group No 可以配置制定故障转移的Group No,MyShardIDC1,服务代理,客户端,同步服务,MySQL分区,MyShardIDC2,服务代理,客户端,同步服务,MySQL分区,MyShard之间 的故障转移,数据导入/导出工具,23,Oracle,MySQL,标准格式 文本文件,批量导入工具,MyShard,MySQL导出文件格式(CSV格式) “1”,“abc”, “cde”rn” “2”, “cdf”,”ddd“,批量导入工具,统计监控功能,24,Myshard,Myshard,Myshard,性能指标: 1)处理速度 2)同步记录处理速度 3)跨机房传输速度 4)同步延迟 处理延迟指标: 1、读 30ms、100ms、1s 2、写 30ms、100ms、1s,细节指标: 1、读处理数 2、写处理数 3、异常次数,监控系统,监控数据,25,谢谢!,26,