mongo复制集之读写分离(php)

准备工作

偷我大哥@mike.wang两篇博客

  1. 复制集入门
  2. 复制集连接
    接着往下说

读取首选项

了解了读取首选项之后,问题就来了,我既想读写分离,又要数据一致怎么办。

等待写入复制

配置 描述 是否能保证读写分离时数据一致
w=0 写完后就不管了
w=1 默认值,等待主节点确认成功
w=n 一直等待直到主节点和n-1个从节点确认成功 是,但是每新增一个节点就要改一次配置,不可取
w=majority 一直等待直到大多数数据节点确认成功
w={tag set} 一直等待直到tag set里的所有数据节点确认成功 是(配置灵活且新增配置不用改配置文件,推荐)

一定,千万,绝对不要忘了wtimeout
牺牲了写入速度,但问题好像确实解决了,但是这样真的好吗?当数据一致性要求较高的时候,适合做读写分离吗?我也不知道,之后再说。
个人觉得当数据一致性要求较高的时候,如果从节点不是很多,对读取性能提升不是很大,那还是不要做了

php mongo配置

关于php mongo配置的介绍
还有优化参考,下面是我copy的一部分觉得有必要看一下的

减少is_master_interval值

对于对可用性要求高的应用程序来说,建议检查默认的驱动程序运行时的配置设置。
mongo.is_master_interval选项控制着在复制集重新选举时驱动如何快速恢复。
is_master_interval选项默认值为15s,设置驱动发送“isMaster”请求每个mongod实例的时间间隔。这些请求帮助驱动程序判断复制集的拓扑结构,具体的来说,就是请求检测哪个节点是primary并可以接收写操作。
建议将该值设置为1或2秒,以让驱动程序在集群选举或故障转移时,能够迅速的定位到primary节点。当然啦,这也取决于有多少客户端以及ping的频率。
注意,当primary节点发生变化时,如选举或故障转移,总是会有几秒钟驱动程序会收到一个“MongoConnectionException” 信息 “No candidate servers found”。这些异常需要在你的代码中进行处理.

default_socket_timeout

PHP驱动程序不显示的定义一个默认的连接超时。相反,默认值由php.ini文件中的default_socket_timeout选项决定,默认是60秒。连接将等待60秒断开,时间有些长,需要降低些。

还有一个mongo集群管理图形化工具umongo

文章目录
  1. 1. 准备工作
  2. 2. 读取首选项
  3. 3. 等待写入复制
  4. 4. php mongo配置
    1. 4.1. 减少is_master_interval值
    2. 4.2. default_socket_timeout