CentOS7とmongodb3.4でレプリケーション構築(構築編)

こんにちは、takayukiです。
休日は自宅の仮想サーバを使ってスキルアップに励んでいます。 最近のマイブームはAzureと C#でのプログラミングの習得です。インフラの上に載せるものを作りたいです。
今回は、CentOS7とmongodb3.4でレプリケーション構築をしてみました。

構築手順編

なぜこの手順を作ったか

CentOS7とmongodbでレプリケーション構築する時にいろいろとうまくいかなった点がありましたので手順としてまとめてみました。

構成

Master,Slave,Arbiterの3台でのレプリケーション構成にします。

構築時のポイント
  1. WEBで見つけた方法だとWarningが解消されなかったのでサービス用スクリプトを準備する必要がありました。

  2. 認証用のkeyfileを全てのマシンで同じものを配置してやる必要がありました。

  3. レプリケーション用のコマンドを受け付けてくれないので管理用ユーザをレプリケーションを張る前に作成してやる必要がありました。

1 mongodbの構築

1-1 mongodbのレポジトリ追加

CentOS7ではデフォルドのリポジトリのみですとmongodbがダウンロードできないので
mongodb用のリポジトリを追加します。

# vi /etc/yum.repos.d/mongodb-org-3.4.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

1-2 mongodbのインストール

mongodbのインストール
# yum install -y mongodb-org

デフォルトコンフィグファイルの退避
# mv /etc/mongod.conf /etc/mongod.conf_org

1-3 keyfileの作成

Keyfileの作成
# mkdir -p /usr/local/mongodb/conf

# openssl rand -base64 741 > /usr/local/mongodb/conf/mongodb-keyfile

構築時のポイント2
ここで作成したkeyfileをレプリケーション対象の全台に配布して下さい。

パーミッションの設定
# chmod 600 /usr/local/mongodb/conf/mongodb-keyfile

# chown -R mongod.mongod /usr/local/mongodb/conf/mongodb-keyfile


1-4 THP無効化スクリプトの作成1


構築時のポイント1
# vi /etc/init.d/disable-transparent-hugepages.sh

#!/bin/bash

    if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
      echo never > /sys/kernel/mm/transparent_hugepage/enabled
    fi
    if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
      echo never > /sys/kernel/mm/transparent_hugepage/defrag
    fi

# chmod 755 /etc/init.d/disable-transparent-hugepages.sh

# /etc/init.d/disable-transparent-hugepages.sh


1-5 THP無効化スクリプトの作成2


# vi /etc/systemd/system/disable-transparent-hugepages.service


[Unit]
Description = Disable Linux transparent huge pages, to improve

[Service]
ExecStart = /etc/init.d/disable-transparent-hugepages.sh
Restart = always
Type = simple

[Install]
WantedBy = multi-user.target

# systemctl enable disable-transparent-hugepages


1-6 THP無効化の確認


THP無効化の確認
# cat /sys/kernel/mm/transparent_hugepage/enabled

always madvise [never]
# cat /sys/kernel/mm/transparent_hugepage/defrag

always madvise [never]

never に [] がついていれば成功です。

1-7 mongodbの設定


# vi /etc/mongod.conf

変更箇所
net:
# bindIp: 127.0.0.1 #     →コメントアウト
bindIp: 0.0.0.0 #     →全てのインターフェースでリッスン。
security:      →行頭の#を外して下さい。
 keyFile: /usr/local/mongodb/conf/mongodb-keyfile   →keyFIleの指定
 authorization: “enabled“      →認証を有効にします。

1-8 mongodbの起動と自動起動設定


mongodbの起動
# systemctl start mongod


mongodbの自動起動設定
# systemctl start mongod


1-9 管理ユーザの作成


構築時のポイント3
ユーザ作成はレプリケーション設定前にプライマリにすべき1台でのみで先に実施して下さい。
monogodbにログイン
# mongo


adminデータベースに接続
> use admin


管理ユーザの作成
> db.createUser({user:"rootAdmin",pwd:“password",roles:[{role:"root",db:"admin"}]})

ユーザ名:rootAdmin パスワード:password  ロール:root で作成した例です。
mongodbからログオフ
> exit


1-10 管理ユーザでのログイン確認


monogodbにログイン
# mongo


adminデータベースに接続
> use admin


管理ユーザでログイン
> db.auth("rootAdmin",“password")

ログインに成功すると 1 と返ってきます。

1-11 レプリケーションの設定1


# vi /etc/mongod.conf


変更箇所
replication:     →行頭の#を外します。
 replSetName: “rs1”     →この例では rs1で設定しています。

3台ともで設定して下さい。
3台でサービスのリスタート実施
# systemctl restart mongod


1-12 レプリケーションの設定2


Monogodbにログイン
# mongo


adminデータベースに接続
> use admin


管理ユーザでログイン
> db.auth("rootAdmin",“password")


1-13 レプリケーションの設定3


レプリケーションの設定
> config = { _id:"rs1", 

    members:[

      { _id:0, host:"192.168.0.45:27017", arbiterOnly:true  },

      { _id:1, host:"192.168.0.46:27017" }, 

      { _id:2, host:"192.168.0.44:27017" }

    ]

  }


設定の反映
> rs.initiate( config )


1-14 レプリケーションのStatus確認


レプリケーションのステータス確認
 >  rs.status()


それぞれのホストが
PRIMARY
SECONDARY
ARBITER
となっていれば成功です。

ここまででmongodbでのレプリケーション構築手順
は終了です。

2. 次回予告


NOSQL用のベンチマークツールYCSBを用いたmongodbのパフォーマンス検証レポートを掲載します。

1.YCSBのインストール手順
2.YCSBを用いたパフォーマンス検証(storageEngine:WiredTigerとの比較)



コメント