ansibleで始めるpostgre sqlの冗長化

78
Ansibleで始める PostgreSQLの冗長化 オープンセミナー2015@広島

Upload: soudai-sone

Post on 16-Jul-2015

3.529 views

Category:

Documents


0 download

TRANSCRIPT

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の構成図

ローカル masterAnsible

slave

PostgreSQLの構成図

ローカル masterAnsible

slave

SSH

PostgreSQLの構成図

ローカル masterAnsible PostgreSQL

slave

SSH

PostgreSQL

PostgreSQLの構成図

ローカル masterAnsible PostgreSQL

slave

SSH

PostgreSQL

レプリケーション

PostgreSQLの冗長化

百聞(100説明)は一見(デモ)に如かず

あじぇんだ

1 自己紹介 2 Ansibleとは 3 PostgreSQLを冗長化する 4 Ansibleを使いこなす 5 まとめ

代表的なモジュール例モジュール名 動作

shellshell上でコマンドを実行 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の中身を読む

ご静聴ありがとうございました。