MongoDB セットアップ手順

シングル構成の MongoDB セットアップ手順をメモとして残します。

検証環境

インストー

リポジトリ情報の作成

標準リポジトリには含まれていないため、新しく作成します。
上手くインストールできない場合は gpgcheck=0 にして gpgkey=… の行を除いてください。

# 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

パッケージインストー

yum でパッケージをインストールします。

# yum -y install mongodb-org

バージョン 3.4 がインストールされたことを確認します。

# mongo --version
MongoDB shell version v3.4.4
git version: 888390515874a9debd1b6c5d36559ca86b44babd
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
    distmod: rhel70
    distarch: x86_64
    target_arch: x86_64

サービスの起動と自動起動の設定を有効にします。

# systemctl start mongod
# systemctl enable mongod

設定変更

3.x 系は設定ファイルを YAML で記述します。
ローカルホスト以外からの接続を許可する設定を有効にします。

# vi /etc/mongod.conf

net:
  port: 27017
  bindIp: 0.0.0.0
  http:
    enabled: true

上記の設定の再読み込みをします。

# systemctl restart mongod

ユーザまわりの設定

ユーザ追加

mongo コマンドで対話型シェル起動し、admin ユーザを作成します。

# mongo --host localhost --port 27017
> use admin
> db.createUser(
    {
      user: "admin",
      pwd: "password",
      roles: [ { role: "root", db: "admin" } ]
    }
  )

test-user ユーザを作成します。
role: "readOnly" にすると権限を読み込み限定に設定できます。

> use test-db
> db.createUser(
    {
      user: "test-user",
      pwd: "password",
      roles: [ { role: "readWrite", db: "test-db" } ]
    }
  )

作成したユーザを確認します。

> use admin
> db.system.users.find()

認証の有効化

ユーザ認証機能を有効にします。

# vi /etc/mongod.conf

security:
  authorization: enabled

設定を再読み込みし、ユーザ認証が有効化されたことを確認します。

# systemctl restart mongod
# mongo --host localhost --port 27017
> use admin
> db.system.users.find()

認証を行わない状態でユーザ一覧を出そうとするとエラーが返ってきます。

> db.auth("admin","password")
> db.system.users.find()

作成した admin と test-user が表示されていれば認証成功です。

ユーザの削除

DB 名を指定し、以下の remove() コマンドを実行します。

> use test-db
> db.dropUser("test-user")

データベースの操作

コレクション作成

test-db に test というコレクションを作成します。

> use test-db
> db.auth("test-user","password")
> db.createCollection("test")
> show collections

ドキュメント追加

適当な値を test コレクションに追加します。

> db.test.insert( { "foo" : "bar" } )
> db.test.find( { "foo" : "bar" } )

ドキュメントの件数カウント

コレクションのドキュメント数は count() で件数を表示できます。
find() と同様に括弧内にクエリを書くことで条件を絞ることも可能です。

> db.test.count()

削除系コマンド

ドキュメントを削除します。
括弧内に指定が無いとコレクション内のドキュメントが全件消去されます。

> db.test.remove( { "foo": "bar" } )

コレクションを削除します。

> db.test.drop()

データベース自体を削除します。

> use test-db
> db.dropDatabase()

ダンプとリストア

ダンプ

Bashmongodump コマンドでカレントディレクトリに dump を出力します。

# mongodump --db test-db --collection test --authenticationDatabase test-db --username test-user --password password --out ./dump

# ls ./dump/test-db/
test.bson  test.metadata.json

–db を指定しないと全てのデータベースを対象に BSON からリストアされます。

リストア

復元前に test コレクションを削除します。

> use test-db
> db.auth("test-user","password")
1
> db.test.drop()

mongodump と同様の指定方法で mongorestore します。

# mongorestore --db test-db --collection test --authenticationDatabase test-db --username test-user --password password ./dump/test-db/test.bson

消したコレクション・ドキュメントが復元されていればリストア完了です。

# mongo --host localhost --port 27017
> use test-db
> db.auth("test-user", "password)
> db.test.count()
1

参考サイト

chrony で NTP サーバを構築する

chrony は NTP のクライアント/サーバのミドルウェアです。
時刻を正確にするために導入します。

CentOS 7 からは ntpd に代わって chrony が標準となっています。

検証環境

  • CentOS 7
    • server01 (192.168.33.11)
    • server02 (192.168.33.12)
  • chrony 2.1.1

今回は2台の CentOS を使って検証します。
server01 をサーバ、server02 をクライアントとして用意します。

タイムゾーンの変更

Vagrant で作ったあとに時刻を確認したらイギリス夏時間だったので、
タイムゾーンも日本に設定します。 ※ 現在夜の23時台くらい

# timedatectl set-timezone Asia/Tokyo

# timedatectl status
      Local time: Mon 2017-04-17 23:10:25 JST
  Universal time: Mon 2017-04-17 14:10:25 UTC
        RTC time: Mon 2017-04-17 23:10:25
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: yes
      DST active: n/a

chrony インストールと起動

yum で chrony パッケージをインストールします。

# yum -y install chrony

パッケージ名とは異なり、デーモンの名前は chronyd です。

# systemctl start chronyd
# systemctl status chronyd

サーバ側の設定

server01 のマシンで操作します。

NICT と同期

同期する時刻サーバの設定を追加します。

[root@server01 ~]# vi /etc/chrony.conf

server の部分を NICT の時刻サーバと同期する設定に変更します。
また、後ほど設定する server02 がクライアントとして接続するため、
192.168.0.0 のネットワークも許可します。

server ntp.nict.jp iburst

allow 192.168/16

同期の確認

chronyd を再起動し、同期を確認します。

[root@server01 ~]# systemctl restart chronyd
[root@server01 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp-a2.nict.go.jp             1   6    77    42   -148us[-2816us] +/- 3731us

左の項目 MS^* が表示されていればサーバと同期が出来ている状態です。

クライアント側の設定

server02 のマシンで操作します。

server01 と同期

今度は NICT ではなく先ほどの server01 をサーバとして同期します。

[root@server02 ~]# vi /etc/chrony.conf
server 192.168.33.11 iburst

allow 192.168/16

同期の確認

chronyd を再起動し、server01 との同期を確認します。

[root@server02 ~]# systemctl restart chronyd
[root@server02 ~]# chronyc sources
210 Number of sources = 1
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 192.168.33.11                 2   6   377    37   +396us[ +480us] +/- 3930us

server01 との同期が確認できました。

参考サイト

Vagrant で CentOS の環境構築

Vagrant仮想マシンCUI で簡単に構築できるツールです。

設定ファイルに基いて仮想マシンを自動的に作成してくれるため、
開発環境の構築や破棄が容易に行えるという利点があります。

検証環境

VirtualBoxVMware などの仮想化ソフトウェアが別途必要です。
標準で VirtualBox仮想マシンをサポートしているので、
インストール済みの場合はすぐに使い始めることができます。

用語

Provider : VirtualBoxVMWare などの仮想化ソフト
Box : テンプレートとなる OS のイメージファイル
Vagrantfile : 仮想マシンの構成情報が書かれた設定ファイル

インストー

ブラウザから以下の公式サイトにアクセスし、
使用している OS に合わせてパッケージをダウンロードします。

インストールが完了すると vagrant コマンドが使えるようになります。

$ vagrant --version
Vagrant 1.9.3

Box の追加

以下のサイトから CentOS 7.2 の Box を探します。

vagrant box add <任意のボックス名> <ボックスのURL> で追加します。
Atlas から追加する場合は URL の代わりにボックス名指定で追加できます。

今回は Vagrantbox.ex から box を追加します。

$ vagrant box add centos7 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box

追加した Box イメージを確認します。

$ vagrant box list
centos7 (virtualbox, 0)

ローカル環境に centos7 という名前で Box が追加されました。

仮想マシンの立ち上げ

初期化

仮想マシン用のディレクトリを作成し、移動します。

$ mkdir ./server01 && cd $_

先ほど追加した Box を init コマンドで適用します。

$ vagrant init centos7

$ ls
Vagrantfile

Vagrantfile が作成されました。

1つの仮想マシンに対して1つの Vagrantfile が存在します。
別のマシンを作成したい場合には別途ディレクトリの作成が必要です。

Vagrantfile 編集

そのままでも起動できますが、起動前にいくつか設定を書き換えておきます。
今回は以下の2つの設定を追加します。

  • プライベートネットワークの利用と IP アドレス固定
  • ホスト側の ../data を ゲスト側の /vagrant_data でマウント
$ vi ./Vagrantfile

Vagrant.configure("2") do |config|
  config.vm.box = "centos7"
  config.vm.network "private_network", ip: "192.168.33.11"
  config.vm.synced_folder "../data", "/vagrant_data"
end

ホスト側でマウントされるディレクトリを作成しておきます。

$ mkdir ./../data

Vagrantfile の設定を書き終えたら仮想マシンを起動します。

$ vagrant up

初回の起動には少し時間がかかりますが、数分で仮想マシンが作成されます。

仮想マシンへの接続

起動が完了したら SSH コマンドで接続します。
Windows の場合は Tera Term などから 127.0.0.1:2222 で接続が可能です。

$ vagrant ssh

[vagrant@localhost ~]$

設定の確認

仮想マシンの OS とアーキテクチャを確認します。

[vagrant@server01 ~]$ cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core) 

[vagrant@server01 ~]$ arch
x86_64

先ほど設定ファイルに記述した2点についても確認します。

[vagrant@localhost ~]$ ip addr
[vagrant@localhost ~]$ less /etc/mtab

ホスト名変更

ついでにホスト名も書き換えておきます。

[vagrant@localhost ~]$ sudo su -
[root@localhost ~]# hostnamectl set-hostname server01
[root@localhost ~]# cat /etc/hostname
server01
[root@localhost ~]# reboot

[vagrant@server01 ~]$

仮想マシンの削除

ホスト OS から destroy コマンドで削除できます。

$ vagrant destroy

参考サイト

Hello world!

はてなブログはじめました。
メモ帳として使っていきます。