[user@俺 ~]$ reboot

何年か新しいIT技術と向き合っていないうちに、浦島太郎になってしまった...そんなインフラ技術者の日記

mongodb を Centos7へインストールする メモ

少しも新しくない情報です...mongodb コミュニティーエディションのインストールをやってみました。基本的には、mongdb org で公開されているドキュメントに従って導入すればいいのですが、細かい点で補足が必要です。

docs.mongodb.org

導入環境

  • OS:CentOS7.2 ( 作業した日の最新がそうだったというだけ)
  • CPU: VirtualBox で 1CPU を割り当て
  • RAM: 4096MB
  • HDD: 16GB
  • mongoDB: Ver.3.2 Shell Edition ( これも作業した日の最新がそうだったというだけ)
特に設計をしたわけでなく、取り敢えず動かしてみようというノリなので、これでいい
のか悪いのか、わかりません。また、公式のシステム要件としても、最低1物理コア、
メモリは多くすれば、ページフォルトを解消できる。HDDは(想定だけど)扱うデータ
の物理設計によるでしょ。ということで、明確にああしろ、こうしろという記載はない
ようです。マニュアルを全部読んだら書いてあるのかもしれませんが...

また、今回はとりあえず、シングル構成(非冗長構成)でやっています。

導入&セットアップの流れ

  • centos 7 コアでインストール
  • yum update
  • mongodb インストール
  • centos のパラメータ調整
  • mongodb の起動とアクセス

CentOS7 コアでインストール

CentOS7は、everything iso を使用して、ほぼデフォルトのインストールとしました。あまり重要じゃないので、さらっと書きます。また、後々必要なパッケージがあった場合はyum でインストールする作戦です。

導入パラメータの変更カ所

  • NIC を起動時に自動的に有効にする
  • ntp サーバを参照する(参照先はデフォルト)
  • タイムゾーンをasia/tokyo
  • ディスク構成で、swap をメモリ量と同値に変更

それ以外は、デフォルトです。下記が、インストール後のanaconda-ks.cfg

#version=RHEL7
# System authorization information
auth --enableshadow --passalgo=sha512

# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_US.UTF-8

# Network information
network  --bootproto=dhcp --device=enp0s3 --ipv6=auto --activate
network  --hostname=mongodb01
# Root password
rootpw --iscrypted 
# System services
services --enabled="chronyd"
# System timezone
timezone Asia/Tokyo --isUtc --ntpservers=0.centos.pool.ntp.org,1.centos.pool.ntp.org,2.centos.pool.ntp.org,3.centos.pool.ntp.org
user --groups=wheel --name=user01 --password=  --iscrypted --gecos="user01"
# System bootloader configuration
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
# Partition clearing information
clearpart --none --initlabel 
# Disk partitioning information
part /boot --fstype="xfs" --ondisk=sda --sizmongodb の起動とアクセスe=500
part pv.124 --fstype="lvmpv" --ondisk=sda --size=15871
volgroup centos_mongodb01 --pesize=4096 pv.124
logvol swap  --fstype="swap" --size=4092 --name=swap --vgname=centos_mongodb01
logvol /  --fstype="xfs" --size=11776 --name=root --vgname=centos_mongodb01

%packages
@core
chrony
kexec-tools

%end

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end

yum update

これは、いつもやる事ですが、とりあえずOSをインストmongodb の起動とアクセスールしたら、パッケージを最新化します。

# yum -y update

mongdb インストール

公開されているドキュメントに従い、インストールを行います。

公開鍵のインポート

ドキュメントどおりmongodb の起動とアクセス

# rpm --import https://www.mongodb.org/static/pgp/server-3.2.asc

yum リポジトリ定義ファイルの作成

ドキュメントどおり"/etc/yum.repos.d/mongodb-org-3.2.repo"を作成。特に、バージョンを明示しないので、そのままとしました。

[mongodb-org-3.2]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.2/x86_64/
gpgcheck=1
enabled=1

mongoDB のインストール

ドキュメントどおり。

# yum install -y mongodb-org

SELinux の設定

SELinux をdisable や、permissive にするのは、CentOS7.0 以降、避ける事にしているので、SELinux が有効な状態ですすめる。このために、mongodbが通信ポートでリッスンできるように設定する必要があります。 コアパッケージでインストールした状態だと、semanage関連パッケージがインストールされていないので、まずは、"policycoreutils-python"をインストールします。

# yum install policycoreutils-python

semanageコマンドが利用できるようになったら、下記コマンドで、mongoDBが27017 port を利用できるようにします。これ、任意のポートに変える場合は、そのポートを指定してコマンドを実行します。

semanage port -a -t mongod_port_t -p tcp 27017

あと、リモートから通信できるようにするためには、firewalld も設定しなくてはならないですが、デフォルトだと、127.0.0.1:27017 でリッスンするようなので、一旦、放置します。

自動起動の設定

マニュアルを読み進めていくと、mongodb の起動、停止、リスタートと続きます。service コマンドを使用した例が掲載されていますが、centos7 なので、systemctl で各操作も可能です。

  • 起動
# systemctl start mongd
  • 停止
# systemctl stop mongd
  • リスタート
# systemctl restart mongd
  • 状態確認
# systemctl status mongd

ドキュメントにあるとおり、service コマンドでも各種操作は行えます。

# リスタートの実行例。結局、systemctl 経由で ってメッセージがでてますね...
[root@mongodb01 ~]# service mongod restart
Restarting mongod (via systemctl):                         [  OK  ]
[root@mongodb01 ~]# 
  • 自動起動設定 本題の自動起動設定ですが、systemctl でenable を行おうとすると、エラーがでます。なので、ここは、init の仕組みを使うのだと判断。従来の、chkconfig を使って設定します。
# chkconfig mongod on
# NG
[root@mongodb01 ~]# systemctl enable mongod
mongod.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mongod on
[root@mongodb01 ~]# 

# OK
[root@mongodb01 ~]#  chkconfig mongod on
[root@mongodb01 ~]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

mongod          0:off   1:off   2:on    3:on    4:on    5:on    6:off
netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@mongodb01 ~]# 

centos のパラメータ調整

CentOSの各種設定がデフォルトのままだと、mongoコマンドを実行した時に、警告メッセージが表示されます。なお、環境の状態/前提によってメッセージが違うのかもしれないので、参考情報としてください。また、下記以外の警告メッセージが表示される場合は、個別に対応が必要となると思います。

# 私の環境で表示されたメッセージ
[root@mongodb01 ~]# mongo
MongoDB shell version: 3.2.4
connecting to: test
Server has startup warnings: 
2016-04-03T21:27:52.527+0900 I CONTROL  [initandlisten] 
2016-04-03T21:27:52.527+0900 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-04-03T21:27:52.527+0900 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-04-03T21:27:52.527+0900 I CONTROL  [initandlisten] 
2016-04-03T21:27:52.527+0900 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-04-03T21:27:52.527+0900 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-04-03T21:27:52.527+0900 I CONTROL  [initandlisten] 
2016-04-03T21:27:52.527+0900 I CONTROL  [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 1024 processes, 64000 files. Number of processes should be at least 32000 : 0.5 
times number of files.
2016-04-03T21:27:52.527+0900 I CONTROL  [initandlisten] 
> q
2016-04-03T21:28:15.700+0900 E QUERY    [thread1] ReferenceError: q is not defined :
@(shell):1:1

> 
  • WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. ...
  • WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. ...

上記2つは、transparent hugepage に関連する設定で、いずれも、never ( default = always ) に設定するのがお勧めのようです。なぜそうなのか...は、改めて調べてみようと思います。設定の仕方は、色々あるようですが、私は、hmitrさんの記事を拝見し、そのままつかわせていただきました。

qiita.com

/etc/rc.local に、下記を追記(互換性配慮、すばらしい!)

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  

尚、一点注意が必要で、centos7では、rc.localのデフォルトパーミッションが644になっています。なので、rc.localを使用して設定を行う場合、OS起動時に設定を有効とするためには、/etc/rc.d/rc.local に実行パーミッションを設定します。

# chmod -x /etc/rc.d/rc.local
  • WARNING: soft rlimits too low. こちらは、ファイルのオープン可能数が小さすぎるという事のようです。公式ドキュメントでは、/etc/security/limits.d/99-mongodb-nproc.conf を作成して設定せよとあるので、下記の様にしました。

UNIX ulimit Settings — MongoDB Manual 3.2

[root@mongodb01 ~]# cat /etc/security/limits.d/99-mongodb-nproc.conf 
*          soft    nproc     1024
root       soft    nproc     unlimited
mongod       soft    nproc     unlimited

*          soft    nofile    64000
*          hard    nofile    64000
[root@mongodb01 ~]# 

尚、mongdb のプロセスオーナーは、mongod のようなので、root,mongod 以外のアカウントには、nproc = 1024の制限を掛けたまま、unlimited とするようにしました。

[root@mongodb01 ~]# ss -lntp
State       Recv-Q Send-Q                                               Local Address:Port                                                              Peer Address:Port              
LISTEN      0      128                                                      127.0.0.1:27017                                                                        *:*                   users:(("mongod",pid=2512,fd=6))

CentOS の各種設定を有効化させるため、テストも兼ねてOSを再起動します。

# systemctl reboot

mongodb の起動とアクセス

OSが起動してきたら、mongdは自動的に起動されているので、mongoコマンドで接続してみます。

[user01@mongodb01 ~]$ mongo
MongoDB shell version: 3.2.4
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
> 

ここまでの作業で、mongodb のCentosへのインストールとセットアップ、起動するまでが完了しました。mongodb の利用については、何か面白い実験やプロトタイプができたら、改めて紹介したいと思います。特に、性能特性ですかねぇ。

それでわ。