深入浅出FastDFS.doc_第1页
深入浅出FastDFS.doc_第2页
深入浅出FastDFS.doc_第3页
深入浅出FastDFS.doc_第4页
深入浅出FastDFS.doc_第5页
免费预览已结束,剩余31页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中兴软创科技有限责任公司 内部使用 深入浅出深入浅出 FastDFSFastDFS 状态 草稿标识号 评审当前版本 1 01 0 初始版前一版本 修订版发布日期 中兴软创科技有限责任公司中兴软创科技有限责任公司 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 2 36 页 修改历史修改历史 日期日期版本版本作者作者修改内容修改内容评审号评审号更改请求号更改请求号 2014 02 131 0 吴淼辉初始版本 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 3 36 页 目目 录录 深入浅出深入浅出 FASTDFSFASTDFS 1 1FASTDFS 简介简介 5 1 1FASTDFS 是什么 5 1 2功能特点 5 1 3适用场景 5 1 4谁在用 FASTDFS 6 2FASTDFS 架构架构 6 2 1设计理念 6 2 2轻量级 6 2 3分组方式 7 2 4对等结构 7 2 5架构图 8 3FASTDFS 功能原理功能原理 9 3 1文件上传 9 3 2文件下载 11 3 3文件删除 12 3 4文件同步 13 3 5断点续传 13 3 6文件属性 13 3 7HTTP 访问支持 14 4FASTDFS 安装和配置安装和配置 14 4 1部署方案 14 4 2NGINX安装 配置和优化 16 4 2 1 Nginx安装 16 4 2 2 Nginx配置修改 16 4 2 2 Nginx优化 16 4 2 2 Nginx双机互备 21 4 3TRACKER安装 配置和优化 23 4 3 1 Tracker安装 23 4 3 2 Tracker配置修改 23 4 3 2 Tracker优化 24 4 4STORAGE安装 配置和优化 25 4 4 1 FastDFS安装 25 4 4 2 Storage配置修改 25 4 4 2 Storage优化 25 4 5FAST NGINX MODULE安装 配置和优化 26 4 5 1 fast nginx module安装 26 4 5 2 fast nginx module配置修改 26 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 4 36 页 5FASTDFS 运维运维 29 5 1NGINX维护 29 5 2FDFS 维护 30 5 3FDFS 问题排查 30 5 4调优建议 32 5 5重点工作 升级 32 5 6重点工作 扩容 32 5 7重点工作 数据迁移 32 5 8重点工作 负载均衡 33 6FASTDFS API 开发指导开发指导 34 6 1API 介绍 34 6 2工程搭建 3 启动 nginx 检测 tcmalloc 是否启动 usr sbin lsof n grep tcmalloc 缓存使用 1 proxy temp path home proxy temp dir 指定临时文件目录 proxy cache path home proxy cache dir levels 1 2 keys zone cache one 50m inactive 1d max size 1g 设置 Web 缓存区名称为 cache one 内存缓存为 50MB 自动清除 1 天内没有被访问的文件 硬盘 缓存为 1GB client body buffer size 512k 增加缓冲区代理缓冲客户端请求的最大字节数 proxy connect timeout 60 增加连接后端服务器超时时间 proxy read timeout 60 增加后端服务器响应请求超时时间 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 19 36 页 proxy send timeout 60 增加后端服务器发送数据超时时间 proxy buffer size 32k 增加代理请求缓存区大小 proxy buffers 4 64k 增加 proxy busy buffers size 128k 增加系统繁忙时可申请的 proxy buffers 大小 proxy temp file write size 128k 增加 proxy 缓存临时文件的大小 proxy next upstream error timeout invalid header http 500 http 503 http 404 增加故障转移 如果后 端的服务器返回 502 504 执行超时等错误 自动将请求转发到 upstream 负载均衡池中的另一台服 务器 实现故障转移 proxy cache cache one 增加使用 web 缓存区 cache one 2 安装 ngx cache purge 进行缓存刷新 配置为 location purge allow 127 0 0 1 allow 10 45 47 0 25 deny all proxy cache purge cache one host 1 is args args 3 对静态文件根据更新情况 设置失效时长 具体请看 cps conf 1 open1 open filesfiles 数量优化数量优化 ulimit a 查看系统参数 其中 open files n 1024 表示系统同时最多能打开的文件数 linux 下的所有设备都可以认为是文件 包括网络连 接 如果同时超过 1024 个连接 那么 nginx 的日志就会报 24 Too many open files 多以优化的第一步就是设置 open files 为 ulimit 修改 etc profile 增加 ulimit n 65535 2 Worker2 Worker ProcessesProcesses 数量优化数量优化 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 20 36 页 通常来说设置一个 cpu 核心对应一个 worker processer 最多不超过 4 个 提高 worker process 的值是为了提高计算能力 但一般在越到 cpu 瓶颈前 你会遇到别的瓶颈 如网络问题 只有当你要处理大量静态文件的磁盘 I O 时 worker 进程是单线程的 所以这个读取文件 的阻塞 IO 会降低 CPU 的处理速度 这是可以增加 worker 进程数量 其它情况是不需要的 3 worker3 worker 进程连接数优化进程连接数优化 Worker Worker Connections Connections 默认情况下这个值是 worker connections 1024 也就是说考虑到 keep alive 超时 65 秒 每个浏览器平均消耗两个链接 chrome 会同时打开多个连接来提到加载速度 那么默认情况下 nginx 平均每秒能处理 1024 65 2 8 那么 8 86440 64w 差不多相当于每 天有 60 万 ip 多以普通网站默认值就可以了 如果你的流量一直提升 可以考虑增加这个值为 2048 或者 更高 3 3 CPUCPU AffinityAffinity 用来设置 worker 进程使用哪个 cpu 核心处理请求并且一直使用这个 cpu 核心 如果你不知 道 cpu 调度 最好别碰这个 操作系统比你更懂如何调度 4 4 KeepKeep AliveAlive Keep alive 没有数据传输的情况下保持客户端和服务端的连接 也就是保持空连接一段时 间 避免重现建立链接的时间消耗 nginx 处理空连接的效率非常高 1 万个空连接大约消耗 2 5M 内存 如果流量非常大的网站 减少建立连接的时间开销是非常客观的 keep alive 的值 设置在 10 20s 之间比较合理 5 5 tcp nodelaytcp nodelay 和和 tcp nopushtcp nopush 优化优化 这两个指令影响 nginx 的底层网络 它们决定操作系统如何处理网络层 buffer 和什么时候 把 buffer 内容刷新给终端用户 如果你不懂 就可以保持这两个指令默认不变 对 nginx 性能 影响不明显 6 6 accessaccess 日志优化日志优化 默认情况下 access 日志会记录所有请求到日志文件 写操作会增加 IO 操作 如果不需 要统计信息 可以使用百度统计或者 cnzz 统计 完全可以关闭日志 来减少磁盘写 或者写入 内存文件 提高 IO 效率 7 7 ErrorError 日志优化日志优化 错误日志会记录运行中的错误 如果设置的太低 会记录的信息太多 会产生大量 IO 推 荐设置为 warn 这样可以记录大部分信息 而不会有太多 IO 8 8 OpenOpen FileFile CacheCache nginx 会读文件系统的许多文件 如果这些文件的描述符能够缓存起来 那么会提高处理 效率 详见 http wiki nginx org HttpCoreModule open file cache 9 9 BuffersBuffers sizesize 优化优化 buffer 的大小是你需要调优最重要参数 如果 buffer size 太小就会到导致 nginx 使用临 时文件存储 response 这会引起磁盘读写 IO 流量越大问题越明显 client body buffer size 处理客户端请求体 buffer 大小 用来处理 POST 提交数据 上 传文件等 client body buffer size 需要足够大以容纳如果需要上传 POST 数据 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 21 36 页 fastcgi buffers proxy buffers 处理后端 PHP Apache 响应 如果这个 buffer 不够 大 同样会引起磁盘都系 IO 需要注意的是它们有一个上限值 这个上限值受 fastcgi max temp file size proxy max temp file size 控制 10 10 磁盘磁盘 IOIO 如果能把数据全放到内存 不使用磁盘就可以完全去掉磁盘 IO 默认情况下操作系统也 会缓存频繁访问的数据以降低 IO 所以预算足够的情况加 加大内存 11 11 网络网络 IOIO 假设我们没有了磁盘 IO 所有数据都在内存 那么我们的读 IO 大概有 3 6gbps 这种情况 下 如果你网络差 一样会很慢 所以尽可能提高网络带宽 压缩传输数据 网络带宽买你能买的起的最大带宽 nginx 的 gzip 模块可以用来压缩传输数据 通常 gzip comp level 设为 4 5 再高就是浪费 cpu 了 同时也可以采用 css js 压缩技术 当然 这些技术就与 nginx 优化无关了 绝招 如果你还想提高 nginx 处理能力 只能祭出大杀器了 别优化了 加机器吧 一点点优化 是没有用的 不如扩展机器来的快些 ps 说道系统的扩展性通常有 scale 和 extension 区别是前者是数量上扩展 后者是功能上 扩展 4 2 2 Nginx 双机互备双机互备 正常情况下 两台 Nginx 负载均衡服务器全部处于活动状态 对外提供服务 配置操作 服务器服务器 绑定绑定 IPIP 别名 别名 sbin ifconfig eth0 ha1 61 1 1 2 broadcast 61 1 1 255 netmask 255 255 255 0 up sbin route add host 61 1 1 2 dev eth0 ha1 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 22 36 页 sbin arping I eth0 c 3 s 61 1 1 2 61 1 1 1 在服务器 的外网网卡 eth0 上 绑定了一个虚拟 IP 61 1 1 2 绑定完成后发送 arping 包给网关 服务器服务器 绑定绑定 IPIP 别名 别名 sbin ifconfig eth0 ha2 61 1 1 3 broadcast 61 1 1 255 netmask 255 255 255 0 up sbin route add host 61 1 1 3 dev eth0 ha2 sbin arping I eth0 c 3 s 61 1 1 3 61 1 1 1 在服务器 的外网网卡 eth0 上 绑定了一个虚拟 IP 61 1 1 3 绑定完成后发送 arping 包给网关 自动接管公网虚拟 IP 实现故障转移 涉及操作 服务器服务器 去除去除 IPIP 别名别名 sbin ifconfig eth0 ha1 61 1 1 2 broadcast 61 1 1 255 netmask 255 255 255 0 down 通过两台服务器之间的互相检测机制 当服务器 上的检测程序发现自身的 Nginx 无法访问时 停止绑定虚拟 IP 61 1 1 2 服务器服务器 接管原服务器接管原服务器 的虚拟的虚拟 IPIP sbin ifconfig eth0 ha1 61 1 1 2 broadcast 61 1 1 255 netmask 255 255 255 0 up sbin route add host 61 1 1 2 dev eth0 ha1 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 23 36 页 sbin arping I eth0 c 3 s 61 1 1 2 61 1 1 1 给网关发送 Arping 包 保证了网关上 IP MAC 地址对应关系能够马上更改 能够 做到强行接管虚拟 IP 两台机器的 Nginx 配置文件 保持一致 上面原理涉及的配置文件 详见附件上面原理涉及的配置文件 详见附件 lb lb 4 3Tracker 安装 配置和优化安装 配置和优化 4 3 1 Tracker 安装安装 安装安装 FastDFSFastDFS tar zxvf FastDFS v5 00 tar gz cd FastDFS 修改编译文件 讲 fdfs 注册为 linux service 讲 make sh 中的 WITH LINUX SERVICE 1 注释去掉 vi make sh WITH LINUX SERVICE 1 make sh make sh install 4 3 2 Tracker 配置修改配置修改 修改配置文件修改配置文件 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 24 36 页 vi etc fdfs tracker conf 修改 base path oradata fdfs tracker 4 3 2 Tracker 优化优化 最大并发连接数设置最大并发连接数设置 参数名 max connections 缺省值 256 说明 FastDFS 采用预先分配好 buffer 队列的做法 分配的内存大小为 max connections buff size 因此配置的连接数越大 消耗的内存越多 不建议配置得过大 以避免无谓的内存 开销 工作线程数设置工作线程数设置 参数名 work threads 缺省值 4 说明 为了避免 CPU 上下文切换的开销 以及不必要的资源消耗 不建议将本参数设置得过大 为了发挥出多个 CPU 的效能 系统中的线程数总和 应等于 CPU 总数 对于 tracker server 公式为 work threads 1 CPU 数 对于 storage 公式为 work threads 1 disk reader threads disk writer threads store path count CPU 数 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 25 36 页 4 4Storage 安装 配置和优化安装 配置和优化 4 4 1 FastDFS 安装安装 同上安装同上安装 4 4 2 Storage 配置修改配置修改 修改配置修改配置 storage confstorage conf 文件文件 vi etc fdfs storage conf tracker server 10 45 47 168 22122 根据情况来设置 groupN group name group1 store path0 oradata fdfs store path1 home fdfs base path oradata fdfs 4 4 2 Storage 优化优化 storagestorage 目录数设置 目录数设置 参数名 subdir count per path 缺省值 256 说明 FastDFS 采用二级目录的做法 目录会在 FastDFS 初始化时自动创建 存储海量小文件 打开了 trunk 存储方式的情况下 建议将本参数适当改小 比如设置为 32 此时存放文件的目 录数为 32 32 1024 假如 trunk 文件大小采用缺省值 64MB 磁盘空间为 2TB 那么每个目 录下存放的 trunk 文件数均值为 2TB 1024 64MB 32 个 storagestorage 磁盘读写线程设置 磁盘读写线程设置 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 26 36 页 disk rw separated 磁盘读写是否分离 disk reader threads 单个磁盘读线程数 disk writer threads 单个磁盘写线程数 如果磁盘读写混合 单个磁盘读写线程数为读线程数和写线程数之后 对于单盘挂载方式 磁盘读写线程分别设置为 1 即可 如果磁盘做了 RAID 那么需要酌情加大读写线程数 这样才能最大程度地发挥磁盘性能 个 storagestorage 同步延迟相关设置 同步延迟相关设置 sync binlog buff interval 将 binlog buffer 写入磁盘的时间间隔 取值大于 0 缺省值为 60s sync wait msec 如果没有需要同步的文件 对 binlog 进行轮询的时间间隔 取值大于 0 缺 省值为 100ms sync interval 同步完一个文件后 休眠的毫秒数 缺省值为 0 为了缩短文件同步时间 可以将上述 3 个参数适当调小即可 4 5fast nginx module 安装 配置和优化安装 配置和优化 4 5 1 fast nginx module 安装安装 作为作为 nginxnginx 插件进行安装 具体详看插件进行安装 具体详看 nginxnginx 安装安装 4 5 2 fast nginx module 配置修改配置修改 修改配置文件修改配置文件 cp root tar csp setup file new version nginx fastdfs nginx module src mod fastdfs conf etc fdfs 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 27 36 页 vi etc fdfs mod fastdfs conf connect timeout 30 network timeout 60 base path oradata fdfs tracker server 10 45 47 168 22122 http need find content type true http mime types filename etc fdfs mime types http default content type application octet stream include etc fdfs http conf 修改配置修改配置 http confhttp conf 文件文件 vi etc fdfs http conf http mime types filename etc fdfs mime types 修改修改 mime typesmime types vi etc fdfs mime types add next contents application vnd ms word document macroEnabled 12 docm application vnd openxmlformats docx pptx xlsx application vnd ms word template macroEnabled 12 dotm application vnd openxmlformats officedocument wordprocessingml template dotx 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 28 36 页 application vnd ms powerpoint template macroEnabled 12 potm application vnd openxmlformats officedocument presentationml template potx application vnd ms powerpoint addin macroEnabled 12 ppam application vnd ms powerpoint slideshow macroEnabled 12 ppsm application vnd openxmlformats officedocument presentationml slideshow ppsx application vnd ms powerpoint presentation macroEnabled 12 pptm application vnd ms excel addin macroEnabled 12 xlam application vnd ms excel sheet binary macroEnabled 12 xlsb application vnd ms excel sheet macroEnabled 12 xlsm application vnd openxmlformats officedocument spreadsheetml template xltx application vnd ms excel template macroEnabled 12 xltm 修改配置修改配置 nginx confnginx conf 文件文件 具体请看 csp conf 文件 location M00 root oradata fdfs data if arg attname add header Content Disposition attachment filename arg attname access log logs fdfs access log access ngx fastdfs module 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 29 36 页 其他 其他 ln s home yuqing fastdfs data home yuqing fastdfs data M00 具体配置文件 参考附件具体配置文件 参考附件 etc fdfs etc fdfs 5FastDFS 运维运维 5 1Nginx 维护维护 使用 nginx 实现 FastDFS 的 HTTP 访问 安装好 nginx 和 FastDFS 应用系统投 入使用后 对 nginx 的维护工作 包括服务的启动 停止 重启和日志监控等工作 启动命令启动命令 usr local nginx 1 4 4 sbin nginx c usr local nginx 1 4 4 conf nginx conf 停止命令停止命令 usr local nginx 1 4 4 sbin nginx s stop 重启命令重启命令 修改配置修改配置 usr local nginx 1 4 4 sbin nginx s reload 日志监控日志监控 usr local nginx 1 4 4 logs error log 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 30 36 页 usr local nginx 1 4 4 logs access log 5 2FDFS 维护维护 FDFS 的维护工作 包括服务的启动 停止 重启和日志监控等工作 启动启动 TrackerTracker 命令命令 fdfs trackerd etc fdfs tracker conf 停止停止 TrackerTracker 命令命令 killall fdfs trackerd 监控监控 TrackerTracker 日志日志 home yuqing fastdfs logs trackerd log 启动启动 StorageStorage 命令命令 fdfs storaged etc fdfs storage conf 停止停止 StorageStorage 命令命令 killall fdfs storaged 监控监控 StorageStorage 日志日志 home yuqing fastdfs logs storaged log 5 3FDFS 问题排查问题排查 上传文件客户端上传文件客户端 usr local bin fdfs upload file 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 31 36 页 下载文件客户端下载文件客户端 usr local bin fdfs download file local filename 删除文件客户端删除文件客户端 usr local bin fdfs delete file 健康健康 storagestorage 健康状态健康状态 fdfs monitor etc fdfs storage conf 删除删除 storagestorage usr local bin fdfs monitor delete 例如 usr local bin fdfs monitor etc fdfs client conf delete group1 192 168 0 100 注意 如果被删除的 storage server 的状态是 ACTIVE 也就是该 storage server 还在线 上服务的情况下 是无法删除掉的 MimeMime typetype 要求必须小写 因为要求必须小写 因为 mimes typemimes type 配置的类型为小写配置的类型为小写 启动启动 storagestorage serverserver 时 一直处于僵死状态时 一直处于僵死状态 启动 storage server storage 将连接 tracker server 如果连不上 将一直重试 直到 连接成功 启动才算真正完成 出现这样情况 请检查连接不上 tracker server 的原因 多 tracker server 在启动时会做时间上的检测 判断是否需要从别的 tracker server 同 步 4 个系统文件 触发时机是第一个 storage server 连接上 tracker server 后 并发起 join 请求 如果集群中有 2 台 tracker server 而其中一台 tracker 没有启动 可能会导致 storage server 一直处于僵死状态 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 32 36 页 5 4调优建议调优建议 参考上面 nginx fdfs 调优章节内容 结合参数说明 业务需求和软件硬件情 况 合理优化 FDFS 5 5重点工作 升级重点工作 升级 不需要数据迁移 新版本完全兼容旧版本 包括配置文件 都是向下兼容滴 直接升级程序和配置文件即可 需要统一升级版本 不同的版本不能混用 5 6重点工作 扩容重点工作 扩容 FDFS 扩容有两种方式 一个 group 内增加节点存储容量或者增加 group 前者 通过硬盘扩容的方式实现 后者通过增加服务器方式实现 方式一 横向扩容 硬盘扩容方式 只需对某 group 内的服务器 分别加硬盘 即可 通过操作系统把新硬盘 mount 进去 在新的硬盘中 创建 FDFS 存储目录 如 myext 1 fdfs 然后修改 stroage conf 文件 增加 store pathN myext 1 fdfs 其中 N 为当前路径数 1 最后同步配置文件到同 group 内的其他节点 重 启 stroage 完成扩容工作 方式二 纵向扩容 增加 group 方式 规划 group 内的数据节点 存储目录 配置文件等保持一致 建议整个 storage cluster 中的配置 规则保持一致 修改 storage conf 文件 把 group name groupN 其中 N 为当前分组数 1 重启新增的 group 集群即可 5 7重点工作 数据迁移重点工作 数据迁移 FastDFS 集群整体迁移的问题 如果新旧 IP 地址一一对应 而且是一样的 那非常简单 直接将 data 目录拷 贝过去即可 IP 不一样的话 会比较麻烦一些 如果使用了 V4 的自定义 server ID 特性 那么比较容易 直接将 tracker 上 的 IP 和 ID 映射文件 storage ids conf 修改好即可 机密机密 2 年 本文中的所有信息归中兴软创科技有限责任公司所有 未经允许 不得外传 第 33 36 页 如果是用 IP 地址作为服务器标识 那么需要修改 tracker 和 storage 的 data 目录下的几个数据文件 将旧 IP 调整为新 IP 注意 storage 的 data 目录下有一个 打头的隐藏文件也需要修改 另外 需要将后缀为 mark 的 IP 地址和端口命名的同步位置记录文件名改名 文件全部调整完成后才能启动集群服务 tracker server 上需要调整的文件列表 data storage groups new dat data storage servers new dat data storage sync timestamp dat storage server 需要调整的文件列表 data data init flag data sync ip addr port mark 此类文件 需要将文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论