前回までのあらすじ
みなさん、こんにちは。新人若井さんが出来先輩の助けを借りながら、アマゾン ウェブ サービス(以下AWS)上でOracle DBを作成しようと言うこの企画。前回までにOracleをインストールする為の要件に合わせて、AWS上のEC2の設定作業を行いました。今回はOracleのインストールする為のOSの準備を行っていきたいと思います。
若井 あらた (わかいあらた)
新人エンジニアで、今回データベース課に配属となった。本物語の主人公。
出来 益代 (でき ますよ)
中堅エンジニアで、データベース課に所属する。年齢は不詳。仕事熱心で、比較的後輩の面倒見もよいお姉さまタイプ。※ この物語はフィクションであり、登場する団体・人物などの名称はすべて架空のものです
OSユーザー/グループの作成
出来 「ハードウェアとソフトウェアのインストール要件の確認が終わったわね。次はOracle Databaseのインストールに必要なOSユーザー/グループを作成しましょう。今回の構成では、ざっとOracle Databaseのインストール必要なユーザーはこんなところかしら。」
-
Oracleインベントリ・グループ(oinstall)
→Oracleソフトウェアを所有するグループ -
OSDBAグループ(dba)
→データベース管理権限(SYSDBA)を持つグループ -
OSOPERグループ(oper)
→OSDBAグループよりも限られた権限のみを持つグループ。 -
Oracleソフトウェアユーザー(oracle)
→Oracleソフトウェア所有ユーザー
出来「今回の構成だと、こんなユーザーが必要ね。グループの作成には『groupadd』でユーザーの作成は『useradd』コマンドで行うわ。グループやユーザーに割り振る『グループID』、『ユーザーID』も事前に決めておかないといけないわよ。」
若井「Oracle DatabaseをインストールするのにいろんなOSユーザーやグループが必要なんですね。」
出来「そうね。今は、検証環境だから、Oracleデータベースを作成するのに必要なユーザーのみ作ってるけど、商用でのOracleデータベースを作成する時には、要件に応じて、様々なユーザーを作るわ。でも、今回作成するグループ、ユーザーに相当するものは、Oracleデータベースを作成するのなら、ほぼすべての環境で作成する事になると思うから、きっちりと復習と勉強をしておいてね。」
若井「なるほど。わかりました!さっそくOSユーザーとグループ作成してみましょう。」
--グループの作成
[root@ip-172-31-24-192 ~]# /usr/sbin/groupadd -g 1001 oinstall
[root@ip-172-31-24-192 ~]# /usr/sbin/groupadd -g 1002 dba
[root@ip-172-31-24-192 ~]# /usr/sbin/groupadd -g 1003 oper
--作成したグループの確認
[root@ip-172-31-24-192 ~]# grep oinstall /etc/group
oinstall:x:1001:
[root@ip-172-31-24-192 ~]# grep dba /etc/group
dba:x:1002:
[root@ip-172-31-24-192 ~]# grep oper /etc/group
oper:x:1003:
--OSユーザーの作成
[root@ip-172-31-24-192 ~]# /usr/sbin/useradd -u 1000 -g oinstall -G dba,oper oracle
--作成したOSユーザーの確認
[root@ip-172-31-24-192 ~]# grep oracle /etc/passwd
oracle:x:1000:1001::/home/oracle:/bin/bash
出来「oracleユーザーのパスワードも変更しておきましょう。」
[root@ip-172-31-24-192 ~]# /usr/bin/passwd oracle
Changing password for user oracle.
New password: ← パスワードを入力
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple ← 入力したパスワードが簡単すぎるため警告
Retype new password: ← パスワードの再入力
passwd: all authentication tokens updated successfully.
出来「若井君、簡単なパスワードにしたわね。」
若井「ユーザー名と同じパスワードにしたんですけど。」
出来「相変わらず、安易ね。」
若井「すいません。」
カーネルパラメーター変更
出来「次はカーネルパラメーターの変更よ。」
若井「カーネルパラメーターですか。」
出来「そう。カーネルパラメーター。カーネルパラメーターを適切に変更する事によって、カーネルの個々の機能やドライバの、それぞれ振る舞いを変更できるようになる。Oracle Databaseをインストールする時も、Oracle Databaseに合わせたカーネルパラメーターの設定が必要よ。細かい意味はさておき、設定に必要な項目はこんな感じね。」
kernel.shmall = (物理メモリ / pagesize )
⇒システム全体の共有メモリの最大サイズをページ単位で指定。
kernel.shmmax = (物理メモリの1/2)
⇒1つの共有メモリセグメントの最大サイズを指定。単位はバイト。
kernel.shmmni = 4096
⇒共有メモリセグメントの最大個数を指定。
kernel.sem = 250 32000 100 128 ※左からsemmsl semmns semopm semmniの値
⇒semmsl:セマフォ集合体の最大サイズを指定。
⇒semmns:システム全体のセマフォの最大数を指定。
⇒semopem: semop呼び出しごとの最大命令数を指定。
⇒semmni:セマフォ集合体の個数を指定。
fs.file-max = (512 × processes)
⇒ファイルハンドラの最大数を指定。
fs.aio-max-nr = 104857
⇒システム全体の非同期I/O数の上限数を指定。
net.ipv4.ip_local_port_range = 9000 65500
⇒TCP/IPの送信時に使用するポートの範囲を指定。
net.core.rmem_default = 262144
⇒受信用ウィンドウ・サイズのデフォルト値を指定。
net.core.rmem_max = 4194304
⇒受信用ウィンドウ・サイズの最大値を指定。
net.core.wmem_default = 262144
⇒送信用ウィンドウ・サイズのデフォルト値を指定。
net.core.wmem_max = 1048576
⇒送信用ウィンドウ・サイズの最大値を指定。
出来「カーネルパラメーターの変更は、『/etc/sysctl.conf』の編集をした後に、『sysctl -p』で値の反映をさせるのよ。」
若井「わかりました。えーと、ページサイズは…」
出来「あー、ページサイズは『getconf PAGE_SIZE』で確認できわ。」
[root@ip-172-31-24-192 ~]# getconf PAGE_SIZE
4096
若井「『4096』ですね。メモリのサイズをもう一回確認しますね。」
[root@ip-172-31-24-192 ~]# grep MemTotal /proc/meminfo
MemTotal: 3849280 kB
若井「と言う事は、kernel.shmall = (3849280×1024)/4096 = 962320ですね。あと、kernel.shmmaxはkernel.shmmax=(3849280×1024)/2=1970831360となりますね。Processesって何ですか?」
出来「これはOracle Databaseで設定するパラメータよ。データベースに同時に接続できるOSユーザー・プロセスの最大数のことよ。ここでは一旦『512』で設定しましょう。」
若井「わかりました。fs.file-max = 512 × 512 = 262144ですね。」
出来「そうね。このカーネルパラメーターの値は、データベースの構築後に、メモリを追加した時、『processes』の値を変更した時も変更が必要だから、覚えておいてね。」
若井「わかりました。」
[root@ip-172-31-24-192 ~]# vi /etc/sysctl.conf
[root@ip-172-31-24-192 ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 962320
kernel.shmall = 1970831360
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 262144
fs.aio-max-nr = 104857
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
[root@ip-172-31-24-192 ~]#
出来「設定出来たら確認をお願いね。」
若井「了解です。」
[root@ip-172-31-24-192 ~]# sysctl -a | grep kernel.shmall
kernel.shmall = 1970831360
[root@ip-172-31-24-192 ~]# sysctl -a | grep kernel.shmmax
kernel.shmmax = 962320
[root@ip-172-31-24-192 ~]# sysctl -a | grep kernel.shmmni
kernel.shmmni = 4096
[root@ip-172-31-24-192 ~]# sysctl -a | grep kernel.sem
kernel.sem = 250 32000 100 128
[root@ip-172-31-24-192 ~]# sysctl -a | grep fs.file-max
fs.file-max = 262144
[root@ip-172-31-24-192 ~]# sysctl -a | grep fs.aio-max-nr
fs.aio-max-nr = 104857
[root@ip-172-31-24-192 ~]# sysctl -a | grep net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 9000 65500
[root@ip-172-31-24-192 ~]# sysctl -a | grep net.core.rmem_default
net.core.rmem_default = 262144
[root@ip-172-31-24-192 ~]# sysctl -a | grep net.core.rmem_max
net.core.rmem_max = 4194304
[root@ip-172-31-24-192 ~]# sysctl -a | grep net.core.wmem_default
net.core.wmem_default = 262144
[root@ip-172-31-24-192 ~]# sysctl -a | grep net.core.wmem_max
net.core.wmem_max = 1048576
[root@ip-172-31-24-192 ~]#
ユーザーシェルの設定
出来「さっきはカーネルパラメーターの設定変更をしたけど、ユーザーあたりの上限値も変更する必要があるわ。まず最初は『/etc/security/limits.conf』の設定。一時的な変更であれば『ulimit』コマンドで設定変更は可能だけど、設定をログイン時に常に有効にする為には、『/etc/security/limits.conf』に設定変更が必要よ。」
若井「なるほど、さっそく設定変更してみます。」
出来「うん。こんな感じでファイルに追記してね。」
oracle soft npproc 2047
oracle hard npproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
[root@ip-172-31-24-192 ~]# vi /etc/security/limits.conf
[root@ip-172-31-24-192 ~]#
出来「あと、OSにログインする時に、最初に、『/etc/profile』って言う、シェルを読み込むんだけど、ここにも設定変更が必要なのよ。こんな感じで。」
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
若井「わかりました」
[root@ip-172-31-24-192 ~]# vi /etc/profile
[root@ip-172-31-24-192 ~]#
出来「最後に、『/etc/pam.d/login』の設定変更よ。OSの認証を一元管理する仕組みに、PAM(Pluggable Authentication Modules)って言うのがあるんだけど、この設定ファイルを変更する必要があるの。こんな感じで追記して。」
session required pam_limits.so
若井「はい。変更します。」
[root@ip-172-31-24-192 ~]# vi /etc/pam.d/login
[root@ip-172-31-24-192 ~]#
出来「これで、Oracleユーザーに対するシェル制限の設定は終わり。ここら辺の内容は、Oracleのマニュアルにも記載があるから、後でまた目を通しておいてね。」
若井「了解しました。宿題ってことですよね。」
出来「まぁそんなところかしら。でも、データベースの完成までもう少しよ。がんばりましょう。」
若井「もう少しですか。がんばります。お!雪だ!」
出来「さむそー。」
若井「はい。。。」
今回はここまで!いよいよ、終盤戦に突入してきました、この企画ですが、最後まで、ぜひ読んでくださいね!!
それでは! 次回をおたのしみに!!
執筆者紹介
山口 正寛(YAMAGUCHI Masahiro)
株式会社システムサポート 東京支社インフラソリューション事業部所属。
同社が得意とするOracleデータベースのエンジニアで、大規模DWHのDB管理者、DBコンサルタントなどを経験。また、同社の無料セミナーの企画にも携わる。
今回、機器がなくても気軽に環境を構築し検証したいというかた向けに AWS上でOracleデータベースを構築することをストーリー調で記載する。 尚、同社はAWSを用いたクラウド工房 powered by AWSというプロダクトがあり、産学官連携でも活用している。