本文記錄安裝MongoDB的過程,包括『單擊版、複制集、密碼認證、分片』等情況。
1、安裝MongoDB單機版
下載下傳安裝檔案,解壓後即可。在安裝目錄下執行如下指令即可啟動:
(在前台啟動,按ctrl c即停止服務,退出程序):
./bin/mongod --dbpath ./data/
(在背景啟動,按ctrl c或使用者退出系統後不會退出程序,不會停止服務:
nohup ./bin/mongod --auth --dbpath ./data/ > mongod.out 2>&1 &
2、密碼認證
通過指令行用戶端連接配接Mongodb伺服器,并建立使用者:
./bin/mongo
> use admin
> db.createUser(
{
user: "xxxAdmin",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
> db.createUser(
{
user: "userXXX",
pwd: "123456",
roles: [
{ role: "read", db: "local" },
{ role: "readWrite", db: "xxx" }
]
}
)
将原來的Mongodb程序kill,然後帶『--auth』參數啟動Mongodb。
nohup ./bin/mongod --auth --dbpath ./data/ > mongod.out 2>&1 &
或
./bin/mongod --dbpath=./data/ --auth --fork --logpath=./mongod.log
啟動後,通路相關的資料庫需要認證:
./bin/mongo -u userXXX -p 123456 xxx
3、安裝Mongodb副本集
以下是MongoDB複制集安裝說明,供以後參考。
複制集中的每個節點和其他節點都會保持長連接配接,是以複制集大小官方說法是不能大于50個。
複制集中的每個節點沒2秒向其他節點發送一次心跳,如果10秒内仍沒有收到回複,則認為該節點已失效。
主節點失效後,多數節點(從節點)進行一次選舉。
确認主節點失效需要10 ~ 30秒;選舉過程10 ~ 30秒;是以,如果發生此類故障,會有1分鐘左右的時間寫操作不可用。
選舉的時候,高優先級的節點最先發起選舉;有最新資料的節點最有可能成為新的主節點。
一個3節點的副本集,如果挂了一個節點,則剩餘倆節點會選舉出一個主來,副本集仍然可用;如果挂了兩個節點,則剩餘的隻有一個節點,且該節點不是主節點,不占副本集中節點個數(3)的多數,無法進行選舉,是以副本集将不可用。
通過增加arbitrary可以增大允許故障的節點數,例如,3個普通的節點 + 2個arbitrary節點,可以允許有2個節點挂掉,仍可以正常使用。
1、分别下載下傳mongo的安裝檔案到至少3台機器,解壓到檔案夾。如:/mnt/mongodb-linux-x86_64-3.0.6。
在安裝目錄下加檔案目錄replicaSet1_data、replicaSet1_log,用作存儲資料和日志。也可以使用别的目錄。
在安裝目錄下新增配置檔案replicaSet1.conf,輸入如下内容:
dbpath=/mnt/mongodb-linux-x86_64-3.0.6/replicaSet1_data
logpath=/mnt/mongodb-linux-x86_64-3.0.6/replicaSet1_log/mongod.log
pidfilepath=/mnt/mongodb-linux-x86_64-3.0.6/replicaSet1_log/mongod.pid
fork=true
directoryperdb=true
port=28001
注意:
在3.0及以上版本中,預設的存儲引擎是mmapv1,該存儲引擎是collection表級鎖(2.6版本及以下是mmap存儲引擎,是database庫級鎖)
如果在配置檔案中增加參數“storageEngine=wiredTiger”,則存儲引擎為wiredTiger,是document行級鎖。
2、啟動其中一台。
./bin/mongod --config replicaSet1.conf
3、建立兩個使用者,一個具有userAdminAnyDatabase角色,能建立新使用者;另一個具有root角色,能做任何事情。
./bin/mongo --port 28001
use admin
db.createUser( {
user: "siteUserAdmin",
pwd: "111111",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
});
db.createUser( {
user: "siteRootAdmin",
pwd: "111111",
roles: [ { role: "root", db: "admin" } ]
});
注意:
如果在安裝完成後要在MongoVUE中通路,則需要在admin這個db下執行如下指令。否則隻能通過指令行或者java程式等通路。這是因為Mongodb的3.0以後的版本修改了預設的認證方式。
use admin
var schema = db.system.version.findOne({"_id" : "authSchema"})
schema.currentVersion = 3
db.system.version.save(schema)
4、停止MongoDB
cat /mnt/mongodb-linux-x86_64-3.0.6/replicaSet1_log/mongod.pid | xargs kill -9
5、建立一個key檔案,用于複制集的成員間認證。
openssl rand -base64 741 -out replicaSet1.key 741是要産生的僞随機位元組數,必須是741個位元組
chmod 600 replicaSet1.key 除了目前使用者,其他使用者不能讀取該檔案
key檔案複制到其他機器上
scp replicaSet1.key xxx@host2/mnt/mongodb-linux-x86_64-3.0.6
scp replicaSet1.key [email protected]/mnt/mongodb-linux-x86_64-3.0.6
6、啟動MongoDB
在配置檔案replicaSet1.conf中加入如下内容
replSet=replicaSet1
keyFile=/mnt/mongodb-linux-x86_64-3.0.6/replicaSet1.key
啟動所有的幾台機器
./bin/mongod --config replicaSet1.conf
7、初始化複制集配置
./bin/mongo --port 28001
use admin
db.auth("siteRootAdmin", "111111");
rs.initiate()
執行以上指令後,可随時使用“rs.conf()”指令來檢視複制集的配置,用“rs.status()”來檢視狀态。
通過以下指令加入其它的複制內建員。rs.add是增加普通的成員,這些成員可以參加選舉成為leader,rs.addArb是增加裁判,該角色的成員永遠都不會成為leader。
rs.add("promise2:28001")
rs.add("promise3:28001")
通過rs.conf()指令可以看到總共有3個成員,priority的值都是1. 如果其中一個機器是在不同的資料中心,則需要修改其優先級為0,将其隻用于資料備份,不會作為leader。
cfg = rs.conf()
cfg.members[2].priority = 0
rs.reconfig(cfg)
8、為其他DB建立使用者。如下示例為名為test的db建立一個使用者test,密碼為111111。
./bin/mongo --port 28001
use admin
db.auth("siteUserAdmin", "111111");
use test
db.createUser(
{
user: "test",
pwd: "111111",
roles:
[
{
role: "dbOwner",
db: "test"
}
]
}
)
4、安裝shard
安裝完成副本集後,可将副本集加入一個分片叢集。
步驟一:部署configsvr配置伺服器 配置伺服器部署比較簡單,指令:./bin/mongod --configsvr --dbpath /data/configData --fork --port 27019 其中,“--configsvr”參數說明是配置伺服器,“--dbpath”說明資料存放路徑,“--fork”說明是fork出子程序背景運作。 配置伺服器可以是一個,也可以是多個,也可以是副本集。如果是副本集則安裝方式和普通的副本集相同,但啟動各個節點的時候mongod需要帶“--configsvr”參數。
步驟二:部署mongos路由伺服器(可以配置多個) 指令:mongos --configdb 副本集名稱 /副本集中的ip:port(逗号分隔) --dbpath /data/mongosData --fork --port 27017 如果配置伺服器不是副本集,則該指令中的副本集名稱及随後的斜杠不寫即可。
步驟三:将分片加入叢集 指令:sh.addShard( "replicaSet1/10.255.xxx.xx:27001,10.255.xxx.xx2:27001,10.255.xxx.xx3:27001") 如果将要加入叢集的分片是 副本集,則該指令即可将該副本集加入叢集,作為其中的一個分片;如果要加入叢集的分片不是副本集,則該指令 中的副本集名稱及随後的斜杠不寫即可。
步驟四:啟用shard分片(在test資料庫上的test_collection集合上啟用分片,并根據number字段分片) mongo 10.255.xxx.xx:27017/admin
sh.enableSharding( "test" )
use test
db.test_collection.createIndex( { number : 1 } )
sh.shardCollection( "test.test_collection", { "number" : 1 } )
db.stats() 檢視分片叢集狀态
db.printShardingStatus() 檢視分片狀态(包括哪些db、collection分片了)
注意:在安裝配置過程中如果涉及到使用主機名,而不是直接使用ip的地方,可能由于主機名解析問題導緻叢集安裝出現問題。