天天看點

安裝MongoDB-單擊版、複制集、密碼認證、安裝MongoDB分片shard1、安裝MongoDB單機版2、密碼認證3、安裝Mongodb副本集4、安裝shard

本文記錄安裝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的地方,可能由于主機名解析問題導緻叢集安裝出現問題。