差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
后一修订版
前一修订版
it:database:mongodbreplication [2021-12-20 02:13] – [实际执行] goldentianyait:database:mongodbreplication [2022-08-12 05:20] (当前版本) – [MongoDB 副本集] goldentianya
行 6: 行 6:
 单版本的数据库连接通常为 <color #ff7f27>''%%mongodb://localhost:20271%%''</color>,而多副本的连接可以是 <color #ff7f27>''%%mongodb://localhost:20271,localhost:20272,localhost:20273?replicaSet=myRepl 单版本的数据库连接通常为 <color #ff7f27>''%%mongodb://localhost:20271%%''</color>,而多副本的连接可以是 <color #ff7f27>''%%mongodb://localhost:20271,localhost:20272,localhost:20273?replicaSet=myRepl
 %%''</color> %%''</color>
 +
 +  mongodb://user:password@serverwin,serverfin:33720/?replicaSet=stockdb&readPreference=nearest&wtimeoutMS=20000
  
 创建三个目录用来安装不同的MongoDB 创建三个目录用来安装不同的MongoDB
行 29: 行 31:
 第一个副本还没有用户的时候可以用管理员 <color #ff7f27>''%%> use admin%%''</color> 切换到管理员。 第一个副本还没有用户的时候可以用管理员 <color #ff7f27>''%%> use admin%%''</color> 切换到管理员。
  
-允许在副本集中读取数据 <color #ff7f27>''%%rs.slaveOK()%%''</color>+允许在副本集中读取数据 <color #ff7f27>''%%rs.secondaryOk()%%''</color>
  
 ====== 实际执行 ====== ====== 实际执行 ======
行 35: 行 37:
 准备三个服务器: 准备三个服务器:
   * 主服务器:88.153.172.7:33720 (局域网内地址是 192.168.0.157)   * 主服务器:88.153.172.7:33720 (局域网内地址是 192.168.0.157)
-  * 副本集:143.47.185.127:33720 (finsever+  * 副本集:141.144.205.48:33720  (serverfin
-  * 仲裁集:217.160.61.19:33720  (serverionos)+  * 仲裁集:143.47.185.127:33720  (serveroracle)
  
 编辑 /etc/hosts 文件,让所有的机器互相知道。否则会一直卡住联不通 编辑 /etc/hosts 文件,让所有的机器互相知道。否则会一直卡住联不通
 <code> <code>
 88.153.172.7    mai-ubun 88.153.172.7    mai-ubun
-217.160.61.19   serverionos+141.144.205.48  serverfin
 143.47.185.127  serveroracle 143.47.185.127  serveroracle
 </code> </code>
  
-第一步:修改 /etc/mongod.conf (暂时取消认证)+第一步:修改 <color #ff7f27>''%%/etc/mongod.conf%%''</color> (暂时取消认证)
 <code> <code>
 replication: replication:
行 76: 行 78:
 security: security:
   authorization: enabled   authorization: enabled
-  clusterAuthMode: keyFile 
   keyFile: /home/mongo/rs0.key   keyFile: /home/mongo/rs0.key
 </code> </code>
行 90: 行 91:
 </code> </code>
  
-**注意事项**+:!: <color #ed1c24>注意事项</color>
  
-当副本集的数据量比较大的时候我们添加新节点的时候,如果使用初始化同步的话会给节点造成比较大压力我们有下选择:+  * CPU还算好,但服务器内存不能太小。至少要4G以上。否则只适合作为「仲裁」。 
 +  * 必须要单子集。一主两副或者一主一副一仲裁。 
 +  * security 和 replSet 可以在未接入 replication 前就开启。 
 +  * keyfile 需设成 chmod 600 否则无法启动 mongod 服务 
 +  * 各个主机必须互相认识(设置 /etc/hosts) 
 +  * 如果长时间停留在状态 <color #ed1c24>TARTUP</color>说明PRIMARY已经认出了副本集,但副本集电脑没有认出集,或者自己名字需要修改 /etc/hosts 文件。服务器名指向自己的时候可设为 127.0.0.1
  
-  * 暂停当前副本集中的一个次节点,然后将 次节点的数据(data)复制到要新添加的节点的数据目录。然后再将两个节点启动。(建议先测试) +添加仲裁节点时要修改写策略 (查看官网说明((a>[[https://docs.mongodb.com/manual/reference/command/setDefaultRWConcern/#setdefaultrwconcern|官网说明]])) 中的 **Example** )
- +
-如果要复制数据文件,请确保您的副本包含local数据库的内容。 +
- +
-  * 指定同步节点 rs.syncFrom(hostportstr),指定同步节点为次节点,默认的是同步节点 是主节点。 +
- +
-但是该设置在重新启动节点,或者同步指定的新节点的连接被关闭了,是会失效的。(建议先测试) +
- +
-添加仲裁节点时要修改写策略 ((a>[[https://docs.mongodb.com/manual/reference/command/setDefaultRWConcern/#setdefaultrwconcern|官网说明]]))+
 <code > <code >
 db.adminCommand({ db.adminCommand({
行 111: 行 109:
 }) })
 </code> </code>
 +
 +<WRAP center round tip 60%>
 +当节点数目为奇数时,可以不需要仲裁节点。
 +当节点数目为偶数个时,需要部署一个仲裁节点,否则偶数个节点,当主节点挂了后,其他节点会变为只读。
 +</WRAP>
 +
 +Oracle Cloud 的1核1G内存实例作为副节点会经常宕机。原因是内存不足,一次更新就会占用掉1G的内存。因此微小实例只能用作「仲裁」角色。而仲裁角色也非常重要,否则无论副集还是主集宕机,都会导致数据库不能用。
 +
  
 ====== 其它命令 ====== ====== 其它命令 ======
行 146: 行 152:
 use admin use admin
 db.shutdownServer() db.shutdownServer()
 +</code>
 +
 +连接命令
 +<code> 
 +var url = format("mongodb://%s,%s?replicaSet=%s&readPreference=%s"
 +  , "localhost:27017",
 +  , "localhost:27018"
 +  , "foo"
 +  , "primaryPreferred"); //nearest
 </code> </code>
  
it/database/mongodbreplication.1639966401.txt.gz · 最后更改: 2021-12-20 02:13 由 goldentianya
回到顶部
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0