記錄這個純屬方便本身之後使用。。
linux
mongodb官方最新版本3.2.6,某些功能都加以改進而且性能提高很大,下面操做只是快速搭建mongodb複製集以及shard分片等
一共分爲以下幾步驟mongodb
啓動某個節點主master進行設置單個節點帳號和密碼數據庫
配置mongodb複製集ubuntu
配置mongos-shard分片架構
設置mongos路由帳號和密碼並啓用驗證ide
目錄規劃建立url
mkdir /data/{config,shard1,shard2,shard3,mongos,logs,configsvr,keyfile} -pv touch /data/keyfile/security touch /data/logs/shard{1..3}.log touch /data/logs/{configsvr,mongos}.log touch /data/config/shard{1..3}.conf touch /data/config/{configsvr,mongos}.conf
因爲操做系統是Ubuntu14.04 64位的,因此mongodb軟件也是Ubuntu的spa
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1404-3.2.6.tgz tar fxz mongodb-linux-x86_64-ubuntu1404-3.2.6.tgz -C /usr/local/ mv /usr/local/mongodb-linux-x86_64-ubuntu1404-3.2.6 /usr/local/mongodb
設置mongo環境變量操作系統
echo "export PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile source /etc/profile
第一個節點配置文件如shard一、shard二、shard三、configsvr、mongos配置文件
shard1.conf配置文件以下
shard2.conf配置文件以下
shard3配置文件以下
confisvr.conf配置文件以下
mongos.conf配置文件以下
注:以上配置文件分別拷貝到另外2臺節點上
啓動第一臺節點主mongod
root@mongodb-01:/data/config# mongod -f /data/config/shard1.conf about to fork child process, waiting until server is ready for connections. forked process: 10686 child process started successfully, parent exiting
登錄進去,建立帳號
root@mongodb-01:/data/config# mongo --port 20001 > use admin db.createUser( { user: "administrator", pwd: "123456", roles: [ { role: "root", db: "admin" } ] }); > db.auth("administrator","123456") 1
注:第二個節點和第三個節點設置單個mongod帳號同樣,操做下吧,示例以下
啓動第2臺節點主mongod
root@mongodb-02:/data/config# mongod -f /data/config/shard2.conf about to fork child process, waiting until server is ready for connections. forked process: 10986 child process started successfully, parent exiting
登錄進去,建立帳號
root@mongodb-02:/data/config# mongo --port 20002 > use admin db.createUser( { user: "administrator", pwd: "123456", roles: [ { role: "root", db: "admin" } ] }); > db.auth("administrator","123456") 1
啓動第3臺節點主mongod
root@mongodb-03:/data/config# mongod -f /data/config/shard3.conf about to fork child process, waiting until server is ready for connections. forked process: 11982 child process started successfully, parent exiting
登錄進去,建立帳號
root@mongodb-03:/data/config# mongo --port 20003 > use admin db.createUser( { user: "administrator", pwd: "123456", roles: [ { role: "root", db: "admin" } ] }); > db.auth("administrator","123456") 1
生成keyfile文件,文件權限600
openssl rand -base64 741 > /data/keyfile/security、 chmod 600 /data/keyfile/security
注:生成security文件拷貝到其餘節點上,注意文件權限600切記
關閉每一個節點上主mongod,並打開第一個節點的shard1.conf配置文件中security去掉註釋,以及第二節點上shard2.conf和第三個節點shard3.conf配置文件去掉註釋便可
關閉mongod命令
pkill mongod
再次啓動mongod
第一臺機器上執行命令以下 mongod -f /data/config/shard1.conf 第2臺機器上執行命令以下 mongod -f /data/config/shard2.conf 第3臺機器上執行命令以下 mongod -f /data/config/shard3.conf
登錄每一個主節點上mongod,進行show或者其餘命令的時候回提示沒有認證,認證後就能夠查看了,這裏就不演示了
啓動每一個節點上shard、confisvr以及mongos便可
命令以下
mongod -f /data/config/shard1.conf mongod -f /data/config/shard2.conf mongod -f /data/config/shard3.conf mongod -f /data/config/configsvr.conf mongos -f /data/config/mongos.conf
注:啓動後使用netstat -ntpl或者ps -ef|grep mongo查看便可
第一臺節點 mongodb-01機器配置複製集,mongo –port 20001登錄操做
> use admin
switched to db admin
> config = { _id:"shard1",members:[{_id:0,host:"mongodb-01:20001"},{_id:1,host:"mongodb-02:20001"},{_id:2,host:"mongodb-03:20001",arbiterOnly:true}]}
第二臺節點 mongodb-02機器配置複製集,mongo –port 20002
> use admin
switched to db admin
> config = { _id:"shard2",members:[{_id:0,host:"mongodb-02:20002"},{_id:1,host:"mongodb-03:20002"},{_id:2,host:"mongodb-01:20002",arbiterOnly:true}]}
第三臺節點 mongodb-03機器配置複製集,登錄mongo –port 20003
> use admin
switched to db admin
> config = { _id:"shard3",members:[{_id:0,host:"mongodb-03:20003"},{_id:1,host:"mongodb-01:20003"},{_id:2,host:"mongodb-02:20003",arbiterOnly:true}]}
注:以上就是每一個節點上配置rs複製集,可使用rs.status(),查看每一個節點上rs複製集相關狀態信息等
######################################################################
登錄任意節點上進行mongo路由配置,mongo --port 20000
mongos> use admin
switched to db admin
mongos> db.runCommand({addshard:」shard1/mongodb-01:20001,mongodb-02:20001,mongodb-03:20001」});
{ 「shardAdded」 : 「shard1」, 「ok」 : 1 }
mongos> db.runCommand({addshard:」shard2/mongodb-01:20002,mongodb-02:20002,mongodb-03:20002」});
{ 「shardAdded」 : 「shard2」, 「ok」 : 1 }
mongos> db.runCommand({addshard:」shard3/mongodb-01:20003,mongodb-02:20003,mongodb-03:20003」});
{ 「shardAdded」 : 「shard3」, 「ok」 : 1 }
查看shard狀態命令
mongos路由設置帳戶來進行管理
快速執行命令建立帳號命令以下
db.createUser( { user: "admin", pwd: "123456", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] });
實際操做以下,建立userAdminAnyDatabase角色帳號
mongos> db.createUser( { ... user: "admin", ... pwd: "123456", ... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] ... }); Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } mongos> db.auth("admin","123456") 1
快速建立root角色帳號命令以下
db.createUser ( { user: "sa", pwd: "123456", roles: [ { role: "root", db: "admin" } ] });
實際操做以下,建立成功
mongos> db.createUser( { ... user: "sa", ... pwd: "123456", ... roles: [ { role: "root", db: "admin" } ] ... }); Successfully added user: { "user" : "sa", "roles" : [ { "role" : "root", "db" : "admin" } ] } mongos> db.auth("sa","123456") 1
注:userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶全部數據庫的userAdmin權限,root:只在admin數據庫中可用。超級帳號,超級權限,其實 建立一個userAdminAnyDatabase角色就能夠,而後能夠建立N個用戶角色。
如何驗證mongos帳號?
還記得以前使用openssl命令生成的security文件嗎?
如今關閉mongod以及mongos命令以下,而且打開每一個節點上配置文件關於security選項註釋去掉便可
netstat -ntpl|grep mongo|awk '{print $NF}'|awk -F'/' '{print $1}'|xargs kill
啓動每一個節點上shard、confisvr以及mongos
mongod -f /data/config/shard1.conf mongod -f /data/config/shard2.conf mongod -f /data/config/shard3.conf mongod -f /data/config/configsvr.conf mongos -f /data/config/mongos.conf
登錄任意節點上mongos進行認證便可,這裏就不演示了,能夠參考其餘mongo3.2集羣認證文章,其實也就是登錄是否有權限進行查看以及其餘操做,沒認證會有提示信息。。。