0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS EC2 on MongoDBでレプリカセットをsystemdを使って自動起動させてみた

Last updated at Posted at 2024-11-18

mongodbレプリカセットとは

img-products-mongodb.png

MongoDBは、JSONライクなドキュメントを使用する動的スキーマのNoSQLデータベースです。一般に、データベースを運用する際には、データベースサーバーの1つが故障したときの対応策を常に用意しておくのがベストプラクティス。補足ですが、WordPressサイトで優れた管理ツールを活用することで、このような事態が発生する可能性を軽減することができます。

レプリカセットとは、レプリケーションを介して同じデータセットを維持するサーバー群です。またレプリケーションは、ロードバランシングの一部としても使用することができます。書き込みと読み込みの操作は、ユースケースに応じてすべてのインスタンスに分散されます。

この記事でわかる・できること

  • EC2内にmongodbレプリカセットプロセスを立ち上げる方法
  • mongodbレプリカセットプロセスをsystemdで管理する方法

動作環境・使用するツールや言語

  • OS バージョン

    • amazonlinux2
  • 言語 バージョン

    • mongodb 5系

前提

  • mongodbがインストール済であること

手順

mongodプロセス立ち上げ

  1. mongod設定ファイル配置ディレクトリ作成

    $ mkdir -p /usr/data/db{1,2,3}
    
  2. 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.conf
    systemLog:
        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
    
  3. 設定ファイル適用

    $ mongod -f /usr/data/db1/mongod.conf
    $ mongod -f /usr/data/db2/mongod.conf
    $ mongod -f /usr/data/db3/mongod.conf
    
  4. プライマリインスタンスに接続

    $ mongosh localhost:28017
    
  5. レプリカセットのメンバー追加(プライマリー→セカンダリー)

    $ rs.initiate({ _id: "rs0", members: [{ _id: 0, host: "localhost:28017"},{_id: 1, host: "localhost:28018"},{_id: 2,host:"localhost:28019"}]})
    
  6. メンバーの追加状況確認

    $ rs.status()
    

systemdによる自動起動

  1. 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
    
  2. 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
    
  3. systemdにユニットファイルを追加・更新したことを通知する

     $ systemctl daemon-reload
    
  4. unitsがserviceとして認識されたか確認

     $ systemctl list-unit-files --type=service | grep mongo
    
  5. サービス起動、自動起動設定ON

     $ systemctl start mongod-replicasets
     $ systemctl enable mongod-replicasets
     $ systemctl status mongod-replicasets
    
  6. EC2再起動 or mongod のプロセスをすべてkill

     EC2再起動
     or
     $ ps aux | grep mongod
     $ kill <プロセスID>
    
  7. 再起動後動作確認

     $ ps aux | grep mongod
     $ mongo localhost:28017
    

参考資料

ローカル環境でMongoDBのReplicationを構成する方法
Systemdを使ってさくっと自作コマンドをサービス化してみる

おわりに・まとめ

mongodbレプリカセットについて構築手順をまとめてみました。
他にも構築中にあったエラーの解消やアクセス制御の方法などを記事にできればと思います

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?