Golang + MongoDB ReplSet複本集

來源:互聯網
上載者:User

本文介紹MongoDB複本集,暫且按照3個節點來配置:A(primary)、B(secondary)、C(arbiter)
1. 在叢集每個節點上安裝一份MongoDB;
2. 配置複本集;
3. 配置複本集的使用者名稱、密碼;
4. 配置複本集的KeyFile安全鑒權;
5. 配置開機啟動;
6. golang串連MongoDB複本集,並執行CRUD操作;

每個節點IP:
A節點: 11.11.11.11
B節點: 22.22.22.22
C節點: 33.33.33.33

第一步: 安裝MongoDB

每個節點安裝MongoDB

vi/etc/yum.repos.d/mongodb-enterprise.repo

在mongodb-enterprise.repo檔案中加入以下內容

[mongodb-enterprise]
name=MongoDB Enterprise Repository
baseurl=https://repo.mongodb.com/yum/redhat/$releasever/mongodb-enterprise/3.6/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc

然後運行以下命令

sudo yuminstall-y mongodb-enterprise

配置mongod.conf

先建立以下目錄

/test/db/mongodb |--logs |--keyfiles |--data

再配置記錄檔的路徑、資料目錄、複本集名稱

> vi /etc/mongod.conf

systemLog:
    path: /test/db/mongodb/logs/mongod.log #記錄檔的路徑

storage:
    dbPath: /test/db/mongodb/data #資料目錄

net:
    port: 27017
    bindIp: 11.11.11.11 #用戶端通過此ip串連

replication:
    replSetName: "rs0" #複本集名稱

注意: 資料目錄、記錄檔目錄要將使用者改為mongod

chown mongod:mongod -R /test/db/mongodb/data
chown mongod:mongod -R /test/db/mongodb/logs


分別啟動每個節點:A、B、C節點

mongod--config /etc/mongod.conf


第二步: 組建複本集

假設我們要將A結點作為primary, B結點作為secondary, C結點作為arbiter
在A結點(11.11.11.11)這台機器上運行

mongo

串連成功後,開始配置複本集:

> config = {
     "_id": "rs0",
     "members": [
          {
                 "_id": 0,
                 "host": "11.11.11.11:27017"
            }
      ]
 } 
> rs.initiate(config) #初始化複本集{ "ok" : 1 }
> rs.add({host: '22.22.22.22:27017'})
> rs.addArb('33.33.33.33:27017')
> rs.status() #查看複本集狀態,找到primary節點的IP

第三步: 建立帳戶密碼

複本集搭建成功後,需要給整個複本集建立帳戶、密碼
在A結點(primary)上,用用戶端串連,建立使用者權限(主節點,可以用 rs.status() 查看)

[root@servera ~]# mongo
rs0:PRIMARY> use admin
switched to db admin

#建立超級管理員:root
replSet:PRIMARY> db.createUser({
      "user": "root",
      "pwd": "rootpwd",
      "roles": [
            { "role": "root", "db": "admin" }
       ]
})

Successfully added user: {
        "user" : "root",
         "roles" : [{"role" : "root","db" : "admin"}]
}

rs0:PRIMARY> use mytest
 #建立mytest資料庫
switched to db mytest
#建立mytest資料庫管理員

replSet:PRIMARY> db.createUser({
     "user": "mytest",
     "pwd": "mytestpwd",
     "roles": [ { "role": "dbOwner", "db": "mytest" } ]
})
Successfully added user: {
     "user" : "mytest",
     "roles" : [{"role" : "dbOwner","db" : "mytest"}]
}

第四步: 建立keyfile

建立key檔案, 三個節點必須要用同一份keyfile,在一台機器產生,拷貝到另外兩台,並且修改成 400 的檔案屬性。

結點A、結點B、結點C上都建立/test/db/mongodb/keyfiles目錄, 然後在結點A上輸入以下命令

openssl rand -base64 756 > /test/db/mongodb/keyfiles/keyfile
chmod 400 /test/db/mongodb/keyfiles/keyfile

並且把這份keyfile同步到其他兩個節點的/test/db/mongodb/keyfiles 目錄下;
關閉複本集的所有成員

先關閉結點B(secondary)上的mongod, 再關閉結點C(arbiter)上的mongod, 最後關閉結點A(primary)上的mongod

分別依次在B, C, A上運行mongo shell, 然後再輸入以下命令來關閉mongod

use admin
db.shutdownServer()

修改每個節點的設定檔mongo.conf中的security配置項:

security: 
    keyFile: /test/db/mongodb/keyfiles/keyfile 
    authorization: enabled

注意:三台機器都要修改mongod.conf。另外,keyfiles目錄要將使用者改為mongod

chown mongod:mongod -R /test/db/mongodb/keyfiles

重新啟動複本集

[root@servera ~]# mongod -f /etc/mongod.conf #機器A
[root@serverb ~]# mongod -f /etc/mongod.conf #機器B
[root@serverc ~]# mongod -f /etc/mongod.conf #機器C

第五步: 設定MongoDB開機啟動

[root@servera ~]# systemctl enable mongod.service

[root@serverb ~]# systemctl enable mongod.service

[root@serverc ~]# systemctl enable mongod.service

第六步: Golang串連MongoDB

package main
import (
    "os"
    "fmt"
    "github.com/globalsign/mgo"
)

func main() {
    // user, password, database, rs0分別為使用者名稱、密碼、資料庫、複本集,請自行修改
    URL := "mongodb://user:password@11.11.11.11,22.22.22.22/database?replicaSet=rs0"
    session, err := mgo.Dial(URL)
    if err != nil {
        fmt.Println(err.Error())
        os.Exit(-1)
    }
    session.SetMode(mgo.Monotonic, true)
    Conn := session.DB("")
     // 獲得 Mongodb的串連後,再就可以進行各種CRUD啦
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.