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.監控配置
早在去年已經出現MongoDB和Redis的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連接登錄。
所以需要配置非交互式帳號密碼登錄。這裏採用公私鑰模式。
先在監控服務器生成一對公私鑰。
ssh-keygen ##如果是root用戶,生成的默認目錄爲/root/.ssh下2個文件id_rsa(公鑰) id_rsa.pub(私鑰)
cd /root/.ssh/ && chmod 600 id_rsa* 把這2個文件修改權限,爲600
ssh-copy-id -i /root/.ssh/id_rsa [email protected] #加被監控節點公私鑰認證
把id_rsa.pub複製出來,放到被監控機器上,然後公鑰的內容追加到需要被監控的主機也就是mongodb和redis的服務端。追加到.ssh/authorized_keys
然後用ssh連接你所安裝mongodb或者redis的服務端,如果不需輸密碼連接上。則正常。下面就可以開始添加監控文件了。
三、配置監控腳本:
mongodb或redis的監控所需到的是你下載目錄中的better-cacti-templates-1.1.8\scripts下的
ss_get_by_ssh.php 這個腳本 這個腳本需要放在cacti的服務端。
如果你cacti是裝到/var/www/html/cacti/目錄下。
把該文件放在其下面的scripts目錄下。別忘了看下權限。要有執行權限。
然後修改該文件。主要修改一下選項,大概在40行。
# ============================================================================
$ssh_user = 'root'; # SSH username
$ssh_port = 22; # SSH port
$ssh_iden = '-i /root/.ssh/id_rsa'; # SSH identity
##修改根據你的配置,你的ssh連接用戶,還有認證私鑰的位置。
大該在50行,還可以修改其默認的去探測的端口(如果redis不是正常默認端口啓動需要修改這些)。
$memcache_port = 11211; # Which port memcached listens on
$redis_port = 6379; # Which port redis listens on
如果是mongodb不是正常端口啓動,則需要這樣修改。找到以下字段,添加紅色字段,這裏注意mongo這個命令一定要找對。
function mongodb_cmdline ( $options ) {
return “echo \”db._adminCommand({serverStatus:1, repl:1})\” | /usr/local/mongo/mongodb/bin/mongo –port 10000″;
}
配置完後保存退出。
可以先用測試命令測一下。語法如下:
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集羣配置)