# SNBS介绍
苏宁自研的块存储,简称SNBS:有些模块和GFS差不多,GFS也没开放过原码,GFS不是glusterfs,是谷歌的一个文件系统,有借鉴,但底层逻辑还是有区别的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| snbs特点: 1.高性能 a. 以SSD设备作为缓存,充分利用SSD低延迟,高IOPS的特性 2.高可靠 a.通过多副本,保证在服务器宕机时,数据不会丢失 b.多副本采用强一致性写,保证数据一致性 3.低消耗 a.兼容商用x86服务器,无特殊硬件需求 b.存储仅占用有限的计算资源,避免额外购置存储服务器,完美适配超融合架构 4.横向可扩展 a.性能与容量同步线性扩展 b.单集群最大可支持255个节点 5.易于集成 a.提供标准的isCSI接口,完整的RESTful API支持 b.支持KVM,VMware ESXi, XenServer等虚拟化/云平台
写缓存: 对于大小块混合写的业务场景,在SSD Cache中可以识别出大于等于128K的io【snbs是大于1M】,将其Bypass直接下发到HDD,用户可以自定义大块io Bypass的SSD Cache阈值,默认大块io优先写入SSD Cache中,当达到阈值后,超出的大块IO会选择下发到HDD中。但是当HDD盘利用率也较高时,大块io仍然回到SSD Cache中。 通过这个方式,大块io可以同时打满HDD和SSD,能够解决以下两方面问题: 1大块io访问SSD Cache会受限于SSD的带宽,影响整个集群的带宽。 2大块io访问SSD Cache会增大SSD的压力大幅影响SSD上的其他小块io时延。 合并刷盘技术: 在XSKY产品的io栈中,离散的随机小块io会先写到SSD中,通过合并刷盘技术将离散随机小块io合并成连续大块io写入到HDD中,提升系统整体IOPS性能同时减少HDD硬盘寻道次数,降低硬盘损耗,延长硬盘使用寿命。 1.2.7热卷缓存锁定对指定的卷实现专用缓存加速,避免性能瓶颈。
|
为啥需要自研存储?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| 存储服务作为数据的持久保护在基础架构中很重要。其稳定性和成熟度一直是产品选型的重中之重。国内Ceph厂家一直存在重UI、重功能、而轻稳定性、轻性能的不良倾向,过分依赖Ceph开源社区,甚至无法对Ceph优缺点有一个深入的认识,自然无从改进Ceph的稳定性和性能面临的问题。 ceph本身也架构厚重,复杂度高 市面上 Ceph 分布式块存储,包括 Redhat原生Ceph 集群在实际应用中常面临以下三个方面的问题: 1. IO 性能较差: Ceph为保证数据强一致性和掉电数据保护,较多地采用了同步落盘(同步写)策略;而 Ceph 本身缺乏一个高效的 DRAM/SSD 缓存机制;此外,随机性数据分布容易导致 IO 工作负载分布不均,在某些磁盘上出现较多 IO 而导致大时延现象甚至阻塞; 2. Backfilling 风暴: 3 副本策略导致在硬盘出现故障时,系统必须尽快完成数据重建。 数据块速重建容易影响业务正常允许,也可能导致次生故障; 【 Backfilling 含义:回填状态 引起原因:这种情况一般是由于osd的离线(超过5分钟没有心跳回应),ceph找寻新的osd来替换所进行的全量数据拷贝。 后果:出现这个状态一般都是确定有osd挂掉或者离线了 解决方案:多数情况下ceph会自动完成数据回填,如果无法完成回填,就会进入backfill-toofull状态
ackfill-toofull 含义:backfilling挂起状态 引起原因:通常是因为osd容量不足以回填丢失的osd引起 后果:造成pool无法写入,读写卡死。 解决方案: 需要检查osd容量,是否有严重不平衡现象,将超量osd数据手动疏散(reweight),如果是集群nearful现象,应该尽快物理扩容 紧急扩容方式(治标不治本,最好的方法还是扩展osd数量和容量) 暂停osd读写; 】
3. 硬件老化以及 Bit-rot 等隐形数据损坏: 与传统中高端磁盘阵列相比, Ceph 缺乏在线数据完整性校验机制,在硬件老化或出现硬盘 bit-rot 情形下系统可能出现崩溃现象 Bit-rot: 位衰减是指存储在存储介质中的数据的性能和完整性的缓慢恶化。它也被称为比特衰变、数据腐烂、数据衰变和静默数据损坏。 存储阵列供应商意识到了位衰减,他们研发产品,用以在将磁盘放进阵列之前识别磁盘上的缺陷,然后监控生产运行中的磁盘,在衰减成为一个问题之前检测到它。 尽管数据中的位衰减发生的频率通常很低,但它可能在遇到磨损、灰尘、其他污染物、背景辐射以及高热情况时发生率有所上涨。为了防止位衰减,管理员应定期检查存储的数据并将其与已知的副本进行比对。
|
因主流开源产品的存在种种不足,选择了自研道路
ceph |
架构厚重,复杂度高,性能不足 |
sheepdog |
不易扩展,性能不足 |
相较业界主流产品,高效云盘的开发周期短
Ceph块存储 |
2011~2014 |
阿里云 |
2009~2012 |
AWS |
2003~2006 |
SNBS |
2018.Q4~2019.Q4 |
与现有本地存储相比,存在如下优势
Thin-Provision |
按照业务实际使用分配资源 |
高可靠 |
默认三副本,保证数据安全 |
数据迁移 |
无需调整数据归属,动态迁移业务 |
易扩展 |
集群扩容时业务无感知 |
随机写性能高 |
根据我司典型应用场景,对随机写做了特殊优化 |
** ** |
场景 |
痛点 |
虚机迁移 |
双十一大促后,江北易购机房,购物核心系统不满足当前调度规则需要资源打散的虚机共计3258台,占比80% |
迁移虚机镜像,迁移时间>30分钟 数据盘大于1TB,迁移>2小时; 影响业务,只能在夜间进行(一般1点以后); 迁移完需要人工验证(业务验证时间0.5~2小时); |
本地盘限制 |
运维反馈平均1个月纵向磁盘扩容工单超过1000台虚机(DB占60%)。 空间不够需要迁移扩容的大概有30%。 部分系统同一集群宿主机无法满足扩容空间要求,需要在其他集群新建,占10%。 大型商用数据库单库容量过大,无法使用服务器本地盘来保存 |
当数据库无法迁移需要新建数据库时,要先备份数据,再恢复数据到新机器上,花费时间长。物理机发生故障无法恢复时,只能通过备份恢复数据,耗费时间较长(小时级); |
资源分配 |
DB宿主机使用SSD硬盘,宿主机整体io使用率低 分配资源时,须考虑CPU、内存、硬盘容量、硬盘io性能等多个维度的均衡 |
超过70%的DB宿主机io读写峰值低于5000 io读写峰值超过20000的仅占3%; 平均峰值IO使用率约31%;资源碎片(cpu平均分配率69%,存储平均分配率55%,内存分配率93.7%);易造成io使用率不均,io使用率低或者io争抢; |
1 2 3 4 5 6 7 8 9 10 11 12 13
| 用途:替代云环境中的非IO敏感块存储,实现计算资源(CPU/RAM)和存储资源(Storage)硬件分离,通过网络(10G/25G)连接。 优势:弹性扩容、简化调度、高可用、快速迁移、性能分级
外采和自研并行 外采短期内解决痛点问题;自研长久夯实自身能力 SIT环境分布式块存储使用情况: 6节点存储集群开放申请云盘不到2天,目前已支持99个虚机的系统盘和数据盘,其中包括14个数据库,业务系统使用本地盘还是云盘无感知 包括测试卷和操作系统镜像卷,一共262个卷,分配容量22610GB,使用精简配置技术,实际占用6813G,超分比1:3,整体IOPS 100左右
针对苏宁的应用场景,性能上做了特殊优化 测试配置:8台X86服务器,4台压测机,一组万兆交换机 存储单台配置:CPU:2*4114,内存:≤128GB,缓存:SSD/NVMe,数据盘:10*4T,网卡:2*10Gb
|

机器配置:

机器数量:
6台存储服务器:
3台元数据服务器:

一个块存储集群内部有多个区域(region),一个region有若干个资源池(POOL),每个POOL可以有多个故障域(ZONE)。每个集群只有一组MASTER,使用ETCD存储元数据(卷信息和chunk信息)。每个ZONE有若干个chunkserver
存储服务器:
前期硬件准备:
系统盘:600G*2 SAS (raid1)
安装模块:
\模块** |
\磁盘使用** |
\IP配置** |
ChunkServer |
数据盘:10*4T HDD 写缓存:960G SSD 读缓存:960G SSD 日志位置:系统盘 |
IP:数据网段 |
GateWay |
日志位置:系统盘 |
IP:数据网段 |
TgtMaster |
日志位置:系统盘 |
IP:数据网段 |
DiskCheck |
|
|
Nrpe |
|
|
元数据服务器:
系统盘:600G*2 SAS (raid1)
存储盘:960G*2 SSD (raid1)
安装模块
\模块** |
\磁盘使用** |
\IP配置** |
Master |
日志位置:系统盘 |
IP:数据网段 |
Etcd |
日志位置:系统盘存储位置:960G SSD |
IP:数据网段 |
- 硬盘准备:
存储服务器:
两块600G SSD,做Raid1
其他盘全部直连
元数据服务器:
两块600G SSD,做Raid1
两块960G SSD,做raid1
系统安装和基础设置
系统盘预留单独分区
/opt/log (200G)
l/home/snbs (100G)
其他按默认安装
l元数据服务器 把960G的SSD盘挂载到/mnt/data
- 网络配置
所有机器万兆网卡进行模式(mod=0),并接入存储网络
千兆网卡接入管理网络,bond
- 操作系统用户
保留root用户
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 什么是块存储/对象存储/文件系统存储?
1.对象存储: 也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有 Swift 、S3 以及 Gluster 等;
2.块存储: 这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,这种接口需要实现 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,青云的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储;
3.文件系统存储: 通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存储的接口),但是有时候又会把 GlusterFS ,HDFS 这种非POSIX接口的类文件存储接口归入此类。当然 NFS、NAS也是属于文件系统存储;
|
1 2
| ceph文章: https://www.cnblogs.com/zzzynx/p/11010870.html
|
1
| 问你们一个我没答出来的问题:为什么私有云后端的存储都是选择分布式块存储?而不是对象或者文件。
|
测试软件
\软件** |
\版本** |
\用途** |
\说明** |
Vdbench |
50406 |
存储性能测试 |
Vdbench是一个专门用于帮助工程师和客户生成磁盘I/O工作负载的命令行工具,来自Orcale,下载需遵守OTN许可协议。 |
SwingBench |
2.5 |
Oracle性能测试 |
Swingbench 是一个免费的压力测试工具, 用于Oracle 数据库11g和12c的性能基准测试。 |
Sysbench |
1.0.8 |
MySQL 功能及性能测试 |
Sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。 |
CentOS |
7.3 |
操作系统 |
|
苏宁分布式存储(SNBS)模块介绍
1 2 3 4 5 6 7 8
| ISCSI Server:对外提供iscsi接口,因此ISCSI Server通过tgt实现iscsi的target,负责将iscsi客户端(iscsi initiator)发过来的iqn操作请求转发到对应的Getway,实现对绑定的块设备卷的操作; Getway:作为SNBS的数据处理网关,将ISCSI Server发过来的数据读写请求映射到块设备卷的读写逻辑处理:如果是写请求,Getway会根据对应卷操作的偏移和size,到Master创建chunk,并到对应的Chunkserver完成实际数据的写入;如果是读请求,Getway根据本地缓存中的元数据信息,找到对应的chunkid,并到对应的chunkserver读取数据; Master:作为SNBS大脑,负责核心元数据的存储、资源的分配、任务(均衡、修复、迁移)的调度等。核心元数据包括卷信息和chunk信息。Master通过etcd进行选主:MASTER上电时会统一发事务请求给ETCD进行选主,当主Master挂了后,etcd会通知其他Master竞争选主; Etcd:首先ETCD提供Master的数据存储;其次,ETCD还作为Master模块选主的仲裁。ETCD自身通过raft协议进行选主。 Region:一个逻辑概念,不同的区域用于区分一个集群中不同的机房,目前一个集群只会存在于一个机房; Pool:SNBS会将一个区域中的资源划分为多个资源池,一般是依据不同的存储介质进行划分,通常分为全闪、混合、SATA3中资源池类型,以满足不同的用户对性能的要求。不同的资源池间的数据支持迁移和克隆; Zone:每个资源池内部有多个故障域(Zone),一个故障域可以是一个机架,一个故障域损坏不会影响整体集群的服务。块存储目前是基于副本机制实现数据的可靠性,同一个chunk的不同副本会在不同的故障域; Chunkserver:存储数据的服务器。SNBS的Chunkserver最大的特点就是不通过文件系统直接管理裸盘,提高了数据的读写效率,并通过追加写和元数据缓存进一步提高写性能。一个Chunkserver管理若干个裸盘
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
| 昨天最后一个问题问我:你觉得最合理的灾备的架构是什么样
王老吉 我回答说:两地三中心。然后再解释了一下什么叫两地三中心。
王老吉 然后愉快的结束
陈玉强 什么是两地三中心?
格瓦斯 现场能写出来的也就是算法类的的。就比如之前我跟陈玉强说的,来来来,小伙子,实现下多叉树平衡算法
王老吉 本地数据中心、多活数据中心(同城)、灾备数据中心(异地)
王老吉 同城多活考虑数据实时双写
王老吉 异地灾备考虑数据备份
王老吉 同城双活保证业务不断
王老吉 异地灾备保证数据不丢
王老吉 属于灾备级别最高的一级了
王老吉 里面有RTO和RPO的一些指标要求
陈玉强 苏宁现在已经这么做的?还是规划准备这么做?
王老吉 苏宁现在只做了同城的双活
王老吉 打引号的双活
格瓦斯 苏宁去年才开始搞同城
王老吉 苏宁的灾备还远呢
格瓦斯 对象的RTO和RPO 还都是我开始定的。分钟级
王老吉 最高级别的灾备都是约等于0
王老吉 RTO和RPO
王老吉 RTO业务中断时间 RPO数据丢失量
王老吉 这些知识我刚入行存储就知道了 所以他们问我我基本都知道
王老吉 问我块、对象和文件的区别
格瓦斯 RTO 那边开始说是看网络,
格瓦斯 「王老吉: 问我块、对象和文件的区别 」
——————
你咋回答的?
陈玉强 可以改名面试经验分享群
王老吉 块存储是一种裸设备,通过iscsi/FC协议挂载给服务器,作为磁盘设备。本身没有文件系统这一层,适合于数据库等结构化数据的存储。
王老吉 文件存储本身有自己的文件系统,通过CIFS/NFS等文件共享协议提供服务。适用于多服务器共享,主要用于日志的集中管理和办公共享。适合文档、音视频等非结构化数据的共享存储。
王老吉 块存储和文件存储的本质区别就在于文件系统的位置不同
王老吉 而对象就融合了块和文件的优点,既有块存储的高速也有文件存储的共享属性。属于更上层的存储,有自己的cpu 内存 网络和磁盘。通过开放的restful接口提供web服务,方便业务系统集成。
王老吉 大概是这个意思
王老吉 对象适合于文档、图片、音视频等海量非结构化数据的存储
格瓦斯
王老吉 这是我一面的时候问我的问题
王老吉 还问了我 备份和容灾有没有区别
王老吉 等电话了 估计要到下午
王老吉 hr会给我打
王老吉 很紧张
格瓦斯 我要吃多佐
陈玉强 大家想想吃啥吧
陈玉强 连吃三天
王老吉 说实话 还是面存储我比较随意 因为我基础知识还可以的
王老吉 我的弱项就是底层的开发流程 但是找你们恶补的也差不多了
王老吉 足以应付
王老吉 昨天那个技术总监 面完我之后很谦虚的说他们不专业
格瓦斯
王老吉 我跟他聊了一下我们的架构
格瓦斯 看来我要吃两顿 多佐
王老吉 我们怎么从tgtd强绑定 到解耦tgtd 再到去tgtd(Qemu)
王老吉 晓伟跟我说的这套好有杀伤力
王老吉 跟他讲了下我们的日志型写缓存
王老吉 gateway读缓存 热点缓存命中
陈玉强 以前我们面试用过这招。。面其他厂家的人,套取别人是实现细节
王老吉 我本来还准备了ceph和glusterFS的一些东西
王老吉 没问
王老吉 本来我还想跟他讲讲crush算法和哈希算法
格瓦斯 碰到不会的,就挂个高薪招聘。
格瓦斯 我也干过这事。。。
王老吉 金鑫跟我说的随机+权重我都准备好了
王老吉 没问
王老吉 可惜了
王老吉 QoS我也说了 但没问我技术细节
格瓦斯 之前玩PG的时候,专门找oracle大神来问,15年挂30K,然后问完就没下文
王老吉 强哥告诉我的令牌桶我已经准备好了
金鑫 你是集大成于一身啊
金鑫 不成功都难啊
王老吉 所以吧 我感觉多去准备些技术细节相关的东西有帮助
王老吉 这些个细节反正对面不一定完全听得懂
王老吉 你说得出来就会唬住他
王老吉 尤其我还是个产品
王老吉 不是个只会UI的
王老吉 他们还停留在UI的层面
王老吉 架构、数据流程(怎么读、怎么写)、性能优化、稳定性优化
王老吉 这四个方面 我觉得准备一下 就够用了
格瓦斯 昨天的是字节,阿里的怎么说?@王老吉
王老吉 阿里的凉凉了 我估计 那天下午有个电话没接到
王老吉 阿里打过来的
王老吉 然后也没收到拒绝邮件
王老吉 不会是因为我没接电话 借给我截胡了吧
王老吉 那天在和王星童吹牛逼
王老吉 手机振动我都没感觉到
王老吉 下午五点多的时候
王老吉 你们知道 张一鸣和我是同一个大学同一个专业吗
王老吉 @全体成员
王老吉 南开大学 微电子 估计我和他住过同一栋宿舍楼
王老吉 万一进了字节也可以吹牛逼了
王老吉 我和创始人住过同一栋宿舍楼 去上海搞个校友群
独立克隆是不是除了复制元数据 还得复制数据
格瓦斯 嗯,独立克隆就是全部复制一遍了。严格来说就是复制数据了,元数据就由新的数据再构建了
|
1 2 3 4 5 6 7 8 9
| 自动化 协议 sql etcd redis 网络:dns dhcp 接口测试: 代码:c c++ java 测试工具:
|