Edited at

【連載01】202.Ansible実行端末からのCentOSサーバ群を構築する(Ansible準備編)

More than 3 years have passed since last update.

当記事はケーススタディの連載となっています。目次は【こちら】です。

最新のソースコードは【GitHub】で公開中です。

Ansibleを使ってを以下を実装する。

ここからは「manageterm(Ansible管理端末)」を使用して実行する。

余談ですが、私はPUTTYとSUPPER PUTTY(PUTTYウィンドウのタブ化)を使用してAnsibleを実行しています。

以下のようなイメージです。


1.サーバ実装の流れ


OS環境の設定

ユーザーとグループを作成する

yumにて必要なライブラリ/ミドル/ソフトウェアをインストールする

SELinuxを無効化する

SELinux設定Diabledを適用する為サーバを再起動する

Firewalldを一時的にストップする

必要なディレクトリを作成しオーナーとパーミッションを設定する

Ansible管理端末(ローカル)にあるファイルをadminserv01(NFSサーバとして使用)にコピーする

HOSTSを設定する

NFSをインストールし管理サーバ(adminserv01)とAPサーバ(apserv01)/DBサーバ(dbserv01)から接続する

環境変数を設定する



各種ソフトウェア/ミドルウェアのインストール設定

NMONのインストール/配置

・Rubyのインストール/配置

・Java/TOMCATのインストール/配置

・Selniumのインストール配置

・Jenkins/Mavenのインストール配置

chrony(タイムサーバ)

・アパッチのインストールと設定ファイルの配置

・OpenVPNのインストールと設定ファイル/鍵類を配置

・MySQLのインストールと設定ファイル/鍵類を配置



ファイアーウォール設定

・ファイアーウォール設定



アップデート/破棄処理

・不要ファイル削除 / mlocate update / yum update

※構築が完了したら最後にVagrantBoxファイルとして仮想マシンを保存する。


2.実行ディレクトリ構成

Ansibleの実行にはAnsibleコマンドにパラメータとして「ansible-playbook」を指定する。

Ansible-playbookは複数のファイルに分割して作ることができる。

上記のサーバ構成に合わせてファイルを分割して管理のしやすい構造にする。

ファルダ構造は以下とする。

Ansibleをインストールすると/etc/ansible/配下にディレクトリができる。

/etc/ansible/

├── ansible.cfg   ・・・・・ ansible のコンフィグレーション(今回は編集しない)

├── execute.sh   ・・・・・ ansible playbookを実行するシェル

├── hosts     ・・・・・ ansibleで使用するhostとhostのグループの一覧

├── site.yml    ・・・・・ メインのplaybook(このファイルからoperations配下をインクルード)

├── operations─(1) ・・・・・ メインのplaybookからインクルードされる

├── roles──────  ・・・・・ ansibleロール(今回は編集しない)

├── sendfiles──(2) ・・・・・ メインのplaybook(managetermから各サーバに配布されるインストーラ/設定)

└── vars───────(3) ・・・・・ 独自の変数設定(ymlファイルから参照数)

赤文字:インストール直後に構成されるファイル

青文字:サーバ構築時に追加していく自作ファイル

(1)operations配下にはサーバ設定をサーバ構成作業に合わせてファイルを分割している

├── 0001_ansiblebef.yml

├── 0011_usergroup.yml

├── 0012_yum.yml

├── 0021_selinux.yml

├── 0031_reboot.yml

├── 0041_firewalldstop.yml

├── 0061_filedir.yml

├── 0071_filescopy.yml

├── 0075_hosts.yml

├── 0081_nfs.yml

├── 0091_env.yml

├── 1001_nmon.yml

├── 1011_ruby.yml

├── 1021_javatomcat.yml

├── 1022_selenium.yml

├── 1031_jenkinsmvn.yml

├── 1041_chrony.yml

├── 1051_apache.yml

├── 1061_openvpn.yml

├── 1071_mysql.yml

├── 3001_firewalld.yml

├── 3011_firewallreload.yml

└── 9001_finish.yml

(2)sendfiles配下にはyumではインストールできないインストールソフトウェアや設定ファイルを配置する

├── apache

│ ├── installer

│ └── settings

│ ├── ajp.conf_adminserv01

│ ├── ajp.conf_apserv01

│ ├── server_cert.pem_apserv01

│ ├── server_key.pem.nopass_apserv01

│ ├── ssl.conf_apserv01

│ └── subversion.conf_adminserv01

├── java

│ ├── installer

│ │ └── jdk-7u79-linux-x64.rpm

│ └── settings

├── jenkins_mvn

│ ├── installer

│ │ ├── apache-maven-3.3.3-bin.tar.gz

│ │ └── jenkins.war

│ └── settings

├── mysql

│ ├── installer

│ └── settings

│ ├── init.exp

│ └── my.cnf

├── nfs

│ ├── installer

│ └── settings

│ └── exports

├── openvpn

│ ├── installer

│ └── settings

│ ├── exec_ca.exp

│ ├── exec_client.exp

│ ├── exec_server.exp

│ ├── server.conf

│ └── vars

├── os

│ ├── installer

│ │ └── centos7.tar.gz

│ └── settings

│ ├── profile_init.sh

│ └── resolv.conf

├── output

├── selenium

│ ├── firewalld

│ │ └── selenium.xml

│ ├── installer

│ │ └── selenium-server-standalone-2.48.2.jar

│ └── settings

│ ├── node.json

│ ├── selenium.sh

│ └── selenium_systemd.template_adminserv01

└── tomcat

├── firewalld

│ └── tomcat.xml

├── installer

│ └── apache-tomcat-7.0.65.tar.gz

└── settings

├── server.xml

├── setenv.sh

├── tomcat-users.xml

├── tomcat_systemd.template

└── tomcatenviroment

(3)vars配下にはymlから参照する変数を定義する

├── befdownload.yml

├── filedir.yml

├── ruby.yml

├── service.yml

├── usergroup.yml


3.メインとなるplaybook(site.yml)

メインとなるymlファイルではサーバ設定をinclude。

各サーバ設定を単体で確認しやすいように分割する。

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

#

# メインのymlファイル(site.xml)

# ※includeしか書かない。個別の処理はそれぞれの責務を持つymlファイルに処理委譲し凝縮度を高める。

#

- hosts: all

sudo: no

remote_user: root

tasks:

- name: initilize Ansible

tags: allexec

debug: msg="Ansible実行します。"

#

# OS環境の設定

# ※OS自体の設定を行う

#

- include: ./operations/0011_usergroup.yml

- include: ./operations/0012_yum.yml

- include: ./operations/0021_selinux.yml

- include: ./operations/0031_reboot.yml

- include: ./operations/0041_firewalldstop.yml

- include: ./operations/0061_filedir.yml

- include: ./operations/0071_filescopy.yml

- include: ./operations/0075_hosts.yml

- include: ./operations/0081_nfs.yml

- include: ./operations/0091_env.yml

#

# ソフトウェア/ミドルウェアのインストール/設定/サービス起動

# ※ミドル/ソフトウェア単位にymlを分け、出来るだけyum内で自己完結する

#

- include: ./operations/1001_nmon.yml

- include: ./operations/1011_ruby.yml

- include: ./operations/1021_javatomcat.yml

- include: ./operations/1022_selenium.yml

- include: ./operations/1031_jenkinsmvn.yml

- include: ./operations/1041_chrony.yml

- include: ./operations/1051_apache.yml

- include: ./operations/1061_openvpn.yml

- include: ./operations/1071_mysql.yml

#

# ファイアーウォールの設定

#

- include: ./operations/3001_firewalld.yml

#

# 最終処理

#

- include: ./operations/9001_finish.yml

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲


i.Ansible playbookの構成

Ansibleは3つのセクションにより構成されている。

# ▼▼▼ Target(サーバやAnsible実行ユーザー)セクション

- hosts: all

sudo: no

remote_user: root

# ▲▲▲

# ▼▼▼ vars(変数設定)セクション

vars_files:

- ../vars/yum.yml

- ../vars/filedir.yml

- ../vars/ruby.yml

- ../vars/service.yml

- ../vars/usergroup.yml

# ▲▲▲

# ▼▼▼ tasks(実行)セクション

tasks:

- name: initilize Ansible

debug:msg=aaaaaaa

# ▲▲▲


ii.Ansible Tagetセクション:hosts

hostsには下に続くtasksを実行するサーバ名、又はサーバ名だけでなく/etc/ansible/hostsに指定したグループ名を指定する。

allは特別で/etc/ansible/hostsに指定したサーバ全てという意味になる。

書式:


hosts \${/etc/ansible/hosts内に記述したサーバ名またはグループ名}


例:

hosts all

hosts apservers


iii.Ansible Tagetセクション:sudo

AnsibleはSSHを利用してymlにて記述した内容をサーバにログインしてtasksを実行する。

実行に際し、sudoの使用可否を決めるのがsudoモジュール。

書式:


sudo \${no または yes}


例:

sudo no


iv.Ansible Tagetセクション:remote_user

AnsibleはSSHを利用してymlにて記述した内容をサーバにログインしてtasksを実行する。

実行する際のユーザー名を決めるのがremote_user。

書式:


remote_user \${接続先サーバでansible tasksを実行するユーザー名}


例:

remote_user root


v.Ansible varセクション:var_files(vars)

実際のサーバ構築をする際は環境固有のIPアドレスやホスト名など本番サーバと開発サーバでは具体値を差し替えたい値が多くある。その場合、変数を外部化しておくと、透過的にplaybookを環境別に書き換える必要がなくAnsibleを実行できるメリットがある。

書式:


var_files

- ${変数設定をした外部ファイルパス}


例:

vars_files:

- ../vars/yum.yml
- ../vars/filedir.yml
- ../vars/ruby.yml

変数が少数の場合は外部ファイルに記述せず、直接記述も可能。その場合varsを使用して記述。

書式:


vars:

key名: 値


例:

vars:

abc_path: /var/log/abc.log


vi.Ansible tasksセクション:tasks

tasksはAnsibleのメインとなる。

tasks配下にサーバへの操作をymlで記述していく。

書式:


remote_user \${接続先サーバでansible tasksを実行するユーザー名}


例:

remote_user root

※以降の章ではincludeしたplaybookのtasksセクションをメインに説明していきます。

次回は「Ansibleでユーザーとグループを追加する」について。

連載の目次は【こちら】です。