Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ansible の基本 + MySQL レプリケーションを設定する事例

Ansible の基本 + MySQL レプリケーションを設定する事例

Ian Lewis

June 10, 2014
Tweet

More Decks by Ian Lewis

Other Decks in Technology

Transcript

  1. \

  2. %YAML 1.2 --- YAML: YAML Ain't Markup Language What It

    Is: YAML is a human friendly data serialization standard for all programming languages.
  3. production # 本番環境のInventory stage # ステージング環境のInventory group_vars/ group1 # グループ変数

    group2 # "" host_vars/ hostname1 # ホスト変数 hostname2 # "" site.yml # マスターPlaybook webservers.yml # ウェブサーバーのPlaybook dbservers.yml # DBサーバーのPlaybook
  4. roles/ common/ # この下は”common”と言うロール tasks/ # main.yml # <-- ファイルを分割できます。

    handlers/ # main.yml # <-- ハンドラー templates/ # <-- テンプレート ntp.conf.j2 # <------- ファイル拡張子は.j2 files/ # bar.txt # <-- コピーするファイル vars/ # main.yml # <-- このロールの変数
  5. roles/ common/ # この下は”common”と言うロール tasks/ # main.yml # <-- ファイルを分割できます。

    handlers/ # main.yml # <-- ハンドラー templates/ # <-- テンプレート ntp.conf.j2 # <------- ファイル拡張子は.j2 files/ # bar.txt # <-- コピーするファイル vars/ # main.yml # <-- このロールの変数
  6. roles/ common/ # この下は”common”と言うロール tasks/ # main.yml # <-- ファイルを分割できます。

    handlers/ # main.yml # <-- ハンドラー templates/ # <-- テンプレート ntp.conf.j2 # <------- ファイル拡張子は.j2 files/ # bar.txt # <-- コピーするファイル vars/ # main.yml # <-- このロールの変数
  7. --- - name: Add the OS specific varibles include_vars: "{{

    ansible_os_family }}.yml" - name: Install the required packages in Redhat derivatives yum: name={{ item }} state=installed with_items: ntp_pkgs when: ansible_os_family == 'RedHat' …
  8. roles/ common/ # この下は”common”と言うロール tasks/ # main.yml # <-- ファイルを分割できます。

    handlers/ # main.yml # <-- ハンドラー templates/ # <-- テンプレート ntp.conf.j2 # <------- ファイル拡張子は.j2 files/ # bar.txt # <-- コピーするファイル vars/ # main.yml # <-- このロールの変数
  9. - name: Install the mysql packages in Debian derivatives apt:

    name={{ item }} state=installed update_cache=yes with_items: mysql_pkgs environment: env - name: Copy the my.cnf file template: - src: my.cnf.{{ ansible_os_family }}.j2 dest: {{ mysql_conf_dir }}/my.cnf notify: - restart mysql
  10. - name: remove the test database mysql_db: name=test state=absent -

    name: Create the database's mysql_db: name={{ item.name }} state=present with_items: mysql_db when: mysql_db|lower() != 'none'
  11. - name: Create the replication users mysql_user: - name: {{

    item.name }} host: "%" password: {{ item.pass|default("foobar") }} priv: *.*:"REPLICATION SLAVE" state: present with_items: mysql_repl_user when: mysql_repl_role == 'master'
  12. - name: Get primary servers replication status mysql_replication: mode=getmaster delegate_to:

    "{{ mysql_repl_master }}" register: repl_stat when: slave|failed and mysql_repl_role == 'slave' and mysql_repl_master is defined
  13. - name: Change the master in slave mysql_replication: - mode:

    changemaster master_host: {{ mysql_repl_master }} master_log_file: {{ repl_stat.File }} master_log_pos: {{ repl_stat.Position }} master_user: {{ mysql_repl_user[0].name }} master_password: {{ mysql_repl_user[0].pass }} when: <snip>
  14. Playbook copy my.cnf MASTER STATUS … Replica copy my.cnf …

    Restart mysql Inventory primaries replicas Primary SLAVE START