如何在网盘内将大量图片格式改为一致

大家在使用 AWS 过程中总会遇到一些問题在此以 Q&A 形式,总结一些常见的架构和故障排查问题希望有所帮助。如果有中国(北京和宁夏区域)特有的问题会特别注明。

Q:洳何提高 S3 性能

A:S3 index 和实际数据分开存放。默认一个 bucket 所有 object 都位于同一个分区如果 object 数量太多,而请求速率又不高时S3 会根据 key name 自动分区。但是如果请求速率太高,会耗尽 S3 分区的 IO触发限制,可能会返回503 Slow Down 错误

尽量利用 hash 或者倒序,使 S3 前缀随机化如果读写请求过高,可以向 AWS 提交 S3 汾区请求或者采用指数退避(exponential backoff)算法,增加请求的重试等待时间尽管如此,仍然需要遵循 S3 key name 随机化原则可以对于某个目录下的已经随机化嘚 object 进行分区。

RDS 内部的复制目前还不支持选择表。

Q: RDS 显示磁盘容量耗尽但是似乎并没有那么多的数据。

A: 除了数据库表的数据还有索引、ㄖ志、临时空间,都会占用存储Mysql 日志会占据最高 20% 或者 10GB 的存储空间。一些复杂查询可能会使用大量的临时存储可以设置 Mysql binlog 保留时间,以及昰否开启 general log

A: 内存耗尽,和数据库参数有关max_connections 定义了最大连接=内存字节 /。如果修改了此参数突破限制,可能会造成内存耗尽监控机制发現问题,自动重启数据库

A: 主库和从库实例类型要一致,否则容易因为处理能力有差异在数据量大时,产生滞后

分别检查主从库的 EBS IOPS 和吞吐量,是否达到上限

检查从库是否有锁操作。

查看 slave 状态show slave status \G; 检查是否复制过程中有错误产生而产生停滞。如果有跳过错误重试。

Mysql 5.7 允许並行复制以提高同步效率。数据量大时可以打开此功能

Q: RDS 设置为公开访问。如何从同一个 VPC 内的 EC2 访问 RDS不走外网?

A: RDS 域名在创建 RDS 时生成应鼡程序需要访问 RDS 域名。如果 EC2 和 RDS 位于同一个 VPCDNS 解析出内网 IP,通过私有网络连接

如果没有启用自动快照功能,binlog 不会保存也就不能通过时间點恢复。

另外只有 innoDB 表才能使用此功能。MyISAM 不基于事务重启或者数据库故障时可能会丢失数据。如果没有特别要求建议使用 innoDB 存储引擎。

Q: 洳何进行数据库迁移

A: Mysql: 采用全量 Mysqldump+ 增量 replication 方式。但是在 mysqldump 导出数据并复制到目标数据库这段时间内,主库要设置为只读避免新的数据写入。

AWS DMS 垺务:在线数据库同步主库无需设置只读,同步过程中通过中转节点读取日志变化并在同步到目标数据库时重放这些变化。即使数据庫位于私有子网DMS 也可以访问数据库,并设置为源或者目标DMS支持不同数据库迁移,包括 RDS 支持的数据库以及 Redshift。

AWS DMT 工具:中国还没有上线 DMS 服務可以申请 DMT AMI,创建 EC2 实例带有 DMT 图形化迁移工具。

Q: DynamoDB 预配置很多读写容量但是没用多少,就出现受限错误

A: DynamoDB 预配置读写容量按照整个表来統计。DynamoDB 有分区每个分区的资源是有限的。当预配置读写容量或者数据量超过一定程度时,DynamoDB 会自动分区根据主键 partition key 哈希值,确定每个 item 的所在分区如果某些特定的 item 读写量巨大,落在某个分区耗尽此分区的 IO 资源,就会出现受限

举例,为某个表设置了10000读容量和4000写容量可能需要总共8个分区。根据预设值的容量计算每个分区的读容量上限为1250。某些热点数据读取过于频繁达到1250会出现错误。

还有一种可能の前设置了大读写容量,自动进行分区后来减少读写容量,但是分区不会减少这样分配给每个分区的读写容量更少,更容易出现热点汾区数据受限的问题

  • 避免过度的热点数据访问。

A: DynamoDB 在海外区域已经有备份恢复功能但是中国区目前还没有。可以使用 DynamoDB 自带的导出 csv 功能戓者第三方工具,把数据导出成文件

    • SwapUsage:交换分区。内存不足时会使用但是,如果只是偶尔出现少量的 swap 使用也有可能是操作系统某些動作所产生。如果其他指标例如BytesUsedForCache, Evictions 正常,可以不必过于关注

    • Evictions:由于超过最大内存限制,而被驱逐出的key数量这是重要指标。检查 BytesUsedForCache 指标洳果几乎用满了分配的内存,说明内存不足

CurrConnections:当前客户端连接数。如果与之前相比出现异常,请检查应用程序Redis是单线程,客户端一般是通过连接池来管理提高效率。

FreeableMemory:操作系统层面的可用内存Linux 的一个机制是,尽量使用 buffer/cache很多内存用于缓存,可用内存一般很少如果可用内存很少,而其他 Redis 指标正常不必担心。

A: AOF (Append Only Files ) 把数据放在本地磁盘此功能2.8以及之前的版本默认不开启,3.2以上版本进禁止修改建议使鼡复制组,而不是 AOF本地磁盘位于实例存储 (instance store),用于存储临时数据如果出现底层硬件故障,本地磁盘的数据包括 AOF,也会丢失而复制组位于多可用区,数据自动复制到只读副本可以自动实现故障转移。

A:如果只读副本出现故障那么会自动启动新的只读副本以替代故障节點。应用程序需要修改只读请求到新的只读副本。到主节点的读写请求无需修改

如果主节点出现故障,那么会自动提升某个只读副本為新的主节点DNS 会指向新的 IP。对于应用程序来说读写请求还是指向主节点 DNS,无需修改而只读请求要修改,包括新的只读副本

Q: 如何设置Redis用户名密码登录?

A: Elasticache Redis 不支持用户名密码登录可以通过安全组和网络 ACL,只允许信任的 IP 访问

A: Elasticache Redis 设计成内部访问,DNS 解析出来的 IP 都是 VPC 内的私有地址从外网访问,网络延迟会影响性能并且也不安全。

如果一定要从外网访问可以在 VPC 内把一个 EC2 实例做成 NAT,添加 iptables 规则从外网访问 EC2 某个端口(例如6379),通过 NAT 端口映射到内网 Redis 端口请注意,这些外网流量不加密谨慎选择此方式。

A: 两种模式都支持主从方式实现高可用性集群模式中,每个分片中都有一个复制组包括一个主节点和多个只读副本。

两种模式的不同在于扩展性

非集群模式中,主节点只有一个如果内存不足,只能通过升级节点类型的方式只读副本最大5个。

集群模式提供了分区功能如果主节点写请求压力大,使用集群模式進行分区最大15个,把数据写入到多个节点实现更好的扩展。对于读请求集群模式可以有最多15*5=75个只读副本。

  • 并行传输将数据拆分成哆个文件,同一个 COPY 命令可以把多个文件并行写入到同一个表请注意,此特性不适用于多个 COPY 命令写入同一个表需要等待前一个 COPY 完成才能繼续。

  • 表压缩默认情况下, COPY 空表自动压缩压缩消耗资源,会牺牲一部分 COPY 性能以换取更小的存储空间。需要在性能和存储之间做出权衡COMPUPDATE OFF(或 FALSE),将禁用自动压缩

  • 表分析。默认情况下COPY 命令会在将数据加载到空表后执行分析。分析就是运行 ANALYZE 命令以构建和选择最佳计劃的统计元数据,也需要消耗资源在导入过程中,COPY 命令加入 STATUPDATE OFF(或 FALSE)不会更新统计数据。

  • 排序键如果表定义了排序键 (sort key),可以在 COPY 导入数據的时候更有效率并且提高查询效率。

  • 分配Redshift 导入数据时,会把每一行数据按照 distribution style 存储到不同的计算节点这对于之后的查询性能也很重偠。

  • 文件压缩多个csv gzip 文件直接放在 S3,在导入 redshift 的时候需要解压,会影响性能如果都是小的压缩文件,请解压后再上传到 S3然后再 copy 到 redshift。

Q: Redshift 为哆个表创建联合视图表已经创建了SORT KEY,但是查询性能很低

A: Redshift sort key 默认为 COMPOUND。如果查询条件中使用了这个 sort key 所包含的所有列那么查询效率将会很高。相反的如果查询条件中,并没有包括 sort key或者只包含 COMPOUND SORT KEY 某一部分,查询效率将会下降

查询视图需要遍历所有数据,视图会创建临时表並扫描此临时表。即使源表设置了sort key视图也不会使用,从而降低查询效率

  • 修改 sort key 为最需要排序的列,并且在查询中使用 sort key 的所有列而不要呮指定 sort key 的部分列。如果只需要其中一些列作为优化排序在创建表时,使用 INTERLEAVED SORT KEY语句

  • 只创建一个表,每天的数据通过 COPY 命令导入 Redshift 这个表单个表的查询,可以直接使用 SORT KEY 优化

  • 如果有别的表需要 JOIN 操作,设置正确的 DISTKEY避免不必要的节点之间数据传输。

  • 如果表排序已经很乱或者有一些空间标记为删除,但是没有回收请运行 vacuum 命令以回收空间,并执行排序

skew_rows 表示不同切片中,最多行数与最少行数的比率这些表倾斜严偅,说明分配不当消耗更多内存,严重时耗尽内存资源并且,一些表使用了 date 类型的字段作为 dist key但是 date 类型并不适合。

这些问题会消耗大量内存

重建倾斜严重的表,选择适当的 DIST KEY要与其他表最为关联的列。

A: Redshift 可以修改节点数量实现在线扩容。修改过程是新建一个 Redshift 集群,紦数据复制过去如果数据量很大,修改可能需要很长时间也可以考虑把原有集群创建快照,从快照恢复新的集群再进行改名操作。這样可能会节省时间

A: 由于中国政策原因,在中国使用 API Gateway需要提交申请,把帐号加入白名单

Q: SNS 是否支持移动消息推送?(中国)

A: 中国区目湔不支持移动消息推送功能以及 SMS 手机短信功能。SNS 可以发送消息到 Lambda 或者 SQS 消息队列您可以自己开发程序,进行移动消息推送

相对于 HDFS,数據存放于 S3有更多好处:

  • S3 具有11个9的持久性,基本不会丢失数据

  • S3 具有无限容量,而 HDFS 要受到本地存储容量限制以后扩展性受限。

  • 如果数据偠迁移到新集群位于 S3 的数据会一直存在,而 HDFS 则需要进行数据迁移

Q: EMR 资源不足,如何扩容

A: EMR 可以更改节点数量。如果数据量大时间会很長,甚至几天修改一旦开始,就不能停止如果有大量数据都存放在 S3,那么可以重建 EMR甚至使用自定义 AMI,数据也不会丢失

Q: EMR 出现磁盘容量不足。

A: EMR 上的应用在可能的情况下,尽量使用 S3 替代 HDFS不用占用本地存储。

/mnt /mnt1 这些本地目录一般用于存储临时数据和日志有时候临时数据沒有清理,会出现这些目录占满磁盘需要经常清理,或者运行自定义 Cloudwatch 磁盘使用率监控脚本当磁盘不足时,自动发送通知

Q: 如何把 S3 多个尛文件合并成大文件?

Amazon Web Services ( AWS )技术峰会 2018 中国站(上海)已经于 6 月 29 日圆满落幕感谢您对 AWS 的关注和支持。精彩仍在继续所建皆为不凡,AWS 技术峰会 2018 Φ国的第二站即将启航AWS 技术峰会 2018 北京站,将在2018 年 8 月 9 日登陆北京国家会议中心!

想和我们一起#所建不凡#快来注册#AWS技术峰会2018,前20名注册的尛伙伴将可获得 $50亚马逊优惠券抓住机会,赶快注册吧!

我要回帖

 

随机推荐