シャーディング は、異なるマシン間でデータセットを保存するためのMongoDBプロセスです。これにより、データの水平スケールを実行し、すべてのデータを独立したインスタンスに分割できます。シャーディングを使用すると、データの増加に基づいてマシンをスタックに追加できます。
簡単にしましょう。音楽のコレクションがある場合、「Sharding」は音楽コレクションをさまざまなインスタンスまたはレプリカセットのさまざまなフォルダに保存して保持しますが、「Replication」は音楽コレクションを他のインスタンスに同期するだけです。
3つのシャーディングコンポーネント
シャード -すべてのデータを保存するために使用されます。また、実稼働環境では、各シャードはレプリカセットです。高可用性とデータの一貫性を提供します。
構成サーバー -クラスターメタデータを格納するために使用され、クラスターデータセットとシャードのマッピングが含まれます。このデータは、操作を提供するためにmongos/queryサーバーによって使用されます。本番環境では3つ以上のインスタンスを使用することをお勧めします。
モンゴス/クエリルーター -これは、アプリケーションインターフェイスとして実行されているmongoインスタンスです。アプリケーションは「mongos」インスタンスにリクエストを送信し、次に「mongos」はシャードキーを使用してシャードレプリカセットにリクエストを配信します。
前提条件
- 構成レプリカセットとしての2centOS7サーバー
- 10.0.15.31 configsvr1
- 10.0.15.32 configsvr2
- シャードレプリカセットとしての4つのCentOS7サーバー
- 10.0.15.21 shardsvr1
- 10.0.15.22 shardsvr2
- 10.0.15.23 shardsvr3
- 10.0.15.24 shardsvr4
- mongos/Queryルーターとしての1台のCentOS7サーバー
- 10.0.15.11 mongos
- root権限
- 各サーバーが別のサーバーに接続されている
このチュートリアルでは、SELinuxを無効にします。 SELinux構成を「enforcing」から「disabled」に変更します。
OpenSSHを介してすべてのノードに接続します。
ssh [email protected]
構成ファイルを編集してSELinuxを無効にします。
vim /etc/sysconfig/selinux
SELINUXの値を「無効」に変更します。
SELINUX=disabled
保存して終了します。
次に、各サーバーのhostsファイルを編集します。
vim /etc/hosts
次のホスト構成を貼り付けます:
10.0.15.31 configsvr1
10.0.15.32 configsvr2
10.0.15.11 mongos
10.0.15.21 shardsvr1
10.0.15.22 shardsvr2
10.0.15.23 shardsvr3
10.0.15.24 shardsvr4
保存して終了します。
次に、rebootコマンドを使用してすべてのサーバーを再起動します。
reboot
すべてのインスタンスに最新のMongoDBバージョン(3.4)を使用します。次のコマンドを実行して、新しいMongoDBリポジトリを追加します。
cat <<'EOF' >> /etc/yum.repos.d/mongodb.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
EOF
次に、次のyumコマンドを使用してmongodbリポジトリからMongoDB3.4をインストールします。
sudo yum -y install mongodb-org
mongodbをインストールすると、「 mongo」を使用できるようになります。 'または'mongod 'コマンド。
mongod --version
「前提条件」セクションでは、2台のマシン「configsvr1」と「configsvr2」で構成サーバーをすでに定義しています。このステップでは、レプリカセットとして構成します。
サーバーでmongodサービスが実行されている場合は、systemctlコマンドを使用して停止します。
systemctl stop mongod
デフォルトのmongodb構成を編集します'mongod.conf 'Vimエディターを使用します。
vim /etc/mongod.conf
DBストレージパスを独自のディレクトリに変更します。最初のサーバーには「/data/ db1」を使用し、2番目の構成サーバーには「/ data/db2」ディレクトリを使用します。
storage:
dbPath: /data/db1
行'bindIP'の値を内部ネットワークアドレスに変更します-'configsvr1'(IPアドレス10.0.15.31)および2番目のサーバー(10.0.15.32)。
bindIP: 10.0.15.31
レプリケーションセクションで、レプリケーション名を設定します。
replication:
replSetName: "replconfig01"
そして、シャーディングセクションで、インスタンスの役割を定義します。これら2つのインスタンスを「configsvr」として使用します。
sharding:
clusterRole: configsvr
保存して終了します。
次に、MongoDBデータ用の新しいディレクトリを作成してから、そのディレクトリの所有者を「mongod」ユーザーに変更する必要があります。
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
この後、以下のコマンドでmongodサービスを開始します。
mongod --config /etc/mongod.conf
netstatコマンドを使用して、mongodサービスがポート27017で実行されているかどうかを確認できます。
netstat -plntu
Configsvr1とConfigsvr2はレプリカセットの準備ができています。 'configsvr1'サーバーに接続し、mongoシェルにアクセスします。
ssh [email protected]
mongo --host configsvr1 --port 27017
以下のクエリを使用して、すべてのconfigsvrメンバーでレプリカセット名を開始します。
rs.initiate(
{
_id: "replconfig01",
configsvr: true,
members: [
{ _id : 0, host : "configsvr1:27017" },
{ _id : 1, host : "configsvr2:27017" }
]
}
)
結果が得られた場合'{"ok":1} '、これはconfigsvrがすでにレプリカセットで構成されていることを意味します。
そして、どのノードがマスターで、どのノードがセカンダリであるかを確認できます。
rs.isMaster()
rs.status()
ConfigServerレプリカセットの構成が完了しました。
このステップでは、4つの「centos7」サーバーを「2つの「レプリカセット」を備えた「シャード」サーバーとして構成します。
- 2サーバー-'shardsvr1 'および'shardsvr2 'レプリカセット名:' shardreplica01 '
- 2サーバー-'shardsvr3 'および'shardsvr4 'レプリカセット名:' shardreplica02 '
各サーバーに接続し、mongodサービスを停止し(サービスが実行されている場合)、MongoDB構成ファイルを編集します。
systemctl stop mongod
vim /etc/mongod.conf
デフォルトのストレージを特定のディレクトリに変更します。
storage:
dbPath: /data/db1
'bindIP'行で、内部ネットワークアドレスを使用するように値を変更します。
bindIP: 10.0.15.21
レプリケーションセクションでは、「 shardreplica01」を使用できます '最初と2番目のインスタンス。そして、' shardreplica02を使用します '3番目と4番目のシャードサーバーの場合。
replication:
replSetName: "shardreplica01"
次に、サーバーの役割を定義します。これらすべてをshardsvrインスタンスとして使用します。
sharding:
clusterRole: shardsvr
保存して終了します。
次に、MongoDBデータ用の新しいディレクトリを作成します。
mkdir -p /data/db1
chown -R mongod:mongod /data/db1
モンゴッドサービスを開始します。
mongod --config /etc/mongod.conf
次のコマンドを使用して、MongoDBが実行されていることを確認します。
netstat -plntu
MongoDBがローカルネットワークアドレスで実行されていることがわかります。
次に、これら2つのシャードインスタンスの新しいレプリカセットを作成します。 'shardsvr1'に接続し、mongoシェルにアクセスします。
ssh [email protected]
mongo --host shardsvr1 --port 27017
' shardreplica01という名前でレプリカセットを開始します '、およびメンバーは' shardsvr1 'および'shardsvr2 '。
rs.initiate(
{
_id : "shardreplica01",
members: [
{ _id : 0, host : "shardsvr1:27017" },
{ _id : 1, host : "shardsvr2:27017" }
]
}
)
エラーがない場合は、以下のような結果が表示されます。
shardsvr3の結果 およびshardsvr4 レプリカセット名'shardreplica02 '。
shardsvr3に対してこの手順をやり直してください およびshardsvr4 レプリカセット名が異なるサーバー'shardreplica02 '。
これで、2つのレプリカセットが作成されました-' shardreplica01 'および'shardreplica02 '-シャードとして。
「クエリルーター」またはmongosは、「mongos」を実行する単なるインスタンスです。構成ファイルを使用してmongosを実行することも、コマンドラインのみを使用して実行することもできます。
mongosサーバーにログインし、MongoDBサービスを停止します。
ssh [email protected]
systemctl stop mongod
以下に示すように、コマンドラインでmongosを実行します。
mongos --configdb "replconfig01/configsvr1:27017,configsvr2:27017"
'--configdb'オプションを使用して、構成サーバーを定義します。本番環境にいる場合は、少なくとも3台の構成サーバーを使用してください。
次のような結果が表示されます。
Successfully connected to configsvr1:27017
Successfully connected to configsvr2:27017
mongosインスタンスが実行されています。
前の手順で別のシェルを開き、mongosサーバーに再度接続して、mongoシェルにアクセスします。
ssh [email protected]
mongo --host mongos --port 27017
shmongodbクエリを使用してシャードサーバーを追加します。
' shardreplica01の場合 'インスタンス:
sh.addShard( "shardreplica01/shardsvr1:27017")
sh.addShard( "shardreplica01/shardsvr2:27017")
' shardreplica02の場合 'インスタンス:
sh.addShard( "shardreplica02/shardsvr3:27017")
sh.addShard( "shardreplica02/shardsvr4:27017")
エラーがないことを確認し、シャードのステータスを確認します。
sh.status()
次のスクリーンショットに示すようなシャーディングステータスが表示されます。
2つのシャードレプリカセットと1つのmongosインスタンスがスタックで実行されています。
セットアップをテストするには、mongosサーバーのmongoシェルにアクセスします。
ssh [email protected]
mongo --host mongos --port 27017
データベースのシャーディングを有効にする
新しいデータベースを作成し、新しいデータベースのシャーディングを有効にします。
use lemp
sh.enableSharding("lemp")
sh.status()
データベースのステータスを確認します。データベースはレプリカセット「shardreplica01」に分割されています。
コレクションのシャーディングを有効にする
次に、シャーディングをサポートする新しいコレクションをデータベースに追加します。シャードコレクション「name」を使用して「stack」という名前の新しいコレクションを追加し、データベースとコレクションのステータスを確認します。
sh.shardCollection("lemp.stack", {"name":1})
sh.status()
シャードコレクション「name」を含む新しいコレクション「stack」が追加されました。
コレクションの「スタック」にドキュメントを追加します。
次に、ドキュメントをコレクションに挿入します。シャードクラスターのコレクションにドキュメントを追加するときは、「シャードキー」を含める必要があります。
以下の例では、シャードキー' name を使用しています '、コレクションのシャーディングを有効にするときに追加したように。
db.stack.save({
"name": "LEMP Stack",
"apps": ["Linux", "Nginx", "MySQL", "PHP"],
})
次のスクリーンショットに示すように、ドキュメントはコレクションに正常に追加されました。
データベースをテストする場合は、レプリカセット' shardreplica01に接続できます。 'PRIMARYサーバーを開き、mongoシェルを開きます。 'shardsvr2'PRIMARYサーバーにログインしています。
ssh [email protected]
mongo --host shardsvr2 --port 27017
レプリカセットで利用可能なデータベースを確認してください。
show dbs
use lemp
db.stack.find()
データベース、コレクション、およびドキュメントがレプリカセットで利用可能であることがわかります。
CentOS7上のMongoDBシャードクラスターが正常にインストールおよびデプロイされました。