Ansibleで始める
PostgreSQLの冗長化
オープンセミナー2015@広島
What is it?
構成管理に躓いた人いませんか?
What is it?
Chef使いたいけど既存環境が…
What is it?
AnsibleならSSH!
What is it?
実例を交えながらAnsibleをご紹介します
あじぇんだ
1 自己紹介
2 Ansibleとは
3 PostgreSQLを冗長化する
4 Ansibleを使いこなす
5 まとめ
あじぇんだ
1 自己紹介
2 Ansibleとは
3 PostgreSQLを冗長化する
4 Ansibleを使いこなす
5 まとめ
自己紹介
名前:曽根 壮大(そね たけとも)
年齢:30歳(三人の子供がいます)
職業:Webエンジニア
所属:日本PostgreSQLユーザ会
   中国支部 支部長
  技術的にはLL系言語とかRDBが好きです
中国地方DB勉強会
https://dbstudychugoku.github.io/
あじぇんだ
1 自己紹介
2 Ansibleとは
3 PostgreSQLを冗長化する
4 Ansibleを使いこなす
5 まとめ
Ansibleとは
Ansibleとは
Pythonで記述された構成管理ツール
Ansibleとは
特徴
Ansibleとは
特徴
1 Python製
Ansibleとは
特徴
1 Python製
2 SSH経由でのPush型
Ansibleとは
特徴
1 Python製
2 SSH経由でのPush型
3 クライアントにインストール不要 
Ansibleとは
特徴
1 Python製
2 SSH経由でのPush型
3 クライアントにインストール不要 
4 1.7からWindowsも対象に
Ansibleとは
モジュール
Ansibleとは
モジュール
1 クライアント(Server側)での動作の事
Ansibleとは
モジュール
1 クライアント(Server側)での動作の事
2 yum,apt-getなどは最初から用意済み
Ansibleとは
モジュール
1 クライアント(Server側)での動作の事
2 yum,apt-getなどは最初から用意済み
3 モジュールとして自作Codeも可能
Ansibleとは
モジュール
1 クライアント(Server側)での動作の事
2 yum,apt-getなどは最初から用意済み
3 モジュールとして自作Codeも可能
※Python以外のどの言語でも良い
Ansibleとは
プレイブック
Ansibleとは
プレイブック
1 Chefでいうところのレシピ
Ansibleとは
プレイブック
1 Chefでいうところのレシピ
2 モジュール処理をまとめたもの
Ansibleとは
プレイブック
1 Chefでいうところのレシピ
2 モジュール処理をまとめたもの
3 YAML形式で記述
Ansibleとは
ホスト リモート
Ansibleとは
ホスト リモート
Ansible
Ansibleとは
ホスト リモート
Ansible
SSH
Ansibleとは
ホスト リモート
Ansible 環境構築
SSH
Ansibleとは
ホスト リモート
Ansible 環境構築
既存環境
環境構築
SSH
Ansibleとは
ホスト リモート
Ansible 環境構築
既存環境
SSH
追加・変更
環境構築
Ansibleとは
ホスト リモート
Ansible 環境構築
既存環境
SSH
追加・変更
新規環境
プレイブックの例
- hosts: test-server
sudo: yes
tasks:
- name: be sure httpd is installed
yum: name=httpd state=installed
- name: be sure httpd is running and enabled
service: name=httpd state=running enabled=yes
あじぇんだ
1 自己紹介
2 Ansibleとは
3 PostgreSQLを冗長化する
4 Ansibleを使いこなす
5 まとめ
PostgreSQLとは
PostgreSQLとは
OSSなリレーショナルデータベース
PostgreSQLとは
特徴
PostgreSQLとは
特徴
1 高機能・高可用性
PostgreSQLとは
特徴
1 高機能・高可用性
2 日本語ドキュメントが豊富
PostgreSQLとは
特徴
1 高機能・高可用性
2 日本語ドキュメントが豊富
3 コミュニティが活発
PostgreSQLとは
var リリース日 主な機能追加
8.4 2009/07/01
再帰クエリ, ウィンドウ関数, 列単位のアクセス制御, SQL
と関数の性能解析機能
9.0 2010/09/20
レプリケーション, 一括権限変更, 匿名プロシージャ,
64bit Windows サポート, 移動平均, 列/条件トリガ, 一意
性制約の遅延, 排他制約
9.1 2011/09/12
同期レプリケーション, 外部テーブル, パッケージ管理,
UNLOGGEDテーブル, 更新可能なWITH句, 近傍検索,
SELinux権限制御
9.2 2012/09/10
インデックスオンリースキャン, カスケードレプリケーシ
ョン, JSON型, 範囲型
9.3 2013/09/09
マテリアライズドビュー, 外部テーブルへの書き出し, イベ
ントトリガ, データページ・チェックサム, LATERAL句
9.4 2014/12/18
マテビューの自動更新,JSONB型,ALTER SYSTEM,集合関
数の向上,GINインデックスの向上,NUMERICの性能改善
PostgreSQLとは
特徴
1 高機能・高可用性
2 日本語ドキュメントが豊富
3 コミュニティが活発
PostgreSQLの冗長化
高可用性を実現すること
PostgreSQLの冗長化
冗長化とは
一部の設備が故障しても
サービスを継続して提供できる
ようにシステムを構築すること
PostgreSQLの冗長化
「稼働率は想定されていますか?」
PostgreSQLの冗長化
稼働率 年間停止時間 実現方法
90% 36.5日
オンラインバックアップ+リストアだけで十分
オンラインバックアップの取得を実施
99% 3.65日
オンプレミスなら予備マシンが必要
大データならバックアップのリストア所要時間を把握しておく
99.9% 8.7時間
保守停電の無いクラウド∼ハウジングが必要
平日日中のみ障害検知対応だと難しい
99.99% 52分
バックアップのリストアがほぼ不可能
レプリケーション(データ同期)された待機サーバが必要
99.999% 5分
HAクラスタソフトウェアが必要
技術者に要求されるスキルが跳ね上がる
99.9999% 32秒
無停止型Serverなどのハードが必要
コストが急に跳ね上がる
PostgreSQLの冗長化
稼働率 年間停止時間 実現方法
90% 36.5日
オンラインバックアップ+リストアだけで十分
オンラインバックアップの取得を実施
99% 3.65日
オンプレミスなら予備マシンが必要
大データならバックアップのリストア所要時間を把握しておく
99.9% 8.7時間
保守停電の無いクラウド∼ハウジングが必要
平日日中のみ障害検知対応だと難しい
99.99% 52分
バックアップのリストアがほぼ不可能
レプリケーション(データ同期)された待機サーバが必要
99.999% 5分
HAクラスタソフトウェアが必要
技術者に要求されるスキルが跳ね上がる
99.9999% 32秒
無停止型Serverなどのハードが必要
コストが急に跳ね上がる
ここを目指します
PostgreSQLの冗長化
「でも難しいんでしょ?」
PostgreSQLの冗長化
大丈夫、そうAnsibleならね!
PostgreSQLの冗長化
PostgreSQLの
ストリーミングレプリケーション
PostgreSQLの構成図
ローカル master
Ansible
slave
PostgreSQLの構成図
ローカル master
Ansible
slave
SSH
PostgreSQLの構成図
ローカル master
Ansible PostgreSQL
slave
SSH
PostgreSQL
PostgreSQLの構成図
ローカル master
Ansible PostgreSQL
slave
SSH
PostgreSQL
レプリケーション
PostgreSQLの冗長化
百聞(100説明)は一見(デモ)に如かず
あじぇんだ
1 自己紹介
2 Ansibleとは
3 PostgreSQLを冗長化する
4 Ansibleを使いこなす
5 まとめ
代表的なモジュール例
モジュール名 動作
shell
shell上でコマンドを実行
task単位でshellを起動するので環境変数は引継無し
command $HOME, "<", ">", "¦", "&"が使えない
lineinfile 指定ファイルの行単位の書き換え
file ファイルやディレクトリの作成、パーミッション設定
template テンプレートを利用したファイルのコピー
synchronize rsync(ファイル同期)
get_url
指定URLからダウンロード
既にローカルにファイルがある場合は動作しない
yum yum(rpm から直接インストールも可能)
service service & chkconfig
冪等性
- name: 初回のみしか上手くいかない
shell: "echo 'hoge' >> /etc/hoge.conf”
冪等性
- name: 初回のみしか上手くいかない
shell: "echo 'hoge' >> /etc/hoge.conf”
            !!!
- name: Linuxの無効を行単位で置換する(毎回同じ動作)
lineinfile: dest=/etc/sysconfig/selinux
regexp="^SELINUX=.*" line=“SELINUX=disabled"
冪等性
- name: template postgresql.conf
template:
src: template/postgresql.conf
dest: "{{ postgresql_path }}/postgresql.conf”
owner: "{{ postgresql_service_user }}"
group: "{{ postgresql_service_group }}"
mode: 0640
状態変化
- name: 結果の取得
shell: touch /tmp/hoge creates=/tmp/hoge
register: result
- name: print result
debug: msg=“{{ result.stderr }}”
when: result.stdout != ""
状態変化
- name: 結果の取得
shell: touch /tmp/hoge creates=/tmp/hoge
register: result
- name: print result
debug: msg=“{{ result.stderr }}”
when: result.stdout != ""
条件に該当した時のみ、
Taskが実行される
変数宣言
vars:
port: 5432
postgresql_path: "/var/lib/pgsql/9.4/"
postgresql_service_user: "postgres"
postgresql_service_group: "postgres"
postgresql_user_password: "hoge"
例外処理
- name: locale=Cじゃないとソートが違う
ignore_errors: yes
sudo_user: postgres
command: initdb --no-locale
例外処理
- name: locale=Cじゃないとソートが違う
ignore_errors: yes
sudo_user: postgres
command: initdb --no-locale
エラーが出ても
処理を続行する
Ansibleを使いこなす
Windowsも管理できる
Ansibleを使いこなす
Windowsも管理できる
↓
ただしAnsible1.7以上
Ansibleを使いこなす
Windowsも管理できる
↓
ただしAnsible1.7以上
↓
PowerShell 3.0以上が必要
あじぇんだ
1 自己紹介
2 Ansibleとは
3 PostgreSQLを冗長化する
4 Ansibleを使いこなす
5 まとめ
まとめ
構成管理を始めるきっかけに
まとめ
構成管理を始めるきっかけに
↓
運用をシンプルに!
まとめ
既存環境も管理できる
まとめ
既存環境も管理できる
↓
OpenSSHのUpdateで助かった
まとめ
インフラを属人化させない
まとめ
Ansible チュートリアル
公式ドキュメント
Ansible AWXの中身を読む
ご静聴ありがとうございました。

Ansibleで始めるpostgre sqlの冗長化