mongodb Replica Sets +Sharding高可用叢集搭建(含認證)

來源:互聯網
上載者:User

叢集由三台伺服器(假定ip地址為:serverA,serverB,serverC)組成,採用mongodb的複製集+分區(Replica Sets+Sharding) 實現叢集的高可靠/高可用以及資料讀寫的負載平衡。 三台機器分成兩個複製集,兩個複製集組成一個叢集的兩個分區(shard1和shard2)。具體如下:

  1、ServerA的s1-1 / ServerB的s1-2 / ServerC的s1-3 組成一個3節點的複製集s1  2、ServerA的s2-1 / ServerB的s2-2 / ServerC的s2-3 組成一個3節點的複製集s2  3、複製集s1和s2 組成有兩個片的分區叢集  4、為確保配置資訊高可用,叢集採用3個配置節點儲存叢集配置資訊: ServerA的c1 / ServerB的c2 / ServerC的c3  5、為對外服務提供高可用,叢集採用3個路由節點對外提供服務:ServerA的mongos 1 / ServerB的mongos 2/ ServerC的mongos 3,也可以結合keepalive對外提供一個vip. mongodb叢集邏輯結構: mongodb服務進程規劃: 每台機器運行4個服務進程(2+1+1),連接埠和目錄規劃: 

 詳細配置步驟如下:

 1、配置shard1用到複製集 s1:

  在serverA上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_1/db --logpath=/data/mongo/s1_1/log/mongo.log --logappend --fork

  在serverB上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_2/db --logpath=/data/mongo/s1_2/log/mongo.log --logappend --fork

  在serverC上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_3/db --logpath=/data/mongo/s1_3/log/mongo.log --logappend --fork

  串連三個節點的任一個初始化複製集s1 

  >use admin

  >config = {_id:'s1',members:[{_id:0,host:'serverA:27020',priority:1},{_id:1,host:'serverB:27020'},{_id:2,host:'serverC:27020'}]}

  >rs.initiate(config)

  >rs.status()

  另外對複製集s1的所有節點都執行如下命令確保所有節點都能分擔讀取的壓力

  >db.getMongo().setSlaveOk();

 2、配置shard2用到複製集 s2:

  在serverA上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_1/db --logpath=/data/mongo/s2_1/log/mongo.log --logappend --fork

  在serverB上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_2/db --logpath=/data/mongo/s2_2/log/mongo.log --logappend --fork

  在serverC上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_3/db --logpath=/data/mongo/s2_3/log/mongo.log --logappend --fork 

  串連三個節點的任一個初始化複製集s2 

  >use admin

  >config = {_id:'s2',members:[{_id:0,host:'serverA:27021'},{_id:1,host:'serverB:27021',priority:1},{_id:2,host:'serverC:27021'}]}

  >rs.initiate(config)

  >rs.status()

  另外對複製集s2的所有節點都執行如下命令確保所有節點都能分擔讀取的壓力

  >db.getMongo().setSlaveOk();

 3、配置三台Config Server:

  在serverA上:mongod  -fork --configsvr --dbpath /data/mongo/config/db --port 27018 --logpath /data/mongo/config/log/mongo.log --fork

  在serverB上:mongod  -fork --configsvr --dbpath /data/mongo/config/db --port 27018 --logpath /data/mongo/config/log/mongo.log --fork

  在serverC上:mongod  -fork --configsvr --dbpath /data/mongo/config/db --port 27018 --logpath /data/mongo/config/log/mongo.log --fork

 4、配置三台Route Server:

  在serverA上:mongos -fork --logpath /data/mongo/route/log/mongo.log --configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017

  在serverB上:mongos -fork --logpath /data/mongo/route/log/mongo.log --configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017

  在serverC上:mongos -fork --logpath /data/mongo/route/log/mongo.log --configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017

 5、配置Shard Cluster:

  串連任一mongos進程執行以下命令:

  use admin

  db.runCommand({addShard:"shard1/serverA:27020,serverB:27020,serverC:27020"})

  db.runCommand({addShard:"shard2/serverA:27021,serverB:27021,serverC:27021"})

  db.printShardingStatus()

6、啟用資料庫及集合的分區功能:

  串連任一mongos進程執行以下命令:

  db.runCommand({enablesharding:"testdb"})

  db.runCommand({shardcollection:"testdb.collection_test",key:{_id:1}})

7、登入mongos添加使用者:

    use admin

    db.addUser("<user>","<password>")

  db.addUser("<user>","<password>",true) //添加唯讀使用者

8、關閉三台機器的全部mongod,mongos:

  sudo killall mongod

  sudo killall mongos

9、產生keyfile:(每個進程的key file都保持一致)

  openssl rand -base64 753 >keyfile

  將產生的keyfile 拷貝到mongod/mongos 進程對應的檔案夾

  並執行語句更改許可權:sudo chmod 600 keyfile

  使用--keyFile參數指定前面產生的keyfile檔案,重啟三台機器全部mongod,mongos進程 

  在serverA上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_1/db --logpath=/data/mongo/s1_1/log/mongo.log --logappend --fork --keyFile  /data/mongo/s1_1/keyfile

  在serverB上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_2/db --logpath=/data/mongo/s1_2/log/mongo.log --logappend --fork --keyFile  /data/mongo/s1_2/keyfile

  在serverC上:mongod --replSet s1 --port 27020 --dbpath=/data/mongo/s1_3/db --logpath=/data/mongo/s1_3/log/mongo.log --logappend --fork --keyFile  /data/mongo/s1_3/keyfile

  

  在serverA上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_1/db --logpath=/data/mongo/s2_1/log/mongo.log --logappend --fork --keyFile  /data/mongo/s2_1/keyfile

  在serverB上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_2/db --logpath=/data/mongo/s2_2/log/mongo.log --logappend --fork --keyFile  /data/mongo/s2_2/keyfile

  在serverC上:mongod --replSet s2 --port 27021 --dbpath=/data/mongo/s2_3/db --logpath=/data/mongo/s2_3/log/mongo.log --logappend --fork --keyFile  /data/mongo/s2_3/keyfile

  

  在serverA上:mongod  -fork --configsvr --dbpath /data/mongo/config/db --port 27018 --logpath /data/mongo/config/log/mongo.log --fork --keyFile  /data/mongo/config/keyfile

  在serverB上:mongod  -fork --configsvr --dbpath /data/mongo/config/db --port 27018 --logpath /data/mongo/config/log/mongo.log --fork --keyFile  /data/mongo/config/keyfile

  在serverC上:mongod  -fork --configsvr --dbpath /data/mongo/config/db --port 27018 --logpath /data/mongo/config/log/mongo.log --fork --keyFile  /data/mongo/config/keyfile

 

  在serverA上:mongos -fork --logpath /data/mongo/route/log/mongo.log --configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017 --keyFile  /data/mongo/route/keyfile

  在serverB上:mongos -fork --logpath /data/mongo/route/log/mongo.log --configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017 --keyFile  /data/mongo/route/keyfile

  在serverC上:mongos -fork --logpath /data/mongo/route/log/mongo.log --configdb ServerA:27018,ServerB:27018,ServerC:27018 --port 27017 --keyFile  /data/mongo/route/keyfile

  完畢!

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.