LoginSignup
6
2

More than 5 years have passed since last update.

MySQL レプリケーショントポロジー管理ツール orchestrator

Posted at

概要

github/orchestrator(MySQL replication topology management and HA ) を少し触ってみたのでメモ。

主な機能としては以下の通り。

  • Discovery orchestrator actively crawls through your topologies and maps them. It reads basic MySQL info such as replication status and configuration.
  • Refactoring orchestrator understands replication rules. It knows about binlog file:position, GTID, Pseudo GTID, Binlog Servers.
  • Recovery orchestrator uses a holistic approach to detect master and intermediate master failures. Based on information gained from the topology itself, it recognizes a variety of failure scenarios.
  • The interface orchestrator supports:
    • Command line interface
    • Web API
    • Web interface

環境

GCE 上に 3台の MySQL 環境を構築
(MySQLMaster: db-01 / MySQLSlave: db-02, db-03)

  • OS : CentOS Linux release 7.2.1511 (Core)
  • orchestrator version : 2.0.1-1

環境構築

GCE ということで DeploymentManager で環境構築してみる

config.yaml
imports:
- path: templates/network.jinja
- path: templates/instance.jinja
- path: templates/firewall.jinja

resources:
- name: mysql-network
  type: templates/network.jinja
  properties:
    region: asia-northeast1
    range: 10.255.0.0/24

- name: mysql-instance
  type: templates/instance.jinja
  properties:
    instances:
     - name: db-01
     - name: db-02
     - name: db-03
    machineType: f1-micro
    region: asia-northeast1
    zone: asia-northeast1-a

- name: mysql-firewall
  type: templates/firewall.jinja
templates/network.yaml
resources:
- type: compute.v1.network
  name: {{ env["name"] }}
  properties:
    autoCreateSubnetworks: false

- type: compute.v1.subnetwork
  name: {{ env["name"] }}-subnet
  properties:
    network: $(ref.mysql-network.selfLink)
    ipCidrRange: {{ properties["range"] }}
    region: {{ properties["region"] }}
templates/instance.yaml
resources:
{% for instance in properties["instances"] %}
  {%set name = instance["name"] %}

- type: compute.v1.instance
  name: {{ name }}
  properties:
    zone: {{ properties["zone"] }}
    machineType: https://www.googleapis.com/compute/v1/projects/{{ env["project"] }}/zones/{{ properties["zone"] }}/machineTypes/{{ properties["machineType"] }}

    tags:
      items:
        - mysql

    disks:
    - type: PERSISTENT
      deviceName: {{ name }}-disk
      boot: true
      mode: READ_WRITE
      autoDelete: true
      initializeParams:
        sourceImage: https://www.googleapis.com/compute/v1/projects/centos-cloud/global/images/centos-7-v20161129
        diskType: projects/{{ env["project"] }}/zones/{{ properties["zone"] }}/diskTypes/pd-standard
        diskSizeGb: 10

    canIpForward: true

    networkInterfaces:
    - network: $(ref.mysql-network.selfLink)
      subnetwork: $(ref.mysql-network-subnet.selfLink)
      accessConfigs:
      - name: External NAT
        type: ONE_TO_ONE_NAT

    metadata:
      items:
      - key: startup-script
        value: |
          #!/bin/bash
          timedatectl set-timezone Asia/Tokyo

    scheduling:
      preemptible: false
      onHostMaintenance: MIGRATE
      automaticRestart: true

    serviceAccounts:
    - email: default
      scopes:
        - https://www.googleapis.com/auth/logging.write
        - https://www.googleapis.com/auth/monitoring.write
{% endfor %}
templates/firewall.yaml
resources:
- name: {{ env["name"] }}-ssh
  type: compute.v1.firewall
  properties:
    network: $(ref.mysql-network.selfLink)
    sourceRanges: ["0.0.0.0/0"]
    allowed:
    - IPProtocol: TCP
      ports: ["22"]

- name: {{ env["name"] }}-internal
  type: compute.v1.firewall
  properties:
    network: $(ref.condor-network.selfLink)
    sourceRanges: ["10.255.0.0/24"]
    allowed:
    - IPProtocol: TCP
      ports: ["0-65535"]
    - IPProtocol: UDP
      ports: ["0-65535"]
    - IPProtocol: ICMP

プレビュー実行

$ gcloud deployment-manager deployments create mysql-cluster --config=config.yaml --preview

NAME                       TYPE                   STATE      ERRORS  INTENT
db-01                      compute.v1.instance    COMPLETED  []
db-02                      compute.v1.instance    COMPLETED  []
db-03                      compute.v1.instance    COMPLETED  []
mysql-firewall-management  compute.v1.firewall    COMPLETED  []
mysql-network              compute.v1.network     COMPLETED  []
mysql-network-subnet       compute.v1.subnetwork  COMPLETED  []

WEBからデプロイ実行
01.png

orchestrator インストール

MySQL Replication 環境の構築は割愛

orchestrator インストールは以下の通り

$ curl -s https://packagecloud.io/install/repositories/github/orchestrator/script.rpm.sh | sudo bash
$ sudo yum install orchestrator orchestrator-cli

orchestrator 設定

以下を参照
https://github.com/github/orchestrator/blob/master/docs/install.md
https://github.com/github/orchestrator/blob/master/docs/executing-via-command-line.md

UI から確認してみる

http://{サーバIPアドレス}:3000/ にアクセス

Discover より構築した3台のインスタンスを登録
03.png

Cluster の確認
02.png

Slave 障害時
04.png

とりあえず動作したので、詳細は別途。。。

6
2
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
6
2