mongodbレプリカセットとは
MongoDBは、JSONライクなドキュメントを使用する動的スキーマのNoSQLデータベースです。一般に、データベースを運用する際には、データベースサーバーの1つが故障したときの対応策を常に用意しておくのがベストプラクティス。補足ですが、WordPressサイトで優れた管理ツールを活用することで、このような事態が発生する可能性を軽減することができます。
レプリカセットとは、レプリケーションを介して同じデータセットを維持するサーバー群です。またレプリケーションは、ロードバランシングの一部としても使用することができます。書き込みと読み込みの操作は、ユースケースに応じてすべてのインスタンスに分散されます。
この記事でわかる・できること
- EC2内にmongodbレプリカセットプロセスを立ち上げる方法
- mongodbレプリカセットプロセスをsystemdで管理する方法
動作環境・使用するツールや言語
-
OS バージョン
- amazonlinux2
-
言語 バージョン
- mongodb 5系
前提
- mongodbがインストール済であること
手順
mongodプロセス立ち上げ
-
mongod設定ファイル配置ディレクトリ作成
$ mkdir -p /usr/data/db{1,2,3}
-
mongod設定ファイル作成
$ vi /usr/data/db1/mongod.conf $ cat /usr/data/db1/mongod.conf $ cp -p /usr/data/db1/mongod.conf /usr/data/db2/ $ cp -p /usr/data/db1/mongod.conf /usr/data/db3/ $ vi /usr/data/db2/mongod.conf $ cat /usr/data/db2/mongod.conf →path,dbPathは「db2」,portは「28018」に変更 $ vi /usr/data/db3/mongod.conf $ cat /usr/data/db3/mongod.conf →path,dbPathは「db3」,portは「28019」に変更
mongod.confsystemLog: destination: file path: /usr/data/db1/mongod.log logAppend: true storage: dbPath: /usr/data/db1 net: bindIp: 0.0.0.0 port: 28017 replication: replSetName: rs0 processManagement: fork: true
-
設定ファイル適用
$ mongod -f /usr/data/db1/mongod.conf $ mongod -f /usr/data/db2/mongod.conf $ mongod -f /usr/data/db3/mongod.conf
-
プライマリインスタンスに接続
$ mongosh localhost:28017
-
レプリカセットのメンバー追加(プライマリー→セカンダリー)
$ rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "localhost:28017"},{_id: 1, host: "localhost:28018"},{_id: 2,host:"localhost:28019"}]})
-
メンバーの追加状況確認
$ rs.status()
systemdによる自動起動
-
systemdで実行するシェルスクリプトを作成
$ mkdir -p /opt/mongo $ vi /opt/mongo/mongod.sh $ cat /opt/mongo/mongod.sh $ chmod 0755 /opt/mongo/mongod.sh
mongod.sh#! /bin/bash mongod -f /usr/data/db1/mongod.conf mongod -f /usr/data/db2/mongod.conf mongod -f /usr/data/db3/mongod.conf
-
systemdのunit定義ファイル作成
$ vi /etc/systemd/system/mongod-replicasets.service $ cat /etc/systemd/system/mongod-replicasets.service
mongod-replicasets.service[Unit] Description = mongodb replicasets [Service] ExecStart = /opt/mongo/mongod.sh Restart = always Type = simple RemainAfterExit = yes [Install] WantedBy = multi-user.target
-
systemdにユニットファイルを追加・更新したことを通知する
$ systemctl daemon-reload
-
unitsがserviceとして認識されたか確認
$ systemctl list-unit-files --type=service | grep mongo
-
サービス起動、自動起動設定ON
$ systemctl start mongod-replicasets $ systemctl enable mongod-replicasets $ systemctl status mongod-replicasets
-
EC2再起動 or mongod のプロセスをすべてkill
EC2再起動 or $ ps aux | grep mongod $ kill <プロセスID>
-
再起動後動作確認
$ ps aux | grep mongod $ mongo localhost:28017
参考資料
ローカル環境でMongoDBのReplicationを構成する方法
Systemdを使ってさくっと自作コマンドをサービス化してみる
おわりに・まとめ
mongodbレプリカセットについて構築手順をまとめてみました。
他にも構築中にあったエラーの解消やアクセス制御の方法などを記事にできればと思います