我们有一个单独的 RDS 实例来处理会话状态表,但是发现会话数据库负载非常低。如果我们可以将实例处理会话转换为主数据库的只读副本,那么我们可以将其用于只读任务,即使副本中有很大的滞后也是安全的。
有没有人在 RDS 上做过这样的事情(是否可能且安全)?我应该注意任何严重的副作用吗?任何有助于更好地理解这一点的链接或帮助都会有所帮助。
http://aws.amazon.com/rds/faqs/#95试图回答这个问题,但我正在寻找更多的见解。
我们有一个单独的 RDS 实例来处理会话状态表,但是发现会话数据库负载非常低。如果我们可以将实例处理会话转换为主数据库的只读副本,那么我们可以将其用于只读任务,即使副本中有很大的滞后也是安全的。
有没有人在 RDS 上做过这样的事情(是否可能且安全)?我应该注意任何严重的副作用吗?任何有助于更好地理解这一点的链接或帮助都会有所帮助。
http://aws.amazon.com/rds/faqs/#95试图回答这个问题,但我正在寻找更多的见解。
对的,这是可能的。RDS
对于本地缓存的特定情况,我使用 , 成功使用它。
您需要将read_only
副本上的参数设置为0
. 我必须重新启动服务器才能使该参数起作用。
如果使用不同的表名,它会很好地工作,因为 RDS 不允许您设置:replicate-ignore-table
参数。
请记住,主<>从之间不能有任何数据冲突。如果有一个语句在 上运行正常MASTER
,但在 上失败SLAVE
,那么你刚刚破坏了你的复制。这可能会发生,例如,当您SLAVE
首先创建表,然后在一段时间后将该表添加到MASTER
. 该CREATE
语句将在 上正常工作MASTER
,但在 上失败SLAVE
,因为表已经存在。
假设,您需要非常小心,允许您的应用程序写入SLAVE
. 如果您忘记/或犯了错误并开始为其他一些数据写入只读副本,最终您可能会丢失数据或遇到难以调试的问题。
没有太多要添加的东西——在纯只读副本上真正有意义的唯一正常情况是添加一些索引等,如果它主要用于报告或其他读取密集型的东西。
如果您尝试预先计算大量数据并以其他方式修改只读副本上的内容,您需要非常小心,您不会更改数据——如果读取不再一致,那么您就有麻烦了:)
如果您对更改从属设备上的数据而主设备尝试更新它时会发生什么感到好奇,那么恕我直言,您已经走错了路。
TL;DR 除非您真的知道自己在做什么并且了解所有后果,否则不要这样做。