LoginSignup
23
21

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-01-19

当記事はケーススタディの連載となっています。目次は【こちら】です。
最新のソースコードは【GitHub】で公開中です。

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

Vagrant-Ansible-Serverspec_5.png

ここからは「manageterm(Ansible管理端末)」を使用して実行する。
余談ですが、私はPUTTYとSUPPER PUTTY(PUTTYウィンドウのタブ化)を使用してAnsibleを実行しています。
以下のようなイメージです。

image

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でユーザーとグループを追加する」について。

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

23
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
21