哈尼哈尼尼 發表於 2019-9-25 11:34:00

mongodb集群化

<p><strong>转自:https://www.cnblogs.com/nulige/p/7613721.html</strong></p>
<p>&nbsp;</p>
<p><strong>一、mongodb主从复制配置</strong></p>
<p>主从复制是MongoDB最常用的复制方式,也是一个简单的数据库同步备份的集群技术,这种方式很灵活.可用于备份,故障恢复,读扩展等.&nbsp;<br>最基本的设置方式就是建立一个主节点和一个或多个从节点,每个从节点要知道主节点的地址。采用双机备份后主节点挂掉了后从节点可以接替主机继续服务。所以这种模式比单节点的高可用性要好很多。</p>
<p><img src="https://images2015.cnblogs.com/blog/907596/201706/907596-20170603163125914-453548285.png"></p>
<p>&nbsp;配置主从复制的注意点</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_614891" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">1)在数据库集群中要明确的知道谁是主服务器,主服务器只有一台.</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">2)从服务器要知道自己的数据源也就是对应的主服务是谁.</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">3)--master用来确定主服务器,--slave 和 --</code><code class="bash functions">source</code>&nbsp;<code class="bash plain">来控制从服务器</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>可以在mongodb.conf配置文件里指明主从关系,这样启动mongodb的时候只要跟上配置文件就行,就不需要通过--master和--slave来指明主从了。</p>
<p>下面简单记录下Mongodb主从复制的部署过程</p>
<p><img src="https://images2015.cnblogs.com/blog/907596/201706/907596-20170603163930680-935037407.png"></p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_993392" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
<div class="line number67 index66 alt2">67</div>
<div class="line number68 index67 alt1">68</div>
<div class="line number69 index68 alt2">69</div>
<div class="line number70 index69 alt1">70</div>
<div class="line number71 index70 alt2">71</div>
<div class="line number72 index71 alt1">72</div>
<div class="line number73 index72 alt2">73</div>
<div class="line number74 index73 alt1">74</div>
<div class="line number75 index74 alt2">75</div>
<div class="line number76 index75 alt1">76</div>
<div class="line number77 index76 alt2">77</div>
<div class="line number78 index77 alt1">78</div>
<div class="line number79 index78 alt2">79</div>
<div class="line number80 index79 alt1">80</div>
<div class="line number81 index80 alt2">81</div>
<div class="line number82 index81 alt1">82</div>
<div class="line number83 index82 alt2">83</div>
<div class="line number84 index83 alt1">84</div>
<div class="line number85 index84 alt2">85</div>
<div class="line number86 index85 alt1">86</div>
<div class="line number87 index86 alt2">87</div>
<div class="line number88 index87 alt1">88</div>
<div class="line number89 index88 alt2">89</div>
<div class="line number90 index89 alt1">90</div>
<div class="line number91 index90 alt2">91</div>
<div class="line number92 index91 alt1">92</div>
<div class="line number93 index92 alt2">93</div>
<div class="line number94 index93 alt1">94</div>
<div class="line number95 index94 alt2">95</div>
<div class="line number96 index95 alt1">96</div>
<div class="line number97 index96 alt2">97</div>
<div class="line number98 index97 alt1">98</div>
<div class="line number99 index98 alt2">99</div>
<div class="line number100 index99 alt1">100</div>
<div class="line number101 index100 alt2">101</div>
<div class="line number102 index101 alt1">102</div>
<div class="line number103 index102 alt2">103</div>
<div class="line number104 index103 alt1">104</div>
<div class="line number105 index104 alt2">105</div>
<div class="line number106 index105 alt1">106</div>
<div class="line number107 index106 alt2">107</div>
<div class="line number108 index107 alt1">108</div>
<div class="line number109 index108 alt2">109</div>
<div class="line number110 index109 alt1">110</div>
<div class="line number111 index110 alt2">111</div>
<div class="line number112 index111 alt1">112</div>
<div class="line number113 index112 alt2">113</div>
<div class="line number114 index113 alt1">114</div>
<div class="line number115 index114 alt2">115</div>
<div class="line number116 index115 alt1">116</div>
<div class="line number117 index116 alt2">117</div>
<div class="line number118 index117 alt1">118</div>
<div class="line number119 index118 alt2">119</div>
<div class="line number120 index119 alt1">120</div>
<div class="line number121 index120 alt2">121</div>
<div class="line number122 index121 alt1">122</div>
<div class="line number123 index122 alt2">123</div>
<div class="line number124 index123 alt1">124</div>
<div class="line number125 index124 alt2">125</div>
<div class="line number126 index125 alt1">126</div>
<div class="line number127 index126 alt2">127</div>
<div class="line number128 index127 alt1">128</div>
<div class="line number129 index128 alt2">129</div>
<div class="line number130 index129 alt1">130</div>
<div class="line number131 index130 alt2">131</div>
<div class="line number132 index131 alt1">132</div>
<div class="line number133 index132 alt2">133</div>
<div class="line number134 index133 alt1">134</div>
<div class="line number135 index134 alt2">135</div>
<div class="line number136 index135 alt1">136</div>
<div class="line number137 index136 alt2">137</div>
<div class="line number138 index137 alt1">138</div>
<div class="line number139 index138 alt2">139</div>
<div class="line number140 index139 alt1">140</div>
<div class="line number141 index140 alt2">141</div>
<div class="line number142 index141 alt1">142</div>
<div class="line number143 index142 alt2">143</div>
<div class="line number144 index143 alt1">144</div>
<div class="line number145 index144 alt2">145</div>
<div class="line number146 index145 alt1">146</div>
<div class="line number147 index146 alt2">147</div>
<div class="line number148 index147 alt1">148</div>
<div class="line number149 index148 alt2">149</div>
<div class="line number150 index149 alt1">150</div>
<div class="line number151 index150 alt2">151</div>
<div class="line number152 index151 alt1">152</div>
<div class="line number153 index152 alt2">153</div>
<div class="line number154 index153 alt1">154</div>
<div class="line number155 index154 alt2">155</div>
<div class="line number156 index155 alt1">156</div>
<div class="line number157 index156 alt2">157</div>
<div class="line number158 index157 alt1">158</div>
<div class="line number159 index158 alt2">159</div>
<div class="line number160 index159 alt1">160</div>
<div class="line number161 index160 alt2">161</div>
<div class="line number162 index161 alt1">162</div>
<div class="line number163 index162 alt2">163</div>
<div class="line number164 index163 alt1">164</div>
<div class="line number165 index164 alt2">165</div>
<div class="line number166 index165 alt1">166</div>
<div class="line number167 index166 alt2">167</div>
<div class="line number168 index167 alt1">168</div>
<div class="line number169 index168 alt2">169</div>
<div class="line number170 index169 alt1">170</div>
<div class="line number171 index170 alt2">171</div>
<div class="line number172 index171 alt1">172</div>
<div class="line number173 index172 alt2">173</div>
<div class="line number174 index173 alt1">174</div>
<div class="line number175 index174 alt2">175</div>
<div class="line number176 index175 alt1">176</div>
<div class="line number177 index176 alt2">177</div>
<div class="line number178 index177 alt1">178</div>
<div class="line number179 index178 alt2">179</div>
<div class="line number180 index179 alt1">180</div>
<div class="line number181 index180 alt2">181</div>
<div class="line number182 index181 alt1">182</div>
<div class="line number183 index182 alt2">183</div>
<div class="line number184 index183 alt1">184</div>
<div class="line number185 index184 alt2">185</div>
<div class="line number186 index185 alt1">186</div>
<div class="line number187 index186 alt2">187</div>
<div class="line number188 index187 alt1">188</div>
<div class="line number189 index188 alt2">189</div>
<div class="line number190 index189 alt1">190</div>
<div class="line number191 index190 alt2">191</div>
<div class="line number192 index191 alt1">192</div>
<div class="line number193 index192 alt2">193</div>
<div class="line number194 index193 alt1">194</div>
<div class="line number195 index194 alt2">195</div>
<div class="line number196 index195 alt1">196</div>
<div class="line number197 index196 alt2">197</div>
<div class="line number198 index197 alt1">198</div>
<div class="line number199 index198 alt2">199</div>
<div class="line number200 index199 alt1">200</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">1)机器环境</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">182.48.115.238&nbsp;&nbsp;&nbsp; master-node</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">182.48.115.236&nbsp;&nbsp;&nbsp; slave-node</code></div>
<div class="line number4 index3 alt1">&nbsp;</div>
<div class="line number5 index4 alt2"><code class="bash plain">两台机器都关闭防火墙和selinux</code></div>
<div class="line number6 index5 alt1"><code class="bash plain">mongodb的安装参考:http:</code><code class="bash plain">//www</code><code class="bash plain">.cnblogs.com</code><code class="bash plain">/kevingrace/p/5752382</code><code class="bash plain">.html</code></div>
<div class="line number7 index6 alt2">&nbsp;</div>
<div class="line number8 index7 alt1"><code class="bash plain">2)主从配置</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">.............master-node节点配置.............</code></div>
<div class="line number10 index9 alt1"><code class="bash plain"></code><code class="bash comments"># vim /usr/local/mongodb/mongodb.conf</code></div>
<div class="line number11 index10 alt2"><code class="bash plain">port=27017</code></div>
<div class="line number12 index11 alt1"><code class="bash plain">bind_ip = 182.48.115.238</code></div>
<div class="line number13 index12 alt2"><code class="bash plain">dbpath=</code><code class="bash plain">/usr/local/mongodb/data</code></div>
<div class="line number14 index13 alt1"><code class="bash plain">logpath=</code><code class="bash plain">/usr/local/mongodb/log/mongo</code><code class="bash plain">.log</code></div>
<div class="line number15 index14 alt2"><code class="bash plain">logappend=</code><code class="bash functions">true</code></div>
<div class="line number16 index15 alt1"><code class="bash plain">journal =&nbsp;</code><code class="bash functions">true</code></div>
<div class="line number17 index16 alt2"><code class="bash plain">fork =&nbsp;</code><code class="bash functions">true</code></div>
<div class="line number18 index17 alt1"><code class="bash plain">master =&nbsp;</code><code class="bash functions">true</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">//</code><code class="bash plain">确定自己是主服务器</code></div>
<div class="line number19 index18 alt2">&nbsp;</div>
<div class="line number20 index19 alt1"><code class="bash plain"></code><code class="bash comments"># nohup /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf &amp;</code></div>
<div class="line number21 index20 alt2">&nbsp;</div>
<div class="line number22 index21 alt1"><code class="bash plain"></code><code class="bash comments"># ps -ef|grep mongodb</code></div>
<div class="line number23 index22 alt2"><code class="bash plain">root&nbsp;&nbsp;&nbsp;&nbsp; 15707 15514 23 16:45 pts</code><code class="bash plain">/2</code>&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">00:00:00&nbsp;</code><code class="bash plain">/usr/local/mongodb/bin/mongod</code>&nbsp;<code class="bash plain">--config&nbsp;</code><code class="bash plain">/usr/local/mongodb/mongodb</code><code class="bash plain">.conf</code></div>
<div class="line number24 index23 alt1"><code class="bash plain">root&nbsp;&nbsp;&nbsp;&nbsp; 15736 15514&nbsp; 0 16:45 pts</code><code class="bash plain">/2</code>&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">00:00:00&nbsp;</code><code class="bash functions">grep</code>&nbsp;<code class="bash plain">mongodb</code></div>
<div class="line number25 index24 alt2"><code class="bash plain"></code><code class="bash comments"># lsof -i:27017</code></div>
<div class="line number26 index25 alt1"><code class="bash plain">COMMAND&nbsp;&nbsp; PID USER&nbsp;&nbsp; FD&nbsp;&nbsp; TYPE DEVICE SIZE</code><code class="bash plain">/OFF</code>&nbsp;<code class="bash plain">NODE NAME</code></div>
<div class="line number27 index26 alt2"><code class="bash plain">mongod&nbsp; 15707 root&nbsp;&nbsp;&nbsp; 7u&nbsp; IPv4 153114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP 182.48.115.238:27017 (LISTEN)</code></div>
<div class="line number28 index27 alt1">&nbsp;</div>
<div class="line number29 index28 alt2"><code class="bash plain">由于mongodb.conf里绑定了本机的ip地址182.48.115.238,所以连接mongodb的时候必须用这个ip地址,不能使用默认的127.0.0.1,也就是说:</code></div>
<div class="line number30 index29 alt1"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.238:27017&nbsp;&nbsp;&nbsp;&nbsp; //这样才能连接mongodb</code></div>
<div class="line number31 index30 alt2"><code class="bash plain"></code><code class="bash comments"># mongo 或者 mongodb 127.0.0.1:27017&nbsp;&nbsp;&nbsp; // 这样不能连接mongodb</code></div>
<div class="line number32 index31 alt1">&nbsp;</div>
<div class="line number33 index32 alt2"><code class="bash plain">.............slave-node节点配置.............</code></div>
<div class="line number34 index33 alt1"><code class="bash plain"></code><code class="bash comments"># vim /usr/local/mongodb/mongodb.conf</code></div>
<div class="line number35 index34 alt2"><code class="bash plain">port=27017</code></div>
<div class="line number36 index35 alt1"><code class="bash plain">dbpath=</code><code class="bash plain">/usr/local/mongodb/data</code></div>
<div class="line number37 index36 alt2"><code class="bash plain">logpath=</code><code class="bash plain">/usr/local/mongodb/log/mongo</code><code class="bash plain">.log</code></div>
<div class="line number38 index37 alt1"><code class="bash plain">logappend=</code><code class="bash functions">true</code></div>
<div class="line number39 index38 alt2"><code class="bash plain">journal =&nbsp;</code><code class="bash functions">true</code></div>
<div class="line number40 index39 alt1"><code class="bash plain">fork =&nbsp;</code><code class="bash functions">true</code></div>
<div class="line number41 index40 alt2"><code class="bash plain">bind_ip = 182.48.115.236&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">确定主数据库端口</code></div>
<div class="line number42 index41 alt1"><code class="bash functions">source</code>&nbsp;<code class="bash plain">= 182.48.115.238:27017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">确定主数据库端口</code></div>
<div class="line number43 index42 alt2"><code class="bash plain">slave =&nbsp;</code><code class="bash functions">true</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">//</code><code class="bash plain">确定自己是从服务器</code></div>
<div class="line number44 index43 alt1">&nbsp;</div>
<div class="line number45 index44 alt2"><code class="bash plain"></code><code class="bash comments"># nohup /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/mongodb.conf &amp;</code></div>
<div class="line number46 index45 alt1">&nbsp;</div>
<div class="line number47 index46 alt2"><code class="bash plain"></code><code class="bash comments"># ps -ef|grep mongo</code></div>
<div class="line number48 index47 alt1"><code class="bash plain">root&nbsp;&nbsp;&nbsp;&nbsp; 26290 26126&nbsp; 8 16:47 pts</code><code class="bash plain">/0</code>&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">00:00:00&nbsp;</code><code class="bash plain">/usr/local/mongodb/bin/mongod</code>&nbsp;<code class="bash plain">--config&nbsp;</code><code class="bash plain">/usr/local/mongodb/mongodb</code><code class="bash plain">.conf</code></div>
<div class="line number49 index48 alt2"><code class="bash plain">root&nbsp;&nbsp;&nbsp;&nbsp; 26316 26126&nbsp; 0 16:47 pts</code><code class="bash plain">/0</code>&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">00:00:00&nbsp;</code><code class="bash functions">grep</code>&nbsp;<code class="bash plain">mongo</code></div>
<div class="line number50 index49 alt1"><code class="bash plain"></code><code class="bash comments"># lsof -i:27017</code></div>
<div class="line number51 index50 alt2"><code class="bash plain">COMMAND&nbsp;&nbsp; PID USER&nbsp;&nbsp; FD&nbsp;&nbsp; TYPE DEVICE SIZE</code><code class="bash plain">/OFF</code>&nbsp;<code class="bash plain">NODE NAME</code></div>
<div class="line number52 index51 alt1"><code class="bash plain">mongod&nbsp; 26290 root&nbsp;&nbsp;&nbsp; 7u&nbsp; IPv4 663904&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP slave-node1:27017 (LISTEN)</code></div>
<div class="line number53 index52 alt2"><code class="bash plain">mongod&nbsp; 26290 root&nbsp;&nbsp; 25u&nbsp; IPv4 663917&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP slave-node1:51060-&gt;slave-node2:27017 (ESTABLISHED)</code></div>
<div class="line number54 index53 alt1">&nbsp;</div>
<div class="line number55 index54 alt2"><code class="bash plain">在slave-node测试连接master-node的mongodb数据库是否正常</code></div>
<div class="line number56 index55 alt1"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.236:27017</code></div>
<div class="line number57 index56 alt2"><code class="bash plain">MongoDB shell version v3.4.4</code></div>
<div class="line number58 index57 alt1"><code class="bash plain">connecting to: 182.48.115.236:27017</code></div>
<div class="line number59 index58 alt2"><code class="bash plain">MongoDB server version: 3.4.4</code></div>
<div class="line number60 index59 alt1"><code class="bash plain">Server has startup warnings:</code></div>
<div class="line number61 index60 alt2"><code class="bash plain">2017-06-03T16:47:31.200+0800 I STORAGE&nbsp; </code></div>
<div class="line number62 index61 alt1"><code class="bash plain">2017-06-03T16:47:31.200+0800
I STORAGE&nbsp; ** WARNING: Using the XFS filesystem is
strongly recommended with the WiredTiger storage engine</code></div>
<div class="line number63 index62 alt2"><code class="bash plain">2017-06-03T16:47:31.200+0800 I STORAGE&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; See http:</code><code class="bash plain">//dochub</code><code class="bash plain">.mongodb.org</code><code class="bash plain">/core/prodnotes-filesystem</code></div>
<div class="line number64 index63 alt1"><code class="bash plain">2017-06-03T16:47:32.472+0800 I CONTROL&nbsp; </code></div>
<div class="line number65 index64 alt2"><code class="bash plain">2017-06-03T16:47:32.472+0800 I CONTROL&nbsp; ** WARNING: Access control is not enabled&nbsp;</code><code class="bash keyword">for</code>&nbsp;<code class="bash plain">the database.</code></div>
<div class="line number66 index65 alt1"><code class="bash plain">2017-06-03T16:47:32.472+0800
I CONTROL&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read and write access to data
and configuration is unrestricted.</code></div>
<div class="line number67 index66 alt2"><code class="bash plain">2017-06-03T16:47:32.472+0800 I CONTROL&nbsp; ** WARNING: You are running this process as the root user,&nbsp;</code><code class="bash functions">which</code>&nbsp;<code class="bash plain">is not recommended.</code></div>
<div class="line number68 index67 alt1"><code class="bash plain">2017-06-03T16:47:32.472+0800 I CONTROL&nbsp; </code></div>
<div class="line number69 index68 alt2"><code class="bash plain">2017-06-03T16:47:32.473+0800 I CONTROL&nbsp; </code></div>
<div class="line number70 index69 alt1"><code class="bash plain">2017-06-03T16:47:32.473+0800 I CONTROL&nbsp; ** WARNING:&nbsp;</code><code class="bash plain">/sys/kernel/mm/transparent_hugepage/enabled</code>&nbsp;<code class="bash plain">is&nbsp;</code><code class="bash string">'always'</code><code class="bash plain">.</code></div>
<div class="line number71 index70 alt2"><code class="bash plain">2017-06-03T16:47:32.473+0800 I CONTROL&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; We suggest setting it to&nbsp;</code><code class="bash string">'never'</code></div>
<div class="line number72 index71 alt1"><code class="bash plain">2017-06-03T16:47:32.473+0800 I CONTROL&nbsp; </code></div>
<div class="line number73 index72 alt2"><code class="bash plain">2017-06-03T16:47:32.473+0800 I CONTROL&nbsp; ** WARNING:&nbsp;</code><code class="bash plain">/sys/kernel/mm/transparent_hugepage/defrag</code>&nbsp;<code class="bash plain">is&nbsp;</code><code class="bash string">'always'</code><code class="bash plain">.</code></div>
<div class="line number74 index73 alt1"><code class="bash plain">2017-06-03T16:47:32.473+0800 I CONTROL&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; We suggest setting it to&nbsp;</code><code class="bash string">'never'</code></div>
<div class="line number75 index74 alt2"><code class="bash plain">2017-06-03T16:47:32.473+0800 I CONTROL&nbsp; </code></div>
<div class="line number76 index75 alt1"><code class="bash plain">&gt;</code></div>
<div class="line number77 index76 alt2">&nbsp;</div>
<div class="line number78 index77 alt1"><code class="bash plain">3)主从数据同步测试</code></div>
<div class="line number79 index78 alt2"><code class="bash plain">在master-node节点数据库里创建master_slave库,并插入20条数据</code></div>
<div class="line number80 index79 alt1"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.238:27017</code></div>
<div class="line number81 index80 alt2"><code class="bash plain">MongoDB shell version v3.4.4</code></div>
<div class="line number82 index81 alt1"><code class="bash plain">connecting to: 182.48.115.238:27017</code></div>
<div class="line number83 index82 alt2"><code class="bash plain">MongoDB server version: 3.4.4</code></div>
<div class="line number84 index83 alt1"><code class="bash plain">Server has startup warnings:</code></div>
<div class="line number85 index84 alt2"><code class="bash plain">2017-06-03T16:45:07.406+0800 I STORAGE&nbsp; </code></div>
<div class="line number86 index85 alt1"><code class="bash plain">2017-06-03T16:45:07.407+0800
I STORAGE&nbsp; ** WARNING: Using the XFS filesystem is
strongly recommended with the WiredTiger storage engine</code></div>
<div class="line number87 index86 alt2"><code class="bash plain">2017-06-03T16:45:07.407+0800 I STORAGE&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; See http:</code><code class="bash plain">//dochub</code><code class="bash plain">.mongodb.org</code><code class="bash plain">/core/prodnotes-filesystem</code></div>
<div class="line number88 index87 alt1"><code class="bash plain">2017-06-03T16:45:08.373+0800 I CONTROL&nbsp; </code></div>
<div class="line number89 index88 alt2"><code class="bash plain">2017-06-03T16:45:08.373+0800 I CONTROL&nbsp; ** WARNING: Access control is not enabled&nbsp;</code><code class="bash keyword">for</code>&nbsp;<code class="bash plain">the database.</code></div>
<div class="line number90 index89 alt1"><code class="bash plain">2017-06-03T16:45:08.373+0800
I CONTROL&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read and write access to data
and configuration is unrestricted.</code></div>
<div class="line number91 index90 alt2"><code class="bash plain">2017-06-03T16:45:08.373+0800 I CONTROL&nbsp; ** WARNING: You are running this process as the root user,&nbsp;</code><code class="bash functions">which</code>&nbsp;<code class="bash plain">is not recommended.</code></div>
<div class="line number92 index91 alt1"><code class="bash plain">2017-06-03T16:45:08.373+0800 I CONTROL&nbsp; </code></div>
<div class="line number93 index92 alt2"><code class="bash plain">2017-06-03T16:45:08.374+0800 I CONTROL&nbsp; </code></div>
<div class="line number94 index93 alt1"><code class="bash plain">2017-06-03T16:45:08.374+0800 I CONTROL&nbsp; ** WARNING:&nbsp;</code><code class="bash plain">/sys/kernel/mm/transparent_hugepage/enabled</code>&nbsp;<code class="bash plain">is&nbsp;</code><code class="bash string">'always'</code><code class="bash plain">.</code></div>
<div class="line number95 index94 alt2"><code class="bash plain">2017-06-03T16:45:08.374+0800 I CONTROL&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; We suggest setting it to&nbsp;</code><code class="bash string">'never'</code></div>
<div class="line number96 index95 alt1"><code class="bash plain">2017-06-03T16:45:08.374+0800 I CONTROL&nbsp; </code></div>
<div class="line number97 index96 alt2"><code class="bash plain">2017-06-03T16:45:08.374+0800 I CONTROL&nbsp; ** WARNING:&nbsp;</code><code class="bash plain">/sys/kernel/mm/transparent_hugepage/defrag</code>&nbsp;<code class="bash plain">is&nbsp;</code><code class="bash string">'always'</code><code class="bash plain">.</code></div>
<div class="line number98 index97 alt1"><code class="bash plain">2017-06-03T16:45:08.374+0800 I CONTROL&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; We suggest setting it to&nbsp;</code><code class="bash string">'never'</code></div>
<div class="line number99 index98 alt2"><code class="bash plain">2017-06-03T16:45:08.374+0800 I CONTROL&nbsp; </code></div>
<div class="line number100 index99 alt1"><code class="bash plain">&gt; use master_slave</code></div>
<div class="line number101 index100 alt2"><code class="bash plain">switched to db master_slave</code></div>
<div class="line number102 index101 alt1"><code class="bash plain">&gt;&nbsp;</code><code class="bash keyword">function</code>&nbsp;<code class="bash plain">add(){var i = 0;</code><code class="bash keyword">for</code><code class="bash plain">(;i&lt;20;i++){db.persons.insert({</code><code class="bash string">"name"</code><code class="bash plain">:</code><code class="bash string">"wang"</code><code class="bash plain">+i})}}</code></div>
<div class="line number103 index102 alt2"><code class="bash plain">&gt; add()</code></div>
<div class="line number104 index103 alt1"><code class="bash plain">&gt; db.persons.</code><code class="bash functions">find</code><code class="bash plain">()</code></div>
<div class="line number105 index104 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dbb"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang0"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number106 index105 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dbc"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang1"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number107 index106 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dbd"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang2"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number108 index107 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dbe"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang3"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number109 index108 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dbf"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang4"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number110 index109 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc0"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang5"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number111 index110 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc1"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang6"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number112 index111 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc2"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang7"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number113 index112 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc3"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang8"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number114 index113 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc4"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang9"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number115 index114 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc5"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang10"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number116 index115 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc6"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang11"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number117 index116 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc7"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang12"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number118 index117 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc8"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang13"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number119 index118 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc9"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang14"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number120 index119 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dca"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang15"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number121 index120 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dcb"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang16"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number122 index121 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dcc"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang17"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number123 index122 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dcd"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang18"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number124 index123 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dce"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang19"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number125 index124 alt2"><code class="bash plain">Type&nbsp;</code><code class="bash string">"it"</code>&nbsp;<code class="bash keyword">for</code>&nbsp;<code class="bash functions">more</code></div>
<div class="line number126 index125 alt1">&nbsp;</div>
<div class="line number127 index126 alt2"><code class="bash plain">然后在slave-node节点数据库里查看,是否将master-node写入的新数据同步过来了</code></div>
<div class="line number128 index127 alt1"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.236:27017</code></div>
<div class="line number129 index128 alt2"><code class="bash plain">MongoDB shell version v3.4.4</code></div>
<div class="line number130 index129 alt1"><code class="bash plain">connecting to: 182.48.115.236:27017</code></div>
<div class="line number131 index130 alt2"><code class="bash plain">MongoDB server version: 3.4.4</code></div>
<div class="line number132 index131 alt1"><code class="bash plain">Server has startup warnings:</code></div>
<div class="line number133 index132 alt2"><code class="bash plain">2017-06-03T16:56:28.928+0800 I STORAGE&nbsp; </code></div>
<div class="line number134 index133 alt1"><code class="bash plain">2017-06-03T16:56:28.928+0800
I STORAGE&nbsp; ** WARNING: Using the XFS filesystem is
strongly recommended with the WiredTiger storage engine</code></div>
<div class="line number135 index134 alt2"><code class="bash plain">2017-06-03T16:56:28.928+0800 I STORAGE&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; See http:</code><code class="bash plain">//dochub</code><code class="bash plain">.mongodb.org</code><code class="bash plain">/core/prodnotes-filesystem</code></div>
<div class="line number136 index135 alt1"><code class="bash plain">2017-06-03T16:56:29.883+0800 I CONTROL&nbsp; </code></div>
<div class="line number137 index136 alt2"><code class="bash plain">2017-06-03T16:56:29.883+0800 I CONTROL&nbsp; ** WARNING: Access control is not enabled&nbsp;</code><code class="bash keyword">for</code>&nbsp;<code class="bash plain">the database.</code></div>
<div class="line number138 index137 alt1"><code class="bash plain">2017-06-03T16:56:29.883+0800
I CONTROL&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read and write access to data
and configuration is unrestricted.</code></div>
<div class="line number139 index138 alt2"><code class="bash plain">2017-06-03T16:56:29.883+0800 I CONTROL&nbsp; ** WARNING: You are running this process as the root user,&nbsp;</code><code class="bash functions">which</code>&nbsp;<code class="bash plain">is not recommended.</code></div>
<div class="line number140 index139 alt1"><code class="bash plain">2017-06-03T16:56:29.883+0800 I CONTROL&nbsp; </code></div>
<div class="line number141 index140 alt2"><code class="bash plain">2017-06-03T16:56:29.884+0800 I CONTROL&nbsp; </code></div>
<div class="line number142 index141 alt1"><code class="bash plain">2017-06-03T16:56:29.884+0800 I CONTROL&nbsp; ** WARNING:&nbsp;</code><code class="bash plain">/sys/kernel/mm/transparent_hugepage/enabled</code>&nbsp;<code class="bash plain">is&nbsp;</code><code class="bash string">'always'</code><code class="bash plain">.</code></div>
<div class="line number143 index142 alt2"><code class="bash plain">2017-06-03T16:56:29.884+0800 I CONTROL&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; We suggest setting it to&nbsp;</code><code class="bash string">'never'</code></div>
<div class="line number144 index143 alt1"><code class="bash plain">2017-06-03T16:56:29.884+0800 I CONTROL&nbsp; </code></div>
<div class="line number145 index144 alt2"><code class="bash plain">2017-06-03T16:56:29.884+0800 I CONTROL&nbsp; ** WARNING:&nbsp;</code><code class="bash plain">/sys/kernel/mm/transparent_hugepage/defrag</code>&nbsp;<code class="bash plain">is&nbsp;</code><code class="bash string">'always'</code><code class="bash plain">.</code></div>
<div class="line number146 index145 alt1"><code class="bash plain">2017-06-03T16:56:29.884+0800 I CONTROL&nbsp; **&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; We suggest setting it to&nbsp;</code><code class="bash string">'never'</code></div>
<div class="line number147 index146 alt2"><code class="bash plain">2017-06-03T16:56:29.884+0800 I CONTROL&nbsp; </code></div>
<div class="line number148 index147 alt1"><code class="bash plain">&gt; show dbs</code></div>
<div class="line number149 index148 alt2"><code class="bash plain">2017-06-03T17:10:32.136+0800 E QUERY&nbsp;&nbsp;&nbsp; Error: listDatabases failed:{</code></div>
<div class="line number150 index149 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"ok"</code>&nbsp;<code class="bash plain">: 0,</code></div>
<div class="line number151 index150 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"errmsg"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"not master and slaveOk=false"</code><code class="bash plain">,</code></div>
<div class="line number152 index151 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"code"</code>&nbsp;<code class="bash plain">: 13435,</code></div>
<div class="line number153 index152 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"codeName"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"NotMasterNoSlaveOk"</code></div>
<div class="line number154 index153 alt1"><code class="bash plain">} :</code></div>
<div class="line number155 index154 alt2"><code class="bash plain">_getErrorWithCode@src</code><code class="bash plain">/mongo/shell/utils</code><code class="bash plain">.js:25:13</code></div>
<div class="line number156 index155 alt1"><code class="bash plain">Mongo.prototype.getDBs@src</code><code class="bash plain">/mongo/shell/mongo</code><code class="bash plain">.js:62:1</code></div>
<div class="line number157 index156 alt2"><code class="bash plain">shellHelper.show@src</code><code class="bash plain">/mongo/shell/utils</code><code class="bash plain">.js:769:19</code></div>
<div class="line number158 index157 alt1"><code class="bash plain">shellHelper@src</code><code class="bash plain">/mongo/shell/utils</code><code class="bash plain">.js:659:15</code></div>
<div class="line number159 index158 alt2"><code class="bash plain">@(shellhelp2):1:1</code></div>
<div class="line number160 index159 alt1"><code class="bash plain">&gt; rs.slaveOk();</code></div>
<div class="line number161 index160 alt2"><code class="bash plain">&gt; show dbs</code></div>
<div class="line number162 index161 alt1"><code class="bash plain">admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.000GB</code></div>
<div class="line number163 index162 alt2"><code class="bash functions">local</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">0.000GB</code></div>
<div class="line number164 index163 alt1"><code class="bash plain">master_slave&nbsp; 0.000GB</code></div>
<div class="line number165 index164 alt2"><code class="bash plain">wangshibo&nbsp;&nbsp;&nbsp;&nbsp; 0.000GB</code></div>
<div class="line number166 index165 alt1"><code class="bash plain">&gt; use master_slave</code></div>
<div class="line number167 index166 alt2"><code class="bash plain">switched to db master_slave</code></div>
<div class="line number168 index167 alt1"><code class="bash plain">&gt; db.persons.</code><code class="bash functions">find</code><code class="bash plain">()</code></div>
<div class="line number169 index168 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dbb"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang0"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number170 index169 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dbc"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang1"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number171 index170 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dbd"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang2"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number172 index171 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dbe"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang3"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number173 index172 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dbf"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang4"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number174 index173 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc0"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang5"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number175 index174 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc1"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang6"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number176 index175 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc2"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang7"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number177 index176 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc3"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang8"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number178 index177 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc4"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang9"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number179 index178 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc5"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang10"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number180 index179 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc6"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang11"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number181 index180 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc7"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang12"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number182 index181 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc8"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang13"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number183 index182 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dc9"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang14"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number184 index183 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dca"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang15"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number185 index184 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dcb"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang16"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number186 index185 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dcc"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang17"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number187 index186 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dcd"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang18"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number188 index187 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593278699a9e2e9f37ac4dce"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"wang19"</code>&nbsp;<code class="bash plain">}</code></div>
<div class="line number189 index188 alt2"><code class="bash plain">Type&nbsp;</code><code class="bash string">"it"</code>&nbsp;<code class="bash keyword">for</code>&nbsp;<code class="bash functions">more</code></div>
<div class="line number190 index189 alt1"><code class="bash plain">........................................................................................</code></div>
<div class="line number191 index190 alt2"><code class="bash plain">如果在slave-node节点上的数据库中查看,有报错:</code><code class="bash string">"errmsg"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"not master and slaveOk=false"</code><code class="bash plain">!!!</code></div>
<div class="line number192 index191 alt1"><code class="bash plain">首先这是正常的,因为SECONDARY是不允许读写的, 在写多读少的应用中,使用Replica Sets来实现读写分离。</code></div>
<div class="line number193 index192 alt2"><code class="bash plain">通过在连接时指定或者在主库指定slaveOk,由Secondary来分担读的压力,Primary只承担写操作。</code></div>
<div class="line number194 index193 alt1"><code class="bash plain">对于replica&nbsp;</code><code class="bash functions">set</code>&nbsp;<code class="bash plain">中的secondary 节点默认是不可读的。</code></div>
<div class="line number195 index194 alt2">&nbsp;</div>
<div class="line number196 index195 alt1"><code class="bash plain">解决办法:</code></div>
<div class="line number197 index196 alt2"><code class="bash plain">在slave-node节点数据库中执行</code><code class="bash string">"rs.slaveOk();"</code><code class="bash plain">命令即可</code></div>
<div class="line number198 index197 alt1"><code class="bash plain">........................................................................................</code></div>
<div class="line number199 index198 alt2">&nbsp;</div>
<div class="line number200 index199 alt1"><code class="bash plain">在slave-node节点数据库中发现已经同步过来了master_slave库的20条数据,说明mongodb的主从复制环境已经成功了!当配置完主从服务器后,一但主服务器上的数据发生变化,从服务器也会发生变化</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>主从复制的原理</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_248913" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">在主从结构中,主节点的操作记录成为oplog(operation log)。oplog存储在一个系统数据库</code><code class="bash functions">local</code><code class="bash plain">的集合oplog.$main中,这个集合的每个文档都代表主节点上执行的一个操作。</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">从服务器会定期从主服务器中获取oplog记录,然后在本机上执行!对于存储oplog的集合,MongoDB采用的是固定集合,也就是说随着操作过多,新的操作会覆盖旧的操作!</code></div>
<div class="line number3 index2 alt2">&nbsp;</div>
<div class="line number4 index3 alt1"><code class="bash plain">主从复制的其他设置项</code></div>
<div class="line number5 index4 alt2"><code class="bash plain">--only&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从节点指定复制某个数据库,默认是复制全部数据库</code></div>
<div class="line number6 index5 alt1"><code class="bash plain">--slavedelay&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从节点设置主数据库同步数据的延迟(单位是秒)</code></div>
<div class="line number7 index6 alt2"><code class="bash plain">--fastsync&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从节点以主数据库的节点快照为节点启动从数据库</code></div>
<div class="line number8 index7 alt1"><code class="bash plain">--autoresync&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从节点如果不同步则从新同步数据库(即选择当通过热添加了一台从服务器之后,从服务器选择是否更新主服务器之间的数据)</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">--oplogSize&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 主节点设置oplog的大小(主节点操作记录存储到</code><code class="bash functions">local</code><code class="bash plain">的oplog中)</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>在上面slave-node从节点的local数据库中,存在一个集合sources。这个集合就保存了这个服务器的主服务器是谁</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_44008" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.236:27017</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">......</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">&gt; show dbs</code></div>
<div class="line number4 index3 alt1"><code class="bash plain">admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.000GB</code></div>
<div class="line number5 index4 alt2"><code class="bash functions">local</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">0.000GB</code></div>
<div class="line number6 index5 alt1"><code class="bash plain">master_slave&nbsp; 0.000GB</code></div>
<div class="line number7 index6 alt2"><code class="bash plain">wangshibo&nbsp;&nbsp;&nbsp;&nbsp; 0.000GB</code></div>
<div class="line number8 index7 alt1"><code class="bash plain">&gt; use&nbsp;</code><code class="bash functions">local</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">switched to db&nbsp;</code><code class="bash functions">local</code></div>
<div class="line number10 index9 alt1"><code class="bash plain">&gt; show collections</code></div>
<div class="line number11 index10 alt2"><code class="bash plain">me</code></div>
<div class="line number12 index11 alt1"><code class="bash plain">sources</code></div>
<div class="line number13 index12 alt2"><code class="bash plain">startup_log</code></div>
<div class="line number14 index13 alt1"><code class="bash plain">&gt; db.sources.</code><code class="bash functions">find</code><code class="bash plain">()</code></div>
<div class="line number15 index14 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"593277a5105051e5648605a3"</code><code class="bash plain">),&nbsp;</code><code class="bash string">"host"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.238:27017"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"source"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"main"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"syncedTo"</code>&nbsp;<code class="bash plain">: Timestamp(1496481652, 1) }</code></div>
<div class="line number16 index15 alt1"><code class="bash plain">&gt;</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p><strong>二、Mongodb副本集(Replica Sets)&nbsp;&nbsp;&nbsp;(可以参考:搭建高可用mongodb集群)</strong></p>
<p>mongodb 不推荐主从复制,推荐建立副本集(Replica
Set)来保证1个服务挂了,可以有其他服务顶上,程序正常运行,几个服务的数据都是一样的,后台自动同步。主从复制其实就是一个单副本的应用,没有很好的扩展性饿容错性。然而副本集具有多个副本保证了容错性,就算一个副本挂掉了还有很多个副本存在,并且解决了"主节点挂掉后,整个集群内会自动切换"的问题。副本集比传统的Master-Slave主从复制有改进的地方就是它可以进行故障的自动转移,如果我们停掉复制集中的一个成员,那么剩余成员会再自动选举一个成员,作为主库。<br>Replica
Set 使用的是 n 个 mongod
节点,构建具备自动的容错功能(auto-failover),自动恢复的(auto-recovery)的高可用方案。使用 Replica Set
来实现读写分离。通过在连接时指定或者在主库指定 slaveOk,由Secondary 来分担读的压力,Primary 只承担写操作。对于
Replica Set 中的 secondary 节点默认是不可读的。</p>
<p>1)关于副本集的概念</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_527665" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">副本集是一种在多台机器同步数据的进程,副本集体提供了数据冗余,扩展了数据可用性。在多台服务器保存数据可以避免因为一台服务器导致的数据丢失。</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">也可以从硬件故障或服务中断解脱出来,利用额外的数据副本,可以从一台机器致力于灾难恢复或者备份。</code></div>
<div class="line number3 index2 alt2">&nbsp;</div>
<div class="line number4 index3 alt1"><code class="bash plain">在一些场景,可以使用副本集来扩展读性能,客户端有能力发送读写操作给不同的服务器。也可以在不同的数据中心获取不同的副本来扩展分布式应用的能力。</code></div>
<div class="line number5 index4 alt2"><code class="bash plain">mongodb副本集是一组拥有相同数据的mongodb实例,主mongodb接受所有的写操作,所有的其他实例可以接受主实例的操作以保持数据同步。</code></div>
<div class="line number6 index5 alt1"><code class="bash plain">主实例接受客户的写操作,副本集只能有一个主实例,因为为了维持数据一致性,只有一个实例可写,主实例的日志保存在oplog。</code></div>
<div class="line number7 index6 alt2">&nbsp;</div>
<div class="line number8 index7 alt1"><code class="bash plain">Client Application Driver</code></div>
<div class="line number9 index8 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">Writes&nbsp; Reads</code></div>
<div class="line number10 index9 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">|&nbsp;&nbsp; |</code></div>
<div class="line number11 index10 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">Primary</code></div>
<div class="line number12 index11 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">|Replication|Replication</code></div>
<div class="line number13 index12 alt2"><code class="bash plain">Secondary&nbsp;&nbsp;&nbsp; Secondary</code></div>
<div class="line number14 index13 alt1">&nbsp;</div>
<div class="line number15 index14 alt2"><code class="bash plain">二级节点复制主节点的oplog然后在自己的数据副本上执行操作,二级节点是主节点数据的反射,如果主节点不可用,会选举一个新的主节点。</code></div>
<div class="line number16 index15 alt1"><code class="bash plain">默认读操作是在主节点进行的,但是可以指定读取首选项参数来指定读操作到副本节点。</code></div>
<div class="line number17 index16 alt2"><code class="bash plain">可以添加一个额外的仲裁节点(不拥有被选举权),使副本集节点保持奇数,确保可以选举出票数不同的直接点。仲裁者并不需要专用的硬件设备。</code></div>
<div class="line number18 index17 alt1"><code class="bash plain">仲裁者节点一直会保存仲裁者身份</code></div>
<div class="line number19 index18 alt2">&nbsp;</div>
<div class="line number20 index19 alt1"><code class="bash plain">........异步复制........</code></div>
<div class="line number21 index20 alt2"><code class="bash plain">副本节点同步直接点操作是异步的,然而会导致副本集无法返回最新的数据给客户端程序。</code></div>
<div class="line number22 index21 alt1">&nbsp;</div>
<div class="line number23 index22 alt2"><code class="bash plain">........自动故障转移........</code></div>
<div class="line number24 index23 alt1"><code class="bash plain">如果主节点10s以上与其他节点失去通信,其他节点将会选举新的节点作为主节点。</code></div>
<div class="line number25 index24 alt2"><code class="bash plain">拥有大多数选票的副节点会被选举为主节点。</code></div>
<div class="line number26 index25 alt1"><code class="bash plain">副本集提供了一些选项给应用程序,可以做一个成员位于不同数据中心的副本集。</code></div>
<div class="line number27 index26 alt2"><code class="bash plain">也可以指定成员不同的优先级来控制选举。</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>2)副本集的结构及原理</p>
<p>MongoDB 的副本集不同于以往的主从模式。<br>在集群Master故障的时候,副本集可以自动投票,选举出新的Master,并引导其余的Slave服务器连接新的Master,而这个过程对于应用是透明的。可以说MongoDB的副本集<br>是自带故障转移功能的主从复制。<br>相对于传统主从模式的优势<br>传统的主从模式,需要手工指定集群中的 Master。如果 Master 发生故障,一般都是人工介入,指定新的 Master。 这个过程对于应用一般不是透明的,往往伴随着应用重<br>新修改配置文件,重启应用服务器等。而
MongoDB 副本集,集群中的任何节点都可能成为 Master 节点。一旦 Master 节点故障,则会在其余节点中选举出一个新的
Master 节点。 并引导剩余节点连接到新的 Master 节点。这个过程对于应用是透明的。</p>
<p><img src="https://images2015.cnblogs.com/blog/907596/201706/907596-20170604001737664-2049802701.png"></p>
<p>一个副本集即为服务于同一数据集的多个 MongoDB 实例,其中一个为主节点,其余的都为从节点。主节
点上能够完成读写操作,从节点仅能用于读操作。主节点需要记录所有改变数据库状态的操作,这些记录 保存在 oplog 中,这个文件存储在 local
数据库,各个从节点通过此 oplog 来复制数据并应用于本地,保持 本地的数据与主节点的一致。oplog
具有幂等性,即无论执行几次其结果一致,这个比 mysql 的二进制日 志更好用。<br>集群中的各节点还会通过传递心跳信息来检测各自的健康状况。当主节点故障时,多个从节点会触发一次 新的选举操作,并选举其中的一个成为新的主节点(通常谁的优先级更高,谁就是新的主节点),心跳信 息默认每 2 秒传递一次。</p>
<p><img src="https://images2015.cnblogs.com/blog/907596/201706/907596-20170604001821227-991171740.png"></p>
<p><img src="https://images2015.cnblogs.com/blog/907596/201706/907596-20170604013129524-1035525546.png"></p>
<p>客户端连接到副本集后,不关心具体哪一台机器是否挂掉。主服务器负责整个副本集的读写,副本集定期同步数据备份。一旦主节点挂掉,副本节点就会选举一个新的主服务器。这一切对于应用服务器不需要关心。</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_462529" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">心跳检测:</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">整个集群需要保持一定的通信才能知道哪些节点活着哪些节点挂掉。mongodb节点会向副本集中的其他节点每两秒就会发送一次pings包,如果其他节点在10秒钟</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">之内没有返回就标示为不能访问。每个节点内部都会维护一个状态映射表,表明当前每个节点是什么角色、日志时间戳等关键信息。如果是主节点,除了维护映射表</code></div>
<div class="line number4 index3 alt1"><code class="bash plain">外还需要检查自己能否和集群中内大部分节点通讯,如果不能则把自己降级为secondary只读节点。</code></div>
<div class="line number5 index4 alt2">&nbsp;</div>
<div class="line number6 index5 alt1"><code class="bash plain">数据同步</code></div>
<div class="line number7 index6 alt2"><code class="bash plain">副本集同步分为初始化同步和keep复制。初始化同步指全量从主节点同步数据,如果主节点数据量比较大同步时间会比较长。而keep复制指初始化同步过后,节点</code></div>
<div class="line number8 index7 alt1"><code class="bash plain">之间的实时同步一般是增量同步。初始化同步不只是在第一次才会被处罚,有以下两种情况会触发:</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">1)secondary第一次加入,这个是肯定的。</code></div>
<div class="line number10 index9 alt1"><code class="bash plain">2)secondary落后的数据量超过了oplog的大小,这样也会被全量复制。</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p><img src="https://images2015.cnblogs.com/blog/907596/201706/907596-20170604012944508-1544910602.png"></p>
<p>副本集中的副本节点在主节点挂掉后通过心跳机制检测到后,就会在集群内发起主节点的选举机制,自动选举出一位新的主服务器。</p>
<p>副本集包括三种节点:主节点、从节点、仲裁节点。</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_139768" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">1)主节点负责处理客户端请求,读、写数据, 记录在其上所有操作的 oplog;</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">2)从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。默认情况下,从节点不支持外部读取,但可以设置;</code></div>
<div class="line number3 index2 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">副本集的机制在于主节点出现故障的时候,余下的节点会选举出一个新的主节点,从而保证系统可以正常运行。</code></div>
<div class="line number4 index3 alt1"><code class="bash plain">3)仲裁节点不复制数据,仅参与投票。由于它没有访问的压力,比较空闲,因此不容易出故障。由于副本集出现故障的时候,存活的节点必须大于副本集节点总数的一半,</code></div>
<div class="line number5 index4 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">否则无法选举主节点,或者主节点会自动降级为从节点,整个副本集变为只读。因此,增加一个不容易出故障的仲裁节点,可以增加有效选票,降低整个副本集不可用的</code></div>
<div class="line number6 index5 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">风险。仲裁节点可多于一个。也就是说只参与投票,不接收复制的数据,也不能成为活跃节点。</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<div class="page" title="Page 1">
<div class="layoutArea">
<div class="column">
<div class="page" title="Page 1">
<div class="layoutArea">
<div class="column">
<p>官方推荐MongoDB副本节点最少为3台, 建议副本集成员为奇数,最多12个副本节点,最多7个节点参与选举。限制副本节点的数量,主要是因为一个集群中过多的副本节点,增加了复制的成本,反而拖累了集群<br>的整体性能。 太多的副本节点参与选举,也会增加选举的时间。而官方建议奇数的节点,是为了避免脑裂 的发生。</p>
<p>3)副本集的工作流程<strong>&nbsp;</strong></p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_832923" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">在 MongoDB 副本集中,主节点负责处理客户端的读写请求,备份节点则负责映射主节点的 数据。备份节点的工作原理过程可以大致描述为,备份节点定期轮询主节点上的数据操作,</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">然后对 自己的数据副本进行这些操作,从而保证跟主节点的数据同步。至于主节点上的所有 数据库状态改变 的操作,都会存放在一张特定的系统表中。备份节点则是根据这些数据进</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">行自己的数据更新。</code></div>
<div class="line number4 index3 alt1">&nbsp;</div>
<div class="line number5 index4 alt2"><code class="bash plain">oplog</code></div>
<div class="line number6 index5 alt1"><code class="bash plain">上面提到的数据库状态改变的操作,称为 oplog(operation log,主节点操作记录)。oplog 存储在&nbsp;</code><code class="bash functions">local</code>&nbsp;<code class="bash plain">数据库的</code><code class="bash string">"oplog.rs"</code><code class="bash plain">表中。副本集中备份节点异步的从主节点同步 oplog,然后重新 执行它记录的操作,以此达到了数据同步的作用。</code></div>
<div class="line number7 index6 alt2"><code class="bash plain">关于 oplog 有几个注意的地方:</code></div>
<div class="line number8 index7 alt1"><code class="bash plain">1)oplog 只记录改变数据库状态的操作</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">2)存储在 oplog 中的操作并不是和主节点执行的操作完全一样,例如</code><code class="bash string">"$inc"</code><code class="bash plain">操作就会转化为</code><code class="bash string">"$set"</code><code class="bash plain">操作</code></div>
<div class="line number10 index9 alt1"><code class="bash plain">3)oplog 存储在固定集合中(capped collection),当 oplog 的数量超过 oplogSize,新的操作就会覆盖就的操作</code></div>
<div class="line number11 index10 alt2">&nbsp;</div>
<div class="line number12 index11 alt1"><code class="bash plain">数据同步</code></div>
<div class="line number13 index12 alt2"><code class="bash plain">在副本集中,有两种数据同步方式:</code></div>
<div class="line number14 index13 alt1"><code class="bash plain">1)initial&nbsp;</code><code class="bash functions">sync</code><code class="bash plain">(初始化):这个过程发生在当副本集中创建一个新的数据库或其中某个节点刚从宕机中恢复,或者向副本集中添加新的成员的时候,默认的,副本集中的节点会从离 它最近</code></div>
<div class="line number15 index14 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">的节点复制 oplog 来同步数据,这个最近的节点可以是 primary 也可以是拥有最新 oplog 副本的 secondary 节点。该操作一般会重新初始化备份节点,开销较大。</code></div>
<div class="line number16 index15 alt1"><code class="bash plain">2)replication(复制):在初始化后这个操作会一直持续的进行着,以保持各个 secondary 节点之间的数据同步。</code></div>
<div class="line number17 index16 alt2">&nbsp;</div>
<div class="line number18 index17 alt1"><code class="bash plain">initial&nbsp;</code><code class="bash functions">sync</code></div>
<div class="line number19 index18 alt2"><code class="bash plain">当遇到无法同步的问题时,只能使用以下两种方式进行 initial&nbsp;</code><code class="bash functions">sync</code>&nbsp;<code class="bash plain">了</code></div>
<div class="line number20 index19 alt1"><code class="bash plain">1)第一种方式就是停止该节点,然后删除目录中的文件,重新启动该节点。这样,这个节 点就会执行 initial&nbsp;</code><code class="bash functions">sync</code></div>
<div class="line number21 index20 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">注意:通过这种方式,</code><code class="bash functions">sync</code>&nbsp;<code class="bash plain">的时间是根据数据量大小的,如果数据量过大,</code><code class="bash functions">sync</code>&nbsp;<code class="bash plain">时间就 会很长</code></div>
<div class="line number22 index21 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">同时会有很多网络传输,可能会影响其他节点的工作</code></div>
<div class="line number23 index22 alt2"><code class="bash plain">2)第二种方式,停止该节点,然后删除目录中的文件,找一个比较新的节点,然后把该节点目 录中的文件拷贝到要&nbsp;</code><code class="bash functions">sync</code>&nbsp;<code class="bash plain">的节点目录中</code></div>
<div class="line number24 index23 alt1"><code class="bash plain">通过上面两种方式中的一种,都可以重新恢复</code><code class="bash string">"port=33333"</code><code class="bash plain">的节点。不在进行截图了。</code></div>
<div class="line number25 index24 alt2">&nbsp;</div>
<div class="line number26 index25 alt1"><code class="bash plain">副本集管理</code></div>
<div class="line number27 index26 alt2"><code class="bash plain">1)查看oplog的信息 通过</code><code class="bash string">"db.printReplicationInfo()"</code><code class="bash plain">命令可以查看 oplog 的信息</code></div>
<div class="line number28 index27 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">字段说明:</code></div>
<div class="line number29 index28 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">configured oplog size: oplog 文件大小</code></div>
<div class="line number30 index29 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">log length start to end:&nbsp;&nbsp;&nbsp;&nbsp; oplog 日志的启用时间段</code></div>
<div class="line number31 index30 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">oplog first event&nbsp;</code><code class="bash functions">time</code><code class="bash plain">:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一个事务日志的产生时间</code></div>
<div class="line number32 index31 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">oplog last event&nbsp;</code><code class="bash functions">time</code><code class="bash plain">:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后一个事务日志的产生时间</code></div>
<div class="line number33 index32 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">now:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在的时间</code></div>
<div class="line number34 index33 alt1">&nbsp;</div>
<div class="line number35 index34 alt2"><code class="bash plain">2)查看 slave 状态 通过</code><code class="bash string">"db.printSlaveReplicationInfo()"</code><code class="bash plain">可以查看 slave 的同步状态</code></div>
<div class="line number36 index35 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">当插入一条新的数据,然后重新检查 slave 状态时,就会发现&nbsp;</code><code class="bash functions">sync</code>&nbsp;<code class="bash plain">时间更新了</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>4)副本集选举的过程和注意点</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_980774" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">Mongodb副本集选举采用的是Bully算法,这是一种协调者(主节点)竞选算法,主要思想是集群的每个成员都可以声明它是主节点并通知其他节点。</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">别的节点可以选择接受这个声称或是拒绝并进入主节点竞争,被其他所有节点接受的节点才能成为主节点。</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">节点按照一些属性来判断谁应该胜出,这个属性可以是一个静态 ID,也可以是更新的度量像最近一次事务ID(最新的节点会胜出)</code></div>
<div class="line number4 index3 alt1">&nbsp;</div>
<div class="line number5 index4 alt2"><code class="bash plain">副本集的选举过程大致如下:</code></div>
<div class="line number6 index5 alt1"><code class="bash plain">1)得到每个服务器节点的最后操作时间戳。每个 mongodb 都有 oplog 机制会记录本机的操作,方便和主服 务器进行对比数据是否同步还可以用于错误恢复。</code></div>
<div class="line number7 index6 alt2"><code class="bash plain">2)如果集群中大部分服务器 down 机了,保留活着的节点都为 secondary 状态并停止,不选举了。</code></div>
<div class="line number8 index7 alt1"><code class="bash plain">3)如果集群中选举出来的主节点或者所有从节点最后一次同步时间看起来很旧了,停止选举等待人来操作。</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">4)如果上面都没有问题就选择最后操作时间戳最新(保证数据是最新的)的服务器节点作为主节点。</code></div>
<div class="line number10 index9 alt1">&nbsp;</div>
<div class="line number11 index10 alt2">&nbsp;</div>
<div class="line number12 index11 alt1"><code class="bash plain">副本集选举的特点:</code></div>
<div class="line number13 index12 alt2"><code class="bash plain">选举还有个前提条件,参与选举的节点数量必须大于副本集总节点数量的一半(建议副本集成员为奇数。最多12个副本节点,最多7个节点参与选举)</code></div>
<div class="line number14 index13 alt1"><code class="bash plain">如果已经小于一半了所有节点保持只读状态。集合中的成员一定要有大部分成员(即超过一半数量)是保持正常在线状态,3个成员的副本集,需要至少2个从属节点是正常状态。</code></div>
<div class="line number15 index14 alt2"><code class="bash plain">如果一个从属节点挂掉,那么当主节点down掉 产生故障切换时,由于副本集中只有一个节点是正常的,少于一半,则选举失败。</code></div>
<div class="line number16 index15 alt1"><code class="bash plain">4个成员的副本集,则需要3个成员是正常状态(先关闭一个从属节点,然后再关闭主节点,产生故障切换,此时副本集中只有2个节点正常,则无法成功选举出新主节点)。</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>5)副本集数据过程</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_608511" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">Primary节点写入数据,Secondary通过读取Primary的oplog得到复制信息,开始复制数据并且将复制信息写入到自己的oplog。如果某个操作失败,则备份节点</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">停止从当前数据源复制数据。如果某个备份节点由于某些原因挂掉了,当重新启动后,就会自动从oplog的最后一个操作开始同步,同步完成后,将信息写入自己的</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">oplog,由于复制操作是先复制数据,复制完成后再写入oplog,有可能相同的操作会同步两份,不过MongoDB在设计之初就考虑到这个问题,将oplog的同一个操作</code></div>
<div class="line number4 index3 alt1"><code class="bash plain">执行多次,与执行一次的效果是一样的。简单的说就是:</code></div>
<div class="line number5 index4 alt2">&nbsp;</div>
<div class="line number6 index5 alt1"><code class="bash plain">当Primary节点完成数据操作后,Secondary会做出一系列的动作保证数据的同步:</code></div>
<div class="line number7 index6 alt2"><code class="bash plain">1)检查自己</code><code class="bash functions">local</code><code class="bash plain">库的oplog.rs集合找出最近的时间戳。</code></div>
<div class="line number8 index7 alt1"><code class="bash plain">2)检查Primary节点</code><code class="bash functions">local</code><code class="bash plain">库oplog.rs集合,找出大于此时间戳的记录。</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">3)将找到的记录插入到自己的oplog.rs集合中,并执行这些操作。</code></div>
<div class="line number10 index9 alt1">&nbsp;</div>
<div class="line number11 index10 alt2"><code class="bash plain">副本集的同步和主从同步一样,都是异步同步的过程,不同的是副本集有个自动故障转移的功能。其原理是:slave端从primary端获取日志,然后在自己身上完全顺序</code></div>
<div class="line number12 index11 alt1"><code class="bash plain">的执行日志所记录的各种操作(该日志是不记录查询操作的),这个日志就是</code><code class="bash functions">local</code><code class="bash plain">数据 库中的oplog.rs表,默认在64位机器上这个表是比较大的,占磁盘大小的5%,</code></div>
<div class="line number13 index12 alt2"><code class="bash plain">oplog.rs的大小可以在启动参数中设 定:--oplogSize 1000,单位是M。</code></div>
<div class="line number14 index13 alt1">&nbsp;</div>
<div class="line number15 index14 alt2"><code class="bash plain">注意:在副本集的环境中,要是所有的Secondary都宕机了,只剩下Primary。最后Primary会变成Secondary,不能提供服务。</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>6)MongoDB 同步延迟问题</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_165738" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">当你的用户抱怨修改过的信息不改变,删除掉的数据还在显示,你掐指一算,估计是数据库主从不同步。与其他提供数据同步的数据库一样,MongoDB 也会遇到同步延迟的问题,</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">在MongoDB的Replica Sets模式中,同步延迟也经常是困扰使用者的一个大问题。</code></div>
<div class="line number3 index2 alt2">&nbsp;</div>
<div class="line number4 index3 alt1"><code class="bash plain">什么是同步延迟?</code></div>
<div class="line number5 index4 alt2"><code class="bash plain">首先,要出现同步延迟,必然是在有数据同步的场合,在 MongoDB 中,有两种数据冗余方式,一种是Master-Slave 模式,一种是Replica Sets模式。这两个模式本质上都是</code></div>
<div class="line number6 index5 alt1"><code class="bash plain">在一个节点上执行写操作,
另外的节点将主节点上的写操作同步到自己这边再进行执行。在MongoDB中,所有写操作都会产生 oplog,oplog
是每修改一条数据都会生成一条,如果你采用一个批量 update 命令更新了 N 多条数据, 那么抱歉,oplog
会有很多条,而不是一条。所以同步延迟就是写操作在主节点上执行完后,从节点还没有把 oplog
拿过来再执行一次。而这个写操作的量越大,主节点与从节点的差别也就越大,同步延迟也就越大了。</code></div>
<div class="line number7 index6 alt2">&nbsp;</div>
<div class="line number8 index7 alt1"><code class="bash plain">同步延迟带来的问题</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">首先,同步操作通常有两个效果,一是读写分离,将读操作放到从节点上来执行,从而减少主节点的 压力。对于大多数场景来说,读多写少是基本特性,所以这一点是很有用的。</code></div>
<div class="line number10 index9 alt1"><code class="bash plain">另一个作用是数据备份, 同一个写操作除了在主节点执行之外,在从节点上也同样执行,这样我们就有多份同样的数据,一旦 主节点的数据因为各种天灾人祸无法恢复的时候,我们至少还有从节点可以依赖。但是主从延迟问题 可能会对上面两个效果都产生不好的影响。</code></div>
<div class="line number11 index10 alt2">&nbsp;</div>
<div class="line number12 index11 alt1"><code class="bash plain">如果主从延迟过大,主节点上会有很多数据更改没有同步到从节点上。这时候如果主节点故障,就有 两种情况:</code></div>
<div class="line number13 index12 alt2"><code class="bash plain">1)主节点故障并且无法恢复,如果应用上又无法忍受这部分数据的丢失,我们就得想各种办法将这部 数据更改找回来,再写入到从节点中去。可以想象,即使是有可能,那这也绝对是一件非常恶心的活。</code></div>
<div class="line number14 index13 alt1"><code class="bash plain">2)主节点能够恢复,但是需要花的时间比较长,这种情况如果应用能忍受,我们可以直接让从节点提 供服务,只是对用户来说,有一段时间的数据丢失了,而如果应用不能接受数据的不一致,那么就只能下线整个业务,等主节点恢复后再提供服务了。</code></div>
<div class="line number15 index14 alt2">&nbsp;</div>
<div class="line number16 index15 alt1"><code class="bash plain">如果你只有一个从节点,当主从延迟过大时,由于主节点只保存最近的一部分 oplog,可能会导致从 节点青黄不接,不得不进行 resync 操作,全量从主节点同步数据。</code></div>
<div class="line number17 index16 alt2"><code class="bash plain">带来的问题是:当从节点全量同步的时候,实际只有主节点保存了完整的数据,这时候如果主节点故障,很可能全 部数据都丢掉了。</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p><strong>7)Mongodb副本集环境部署记录</strong></p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_247161" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
<div class="line number67 index66 alt2">67</div>
<div class="line number68 index67 alt1">68</div>
<div class="line number69 index68 alt2">69</div>
<div class="line number70 index69 alt1">70</div>
<div class="line number71 index70 alt2">71</div>
<div class="line number72 index71 alt1">72</div>
<div class="line number73 index72 alt2">73</div>
<div class="line number74 index73 alt1">74</div>
<div class="line number75 index74 alt2">75</div>
<div class="line number76 index75 alt1">76</div>
<div class="line number77 index76 alt2">77</div>
<div class="line number78 index77 alt1">78</div>
<div class="line number79 index78 alt2">79</div>
<div class="line number80 index79 alt1">80</div>
<div class="line number81 index80 alt2">81</div>
<div class="line number82 index81 alt1">82</div>
<div class="line number83 index82 alt2">83</div>
<div class="line number84 index83 alt1">84</div>
<div class="line number85 index84 alt2">85</div>
<div class="line number86 index85 alt1">86</div>
<div class="line number87 index86 alt2">87</div>
<div class="line number88 index87 alt1">88</div>
<div class="line number89 index88 alt2">89</div>
<div class="line number90 index89 alt1">90</div>
<div class="line number91 index90 alt2">91</div>
<div class="line number92 index91 alt1">92</div>
<div class="line number93 index92 alt2">93</div>
<div class="line number94 index93 alt1">94</div>
<div class="line number95 index94 alt2">95</div>
<div class="line number96 index95 alt1">96</div>
<div class="line number97 index96 alt2">97</div>
<div class="line number98 index97 alt1">98</div>
<div class="line number99 index98 alt2">99</div>
<div class="line number100 index99 alt1">100</div>
<div class="line number101 index100 alt2">101</div>
<div class="line number102 index101 alt1">102</div>
<div class="line number103 index102 alt2">103</div>
<div class="line number104 index103 alt1">104</div>
<div class="line number105 index104 alt2">105</div>
<div class="line number106 index105 alt1">106</div>
<div class="line number107 index106 alt2">107</div>
<div class="line number108 index107 alt1">108</div>
<div class="line number109 index108 alt2">109</div>
<div class="line number110 index109 alt1">110</div>
<div class="line number111 index110 alt2">111</div>
<div class="line number112 index111 alt1">112</div>
<div class="line number113 index112 alt2">113</div>
<div class="line number114 index113 alt1">114</div>
<div class="line number115 index114 alt2">115</div>
<div class="line number116 index115 alt1">116</div>
<div class="line number117 index116 alt2">117</div>
<div class="line number118 index117 alt1">118</div>
<div class="line number119 index118 alt2">119</div>
<div class="line number120 index119 alt1">120</div>
<div class="line number121 index120 alt2">121</div>
<div class="line number122 index121 alt1">122</div>
<div class="line number123 index122 alt2">123</div>
<div class="line number124 index123 alt1">124</div>
<div class="line number125 index124 alt2">125</div>
<div class="line number126 index125 alt1">126</div>
<div class="line number127 index126 alt2">127</div>
<div class="line number128 index127 alt1">128</div>
<div class="line number129 index128 alt2">129</div>
<div class="line number130 index129 alt1">130</div>
<div class="line number131 index130 alt2">131</div>
<div class="line number132 index131 alt1">132</div>
<div class="line number133 index132 alt2">133</div>
<div class="line number134 index133 alt1">134</div>
<div class="line number135 index134 alt2">135</div>
<div class="line number136 index135 alt1">136</div>
<div class="line number137 index136 alt2">137</div>
<div class="line number138 index137 alt1">138</div>
<div class="line number139 index138 alt2">139</div>
<div class="line number140 index139 alt1">140</div>
<div class="line number141 index140 alt2">141</div>
<div class="line number142 index141 alt1">142</div>
<div class="line number143 index142 alt2">143</div>
<div class="line number144 index143 alt1">144</div>
<div class="line number145 index144 alt2">145</div>
<div class="line number146 index145 alt1">146</div>
<div class="line number147 index146 alt2">147</div>
<div class="line number148 index147 alt1">148</div>
<div class="line number149 index148 alt2">149</div>
<div class="line number150 index149 alt1">150</div>
<div class="line number151 index150 alt2">151</div>
<div class="line number152 index151 alt1">152</div>
<div class="line number153 index152 alt2">153</div>
<div class="line number154 index153 alt1">154</div>
<div class="line number155 index154 alt2">155</div>
<div class="line number156 index155 alt1">156</div>
<div class="line number157 index156 alt2">157</div>
<div class="line number158 index157 alt1">158</div>
<div class="line number159 index158 alt2">159</div>
<div class="line number160 index159 alt1">160</div>
<div class="line number161 index160 alt2">161</div>
<div class="line number162 index161 alt1">162</div>
<div class="line number163 index162 alt2">163</div>
<div class="line number164 index163 alt1">164</div>
<div class="line number165 index164 alt2">165</div>
<div class="line number166 index165 alt1">166</div>
<div class="line number167 index166 alt2">167</div>
<div class="line number168 index167 alt1">168</div>
<div class="line number169 index168 alt2">169</div>
<div class="line number170 index169 alt1">170</div>
<div class="line number171 index170 alt2">171</div>
<div class="line number172 index171 alt1">172</div>
<div class="line number173 index172 alt2">173</div>
<div class="line number174 index173 alt1">174</div>
<div class="line number175 index174 alt2">175</div>
<div class="line number176 index175 alt1">176</div>
<div class="line number177 index176 alt2">177</div>
<div class="line number178 index177 alt1">178</div>
<div class="line number179 index178 alt2">179</div>
<div class="line number180 index179 alt1">180</div>
<div class="line number181 index180 alt2">181</div>
<div class="line number182 index181 alt1">182</div>
<div class="line number183 index182 alt2">183</div>
<div class="line number184 index183 alt1">184</div>
<div class="line number185 index184 alt2">185</div>
<div class="line number186 index185 alt1">186</div>
<div class="line number187 index186 alt2">187</div>
<div class="line number188 index187 alt1">188</div>
<div class="line number189 index188 alt2">189</div>
<div class="line number190 index189 alt1">190</div>
<div class="line number191 index190 alt2">191</div>
<div class="line number192 index191 alt1">192</div>
<div class="line number193 index192 alt2">193</div>
<div class="line number194 index193 alt1">194</div>
<div class="line number195 index194 alt2">195</div>
<div class="line number196 index195 alt1">196</div>
<div class="line number197 index196 alt2">197</div>
<div class="line number198 index197 alt1">198</div>
<div class="line number199 index198 alt2">199</div>
<div class="line number200 index199 alt1">200</div>
<div class="line number201 index200 alt2">201</div>
<div class="line number202 index201 alt1">202</div>
<div class="line number203 index202 alt2">203</div>
<div class="line number204 index203 alt1">204</div>
<div class="line number205 index204 alt2">205</div>
<div class="line number206 index205 alt1">206</div>
<div class="line number207 index206 alt2">207</div>
<div class="line number208 index207 alt1">208</div>
<div class="line number209 index208 alt2">209</div>
<div class="line number210 index209 alt1">210</div>
<div class="line number211 index210 alt2">211</div>
<div class="line number212 index211 alt1">212</div>
<div class="line number213 index212 alt2">213</div>
<div class="line number214 index213 alt1">214</div>
<div class="line number215 index214 alt2">215</div>
<div class="line number216 index215 alt1">216</div>
<div class="line number217 index216 alt2">217</div>
<div class="line number218 index217 alt1">218</div>
<div class="line number219 index218 alt2">219</div>
<div class="line number220 index219 alt1">220</div>
<div class="line number221 index220 alt2">221</div>
<div class="line number222 index221 alt1">222</div>
<div class="line number223 index222 alt2">223</div>
<div class="line number224 index223 alt1">224</div>
<div class="line number225 index224 alt2">225</div>
<div class="line number226 index225 alt1">226</div>
<div class="line number227 index226 alt2">227</div>
<div class="line number228 index227 alt1">228</div>
<div class="line number229 index228 alt2">229</div>
<div class="line number230 index229 alt1">230</div>
<div class="line number231 index230 alt2">231</div>
<div class="line number232 index231 alt1">232</div>
<div class="line number233 index232 alt2">233</div>
<div class="line number234 index233 alt1">234</div>
<div class="line number235 index234 alt2">235</div>
<div class="line number236 index235 alt1">236</div>
<div class="line number237 index236 alt2">237</div>
<div class="line number238 index237 alt1">238</div>
<div class="line number239 index238 alt2">239</div>
<div class="line number240 index239 alt1">240</div>
<div class="line number241 index240 alt2">241</div>
<div class="line number242 index241 alt1">242</div>
<div class="line number243 index242 alt2">243</div>
<div class="line number244 index243 alt1">244</div>
<div class="line number245 index244 alt2">245</div>
<div class="line number246 index245 alt1">246</div>
<div class="line number247 index246 alt2">247</div>
<div class="line number248 index247 alt1">248</div>
<div class="line number249 index248 alt2">249</div>
<div class="line number250 index249 alt1">250</div>
<div class="line number251 index250 alt2">251</div>
<div class="line number252 index251 alt1">252</div>
<div class="line number253 index252 alt2">253</div>
<div class="line number254 index253 alt1">254</div>
<div class="line number255 index254 alt2">255</div>
<div class="line number256 index255 alt1">256</div>
<div class="line number257 index256 alt2">257</div>
<div class="line number258 index257 alt1">258</div>
<div class="line number259 index258 alt2">259</div>
<div class="line number260 index259 alt1">260</div>
<div class="line number261 index260 alt2">261</div>
<div class="line number262 index261 alt1">262</div>
<div class="line number263 index262 alt2">263</div>
<div class="line number264 index263 alt1">264</div>
<div class="line number265 index264 alt2">265</div>
<div class="line number266 index265 alt1">266</div>
<div class="line number267 index266 alt2">267</div>
<div class="line number268 index267 alt1">268</div>
<div class="line number269 index268 alt2">269</div>
<div class="line number270 index269 alt1">270</div>
<div class="line number271 index270 alt2">271</div>
<div class="line number272 index271 alt1">272</div>
<div class="line number273 index272 alt2">273</div>
<div class="line number274 index273 alt1">274</div>
<div class="line number275 index274 alt2">275</div>
<div class="line number276 index275 alt1">276</div>
<div class="line number277 index276 alt2">277</div>
<div class="line number278 index277 alt1">278</div>
<div class="line number279 index278 alt2">279</div>
<div class="line number280 index279 alt1">280</div>
<div class="line number281 index280 alt2">281</div>
<div class="line number282 index281 alt1">282</div>
<div class="line number283 index282 alt2">283</div>
<div class="line number284 index283 alt1">284</div>
<div class="line number285 index284 alt2">285</div>
<div class="line number286 index285 alt1">286</div>
<div class="line number287 index286 alt2">287</div>
<div class="line number288 index287 alt1">288</div>
<div class="line number289 index288 alt2">289</div>
<div class="line number290 index289 alt1">290</div>
<div class="line number291 index290 alt2">291</div>
<div class="line number292 index291 alt1">292</div>
<div class="line number293 index292 alt2">293</div>
<div class="line number294 index293 alt1">294</div>
<div class="line number295 index294 alt2">295</div>
<div class="line number296 index295 alt1">296</div>
<div class="line number297 index296 alt2">297</div>
<div class="line number298 index297 alt1">298</div>
<div class="line number299 index298 alt2">299</div>
<div class="line number300 index299 alt1">300</div>
<div class="line number301 index300 alt2">301</div>
<div class="line number302 index301 alt1">302</div>
<div class="line number303 index302 alt2">303</div>
<div class="line number304 index303 alt1">304</div>
<div class="line number305 index304 alt2">305</div>
<div class="line number306 index305 alt1">306</div>
<div class="line number307 index306 alt2">307</div>
<div class="line number308 index307 alt1">308</div>
<div class="line number309 index308 alt2">309</div>
<div class="line number310 index309 alt1">310</div>
<div class="line number311 index310 alt2">311</div>
<div class="line number312 index311 alt1">312</div>
<div class="line number313 index312 alt2">313</div>
<div class="line number314 index313 alt1">314</div>
<div class="line number315 index314 alt2">315</div>
<div class="line number316 index315 alt1">316</div>
<div class="line number317 index316 alt2">317</div>
<div class="line number318 index317 alt1">318</div>
<div class="line number319 index318 alt2">319</div>
<div class="line number320 index319 alt1">320</div>
<div class="line number321 index320 alt2">321</div>
<div class="line number322 index321 alt1">322</div>
<div class="line number323 index322 alt2">323</div>
<div class="line number324 index323 alt1">324</div>
<div class="line number325 index324 alt2">325</div>
<div class="line number326 index325 alt1">326</div>
<div class="line number327 index326 alt2">327</div>
<div class="line number328 index327 alt1">328</div>
<div class="line number329 index328 alt2">329</div>
<div class="line number330 index329 alt1">330</div>
<div class="line number331 index330 alt2">331</div>
<div class="line number332 index331 alt1">332</div>
<div class="line number333 index332 alt2">333</div>
<div class="line number334 index333 alt1">334</div>
<div class="line number335 index334 alt2">335</div>
<div class="line number336 index335 alt1">336</div>
<div class="line number337 index336 alt2">337</div>
<div class="line number338 index337 alt1">338</div>
<div class="line number339 index338 alt2">339</div>
<div class="line number340 index339 alt1">340</div>
<div class="line number341 index340 alt2">341</div>
<div class="line number342 index341 alt1">342</div>
<div class="line number343 index342 alt2">343</div>
<div class="line number344 index343 alt1">344</div>
<div class="line number345 index344 alt2">345</div>
<div class="line number346 index345 alt1">346</div>
<div class="line number347 index346 alt2">347</div>
<div class="line number348 index347 alt1">348</div>
<div class="line number349 index348 alt2">349</div>
<div class="line number350 index349 alt1">350</div>
<div class="line number351 index350 alt2">351</div>
<div class="line number352 index351 alt1">352</div>
<div class="line number353 index352 alt2">353</div>
<div class="line number354 index353 alt1">354</div>
<div class="line number355 index354 alt2">355</div>
<div class="line number356 index355 alt1">356</div>
<div class="line number357 index356 alt2">357</div>
<div class="line number358 index357 alt1">358</div>
<div class="line number359 index358 alt2">359</div>
<div class="line number360 index359 alt1">360</div>
<div class="line number361 index360 alt2">361</div>
<div class="line number362 index361 alt1">362</div>
<div class="line number363 index362 alt2">363</div>
<div class="line number364 index363 alt1">364</div>
<div class="line number365 index364 alt2">365</div>
<div class="line number366 index365 alt1">366</div>
<div class="line number367 index366 alt2">367</div>
<div class="line number368 index367 alt1">368</div>
<div class="line number369 index368 alt2">369</div>
<div class="line number370 index369 alt1">370</div>
<div class="line number371 index370 alt2">371</div>
<div class="line number372 index371 alt1">372</div>
<div class="line number373 index372 alt2">373</div>
<div class="line number374 index373 alt1">374</div>
<div class="line number375 index374 alt2">375</div>
<div class="line number376 index375 alt1">376</div>
<div class="line number377 index376 alt2">377</div>
<div class="line number378 index377 alt1">378</div>
<div class="line number379 index378 alt2">379</div>
<div class="line number380 index379 alt1">380</div>
<div class="line number381 index380 alt2">381</div>
<div class="line number382 index381 alt1">382</div>
<div class="line number383 index382 alt2">383</div>
<div class="line number384 index383 alt1">384</div>
<div class="line number385 index384 alt2">385</div>
<div class="line number386 index385 alt1">386</div>
<div class="line number387 index386 alt2">387</div>
<div class="line number388 index387 alt1">388</div>
<div class="line number389 index388 alt2">389</div>
<div class="line number390 index389 alt1">390</div>
<div class="line number391 index390 alt2">391</div>
<div class="line number392 index391 alt1">392</div>
<div class="line number393 index392 alt2">393</div>
<div class="line number394 index393 alt1">394</div>
<div class="line number395 index394 alt2">395</div>
<div class="line number396 index395 alt1">396</div>
<div class="line number397 index396 alt2">397</div>
<div class="line number398 index397 alt1">398</div>
<div class="line number399 index398 alt2">399</div>
<div class="line number400 index399 alt1">400</div>
<div class="line number401 index400 alt2">401</div>
<div class="line number402 index401 alt1">402</div>
<div class="line number403 index402 alt2">403</div>
<div class="line number404 index403 alt1">404</div>
<div class="line number405 index404 alt2">405</div>
<div class="line number406 index405 alt1">406</div>
<div class="line number407 index406 alt2">407</div>
<div class="line number408 index407 alt1">408</div>
<div class="line number409 index408 alt2">409</div>
<div class="line number410 index409 alt1">410</div>
<div class="line number411 index410 alt2">411</div>
<div class="line number412 index411 alt1">412</div>
<div class="line number413 index412 alt2">413</div>
<div class="line number414 index413 alt1">414</div>
<div class="line number415 index414 alt2">415</div>
<div class="line number416 index415 alt1">416</div>
<div class="line number417 index416 alt2">417</div>
<div class="line number418 index417 alt1">418</div>
<div class="line number419 index418 alt2">419</div>
<div class="line number420 index419 alt1">420</div>
<div class="line number421 index420 alt2">421</div>
<div class="line number422 index421 alt1">422</div>
<div class="line number423 index422 alt2">423</div>
<div class="line number424 index423 alt1">424</div>
<div class="line number425 index424 alt2">425</div>
<div class="line number426 index425 alt1">426</div>
<div class="line number427 index426 alt2">427</div>
<div class="line number428 index427 alt1">428</div>
<div class="line number429 index428 alt2">429</div>
<div class="line number430 index429 alt1">430</div>
<div class="line number431 index430 alt2">431</div>
<div class="line number432 index431 alt1">432</div>
<div class="line number433 index432 alt2">433</div>
<div class="line number434 index433 alt1">434</div>
<div class="line number435 index434 alt2">435</div>
<div class="line number436 index435 alt1">436</div>
<div class="line number437 index436 alt2">437</div>
<div class="line number438 index437 alt1">438</div>
<div class="line number439 index438 alt2">439</div>
<div class="line number440 index439 alt1">440</div>
<div class="line number441 index440 alt2">441</div>
<div class="line number442 index441 alt1">442</div>
<div class="line number443 index442 alt2">443</div>
<div class="line number444 index443 alt1">444</div>
<div class="line number445 index444 alt2">445</div>
<div class="line number446 index445 alt1">446</div>
<div class="line number447 index446 alt2">447</div>
<div class="line number448 index447 alt1">448</div>
<div class="line number449 index448 alt2">449</div>
<div class="line number450 index449 alt1">450</div>
<div class="line number451 index450 alt2">451</div>
<div class="line number452 index451 alt1">452</div>
<div class="line number453 index452 alt2">453</div>
<div class="line number454 index453 alt1">454</div>
<div class="line number455 index454 alt2">455</div>
<div class="line number456 index455 alt1">456</div>
<div class="line number457 index456 alt2">457</div>
<div class="line number458 index457 alt1">458</div>
<div class="line number459 index458 alt2">459</div>
<div class="line number460 index459 alt1">460</div>
<div class="line number461 index460 alt2">461</div>
<div class="line number462 index461 alt1">462</div>
<div class="line number463 index462 alt2">463</div>
<div class="line number464 index463 alt1">464</div>
<div class="line number465 index464 alt2">465</div>
<div class="line number466 index465 alt1">466</div>
<div class="line number467 index466 alt2">467</div>
<div class="line number468 index467 alt1">468</div>
<div class="line number469 index468 alt2">469</div>
<div class="line number470 index469 alt1">470</div>
<div class="line number471 index470 alt2">471</div>
<div class="line number472 index471 alt1">472</div>
<div class="line number473 index472 alt2">473</div>
<div class="line number474 index473 alt1">474</div>
<div class="line number475 index474 alt2">475</div>
<div class="line number476 index475 alt1">476</div>
<div class="line number477 index476 alt2">477</div>
<div class="line number478 index477 alt1">478</div>
<div class="line number479 index478 alt2">479</div>
<div class="line number480 index479 alt1">480</div>
<div class="line number481 index480 alt2">481</div>
<div class="line number482 index481 alt1">482</div>
<div class="line number483 index482 alt2">483</div>
<div class="line number484 index483 alt1">484</div>
<div class="line number485 index484 alt2">485</div>
<div class="line number486 index485 alt1">486</div>
<div class="line number487 index486 alt2">487</div>
<div class="line number488 index487 alt1">488</div>
<div class="line number489 index488 alt2">489</div>
<div class="line number490 index489 alt1">490</div>
<div class="line number491 index490 alt2">491</div>
<div class="line number492 index491 alt1">492</div>
<div class="line number493 index492 alt2">493</div>
<div class="line number494 index493 alt1">494</div>
<div class="line number495 index494 alt2">495</div>
<div class="line number496 index495 alt1">496</div>
<div class="line number497 index496 alt2">497</div>
<div class="line number498 index497 alt1">498</div>
<div class="line number499 index498 alt2">499</div>
<div class="line number500 index499 alt1">500</div>
<div class="line number501 index500 alt2">501</div>
<div class="line number502 index501 alt1">502</div>
<div class="line number503 index502 alt2">503</div>
<div class="line number504 index503 alt1">504</div>
<div class="line number505 index504 alt2">505</div>
<div class="line number506 index505 alt1">506</div>
<div class="line number507 index506 alt2">507</div>
<div class="line number508 index507 alt1">508</div>
<div class="line number509 index508 alt2">509</div>
<div class="line number510 index509 alt1">510</div>
<div class="line number511 index510 alt2">511</div>
<div class="line number512 index511 alt1">512</div>
<div class="line number513 index512 alt2">513</div>
<div class="line number514 index513 alt1">514</div>
<div class="line number515 index514 alt2">515</div>
<div class="line number516 index515 alt1">516</div>
<div class="line number517 index516 alt2">517</div>
<div class="line number518 index517 alt1">518</div>
<div class="line number519 index518 alt2">519</div>
<div class="line number520 index519 alt1">520</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">1)机器环境</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">182.48.115.236&nbsp;&nbsp;&nbsp; master-node(主节点)</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">182.48.115.237&nbsp;&nbsp;&nbsp; slave-node1(从节点)</code></div>
<div class="line number4 index3 alt1"><code class="bash plain">182.48.115.238&nbsp;&nbsp;&nbsp; slave-node2(从节点)</code></div>
<div class="line number5 index4 alt2">&nbsp;</div>
<div class="line number6 index5 alt1"><code class="bash plain">MongoDB 安装目录:</code><code class="bash plain">/usr/local/mongodb</code></div>
<div class="line number7 index6 alt2"><code class="bash plain">MongoDB 数据库目录:</code><code class="bash plain">/usr/local/mongodb/data</code></div>
<div class="line number8 index7 alt1"><code class="bash plain">MongoDB 日志目录:</code><code class="bash plain">/usr/local/mongodb/log/mongo</code><code class="bash plain">.log</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">MongoDB 配置文件:</code><code class="bash plain">/usr/local/mongodb/mongodb</code><code class="bash plain">.conf</code></div>
<div class="line number10 index9 alt1">&nbsp;</div>
<div class="line number11 index10 alt2"><code class="bash plain">mongodb安装可以参考:http:</code><code class="bash plain">//www</code><code class="bash plain">.cnblogs.com</code><code class="bash plain">/kevingrace/p/5752382</code><code class="bash plain">.html</code></div>
<div class="line number12 index11 alt1">&nbsp;</div>
<div class="line number13 index12 alt2"><code class="bash plain">对以上三台服务器部署Mongodb的副本集功能,定义副本集名称为:hqmongodb</code></div>
<div class="line number14 index13 alt1"><code class="bash plain">关闭三台服务器的iptables防火墙和selinux</code></div>
<div class="line number15 index14 alt2">&nbsp;</div>
<div class="line number16 index15 alt1"><code class="bash plain">2)确保三台副本集服务器上的配置文件完全相同(即三台机器的mongodb.conf配置一样,除了配置文件中绑定的ip不一样)。下面操作在三台节点机上都要执行:</code></div>
<div class="line number17 index16 alt2">&nbsp;</div>
<div class="line number18 index17 alt1"><code class="bash plain">编写配置文件</code></div>
<div class="line number19 index18 alt2"><code class="bash plain"></code><code class="bash comments"># cat /usr/local/mongodb/mongodb.conf</code></div>
<div class="line number20 index19 alt1"><code class="bash plain">port=27017</code></div>
<div class="line number21 index20 alt2"><code class="bash plain">bind_ip = 182.48.115.236&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">这个最好配置成本机的ip地址。否则后面进行副本集初始化的时候可能会失败!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></div>
<div class="line number22 index21 alt1"><code class="bash plain">dbpath=</code><code class="bash plain">/usr/local/mongodb/data</code></div>
<div class="line number23 index22 alt2"><code class="bash plain">logpath=</code><code class="bash plain">/usr/local/mongodb/log/mongo</code><code class="bash plain">.log</code></div>
<div class="line number24 index23 alt1"><code class="bash plain">pidfilepath=</code><code class="bash plain">/usr/local/mongodb/mongo</code><code class="bash plain">.pid</code></div>
<div class="line number25 index24 alt2"><code class="bash plain">fork=</code><code class="bash functions">true</code></div>
<div class="line number26 index25 alt1"><code class="bash plain">logappend=</code><code class="bash functions">true</code></div>
<div class="line number27 index26 alt2"><code class="bash plain">shardsvr=</code><code class="bash functions">true</code></div>
<div class="line number28 index27 alt1"><code class="bash plain">directoryperdb=</code><code class="bash functions">true</code></div>
<div class="line number29 index28 alt2"><code class="bash comments">#auth=true</code></div>
<div class="line number30 index29 alt1"><code class="bash comments">#keyFile =/usr/local/mongodb/keyfile</code></div>
<div class="line number31 index30 alt2"><code class="bash plain">replSet =hqmongodb</code></div>
<div class="line number32 index31 alt1">&nbsp;</div>
<div class="line number33 index32 alt2"><code class="bash plain">编写启动脚本(各个节点需要将脚本中的ip改为本机自己的ip地址)</code></div>
<div class="line number34 index33 alt1"><code class="bash plain"></code><code class="bash comments"># cat /usr/local/mongodb/mongodb.conf</code></div>
<div class="line number35 index34 alt2"><code class="bash plain">port=27017</code></div>
<div class="line number36 index35 alt1"><code class="bash plain">dbpath=</code><code class="bash plain">/usr/local/mongodb/data</code></div>
<div class="line number37 index36 alt2"><code class="bash plain">logpath=</code><code class="bash plain">/usr/local/mongodb/log/mongo</code><code class="bash plain">.log</code></div>
<div class="line number38 index37 alt1"><code class="bash plain">pidfilepath=</code><code class="bash plain">/usr/local/mongodb/mongo</code><code class="bash plain">.pid</code></div>
<div class="line number39 index38 alt2"><code class="bash plain">fork=</code><code class="bash functions">true</code></div>
<div class="line number40 index39 alt1"><code class="bash plain">logappend=</code><code class="bash functions">true</code></div>
<div class="line number41 index40 alt2"><code class="bash plain">shardsvr=</code><code class="bash functions">true</code></div>
<div class="line number42 index41 alt1"><code class="bash plain">directoryperdb=</code><code class="bash functions">true</code></div>
<div class="line number43 index42 alt2"><code class="bash comments">#auth=true</code></div>
<div class="line number44 index43 alt1"><code class="bash comments">#keyFile =/usr/local/mongodb/keyfile</code></div>
<div class="line number45 index44 alt2"><code class="bash plain">replSet =hqmongodb</code></div>
<div class="line number46 index45 alt1"><code class="bash plain"></code><code class="bash comments"># cat /etc/init.d/mongodb</code></div>
<div class="line number47 index46 alt2"><code class="bash preprocessor bold">#!/bin/sh</code></div>
<div class="line number48 index47 alt1"><code class="bash comments"># chkconfig: - 64 36</code></div>
<div class="line number49 index48 alt2"><code class="bash comments"># description:mongod</code></div>
<div class="line number50 index49 alt1"><code class="bash keyword">case</code>&nbsp;<code class="bash plain">$1&nbsp;</code><code class="bash keyword">in</code></div>
<div class="line number51 index50 alt2"><code class="bash plain">start)</code></div>
<div class="line number52 index51 alt1"><code class="bash plain">/usr/local/mongodb/bin/mongod</code>&nbsp;<code class="bash plain">--maxConns 20000 --config&nbsp;</code><code class="bash plain">/usr/local/mongodb/mongodb</code><code class="bash plain">.conf</code></div>
<div class="line number53 index52 alt2"><code class="bash plain">;;</code></div>
<div class="line number54 index53 alt1"><code class="bash plain">stop)</code></div>
<div class="line number55 index54 alt2"><code class="bash plain">/usr/local/mongodb/bin/mongo</code>&nbsp;<code class="bash plain">182.48.115.236:27017</code><code class="bash plain">/admin</code>&nbsp;<code class="bash plain">--</code><code class="bash functions">eval</code>&nbsp;<code class="bash string">"db.shutdownServer()"</code></div>
<div class="line number56 index55 alt1"><code class="bash comments">#/usr/local/mongodb/bin/mongo 182.48.115.236:27017/admin --eval "db.auth('system', '123456');db.shutdownServer()"</code></div>
<div class="line number57 index56 alt2"><code class="bash plain">;;</code></div>
<div class="line number58 index57 alt1"><code class="bash plain">status)</code></div>
<div class="line number59 index58 alt2"><code class="bash plain">/usr/local/mongodb/bin/mongo</code>&nbsp;<code class="bash plain">182.48.115.236:27017</code><code class="bash plain">/admin</code>&nbsp;<code class="bash plain">--</code><code class="bash functions">eval</code>&nbsp;<code class="bash string">"db.stats()"</code></div>
<div class="line number60 index59 alt1"><code class="bash comments">#/usr/local/mongodb/bin/mongo 182.48.115.236:27017/admin --eval "db.auth('system', '123456');db.stats()"</code></div>
<div class="line number61 index60 alt2"><code class="bash plain">;;&nbsp;</code><code class="bash keyword">esac</code></div>
<div class="line number62 index61 alt1">&nbsp;</div>
<div class="line number63 index62 alt2"><code class="bash plain">启动mongodb</code></div>
<div class="line number64 index63 alt1"><code class="bash plain"></code><code class="bash comments"># ulimit -SHn 655350</code></div>
<div class="line number65 index64 alt2">&nbsp;</div>
<div class="line number66 index65 alt1"><code class="bash plain"></code><code class="bash comments"># /etc/init.d/mongodb start</code></div>
<div class="line number67 index66 alt2"><code class="bash plain">about to fork child process, waiting&nbsp;</code><code class="bash keyword">until</code>&nbsp;<code class="bash plain">server is ready&nbsp;</code><code class="bash keyword">for</code>&nbsp;<code class="bash plain">connections.</code></div>
<div class="line number68 index67 alt1"><code class="bash plain">forked process: 28211</code></div>
<div class="line number69 index68 alt2"><code class="bash plain">child process started successfully, parent exiting</code></div>
<div class="line number70 index69 alt1"><code class="bash plain"></code><code class="bash comments"># ps -ef|grep mongodb</code></div>
<div class="line number71 index70 alt2"><code class="bash plain">root&nbsp;&nbsp;&nbsp;&nbsp; 28211&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp; 2 00:30 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00:00:00&nbsp;</code><code class="bash plain">/usr/local/mongodb/bin/mongod</code>&nbsp;<code class="bash plain">--maxConns 20000 --config&nbsp;</code><code class="bash plain">/usr/local/mongodb/mongodb</code><code class="bash plain">.conf</code></div>
<div class="line number72 index71 alt1"><code class="bash plain">root&nbsp;&nbsp;&nbsp;&nbsp; 28237 27994&nbsp; 0 00:30 pts</code><code class="bash plain">/2</code>&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">00:00:00&nbsp;</code><code class="bash functions">grep</code>&nbsp;<code class="bash plain">mongodb</code></div>
<div class="line number73 index72 alt2">&nbsp;</div>
<div class="line number74 index73 alt1"><code class="bash plain"></code><code class="bash comments"># lsof -i:27017</code></div>
<div class="line number75 index74 alt2"><code class="bash plain">COMMAND&nbsp;&nbsp; PID USER&nbsp;&nbsp; FD&nbsp;&nbsp; TYPE DEVICE SIZE</code><code class="bash plain">/OFF</code>&nbsp;<code class="bash plain">NODE NAME</code></div>
<div class="line number76 index75 alt1"><code class="bash plain">mongod&nbsp; 28211 root&nbsp;&nbsp;&nbsp; 7u&nbsp; IPv4 684206&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP *:27017 (LISTEN)</code></div>
<div class="line number77 index76 alt2"><code class="bash plain">------------------------------------------------------------------</code></div>
<div class="line number78 index77 alt1"><code class="bash plain">如果启动mongodb的时候报错如下:</code></div>
<div class="line number79 index78 alt2"><code class="bash plain">about to fork child process, waiting&nbsp;</code><code class="bash keyword">until</code>&nbsp;<code class="bash plain">server is ready&nbsp;</code><code class="bash keyword">for</code>&nbsp;<code class="bash plain">connections.</code></div>
<div class="line number80 index79 alt1"><code class="bash plain">forked process: 14229</code></div>
<div class="line number81 index80 alt2"><code class="bash plain">ERROR: child process failed, exited with error number 100</code></div>
<div class="line number82 index81 alt1">&nbsp;</div>
<div class="line number83 index82 alt2"><code class="bash plain">这算是一个Mongod 启动的一个常见错误,非法关闭的时候,lock 文件没有干掉,第二次启动的时候检查到有lock 文件的时候,就报这个错误了。</code></div>
<div class="line number84 index83 alt1"><code class="bash plain">解决方法:进入mongod启动时指定的data目录下删除lock文件,然后执行</code><code class="bash string">"./mongod&nbsp; --repair"</code><code class="bash plain">就行了。即</code></div>
<div class="line number85 index84 alt2"><code class="bash comments"># rm -rf /usr/local/mongodb/data/mongod.lock&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //由于我的测试环境下没有数据,我将data数据目录下的文件全部清空,然后--repair</code></div>
<div class="line number86 index85 alt1"><code class="bash comments"># /usr/local/mongodb/bin/mongod --repair</code></div>
<div class="line number87 index86 alt2">&nbsp;</div>
<div class="line number88 index87 alt1"><code class="bash plain">然后再启动mongodb就ok了!</code></div>
<div class="line number89 index88 alt2"><code class="bash plain">------------------------------------------------------------------</code></div>
<div class="line number90 index89 alt1">&nbsp;</div>
<div class="line number91 index90 alt2"><code class="bash plain">3)对master-node主节点进行配置(182.48.115.236)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">其实,刚开始这三个节点中的任何一个都可以用来初始化为开始的主节点。这里选择以master-node为主节点</code></div>
<div class="line number92 index91 alt1"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.236:27017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //登陆到mongodb数据库中执行下面命令操作。由于配置文件中绑定了ip,所以要用这个绑定的ip登陆</code></div>
<div class="line number93 index92 alt2"><code class="bash plain">....</code></div>
<div class="line number94 index93 alt1">&nbsp;</div>
<div class="line number95 index94 alt2"><code class="bash plain">3.1)初始化副本集,设置本机为主节点 PRIMARY</code></div>
<div class="line number96 index95 alt1">&nbsp;</div>
<div class="line number97 index96 alt2"><code class="bash plain">&gt; rs.initiate()</code></div>
<div class="line number98 index97 alt1"><code class="bash plain">{</code></div>
<div class="line number99 index98 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"info2"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"no configuration specified. Using a default configuration for the set"</code><code class="bash plain">,</code></div>
<div class="line number100 index99 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"me"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.236:27017"</code><code class="bash plain">,</code></div>
<div class="line number101 index100 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"ok"</code>&nbsp;<code class="bash plain">: 1</code></div>
<div class="line number102 index101 alt1"><code class="bash plain">}</code></div>
<div class="line number103 index102 alt2"><code class="bash plain">hqmongodb:OTHER&gt; rs.conf()</code></div>
<div class="line number104 index103 alt1"><code class="bash plain">{</code></div>
<div class="line number105 index104 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"hqmongodb"</code><code class="bash plain">,</code></div>
<div class="line number106 index105 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"version"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number107 index106 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"protocolVersion"</code>&nbsp;<code class="bash plain">: NumberLong(1),</code></div>
<div class="line number108 index107 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"members"</code>&nbsp;<code class="bash plain">: [</code></div>
<div class="line number109 index108 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">{</code></div>
<div class="line number110 index109 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: 0,</code></div>
<div class="line number111 index110 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"host"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.236:27017"</code><code class="bash plain">,</code></div>
<div class="line number112 index111 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"arbiterOnly"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">false</code><code class="bash plain">,</code></div>
<div class="line number113 index112 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"buildIndexes"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">true</code><code class="bash plain">,</code></div>
<div class="line number114 index113 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"hidden"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">false</code><code class="bash plain">,</code></div>
<div class="line number115 index114 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"priority"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number116 index115 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"tags"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number117 index116 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div>
<div class="line number118 index117 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number119 index118 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"slaveDelay"</code>&nbsp;<code class="bash plain">: NumberLong(0),</code></div>
<div class="line number120 index119 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"votes"</code>&nbsp;<code class="bash plain">: 1</code></div>
<div class="line number121 index120 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">}</code></div>
<div class="line number122 index121 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">],</code></div>
<div class="line number123 index122 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"settings"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number124 index123 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"chainingAllowed"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">true</code><code class="bash plain">,</code></div>
<div class="line number125 index124 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"heartbeatIntervalMillis"</code>&nbsp;<code class="bash plain">: 2000,</code></div>
<div class="line number126 index125 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"heartbeatTimeoutSecs"</code>&nbsp;<code class="bash plain">: 10,</code></div>
<div class="line number127 index126 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"electionTimeoutMillis"</code>&nbsp;<code class="bash plain">: 10000,</code></div>
<div class="line number128 index127 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"catchUpTimeoutMillis"</code>&nbsp;<code class="bash plain">: 2000,</code></div>
<div class="line number129 index128 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"getLastErrorModes"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number130 index129 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div>
<div class="line number131 index130 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number132 index131 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"getLastErrorDefaults"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number133 index132 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"w"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number134 index133 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"wtimeout"</code>&nbsp;<code class="bash plain">: 0</code></div>
<div class="line number135 index134 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number136 index135 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"replicaSetId"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"5932f142a55dc83eca86ea86"</code><code class="bash plain">)</code></div>
<div class="line number137 index136 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">}</code></div>
<div class="line number138 index137 alt1"><code class="bash plain">}</code></div>
<div class="line number139 index138 alt2">&nbsp;</div>
<div class="line number140 index139 alt1"><code class="bash plain">3.2)添加副本集从节点。(发现在执行上面的两个命令后,前缀已经改成</code><code class="bash string">"hqmongodb:PRIMARY"</code><code class="bash plain">了,即已经将其自己设置为主节点 PRIMARY了)</code></div>
<div class="line number141 index140 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; rs.add(</code><code class="bash string">"182.48.115.237:27017"</code><code class="bash plain">)</code></div>
<div class="line number142 index141 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"ok"</code>&nbsp;<code class="bash plain">: 1 }</code></div>
<div class="line number143 index142 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; rs.add(</code><code class="bash string">"182.48.115.238:27017"</code><code class="bash plain">)</code></div>
<div class="line number144 index143 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"ok"</code>&nbsp;<code class="bash plain">: 1 }</code></div>
<div class="line number145 index144 alt2">&nbsp;</div>
<div class="line number146 index145 alt1"><code class="bash plain">3.3)设置节点优先级</code></div>
<div class="line number147 index146 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; cfg = rs.conf()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">查看节点顺序</code></div>
<div class="line number148 index147 alt1"><code class="bash plain">{</code></div>
<div class="line number149 index148 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"hqmongodb"</code><code class="bash plain">,</code></div>
<div class="line number150 index149 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"version"</code>&nbsp;<code class="bash plain">: 3,</code></div>
<div class="line number151 index150 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"protocolVersion"</code>&nbsp;<code class="bash plain">: NumberLong(1),</code></div>
<div class="line number152 index151 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"members"</code>&nbsp;<code class="bash plain">: [</code></div>
<div class="line number153 index152 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">{</code></div>
<div class="line number154 index153 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: 0,</code></div>
<div class="line number155 index154 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"host"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.236:27017"</code><code class="bash plain">,</code></div>
<div class="line number156 index155 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"arbiterOnly"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">false</code><code class="bash plain">,</code></div>
<div class="line number157 index156 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"buildIndexes"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">true</code><code class="bash plain">,</code></div>
<div class="line number158 index157 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"hidden"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">false</code><code class="bash plain">,</code></div>
<div class="line number159 index158 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"priority"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number160 index159 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"tags"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number161 index160 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div>
<div class="line number162 index161 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number163 index162 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"slaveDelay"</code>&nbsp;<code class="bash plain">: NumberLong(0),</code></div>
<div class="line number164 index163 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"votes"</code>&nbsp;<code class="bash plain">: 1</code></div>
<div class="line number165 index164 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number166 index165 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">{</code></div>
<div class="line number167 index166 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number168 index167 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"host"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.237:27017"</code><code class="bash plain">,</code></div>
<div class="line number169 index168 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"arbiterOnly"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">false</code><code class="bash plain">,</code></div>
<div class="line number170 index169 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"buildIndexes"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">true</code><code class="bash plain">,</code></div>
<div class="line number171 index170 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"hidden"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">false</code><code class="bash plain">,</code></div>
<div class="line number172 index171 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"priority"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number173 index172 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"tags"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number174 index173 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div>
<div class="line number175 index174 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number176 index175 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"slaveDelay"</code>&nbsp;<code class="bash plain">: NumberLong(0),</code></div>
<div class="line number177 index176 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"votes"</code>&nbsp;<code class="bash plain">: 1</code></div>
<div class="line number178 index177 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number179 index178 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">{</code></div>
<div class="line number180 index179 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: 2,</code></div>
<div class="line number181 index180 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"host"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.238:27017"</code><code class="bash plain">,</code></div>
<div class="line number182 index181 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"arbiterOnly"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">false</code><code class="bash plain">,</code></div>
<div class="line number183 index182 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"buildIndexes"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">true</code><code class="bash plain">,</code></div>
<div class="line number184 index183 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"hidden"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">false</code><code class="bash plain">,</code></div>
<div class="line number185 index184 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"priority"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number186 index185 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"tags"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number187 index186 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div>
<div class="line number188 index187 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number189 index188 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"slaveDelay"</code>&nbsp;<code class="bash plain">: NumberLong(0),</code></div>
<div class="line number190 index189 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"votes"</code>&nbsp;<code class="bash plain">: 1</code></div>
<div class="line number191 index190 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">}</code></div>
<div class="line number192 index191 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">],</code></div>
<div class="line number193 index192 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"settings"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number194 index193 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"chainingAllowed"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">true</code><code class="bash plain">,</code></div>
<div class="line number195 index194 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"heartbeatIntervalMillis"</code>&nbsp;<code class="bash plain">: 2000,</code></div>
<div class="line number196 index195 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"heartbeatTimeoutSecs"</code>&nbsp;<code class="bash plain">: 10,</code></div>
<div class="line number197 index196 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"electionTimeoutMillis"</code>&nbsp;<code class="bash plain">: 10000,</code></div>
<div class="line number198 index197 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"catchUpTimeoutMillis"</code>&nbsp;<code class="bash plain">: 2000,</code></div>
<div class="line number199 index198 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"getLastErrorModes"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number200 index199 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>&nbsp;</div>
<div class="line number201 index200 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number202 index201 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"getLastErrorDefaults"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number203 index202 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"w"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number204 index203 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"wtimeout"</code>&nbsp;<code class="bash plain">: 0</code></div>
<div class="line number205 index204 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number206 index205 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"replicaSetId"</code>&nbsp;<code class="bash plain">: ObjectId(</code><code class="bash string">"5932f142a55dc83eca86ea86"</code><code class="bash plain">)</code></div>
<div class="line number207 index206 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">}</code></div>
<div class="line number208 index207 alt1"><code class="bash plain">}</code></div>
<div class="line number209 index208 alt2">&nbsp;</div>
<div class="line number210 index209 alt1"><code class="bash plain">hqmongodb:PRIMARY&gt; cfg.members.priority = 1</code></div>
<div class="line number211 index210 alt2"><code class="bash plain">1</code></div>
<div class="line number212 index211 alt1"><code class="bash plain">hqmongodb:PRIMARY&gt; cfg.members.priority = 1</code></div>
<div class="line number213 index212 alt2"><code class="bash plain">1</code></div>
<div class="line number214 index213 alt1"><code class="bash plain">hqmongodb:PRIMARY&gt; cfg.members.priority = 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">设置_ID 为 2 的节点为主节点。即当当前主节点发生故障时,该节点就会转变为主节点接管服务</code></div>
<div class="line number215 index214 alt2"><code class="bash plain">2</code></div>
<div class="line number216 index215 alt1"><code class="bash plain">hqmongodb:PRIMARY&gt; rs.reconfig(cfg)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">使配置生效</code></div>
<div class="line number217 index216 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"ok"</code>&nbsp;<code class="bash plain">: 1 }</code></div>
<div class="line number218 index217 alt1">&nbsp;</div>
<div class="line number219 index218 alt2">&nbsp;</div>
<div class="line number220 index219 alt1"><code class="bash plain">说明:</code></div>
<div class="line number221 index220 alt2"><code class="bash plain">MongoDB副本集通过设置priority 决定优先级,默认优先级为1,priority值是0到100之间的数字,数字越大优先级越高,priority=0,则此节点永远不能成为主节点 primay。</code></div>
<div class="line number222 index221 alt1"><code class="bash plain">cfg.members.priority =1 参数,中括号里的数字是执行rs.conf()查看到的节点顺序, 第一个节点是0,第二个节点是 1,第三个节点是 2,以此类推。优先级最高的那个</code></div>
<div class="line number223 index222 alt2"><code class="bash plain">被设置为主节点。</code></div>
<div class="line number224 index223 alt1">&nbsp;</div>
<div class="line number225 index224 alt2"><code class="bash plain">4)分别对两台从节点进行配置</code></div>
<div class="line number226 index225 alt1">&nbsp;</div>
<div class="line number227 index226 alt2"><code class="bash plain">slave-node1节点操作(182.48.115.237)</code></div>
<div class="line number228 index227 alt1"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.237:27017</code></div>
<div class="line number229 index228 alt2"><code class="bash plain">.....</code></div>
<div class="line number230 index229 alt1"><code class="bash plain">hqmongodb:SECONDARY&gt; db.getMongo().setSlaveOk()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">设置从节点为只读.注意从节点的前缀现在是SECONDARY。看清楚才设置</code></div>
<div class="line number231 index230 alt2">&nbsp;</div>
<div class="line number232 index231 alt1"><code class="bash plain">slave-node2节点操作(182.48.115.238)</code></div>
<div class="line number233 index232 alt2"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.238:27017</code></div>
<div class="line number234 index233 alt1"><code class="bash plain">......</code></div>
<div class="line number235 index234 alt2"><code class="bash plain">hqmongodb:SECONDARY&gt; db.getMongo().setSlaveOk()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">从节点的前缀是SECONDARY,看清楚才设置。执行这个,否则后续从节点同步数据时会报错:</code><code class="bash string">"errmsg"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"not master and slaveOk=false"</code><code class="bash plain">,</code></div>
<div class="line number236 index235 alt1">&nbsp;</div>
<div class="line number237 index236 alt2"><code class="bash plain">5)设置数据库账号,开启登录验证(这一步可以直接跳过,即不开启登陆验证,只是为了安全着想)</code></div>
<div class="line number238 index237 alt1"><code class="bash plain">5.1)设置数据库账号</code></div>
<div class="line number239 index238 alt2"><code class="bash plain">在master-node主节点服务器182.48.115.236上面操作</code></div>
<div class="line number240 index239 alt1"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.236:27017</code></div>
<div class="line number241 index240 alt2"><code class="bash plain">......</code></div>
<div class="line number242 index241 alt1"><code class="bash plain">-------------------------------------------------</code></div>
<div class="line number243 index242 alt2"><code class="bash plain">如果执行命令后出现报错:&nbsp;</code><code class="bash string">"errmsg"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"not master and slaveOk=false"</code><code class="bash plain">,</code></div>
<div class="line number244 index243 alt1"><code class="bash plain">这是正常的,因为SECONDARY是不允许读写的,如果非要解决,方法如下:</code></div>
<div class="line number245 index244 alt2"><code class="bash plain">&gt; rs.slaveOk();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">执行这个命令然后,再执行其它命令就不会出现这个报错了</code></div>
<div class="line number246 index245 alt1"><code class="bash plain">-------------------------------------------------</code></div>
<div class="line number247 index246 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; show dbs</code></div>
<div class="line number248 index247 alt1"><code class="bash functions">local</code>&nbsp;&nbsp;<code class="bash plain">0.000GB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code></div>
<div class="line number249 index248 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; use admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//mongodb3</code><code class="bash plain">.0没有admin数据库了,需要手动创建。admin库下添加的账号才是管理员账号</code></div>
<div class="line number250 index249 alt1"><code class="bash plain">switched to db admin&nbsp;&nbsp;&nbsp;</code></div>
<div class="line number251 index250 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; show collections</code></div>
<div class="line number252 index251 alt1">&nbsp;</div>
<div class="line number253 index252 alt2"><code class="bash plain">#添加两个管理员账号,一个系统管理员:system 一个数据库管理员:administrator</code></div>
<div class="line number254 index253 alt1"><code class="bash plain">#先添加系统管理员账号,用来管理用户</code></div>
<div class="line number255 index254 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; db.createUser({user:</code><code class="bash string">"system"</code><code class="bash plain">,</code><code class="bash functions">pwd</code><code class="bash plain">:</code><code class="bash string">"123456"</code><code class="bash plain">,roles:[{role:</code><code class="bash string">"root"</code><code class="bash plain">,db:</code><code class="bash string">"admin"</code><code class="bash plain">}]})</code></div>
<div class="line number256 index255 alt1"><code class="bash plain">Successfully added user: {</code></div>
<div class="line number257 index256 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"user"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"system"</code><code class="bash plain">,</code></div>
<div class="line number258 index257 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"roles"</code>&nbsp;<code class="bash plain">: [</code></div>
<div class="line number259 index258 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">{</code></div>
<div class="line number260 index259 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"role"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"root"</code><code class="bash plain">,</code></div>
<div class="line number261 index260 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"db"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"admin"</code></div>
<div class="line number262 index261 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">}</code></div>
<div class="line number263 index262 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">]</code></div>
<div class="line number264 index263 alt1"><code class="bash plain">}</code></div>
<div class="line number265 index264 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; db.auth(</code><code class="bash string">'system'</code><code class="bash plain">,</code><code class="bash string">'123456'</code><code class="bash plain">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">添加管理员用户认证,认证之后才能管理所有数据库</code></div>
<div class="line number266 index265 alt1"><code class="bash plain">1</code></div>
<div class="line number267 index266 alt2">&nbsp;</div>
<div class="line number268 index267 alt1"><code class="bash comments">#添加数据库管理员,用来管理所有数据库</code></div>
<div class="line number269 index268 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; db.createUser({user:</code><code class="bash string">'administrator'</code><code class="bash plain">,&nbsp;</code><code class="bash functions">pwd</code><code class="bash plain">:</code><code class="bash string">'123456'</code><code class="bash plain">, roles:[{ role:&nbsp;</code><code class="bash string">"userAdminAnyDatabase"</code><code class="bash plain">, db:&nbsp;</code><code class="bash string">"admin"</code><code class="bash plain">}]});</code></div>
<div class="line number270 index269 alt1"><code class="bash plain">Successfully added user: {</code></div>
<div class="line number271 index270 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"user"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"administrator"</code><code class="bash plain">,</code></div>
<div class="line number272 index271 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"roles"</code>&nbsp;<code class="bash plain">: [</code></div>
<div class="line number273 index272 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">{</code></div>
<div class="line number274 index273 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"role"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"userAdminAnyDatabase"</code><code class="bash plain">,</code></div>
<div class="line number275 index274 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"db"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"admin"</code></div>
<div class="line number276 index275 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">}</code></div>
<div class="line number277 index276 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">]</code></div>
<div class="line number278 index277 alt1"><code class="bash plain">}</code></div>
<div class="line number279 index278 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; db.auth(</code><code class="bash string">'administrator'</code><code class="bash plain">,</code><code class="bash string">'123456'</code><code class="bash plain">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">添加管理员用户认证,认证之后才能管理所有数据库</code></div>
<div class="line number280 index279 alt1"><code class="bash plain">1</code></div>
<div class="line number281 index280 alt2">&nbsp;</div>
<div class="line number282 index281 alt1"><code class="bash plain">hqmongodb:PRIMARY&gt; db</code></div>
<div class="line number283 index282 alt2"><code class="bash plain">admin</code></div>
<div class="line number284 index283 alt1"><code class="bash plain">hqmongodb:PRIMARY&gt; show collections</code></div>
<div class="line number285 index284 alt2"><code class="bash plain">system.</code><code class="bash functions">users</code></div>
<div class="line number286 index285 alt1"><code class="bash plain">system.version</code></div>
<div class="line number287 index286 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; db.system.</code><code class="bash functions">users</code><code class="bash plain">.</code><code class="bash functions">find</code><code class="bash plain">()</code></div>
<div class="line number288 index287 alt1"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"admin.system"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"user"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"system"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"db"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"admin"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"credentials"</code>&nbsp;<code class="bash plain">: {&nbsp;</code><code class="bash string">"SCRAM-SHA-1"</code>&nbsp;<code class="bash plain">: {&nbsp;</code><code class="bash string">"iterationCount"</code>&nbsp;<code class="bash plain">: 10000,&nbsp;</code><code class="bash string">"salt"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"uTGH9NI6fVUFXd2u7vu3Pw=="</code><code class="bash plain">,&nbsp;</code><code class="bash string">"storedKey"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"qJBR7dlqj3IgnWpVbbqBsqo6ECs="</code><code class="bash plain">,&nbsp;</code><code class="bash string">"serverKey"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"pTQhfZohNh760BED7Zn1Vbety4k="</code>&nbsp;<code class="bash plain">} },&nbsp;</code><code class="bash string">"roles"</code>&nbsp;<code class="bash plain">: [ {&nbsp;</code><code class="bash string">"role"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"root"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"db"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"admin"</code>&nbsp;<code class="bash plain">} ] }</code></div>
<div class="line number289 index288 alt2"><code class="bash plain">{&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"admin.administrator"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"user"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"administrator"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"db"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"admin"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"credentials"</code>&nbsp;<code class="bash plain">: {&nbsp;</code><code class="bash string">"SCRAM-SHA-1"</code>&nbsp;<code class="bash plain">: {&nbsp;</code><code class="bash string">"iterationCount"</code>&nbsp;<code class="bash plain">: 10000,&nbsp;</code><code class="bash string">"salt"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"zJ3IIgYCe4IjZm0twWnK2Q=="</code><code class="bash plain">,&nbsp;</code><code class="bash string">"storedKey"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"2UCFc7KK1k5e4BgWbkTKGeuOVB4="</code><code class="bash plain">,&nbsp;</code><code class="bash string">"serverKey"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"eYHK/pBpf8ntrER1A8fiI+GikBY="</code>&nbsp;<code class="bash plain">} },&nbsp;</code><code class="bash string">"roles"</code>&nbsp;<code class="bash plain">: [ {&nbsp;</code><code class="bash string">"role"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"userAdminAnyDatabase"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"db"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"admin"</code>&nbsp;<code class="bash plain">} ] }</code></div>
<div class="line number290 index289 alt1">&nbsp;</div>
<div class="line number291 index290 alt2"><code class="bash plain">退出,用刚才创建的账号进行登录</code></div>
<div class="line number292 index291 alt1"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.236:27017 -u system -p 123456 --authenticationDatabase admin</code></div>
<div class="line number293 index292 alt2"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.236:27017 -u administrator -p 123456&nbsp; --authenticationDatabase admin</code></div>
<div class="line number294 index293 alt1">&nbsp;</div>
<div class="line number295 index294 alt2"><code class="bash plain">5.2)开启登录验证</code></div>
<div class="line number296 index295 alt1"><code class="bash plain">在master-node主节点服务器182.48.115.236上面操作</code></div>
<div class="line number297 index296 alt2"><code class="bash plain"></code><code class="bash comments"># cd /usr/local/mongodb/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //切换到mongodb主目录</code></div>
<div class="line number298 index297 alt1"><code class="bash plain"></code><code class="bash comments"># openssl rand -base64 21 &gt; keyfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //创建一个 keyfile(使用 openssl 生成 21 位 base64 加密的字符串)</code></div>
<div class="line number299 index298 alt2"><code class="bash plain"></code><code class="bash comments"># chmod 600 /usr/local/mongodb/keyfile</code></div>
<div class="line number300 index299 alt1"><code class="bash plain"></code><code class="bash comments"># cat /usr/local/mongodb/keyfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看刚才生成的字符串,做记录,后面要用到</code></div>
<div class="line number301 index300 alt2"><code class="bash plain">RavtXslz</code><code class="bash plain">/WTDwwW2JiNvK4OBVKxU</code></div>
<div class="line number302 index301 alt1">&nbsp;</div>
<div class="line number303 index302 alt2"><code class="bash plain">注意:上面的数字 21,最好是 3 的倍数,否则生成的字符串可能含有非法字符,认证失败。</code></div>
<div class="line number304 index303 alt1">&nbsp;</div>
<div class="line number305 index304 alt2"><code class="bash plain">5.3)设置配置文件</code></div>
<div class="line number306 index305 alt1"><code class="bash plain">分别在所有节点上面操作(即三个节点的配置文件上都要修改)</code></div>
<div class="line number307 index306 alt2"><code class="bash plain"></code><code class="bash comments"># vim /usr/local/mongodb/mongodb.conf&nbsp;&nbsp;&nbsp;&nbsp; //添加下面两行内容</code></div>
<div class="line number308 index307 alt1"><code class="bash plain">......</code></div>
<div class="line number309 index308 alt2"><code class="bash plain">auth=</code><code class="bash functions">true</code></div>
<div class="line number310 index309 alt1"><code class="bash plain">keyFile =</code><code class="bash plain">/usr/local/mongodb/keyfile</code></div>
<div class="line number311 index310 alt2">&nbsp;</div>
<div class="line number312 index311 alt1"><code class="bash plain">启动脚本使用下面的代码(注释原来的,启用之前注释掉的)</code></div>
<div class="line number313 index312 alt2"><code class="bash plain"></code><code class="bash comments"># cat /etc/init.d/mongodb</code></div>
<div class="line number314 index313 alt1"><code class="bash comments">#!/bin/sh</code></div>
<div class="line number315 index314 alt2"><code class="bash comments"># chkconfig: - 64 36</code></div>
<div class="line number316 index315 alt1"><code class="bash comments"># description:mongod</code></div>
<div class="line number317 index316 alt2"><code class="bash keyword">case</code>&nbsp;<code class="bash plain">$1&nbsp;</code><code class="bash keyword">in</code></div>
<div class="line number318 index317 alt1"><code class="bash plain">start)</code></div>
<div class="line number319 index318 alt2"><code class="bash plain">/usr/local/mongodb/bin/mongod</code>&nbsp;<code class="bash plain">--maxConns 20000 --config&nbsp;</code><code class="bash plain">/usr/local/mongodb/mongodb</code><code class="bash plain">.conf</code></div>
<div class="line number320 index319 alt1"><code class="bash plain">;;</code></div>
<div class="line number321 index320 alt2"><code class="bash plain">stop)</code></div>
<div class="line number322 index321 alt1"><code class="bash comments">#/usr/local/mongodb/bin/mongo 182.48.115.236:27017/admin --eval "db.shutdownServer()"</code></div>
<div class="line number323 index322 alt2"><code class="bash plain">/usr/local/mongodb/bin/mongo</code>&nbsp;<code class="bash plain">182.48.115.236:27017</code><code class="bash plain">/admin</code>&nbsp;<code class="bash plain">--</code><code class="bash functions">eval</code>&nbsp;<code class="bash string">"db.auth('system', '123456');db.shutdownServer()"</code></div>
<div class="line number324 index323 alt1"><code class="bash plain">;;</code></div>
<div class="line number325 index324 alt2"><code class="bash plain">status)</code></div>
<div class="line number326 index325 alt1"><code class="bash comments">#/usr/local/mongodb/bin/mongo 182.48.115.236:27017/admin --eval "db.stats()"</code></div>
<div class="line number327 index326 alt2"><code class="bash plain">/usr/local/mongodb/bin/mongo</code>&nbsp;<code class="bash plain">182.48.115.236:27017</code><code class="bash plain">/admin</code>&nbsp;<code class="bash plain">--</code><code class="bash functions">eval</code>&nbsp;<code class="bash string">"db.auth('system', '123456');db.stats()"</code></div>
<div class="line number328 index327 alt1"><code class="bash plain">;;&nbsp;</code><code class="bash keyword">esac</code></div>
<div class="line number329 index328 alt2">&nbsp;</div>
<div class="line number330 index329 alt1"><code class="bash plain">5.4)设置权限验证文件</code></div>
<div class="line number331 index330 alt2"><code class="bash plain">先进入master-node主节点服务器182.48.115.236,查看</code></div>
<div class="line number332 index331 alt1"><code class="bash plain"></code><code class="bash comments"># cat /usr/local/mongodb/keyfile</code></div>
<div class="line number333 index332 alt2"><code class="bash plain">RavtXslz</code><code class="bash plain">/WTDwwW2JiNvK4OBVKxU</code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">//</code><code class="bash plain">查看刚才生成的字符串,做记录</code></div>
<div class="line number334 index333 alt1">&nbsp;</div>
<div class="line number335 index334 alt2"><code class="bash plain">再分别进入两台从节点服务器182.48.115.237</code><code class="bash plain">/238</code></div>
<div class="line number336 index335 alt1"><code class="bash plain"></code><code class="bash comments"># vim /usr/local/mongodb/keyfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //将主节点生成的权限验证字符码复制到从节点的权限验证文件里</code></div>
<div class="line number337 index336 alt2"><code class="bash plain">RavtXslz</code><code class="bash plain">/WTDwwW2JiNvK4OBVKxU</code></div>
<div class="line number338 index337 alt1"><code class="bash plain"></code><code class="bash comments"># chmod 600 /usr/local/mongodb/keyfile</code></div>
<div class="line number339 index338 alt2">&nbsp;</div>
<div class="line number340 index339 alt1"><code class="bash plain"></code><code class="bash comments"># vim /usr/local/mongodb/keyfile</code></div>
<div class="line number341 index340 alt2"><code class="bash plain"></code><code class="bash comments"># cat /usr/local/mongodb/keyfile</code></div>
<div class="line number342 index341 alt1"><code class="bash plain">RavtXslz</code><code class="bash plain">/WTDwwW2JiNvK4OBVKxU</code></div>
<div class="line number343 index342 alt2"><code class="bash plain"></code><code class="bash comments"># chmod 600 /usr/local/mongodb/keyfile</code></div>
<div class="line number344 index343 alt1">&nbsp;</div>
<div class="line number345 index344 alt2"><code class="bash plain">6)验证副本集</code></div>
<div class="line number346 index345 alt1"><code class="bash plain">分别重启三台副本集服务器(三台节点都要重启)</code></div>
<div class="line number347 index346 alt2"><code class="bash plain"></code><code class="bash comments"># ps -ef|grep mongodb</code></div>
<div class="line number348 index347 alt1"><code class="bash plain">root&nbsp;&nbsp;&nbsp;&nbsp; 28964&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp; 1 02:22 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00:00:31&nbsp;</code><code class="bash plain">/usr/local/mongodb/bin/mongod</code>&nbsp;<code class="bash plain">--maxConns 20000 --config&nbsp;</code><code class="bash plain">/usr/local/mongodb/mongodb</code><code class="bash plain">.conf</code></div>
<div class="line number349 index348 alt2"><code class="bash plain">root&nbsp;&nbsp;&nbsp;&nbsp; 29453 28911&nbsp; 0 03:04 pts</code><code class="bash plain">/0</code>&nbsp;&nbsp;&nbsp;&nbsp;<code class="bash plain">00:00:00&nbsp;</code><code class="bash functions">grep</code>&nbsp;<code class="bash plain">mongodb</code></div>
<div class="line number350 index349 alt1"><code class="bash plain"></code><code class="bash comments"># kill -9 28964</code></div>
<div class="line number351 index350 alt2"><code class="bash plain"></code><code class="bash comments"># /etc/init.d/mongodb start</code></div>
<div class="line number352 index351 alt1"><code class="bash plain">about to fork child process, waiting&nbsp;</code><code class="bash keyword">until</code>&nbsp;<code class="bash plain">server is ready&nbsp;</code><code class="bash keyword">for</code>&nbsp;<code class="bash plain">connections.</code></div>
<div class="line number353 index352 alt2"><code class="bash plain">forked process: 29457</code></div>
<div class="line number354 index353 alt1"><code class="bash plain">child process started successfully, parent exiting</code></div>
<div class="line number355 index354 alt2"><code class="bash plain"></code><code class="bash comments"># lsof -i:27017</code></div>
<div class="line number356 index355 alt1"><code class="bash plain">COMMAND&nbsp;&nbsp; PID USER&nbsp;&nbsp; FD&nbsp;&nbsp; TYPE DEVICE SIZE</code><code class="bash plain">/OFF</code>&nbsp;<code class="bash plain">NODE NAME</code></div>
<div class="line number357 index356 alt2"><code class="bash plain">mongod&nbsp; 29457 root&nbsp;&nbsp;&nbsp; 7u&nbsp; IPv4 701471&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP slave-node1:27017 (LISTEN)</code></div>
<div class="line number358 index357 alt1"><code class="bash plain">mongod&nbsp; 29457 root&nbsp;&nbsp; 29u&nbsp; IPv4 701526&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP slave-node1:27017-&gt;master-node:39819 (ESTABLISHED)</code></div>
<div class="line number359 index358 alt2"><code class="bash plain">mongod&nbsp; 29457 root&nbsp;&nbsp; 30u&nbsp; IPv4 701573&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP slave-node1:27017-&gt;master-node:39837 (ESTABLISHED)</code></div>
<div class="line number360 index359 alt1"><code class="bash plain">mongod&nbsp; 29457 root&nbsp;&nbsp; 31u&nbsp; IPv4 701530&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP slave-node1:36768-&gt;master-node:27017 (ESTABLISHED)</code></div>
<div class="line number361 index360 alt2"><code class="bash plain">mongod&nbsp; 29457 root&nbsp;&nbsp; 32u&nbsp; IPv4 701549&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP slave-node1:36786-&gt;master-node:27017 (ESTABLISHED)</code></div>
<div class="line number362 index361 alt1"><code class="bash plain">mongod&nbsp; 29457 root&nbsp;&nbsp; 33u&nbsp; IPv4 701574&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP slave-node1:27017-&gt;master-node:39838 (ESTABLISHED)</code></div>
<div class="line number363 index362 alt2">&nbsp;</div>
<div class="line number364 index363 alt1"><code class="bash plain">然后登陆mongodb</code></div>
<div class="line number365 index364 alt2"><code class="bash plain"></code><code class="bash comments"># mongo 182.48.115.236:27017 -u system -p 123456 --authenticationDatabase admin</code></div>
<div class="line number366 index365 alt1"><code class="bash plain">.......</code></div>
<div class="line number367 index366 alt2"><code class="bash plain">hqmongodb:PRIMARY&gt; rs.status()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">副本集状态查看.也可以省略上面添加登陆验证的步骤,不做验证,直接查看集群状态。集群状态中可以看出哪个节点目前是主节点</code></div>
<div class="line number368 index367 alt1"><code class="bash plain">{</code></div>
<div class="line number369 index368 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"set"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"hqmongodb"</code><code class="bash plain">,</code></div>
<div class="line number370 index369 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"date"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:06:59.708Z"</code><code class="bash plain">),</code></div>
<div class="line number371 index370 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"myState"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number372 index371 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"term"</code>&nbsp;<code class="bash plain">: NumberLong(2),</code></div>
<div class="line number373 index372 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"heartbeatIntervalMillis"</code>&nbsp;<code class="bash plain">: NumberLong(2000),</code></div>
<div class="line number374 index373 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"optimes"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number375 index374 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"lastCommittedOpTime"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number376 index375 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"ts"</code>&nbsp;<code class="bash plain">: Timestamp(1496516810, 1),</code></div>
<div class="line number377 index376 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"t"</code>&nbsp;<code class="bash plain">: NumberLong(2)</code></div>
<div class="line number378 index377 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number379 index378 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"appliedOpTime"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number380 index379 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"ts"</code>&nbsp;<code class="bash plain">: Timestamp(1496516810, 1),</code></div>
<div class="line number381 index380 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"t"</code>&nbsp;<code class="bash plain">: NumberLong(2)</code></div>
<div class="line number382 index381 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number383 index382 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"durableOpTime"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number384 index383 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"ts"</code>&nbsp;<code class="bash plain">: Timestamp(1496516810, 1),</code></div>
<div class="line number385 index384 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"t"</code>&nbsp;<code class="bash plain">: NumberLong(2)</code></div>
<div class="line number386 index385 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">}</code></div>
<div class="line number387 index386 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number388 index387 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"members"</code>&nbsp;<code class="bash plain">: [</code></div>
<div class="line number389 index388 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">{</code></div>
<div class="line number390 index389 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: 0,</code></div>
<div class="line number391 index390 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.236:27017"</code><code class="bash plain">,</code></div>
<div class="line number392 index391 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"health"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number393 index392 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"state"</code>&nbsp;<code class="bash plain">: 1,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//state</code><code class="bash plain">的值为1的节点就是主节点</code></div>
<div class="line number394 index393 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"stateStr"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"PRIMARY"</code><code class="bash plain">,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">主节点PRIMARY标记</code></div>
<div class="line number395 index394 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"uptime"</code>&nbsp;<code class="bash plain">: 138,</code></div>
<div class="line number396 index395 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"optime"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number397 index396 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"ts"</code>&nbsp;<code class="bash plain">: Timestamp(1496516810, 1),</code></div>
<div class="line number398 index397 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"t"</code>&nbsp;<code class="bash plain">: NumberLong(2)</code></div>
<div class="line number399 index398 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number400 index399 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"optimeDate"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:06:50Z"</code><code class="bash plain">),</code></div>
<div class="line number401 index400 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"infoMessage"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"could not find member to sync from"</code><code class="bash plain">,</code></div>
<div class="line number402 index401 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"electionTime"</code>&nbsp;<code class="bash plain">: Timestamp(1496516709, 1),</code></div>
<div class="line number403 index402 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"electionDate"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:05:09Z"</code><code class="bash plain">),</code></div>
<div class="line number404 index403 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"configVersion"</code>&nbsp;<code class="bash plain">: 4,</code></div>
<div class="line number405 index404 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"self"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash functions">true</code></div>
<div class="line number406 index405 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number407 index406 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">{</code></div>
<div class="line number408 index407 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number409 index408 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.237:27017"</code><code class="bash plain">,</code></div>
<div class="line number410 index409 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"health"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number411 index410 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"state"</code>&nbsp;<code class="bash plain">: 2,</code></div>
<div class="line number412 index411 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"stateStr"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"SECONDARY"</code><code class="bash plain">,</code></div>
<div class="line number413 index412 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"uptime"</code>&nbsp;<code class="bash plain">: 116,</code></div>
<div class="line number414 index413 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"optime"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number415 index414 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"ts"</code>&nbsp;<code class="bash plain">: Timestamp(1496516810, 1),</code></div>
<div class="line number416 index415 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"t"</code>&nbsp;<code class="bash plain">: NumberLong(2)</code></div>
<div class="line number417 index416 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number418 index417 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"optimeDurable"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number419 index418 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"ts"</code>&nbsp;<code class="bash plain">: Timestamp(1496516810, 1),</code></div>
<div class="line number420 index419 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"t"</code>&nbsp;<code class="bash plain">: NumberLong(2)</code></div>
<div class="line number421 index420 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number422 index421 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"optimeDate"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:06:50Z"</code><code class="bash plain">),</code></div>
<div class="line number423 index422 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"optimeDurableDate"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:06:50Z"</code><code class="bash plain">),</code></div>
<div class="line number424 index423 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"lastHeartbeat"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:06:59.533Z"</code><code class="bash plain">),</code></div>
<div class="line number425 index424 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"lastHeartbeatRecv"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:06:59.013Z"</code><code class="bash plain">),</code></div>
<div class="line number426 index425 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"pingMs"</code>&nbsp;<code class="bash plain">: NumberLong(0),</code></div>
<div class="line number427 index426 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"syncingTo"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.236:27017"</code><code class="bash plain">,</code></div>
<div class="line number428 index427 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"configVersion"</code>&nbsp;<code class="bash plain">: 4</code></div>
<div class="line number429 index428 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number430 index429 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">{</code></div>
<div class="line number431 index430 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"_id"</code>&nbsp;<code class="bash plain">: 2,</code></div>
<div class="line number432 index431 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"name"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.238:27017"</code><code class="bash plain">,</code></div>
<div class="line number433 index432 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"health"</code>&nbsp;<code class="bash plain">: 1,</code></div>
<div class="line number434 index433 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"state"</code>&nbsp;<code class="bash plain">: 2,</code></div>
<div class="line number435 index434 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"stateStr"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"SECONDARY"</code><code class="bash plain">,</code></div>
<div class="line number436 index435 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"uptime"</code>&nbsp;<code class="bash plain">: 189,</code></div>
<div class="line number437 index436 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"optime"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number438 index437 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"ts"</code>&nbsp;<code class="bash plain">: Timestamp(1496516810, 1),</code></div>
<div class="line number439 index438 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"t"</code>&nbsp;<code class="bash plain">: NumberLong(2)</code></div>
<div class="line number440 index439 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number441 index440 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"optimeDurable"</code>&nbsp;<code class="bash plain">: {</code></div>
<div class="line number442 index441 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"ts"</code>&nbsp;<code class="bash plain">: Timestamp(1496516810, 1),</code></div>
<div class="line number443 index442 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"t"</code>&nbsp;<code class="bash plain">: NumberLong(2)</code></div>
<div class="line number444 index443 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number445 index444 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"optimeDate"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:06:50Z"</code><code class="bash plain">),</code></div>
<div class="line number446 index445 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"optimeDurableDate"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:06:50Z"</code><code class="bash plain">),</code></div>
<div class="line number447 index446 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"lastHeartbeat"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:06:59.533Z"</code><code class="bash plain">),</code></div>
<div class="line number448 index447 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"lastHeartbeatRecv"</code>&nbsp;<code class="bash plain">: ISODate(</code><code class="bash string">"2017-06-03T19:06:59.013Z"</code><code class="bash plain">),</code></div>
<div class="line number449 index448 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"pingMs"</code>&nbsp;<code class="bash plain">: NumberLong(0),</code></div>
<div class="line number450 index449 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"syncingTo"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"182.48.115.236:27017"</code><code class="bash plain">,</code></div>
<div class="line number451 index450 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash string">"configVersion"</code>&nbsp;<code class="bash plain">: 4</code></div>
<div class="line number452 index451 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">},</code></div>
<div class="line number453 index452 alt2"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash plain">],</code></div>
<div class="line number454 index453 alt1"><code class="bash spaces">&nbsp;&nbsp;</code><code class="bash string">"ok"</code>&nbsp;<code class="bash plain">: 1</code></div>
<div class="line number455 index454 alt2"><code class="bash plain">}</code></div>
<div class="line number456 index455 alt1">&nbsp;</div>
<div class="line number457 index456 alt2"><code class="bash plain">注意上面命令结果中的state,如果这个值为 1,说明是主控节点(master);如果是2,说明是从属节点slave。在上面显示的当前主节点写入数据,到从节点上查看发现数据会同步。</code></div>
<div class="line number458 index457 alt1"><code class="bash spaces">&nbsp;</code>&nbsp;</div>
<div class="line number459 index458 alt2"><code class="bash plain">当主节点出现故障的时候,在两个从节点上会选举出一个新的主节点,故障恢复之后,之前的主节点会变为从节点。从上面集群状态中开看出,当前主节点是master-node,那么关闭它的mongodb,再次查看集群状态,就会发现主节点变为之前设置的slave-node2,即182.48.115.238了!</code></div>
<div class="line number460 index459 alt1"><code class="bash plain">至此,Linux 下 MongoDB 副本集部署完成。</code></div>
<div class="line number461 index460 alt2">&nbsp;</div>
<div class="line number462 index461 alt1"><code class="bash plain">-------------------------------------------------------------------------------------------</code></div>
<div class="line number463 index462 alt2"><code class="bash plain">添加数据,来需要验证的--------------------</code></div>
<div class="line number464 index463 alt1"><code class="bash plain">1)主从服务器数据是否同步,从服务器没有读写权限</code></div>
<div class="line number465 index464 alt2"><code class="bash plain">a:向主服务器写入数据 ok 后台自动同步到从服务器,从服务器有数据</code></div>
<div class="line number466 index465 alt1"><code class="bash plain">b:向从服务器写入数据&nbsp;</code><code class="bash functions">false</code>&nbsp;<code class="bash plain">从服务器不能写</code></div>
<div class="line number467 index466 alt2"><code class="bash plain">c:主服务器读取数据 ok</code></div>
<div class="line number468 index467 alt1"><code class="bash plain">d:从服务器读取数据&nbsp;</code><code class="bash functions">false</code>&nbsp;<code class="bash plain">从服务器不能读</code></div>
<div class="line number469 index468 alt2">&nbsp;</div>
<div class="line number470 index469 alt1"><code class="bash plain">2)关闭主服务器,从服务器是否能顶替</code></div>
<div class="line number471 index470 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">mongo 的命令行执行 rs.status() 发现 PRIMARY 替换了主机了</code></div>
<div class="line number472 index471 alt1">&nbsp;</div>
<div class="line number473 index472 alt2"><code class="bash plain">3)关闭的服务器,再恢复,以及主从切换</code></div>
<div class="line number474 index473 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">a:直接启动关闭的服务,rs.status()中会发现,原来挂掉的主服务器重启后变成从服务器了</code></div>
<div class="line number475 index474 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">b:额外删除新的服务器 rs.remove(</code><code class="bash string">"localhost:9933"</code><code class="bash plain">); rs.status()</code></div>
<div class="line number476 index475 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">c:额外增加新的服务器 rs.add({_id:0,host:</code><code class="bash string">"localhost:9933"</code><code class="bash plain">,priority:1});</code></div>
<div class="line number477 index476 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">d:让新增的成为主服务器 rs.stepDown(),注意之前的 priority 投票</code></div>
<div class="line number478 index477 alt1">&nbsp;</div>
<div class="line number479 index478 alt2"><code class="bash plain">4)从服务器读写</code></div>
<div class="line number480 index479 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">db.getMongo().setSlaveOk();</code></div>
<div class="line number481 index480 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">db.getMongo().slaveOk();</code><code class="bash plain">//</code><code class="bash plain">从库只读,没有写权限,这个方法 java 里面不推荐了</code></div>
<div class="line number482 index481 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">db.setReadPreference(ReadPreference.secondaryPreferred());</code><code class="bash plain">//</code>&nbsp;<code class="bash plain">在 复 制 集 中 优 先 读</code></div>
<div class="line number483 index482 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">secondary,如果 secondary 访问不了的时候就从 master 中读</code></div>
<div class="line number484 index483 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">db.setReadPreference(ReadPreference.secondary());</code><code class="bash plain">//</code>&nbsp;<code class="bash plain">只 从 secondary 中 读 , 如 果</code></div>
<div class="line number485 index484 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">secondary 访问不了的时候就不能进行查询</code></div>
<div class="line number486 index485 alt1">&nbsp;</div>
<div class="line number487 index486 alt2"><code class="bash plain">日志查看---------------------------</code></div>
<div class="line number488 index487 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">MongoDB 的 Replica Set 架构是通过一个日志来存储写操作的,这个日志就叫做”oplog”,</code></div>
<div class="line number489 index488 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">它存在于”</code><code class="bash functions">local</code><code class="bash plain">”数据库中,oplog 的大小是可以通过 mongod 的参数”—oplogSize”来改变</code></div>
<div class="line number490 index489 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">oplog 的日志大小。</code></div>
<div class="line number491 index490 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">&gt; use&nbsp;</code><code class="bash functions">local</code></div>
<div class="line number492 index491 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">switched to db&nbsp;</code><code class="bash functions">local</code></div>
<div class="line number493 index492 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">&gt; db.oplog.rs.</code><code class="bash functions">find</code><code class="bash plain">()</code></div>
<div class="line number494 index493 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">{&nbsp;</code><code class="bash string">"ts"</code>&nbsp;<code class="bash plain">: {&nbsp;</code><code class="bash string">"t"</code>&nbsp;<code class="bash plain">: 1342511269000,&nbsp;</code><code class="bash string">"i"</code>&nbsp;<code class="bash plain">: 1 },&nbsp;</code><code class="bash string">"h"</code>&nbsp;<code class="bash plain">: NumberLong(0),&nbsp;</code><code class="bash string">"op"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"n"</code><code class="bash plain">,&nbsp;</code><code class="bash string">"ns"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">""</code><code class="bash plain">,&nbsp;</code><code class="bash string">"o"</code>&nbsp;<code class="bash plain">:</code></div>
<div class="line number495 index494 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">{&nbsp;</code><code class="bash string">"msg"</code>&nbsp;<code class="bash plain">:&nbsp;</code><code class="bash string">"initiating set"</code>&nbsp;<code class="bash plain">} }</code></div>
<div class="line number496 index495 alt1"><code class="bash spaces">&nbsp;</code>&nbsp;</div>
<div class="line number497 index496 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">字段说明:</code></div>
<div class="line number498 index497 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">ts: 某个操作的时间戳</code></div>
<div class="line number499 index498 alt2"><code class="bash spaces">&nbsp;</code><code class="bash functions">op</code><code class="bash plain">: 操作类型,如下:</code></div>
<div class="line number500 index499 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">i: insert</code></div>
<div class="line number501 index500 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">d: delete</code></div>
<div class="line number502 index501 alt1"><code class="bash spaces">&nbsp;</code><code class="bash plain">u: update</code></div>
<div class="line number503 index502 alt2"><code class="bash spaces">&nbsp;</code><code class="bash plain">ns: 命名空间,也就是操作的 collection name</code></div>
<div class="line number504 index503 alt1"><code class="bash plain">-------------------------------------------------------------------------------------------</code></div>
<div class="line number505 index504 alt2"><code class="bash plain">其它注意细节:</code></div>
<div class="line number506 index505 alt1"><code class="bash plain">rs.remove(</code><code class="bash string">"ip:port"</code><code class="bash plain">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">//</code><code class="bash plain">删除副本</code></div>
<div class="line number507 index506 alt2"><code class="bash plain">单服务器,启动时添加--auth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数开启验证。</code></div>
<div class="line number508 index507 alt1">&nbsp;</div>
<div class="line number509 index508 alt2"><code class="bash plain">副本集服务器,开启--auth 参数的同时,必须指定 keyfile 参数,节点之间的通讯基于该 keyfile,key 长度必须在 6 到 1024 个字符之间,</code></div>
<div class="line number510 index509 alt1"><code class="bash plain">最好为 3 的倍数,不能含有非法字符。</code></div>
<div class="line number511 index510 alt2">&nbsp;</div>
<div class="line number512 index511 alt1"><code class="bash plain">重新设置副本集</code></div>
<div class="line number513 index512 alt2"><code class="bash plain">rs.stepDown()</code></div>
<div class="line number514 index513 alt1"><code class="bash plain">cfg = rs.conf()</code></div>
<div class="line number515 index514 alt2"><code class="bash plain">cfg.members.host=&nbsp;</code><code class="bash string">'new_host_name:prot'</code></div>
<div class="line number516 index515 alt1"><code class="bash plain">rs.reconfig(cfg)</code></div>
<div class="line number517 index516 alt2">&nbsp;</div>
<div class="line number518 index517 alt1"><code class="bash plain">副本集所有节点服务器总数必须为奇数,服务器数量为偶数的时候,需要添加一个仲裁节 点,仲裁节点不参与数副本集,只有选举权。</code></div>
<div class="line number519 index518 alt2">&nbsp;</div>
<div class="line number520 index519 alt1"><code class="bash plain">rs.addArb(</code><code class="bash string">"182.48.115.239:27017"</code><code class="bash plain">)&nbsp;</code><code class="bash comments">#添加仲裁节点</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p><strong>三、Mongodb分片集群(Sharding)</strong></p>
<p>Sharding
cluster是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建。sharding分片很好的解决了单台服务器磁盘空间、内存、cpu等硬件资源的限制问题,把数据水平拆分出去,降低单节点的访问压力。每个分片都是一个独立的数据库,所有的分片组合起来构成一个逻辑上的完整的数据库。因此,分片机制降低了每个分片的数据操作量及需要存储的数据量,达到多台服务器来应对不断增加的负载和数据的效果。</p>
<p>1)Sharding分区概念</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_675143" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">分片 (sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。</code></div>
<div class="line number2 index1 alt1">&nbsp;</div>
<div class="line number3 index2 alt2"><code class="bash plain">分片的基本思想就是:</code></div>
<div class="line number4 index3 alt1"><code class="bash plain">将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一部分。通过一个名为 mongos 的路由进程进行操作,mongos 知道数据和片的对应</code></div>
<div class="line number5 index4 alt2"><code class="bash plain">关系(通过配置服务器)。 大部分使用场景都是解决磁盘空间的问题,对于写入有可能会变差(+++里面的说明+++),查 询则尽量避免跨分片查询。使用分片的时机:</code></div>
<div class="line number6 index5 alt1">&nbsp;</div>
<div class="line number7 index6 alt2"><code class="bash plain">使用场景:</code></div>
<div class="line number8 index7 alt1"><code class="bash plain">1)机器的磁盘不够用了。使用分片解决磁盘空间的问题。</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">2)单个mongod已经不能满足写数据的性能要求。通过分片让写压力分散到各个分片上面,使用分片服务器自身的资源。</code></div>
<div class="line number10 index9 alt1"><code class="bash plain">3)想把大量数据放到内存里提高性能。和上面一样,通过分片使用分片服务器自身的资源。</code></div>
<div class="line number11 index10 alt2">&nbsp;</div>
<div class="line number12 index11 alt1"><code class="bash plain">要构建一个MongoDB Sharding Cluster(分片集群),需要三种角色:</code></div>
<div class="line number13 index12 alt2"><code class="bash plain">1)分片服务器(Shard Server)</code></div>
<div class="line number14 index13 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">mongod 实例,用于存储实际的数据块,实际生产环境中一个 shard server 角色可由几台机器组个一个 relica&nbsp;</code><code class="bash functions">set</code>&nbsp;<code class="bash plain">承担,防止主机单点故障</code></div>
<div class="line number15 index14 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">这是一个独立普通的mongod进程,保存数据信息。可以是一个副本集也可以是单独的一台服务器。</code></div>
<div class="line number16 index15 alt1"><code class="bash plain">2)配置服务器(Config Server)</code></div>
<div class="line number17 index16 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。</code></div>
<div class="line number18 index17 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">这是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息。最先开始建立,启用日志功能。像启动普通的 mongod 一样启动</code></div>
<div class="line number19 index18 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">配置服务器,指定configsvr 选项。不需要太多的空间和资源,配置服务器的 1KB 空间相当于真是数据的 200MB。保存的只是数据的分布表。</code></div>
<div class="line number20 index19 alt1"><code class="bash plain">3)路由服务器(Route Server)</code></div>
<div class="line number21 index20 alt2"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">mongos实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用</code></div>
<div class="line number22 index21 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;</code><code class="bash plain">起到一个路由的功能,供程序连接。本身不保存数据,在启动时从配置服务器加载集群信息,开启 mongos 进程需要知道配置服务器的地址,指定configdb选项。</code></div>
<div class="line number23 index22 alt2">&nbsp;</div>
<div class="line number24 index23 alt1"><code class="bash plain">片键的意义</code></div>
<div class="line number25 index24 alt2"><code class="bash plain">一个好的片键对分片至关重要。 片键必须是一个索引 ,通 过 sh.shardCollection 加会自动创建索引。一个自增的片键对写入和数据均匀分布就不是很好, 因为自增</code></div>
<div class="line number26 index25 alt1"><code class="bash plain">的片键总会在一个分片上写入,后续达到某个阀值可能会写到别的分片。但是按照片键查询会非常高效。随机片键对数据的均匀分布效果很好。注意尽量避免在多个分片上进行查询。</code></div>
<div class="line number27 index26 alt2"><code class="bash plain">在所有分片上查询,mongos 会对结果进行归并排序</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p><strong>为何需要水平分片</strong><br>1)减少单机请求数,将单机负载,提高总负载&nbsp;<br>2)减少单机的存储空间,提高总存空间</p>
<p><img src="https://images2015.cnblogs.com/blog/907596/201706/907596-20170604035137258-762254443.png"></p>
<p>mongodb sharding 服务器架构</p>
<p><img src="https://images2015.cnblogs.com/blog/907596/201706/907596-20170604035229055-909393426.png"></p>
<p>简单注解:</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_864583" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">分片集群主要由三种组件组成:mongos,config server,shard</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">1) mongos&nbsp; (路由进程, 应用程序接入 mongos 再查询到具体分片)</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">数据库集群请求的入口,所有的请求都通过 mongos 进行协调,不需要在应用程序添加一个路由选择器,mongos 自己就是一个请求分发中心,它负责把对应的数据请求</code></div>
<div class="line number4 index3 alt1"><code class="bash plain">请求转发到对应的 shard 服务器上。在生产环境通常有多个 mongos 作为请求的入口,防止其中一个挂掉所有的 mongodb 请求都没有办法操作。</code></div>
<div class="line number5 index4 alt2">&nbsp;</div>
<div class="line number6 index5 alt1"><code class="bash plain">2) config server&nbsp; (路由表服务。 每一台都具有全部 chunk 的路由信息)</code></div>
<div class="line number7 index6 alt2"><code class="bash plain">顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos 本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储</code></div>
<div class="line number8 index7 alt1"><code class="bash plain">这些数据。mongos 第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样</code></div>
<div class="line number9 index8 alt2"><code class="bash plain">mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货,</code></div>
<div class="line number10 index9 alt1"><code class="bash plain">mongodb 集群就不会挂掉。</code></div>
<div class="line number11 index10 alt2">&nbsp;</div>
<div class="line number12 index11 alt1"><code class="bash plain">3) shard&nbsp; (为数据存储分片。 每一片都可以是复制集(replica&nbsp;</code><code class="bash functions">set</code><code class="bash plain">))</code></div>
<div class="line number13 index12 alt2"><code class="bash plain">这就是传说中的分片了。如图所示,一台机器的一个数据表 Collection1 存储了 1T 数据,压力太大了!在分给 4 个机器后, 每个机器都是 256G,则分摊了集中在一台</code></div>
<div class="line number14 index13 alt1"><code class="bash plain">机器的压力。事实上,上图4个分片如果没有副本集(replica&nbsp;</code><code class="bash functions">set</code><code class="bash plain">)是个不完整架构,假设其中的一个分片挂掉那四 分之一的数据就丢失了,所以在高可用性的分片架构还</code></div>
<div class="line number15 index14 alt2"><code class="bash plain">需要对于每一个分片构建 replica&nbsp;</code><code class="bash functions">set</code>&nbsp;<code class="bash plain">副本集保 证分片的可靠性。生产环境通常是 2 个副本 + 1 个仲裁。</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>2)Sharding分区的原理</p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_752661" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">分片,是指将数据拆分,将其分散到不同的机器上。这样的好处就是,不需要功能强大的大型计算机也可以存储更多的数据,处理更大的负载。mongoDB 的分片,</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">是将collection 的数据进行分割,然后将不同的部分分别存储到不同的机器上。当 collection 所占空间过大时,我们需要增加一台新的机器,分片会自动</code></div>
<div class="line number3 index2 alt2"><code class="bash plain">将 collection 的数据分发到新的机器上。</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p><strong>mongoDB sharding分片的原理</strong></p>
<p><img src="https://images2015.cnblogs.com/blog/907596/201706/907596-20170604042221071-857890203.png"></p>
<div class="cnblogs_Highlighter sh-gutter">
<div>
<div id="highlighter_888873" class="syntaxhighlighterbash">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>



</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">人脸:&nbsp;&nbsp;&nbsp;</code></div>
<div class="line number2 index1 alt1"><code class="bash plain">代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的。</code></div>
<div class="line number3 index2 alt2">&nbsp;</div>
<div class="line number4 index3 alt1"><code class="bash plain">mongos:</code></div>
<div class="line number5 index4 alt2"><code class="bash plain">首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照什么键值进行拆分集合。mongos就是一个路由服务器,它会根据管理员设置的</code><code class="bash string">"片键"</code></div>
<div class="line number6 index5 alt1"><code class="bash plain">将数据分摊到自己管理的mongod集群,数据和片的对应关系以及相应的配置信息保存在</code><code class="bash string">"config服务器"</code><code class="bash plain">上。</code></div>
<div class="line number7 index6 alt2"><code class="bash plain">客户端只需要对 mongos 进行操作就行了,至于如何进行分片,不需要 客户端参与,由 mongos 和 config 来完成。</code></div>
<div class="line number8 index7 alt1">&nbsp;</div>
<div class="line number9 index8 alt2"><code class="bash plain">mongod:&nbsp;&nbsp;</code></div>
<div class="line number10 index9 alt1"><code class="bash plain">一个普通的数据库实例或者副本集,如果不分片的话,我们会直接连上mongod。</code></div>
<div class="line number11 index10 alt2">&nbsp;</div>
<div class="line number12 index11 alt1"><code class="bash plain">分片是指将数据拆分,将其分散存在不同机器上的过程.有时也叫分区.将数据分散在不同的机器上MongoDB支持自动分片,可以摆脱手动分片的管理.集群自动切分数据,做负载均衡</code></div>



</div>



</td>



</tr>



</tbody>



</table>



</div>



</div>



</div>
<p>分片集群的构造如下:</p>
<p><img src="https://images2015.cnblogs.com/blog/907596/201706/907596-20170604042624993-668182824.png"></p>
<p>分片集群由以下3个服务组成:<br>Shards Server: 每个shard由一个或多个mongod进程组成,用于存储数据<br>Config Server: 用于存储集群的Metadata信息,包括每个Shard的信息和chunks信息<br>Route Server: 用于提供路由服务,由Client连接,使整个Cluster看起来像单个DB服务器</p>



</div>



</div>



</div>



</div>



</div>



</div>

</div>
<div id="MySignature" role="contentinfo">
    you are the best!<br><br>
来源:https://www.cnblogs.com/linguoguo/p/11583659.html
頁: [1]
查看完整版本: mongodb集群化