当記事はケーススタディの連載となっています。目次は【こちら】です。
最新のソースコードは【GitHub】で公開中です。
サーバの責務はこちらで確認ください。
##1.NFS設定概要
NFSサーバとクライアントをインストールする。
今回は必要な資材(yumではインストールしないtomcat、jenkis、selenium等)を一旦「adminserv01」にコピーし、「dbserv01」や「apserv01」は「adminserv01」をマウントすることによりファイルを取得する形式にする。
##2.playbookファイルの相関
##3.playbook(site.yml)
${ANSIBLE_HOME}/site.yml
メインとなるplaybook(site.yml)参照
##4.NFSサーバ設定のplaybook(/operations/0081_nfs.yml)
${ANSIBLE_HOME}/operations/0081_nfs.yml
playbook中のコメントの補足に関しては「6.補足説明」を参照。
# ===================
# NFSサーバとNFSクライアント設定(nfs.yml)
# ===================
- hosts: adminserv01
sudo: no
remote_user: root
vars_files:
- ../vars/enviroment.yml
tasks:
# ===================
# NFS用設定ファイルを指定場所(/etc/exports)に配置する
# exportsの#EXP_NETWORK文字列を置換する(環境依存部分)
# ===================
- name: NFS設定ファイルはexportsを指定場所に配置(ファイルは常に再配置)
shell: cp /var/opt/data/nfs/nfs/settings/exports /etc/exports #【4.A:NFSサーバへの許可をするネットワークを設定を記述したexportsファイルの配置】
- name: "許可するネットワークセグメントを置換する(#EXP_NETWORKを指定値に置換する)"
replace: dest=/etc/exports regexp="#EXP_NETWORK" replace="{{nfs.exportnetwork}}" #【4.B:ネットワークは環境依存する為(本番と開発では違う)外部変数化した文字列で置換】
- name: "rcpbindとnfs-serverをRestartする"
service: name=rpcbind state=restarted enabled=yes #【4.C:NFSサーバとrcpbindサービスを起動】
- service: name=nfs-server state=restarted enabled=yes
- hosts: ap_db
sudo: no
remote_user: root
tasks:
# ========================================================
# マウント先が削除されて参照ができなくなってるいる状態
# ========================================================
- shell: ls /var/opt/data/nfs
register: mounted_err
ignore_errors: true
# ========================================================
# すべてのサーバに
# /var/opt/data/nfsディレクトリをrootユーザー755で作成する。
# 当該フォルダにはインストーラや設定ファイルなどをコピーする。
# 後ほどNFSサーバを導入し当該ディレクトにファイルをコピーしたのち
# 資源配布を行うようにする
# ========================================================
- shell: umount /var/opt/data/nfs
when: mounted_err.rc == 2
# ===================
# apserv01へ/etc/fstabにadminserv01へのマウント指定
# ===================
- hosts: apserv01
sudo: no
remote_user: root
tasks:
- name: "(apserv01)rcpbindを使用可能にし、/etc/fstabにadminserv01へのマウント設定"
service: name=rpcbind state=started enabled=yes
- mount: name=/var/opt/data/nfs src=adminserv01:/var/opt/data/nfs fstype=nfs state=mounted #【4.D:常時接続状態でかつMount状態(/etc/fstabに記述)】
# ===================
# apserv01へ/etc/fstabにadminserv01へのマウント指定
# ===================
- hosts: dbserv01
sudo: no
remote_user: root
tasks:
- name: "(apserv01)rcpbindを使用可能にし、/etc/fstabにadminserv01へのマウント設定"
service: name=rpcbind state=started enabled=yes
- mount: name=/var/opt/data/nfs src=adminserv01:/var/opt/data/nfs fstype=nfs state=mounted
##5.変数設定playbook(/vars/enviroment.yml)
nfs:
exportnetwork: 192.168.134.0
##6.補足説明
4.NFSサーバ設定のplaybook(/operations/0081_nfs.yml)内のコメント4.A~4.Dについて。
- 4.A:NFSサーバへの許可をするネットワーク設定を記述したexportsファイルの配置
shell: cp /var/opt/data/nfs/nfs/settings/exports /etc/exports
NFSサーバに接続許可するネットワークを記述する。
- 4.B:ネットワークは環境依存する為(本番と開発では違う)外部変数化した文字列で置換
exportsファイルの内容:
/var/opt/data/nfs #EXP_NETWORK/255.255.255.0(rw,no_root_squash)
となっている。
#EXP_NETWORKの部分を置換する為にreplaceモジュールを使用して指定した文字に一致した部分を置換する。
replace: dest=/etc/exports regexp="#EXP_NETWORK" replace="{{nfs.exportnetwork}}"
- replaceモジュール
名前 | 説明 | 補足 |
---|---|---|
dest | 対象のファイルを指定 | |
regexp | 正規表現で対象ファイルより置換対象文字列を探す | |
replace | 置換する文字列を記述 |
{{}}で括られた位置は5.変数設定で設定した値が設定される。
- 4.C:NFSサーバとrcpbindサービスを起動
NFSサーバとrcpbindサービスを起動し、NFSサーバとして起動する。
service: name=rpcbind state=restarted enabled=yes
service: name=nfs-server state=restarted enabled=yes
- serviceモジュール
名前 | 説明 | 補足 |
---|---|---|
enabled | true(自動起動する状態) false(自動起動しない状態) |
例: systemctl enable nfs-server /etc/init.d/nfs-server と同様 |
state | started(起動状態) restart(再起動) restarted(再起動) reloaded(再読み込み) |
例: systemctl start nfs-server /etc/init.d/nfs-server start と同様 |
##7.補足の補足(注意)
NFSを常時接続したい場合、OS起動時に/etc/fstabを参照し、NFSサーバにマウントしにいくことになる。
今回の場合、「adminserv01」がNFSサーバとなり、「apserv01」(APサーバ)と「dbserv01」(DBサーバ)はクライアントとして起動時に接続を試みる。
今回の環境はVagrantを使用していますが、起動順は「apserv01」、「dbserv01」、「adminserv01」となっている為、「apserv01」と「dbserv01」の起動は「adminserv01」を探し、あきらめるまで約1分半程度かかる。
NFSを導入する場合は起動順を意識してVagrantfileはNFSサーバが先に起動する設定にしておく方がいいかと思われる。
次回は「211.環境変数を設定する」について。
連載の目次は【こちら】です。