クラスタのレプリカセットを構築するためのMongoDBの研究ノート(5)

3つの共通のMongoDBクラスタ、すなわち、マスター・スレーブレプリケーション、レプリカセットと断片化がありますが、この記事では、レプリカになりますが簡単な紹介を設定しました

私は初めについてお話しましょう、この記事で使用したコードの全ては、CentOSの7をテストするためにローカル・オペレーティング・システムのブロガーによってテストされています

まあ、公式は以下のスタート!

1.はじめに

前に述べたように、コピーを使用してクラスタからマスターノードからバックアップデータ一次ノードは、手動でプライマリノードの障害が発生した後、データを復元することができます

しかし、すべての時間は、プライマリノードに障害が発生した問題、データを転送するサービスを手動で停止し、する必要があります

面倒なだけでなく、損失によるサービスのうちだけでなく、計り知れない、レプリカセットはこの問題発生を解決することです

レプリカセット(レプリカセット)において、データノード(データ軸受)と調停ノード(アービタ)を複数備えた軸受

データベアラ・ノードは、以下に説明されるこれらの各々は、マスターノード(プライマリ)とスレーブノード(セカンダリ)を細分することができます。

  • デフォルトでは、クライアントに、唯一の、すべてのCRUDサービス:マスターノード
  • ノードから:データバックアップマスターノードは、サービスへのアクセスを提供することができ、メインのノードがサービスを提供し続けるために、プライマリノードから選択することがハングアップした後、
  • 調停ノード:データが格納されていないが、マスターノードハングにおけるマスタノードから一つの選択されたノードを決定します

以下のように設定され特徴付けられたレプリカ:

  • 唯一のプライマリノード上での動作を記述し、データの整合性を確保するために、同期するノード
  • 、マスターノードで読み取ることができるスレーブノードであってもよい、ある程度、マスターノードの負担を軽減することができます
  • プライマリノードがハングアップする場合は、サービスを提供し続けるために、プライマリノード、そのメンテナンスのため、ダウンタイムなしの選挙

2は、設定します

以下は、単純なシミュレーション、ノードからマスターノード、調停ノードであります

(1)のMongoDBをダウンロード

> su
> cd /root
> mkdir mongodb-replica-set-cluster
> cd mongodb-replica-set-cluster
> mkdir mongodb
> cd mongodb
> wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.7.tgz
> tar -zxvf mongodb-linux-x86_64-3.2.7.tgz
> cd ..

(2)3つのフォルダ、各アナログマスターノード、スレーブノードとノードアービトレーションを作成

> mkdir primary # 主节点
> touch ./primary/mongodb.conf
> mkdir ./primary/log
> mkdir -p ./primary/data/db
> mkdir secondary # 从节点
> touch ./secondary/mongodb.conf
> mkdir ./secondary/log
> mkdir -p ./secondary/data/db
> mkdir arbiter # 仲裁节点
> touch ./arbiter/mongodb.conf
> mkdir ./arbiter/log
> mkdir -p ./arbiter/data/db

作成したら、次のように、ディレクトリ構造があります

+ mongodb-replica-set-cluster
    + mongodb
        + mongodb-linux-x86_64-3.2.7.tgz
        + mongodb-linux-x86_64-3.2.7
    + primary
        + log
        + data
            + db
        + mongodb.conf
    + secondary
        + log
        + data
            + db
        + mongodb.conf
    + arbiter
        + log
        + data
            + db
        + mongodb.conf

(3)設定ファイルを書きます

# primary/mongodb.conf 文件内容
# 数据文件的存放位置
dbpath = /root/mongodb-replica-set-cluster/primary/data/db
# 日志文件的存放位置
logpath = /root/mongodb-replica-set-cluster/primary/log/mongodb.log
# 监听的端口,默认为 27017
port = 27001
# 以守护进程的方式运行 MongoDB
fork = true

# 设置 replSet 名称
replSet = repl
# secondary/mongodb.conf 文件内容
# 数据文件的存放位置
dbpath = /root/mongodb-replica-set-cluster/secondary/data/db
# 日志文件的存放位置
logpath = /root/mongodb-replica-set-cluster/secondary/log/mongodb.log
# 监听的端口,默认为 27017
port = 27002
# 以守护进程的方式运行 MongoDB
fork = true

# 设置 replSet 名称
replSet = repl
# arbiter/mongodb.conf 文件内容
# 数据文件的存放位置
dbpath = /root/mongodb-replica-set-cluster/arbiter/data/db
# 日志文件的存放位置
logpath = /root/mongodb-replica-set-cluster/arbiter/log/mongodb.log
# 监听的端口,默认为 27017
port = 27003
# 以守护进程的方式运行 MongoDB
fork = true

# 设置 replSet 名称
replSet = repl

(4)オープンそれぞれ3つのデータベース

> cd /root/mongodb-replica-set-cluster/mongodb/mongodb-linux-x86_64-3.2.7/bin/
> ./mongod -f /root/mongodb-replica-set-cluster/primary/mongodb.conf
> ./mongod -f /root/mongodb-replica-set-cluster/secondary/mongodb.conf
> ./mongod -f /root/mongodb-replica-set-cluster/arbiter/mongodb.conf

その後、次の3つのプロセスがMongoDBのを実行している表示されるはずです

> ps aux | grep mongo

(5)任意のノードとの間の関係に接続され、ノードが初期化

> cd /root/mongodb-replica-set-cluster/mongodb/mongodb-linux-x86_64-3.2.7/bin/
> ./mongo mongodb://127.0.0.1:27001/admin
> rs.initiate({
    "_id": "repl",
    "members": [ // 添加数据承载节点
        {
            "_id": 1,
            "host": "127.0.0.1:27001"
        },
        {
            "_id": 2,
            "host": "127.0.0.1:27002"
        }
    ]
})
// { "ok" : 1 }

repl:OTHER> rs.addArb("127.0.0.1:27003") // 添加仲裁节点
// { "ok" : 1 }

repl:PRIMARY> rs.status() // 在设置成功后,应该可以看到具体的配置信息

3、テスト・セットのコピー

メインデータベース、データ挿入(書き込み)に接続された新しい端末を開き、次に問い合わせを施し(読み取り)

> cd /root/mongodb-replica-set-cluster/mongodb/mongodb-linux-x86_64-3.2.7/bin/
> ./mongo mongodb://127.0.0.1:27001/admin
PRIMARY> db.user.insert({'username': 'Alice', 'password': '123456'}) // 插入数据(可写)
// WriteResult({ "nInserted" : 1 })
PRIMARY> db.user.find() // 查询数据(可读)
// { "username" : "Alice", "password" : "123456" }

次いで、挿入メインデータベースクエリ内のノードのデータに接続された他の端末(読み出し)、新たなデータを挿入しようとする(非書き込み)を開き

> cd /root/mongodb-replica-set-cluster/mongodb/mongodb-linux-x86_64-3.2.7/bin/
> ./mongo mongodb://127.0.0.1:27002/admin
SECONDARY> rs.slaveOk() // 在查询之前需要先设置从节点状态
SECONDARY> db.user.find() // 查询数据(可读)
// { "username" : "Alice", "password" : "123456" }
SECONDARY> db.user.insert({'username': 'Bob', 'password': 'abc'}) // 插入数据(不可写)
// WriteResult({ "writeError" : { "code" : 10107, "errmsg" : "not master" } })

さて、その後、端末は手動近くに、マスターノードを開くには、マスターノードがハングアップをシミュレート

> cd /root/mongodb-replica-set-cluster/mongodb/mongodb-linux-x86_64-3.2.7/bin/
> ./mongod --shutdown --dbpath /root/mongodb-replica-set-cluster/primary/data/db

その後に関連し127.0.0.1:27002た状態で端末の現在のレプリカセットのビュー

SECONDARY> rs.status()

ノードがマスタノード(この時間は最初のコマンド・ラインが変更されたことに注意)となっており、データクエリの内部に挿入することができることがわかります

PRIMARY> db.user.insert({'username': 'Bob', 'password': 'abc'}) // 插入数据(可写)
// WriteResult({ "nInserted" : 1 })
PRIMARY> db.user.find() // 查询数据(可读)
// { "username" : "Alice", "password" : "123456" }
// {'username': 'Bob', 'password': 'abc'}

[見て、記事のより多くのMongoDBシリーズを読むのMongoDBの研究ノート ]

おすすめ

転載: www.cnblogs.com/wsmrzx/p/11599039.html