mongodb集羣配置

1.mongodb

mongodb是一個基於分佈式文件存儲的數據庫,旨在爲web應用提供可擴展的高性能數據存儲解決方案。

2.mongodb分佈式應用原理

mongodb集羣包括一定數量的mongod(分片存儲數據)、mongos(路由處理)、config server(配置節點)、clients(客戶端)、arbiter(仲裁節點:爲了選擇某個分片存儲數據節點作爲主節點)。

shards:一個shard爲一組mongod,通常一組爲兩臺,主從或互爲主從,這一組mongod中的數據是相同的。
mongos:可以有多個,相當於一個控制中心,負責路由和協調操作,使得集羣想一個整體的系統。
config server:存儲集羣的信息,包括分片和塊數據信息,主要存儲塊數據信息,每個config server上都有一份所有數據信息的拷貝,以保證每臺config server上的數據的一致性。
shard key:爲了分割數據集,需要制定分片key的格式,類似於用於索引的key格式,通常有一個活多個字段組成以分發數據。

3.mongodb分佈式部署方式


4.集羣模式

兩臺機子部署

注意:config server只能是單數

搭建配置過程

1.兩臺服務器分別啓動相應的mongod進程:

192.168.65.138

./mongod --fork --shardsvr --port 27017 --replSet mySet --dbpath /data/shard11 --logpath /data/shard11/shard11.log --rest
./mongod --fork --shardsvr --port 27018 --replSet mySet --dbpath /data/shard12 --logpath /data/shard12/shard12.log --rest

192.168.51.83

./mongod --fork --shardsvr --port 27017 --replSet mySet --dbpath /data/shard2 --logpath /data/shard2/shard2.log --rest 

2.初始化replica set

用mongo連接其中一個mongod,執行:

./mongo 192.168.65.138:27017
>config = {_id:'mySet',members:[
{_id:0,host:'192.168.65.138:27017',priority:2},
{_id:1,host:'192.168.51.83:27017',priority:1},
{_id:2,host:'192.168.65.138:27018',arbiterOnly:true}
]}
>rs.initiate(config)
>rs.status()

注意:

27018對應的mongod,它們只負責在某個node down掉後,進行vote選舉新的master,它們本身並不存儲數據備份。

rs.initiate(config)失敗原因:192.168.51.83防火牆問題。


3.配置config server

192.168.65.138

./mongod --fork --configsvr --port 20000 --dbpath /data/config --logpath /data/config/config.log --rest

4.配置route server

192.168.51.83

./mongod --fork --port 30000 --chunkSize 256 --configdb 192.168.65.138:20000 --logpath /data/mongos/mongos.log

5.配置集羣分片

連接到mongos進程,並切換到admin數據庫做一下配置

192.168.51.83

./mongo 192.168.51.83:30000
>use admin
>db.runCommand({addshard:'mySet/192.168.65.138:27017,192.168.51.83:27017'})
>db.runCommand({enablesharding:'test'})
>db.runCommand({listshards:1})
>printShardingStatus()
>db.runCommand({shardcollection:'test.test',key:{_id:1},unique:true})

解釋:

use admin

db.runCommand({addshard:'mySet/192.168.65.138:27017,192.168.51.83:27017'})    //添加shard server實例

db.runCommand({enablesharding:'test'})    //設置test數據庫可執行分片

db.runCommand({listshards:1})    //列出所有的shard server

printShardingStatus()    //查看sharding信息

db.runCommand({shardcollection:'test.test',key:{_id:1},unique:true})    //對現有的表執行sharding


6.測試

連接到mongos (接5)

>for(var i=1;i<=2014;i++)db.test.save({id:i,value1:'123',value2:'123',value3:'123',value4:'123'})
>db.test.stats()


7.索引

db.test.ensureIndex({id: 1}, {unique: true,dropDups: true}); 
db.test.dropIndexes();                                         

注意:創建索引和刪除索引


5.監控配置

   早在去年已經出現MongoDBRedis的Cacti模板,使用它,你可以對你的MongoDB和Redis服務進行流量監控。cacti的模板一直在更新,若企業已經用到nosql這種非關係數據庫如mongodb和redis。可按照以下教程,對mongodb和redis進行監控。

該模板可以監控以下資源:

mongodb:

redis:


一、下載模板:

wgethttp://mysql-cacti-templates.googlecode.com/files/better-cacti-templates-1.1.8.tar.gz

二、配置ssh公私鑰無需密碼登錄:

因爲cacti監控mongodb是需要登錄到mongodb的服務端運行mongo的狀態獲取命令,所以需要ssh連接登錄。

所以需要配置非交互式帳號密碼登錄。這裏採用公私鑰模式。

先在監控服務器生成一對公私鑰。


  1. ssh-keygen ##如果是root用戶,生成的默認目錄爲/root/.ssh下2個文件id_rsa(公鑰) id_rsa.pub(私鑰)

  2. cd /root/.ssh/ && chmod 600 id_rsa*     把這2個文件修改權限,爲600

  3. ssh-copy-id -i /root/.ssh/id_rsa [email protected]  #加被監控節點公私鑰認證

id_rsa.pub複製出來,放到被監控機器上,然後公鑰的內容追加到需要被監控的主機也就是mongodb和redis的服務端。追加到.ssh/authorized_keys

然後用ssh連接你所安裝mongodb或者redis的服務端,如果不需輸密碼連接上。則正常。下面就可以開始添加監控文件了。

三、配置監控腳本:


  1. mongodb或redis的監控所需到的是你下載目錄中的better-cacti-templates-1.1.8\scripts下的

  2. ss_get_by_ssh.php 這個腳本 這個腳本需要放在cacti的服務端

  3. 如果你cacti是裝到/var/www/html/cacti/目錄下。

  4. 把該文件放在其下面的scripts目錄下。別忘了看下權限。要有執行權限。

然後修改該文件。主要修改一下選項,大概在40行。

  1. # ============================================================================

  2. $ssh_user   = 'root';                          # SSH username

  3. $ssh_port   = 22;                               # SSH port

  4. $ssh_iden   = '-i /root/.ssh/id_rsa';     # SSH identity

  5. ##修改根據你的配置,你的ssh連接用戶,還有認證私鑰的位置。

大該在50行,還可以修改其默認的去探測的端口(如果redis不是正常默認端口啓動需要修改這些)。

  1. $memcache_port = 11211;                   # Which port memcached listens on

  2. $redis_port    = 6379;                    # Which port redis listens on

如果是mongodb不是正常端口啓動,則需要這樣修改。找到以下字段,添加紅色字段,這裏注意mongo這個命令一定要找對。

  1. function mongodb_cmdline ( $options ) {

  2. return “echo \”db._adminCommand({serverStatus:1, repl:1})\” | /usr/local/mongo/mongodb/bin/mongo –port 10000″;

  3. }

配置完後保存退出。

可以先用測試命令測一下。語法如下:

  1. php /var/www/html/scripts/ss_get_by_ssh.php --type mongodb --host 192.168.200.1 --items c,de,df,dg,dh,di,dj,dk,dl,dm,dn,do,dp,dq,dr,ds,dt,du

如果有數據輸出。則表示正常。


四、在cacti裏添加mongodb和redis模板:

4.1 模板導入

模板目錄爲better-cacti-templates-1.1.8\templates

4.2 導入後對被監控機添加模板:

4.3 添加後爲其繪圖:

五:實際效果測試:




本文部分引用地址:

http://freeze.blog.51cto.com/1846439/884925

http://wenku.baidu.com/link?url=Oc3qynyXXLbaQXnoU7Eiwl3JZpY8DJAh0S7fCyPDAiYZubWG3nbrLC0ZgvaNTDHZIf7JsxUdYbn_5JmRkEZs98gvv6d6Lt1M7y-CTizOA8G

(涉及到三臺服務器與四臺服務器mongodb集羣配置)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章