手動によるデプロイメントは一般的ですが、低速で単調になる可能性があります。3つ以上のノードでDataGuardセットアップを使用してOracleRACをインストールしたことがある場合は、私が何を意味するかをご存知でしょう。ノードの数によっては、展開手順に時間がかかり、エラーが発生する可能性があります。もちろん、データベースクラスタを手動でセットアップする方法については、多くの優れた「ハウツー」がありますが、大規模な手動アプローチでは、対処すべき追加の質問がたくさんあります。
私の環境の他のインスタンスも同じように設定されていますか?そのQAシステムは本番と同じように設定されましたか?デプロイしたばかりのものが本番環境に対応しているかどうか。これらすべての質問に対処するために、構成管理ツールを介して展開がますます自動化されています。
関連リソースPuppetを使用したデータベースの自動化:MySQLとMariaDBレプリケーションのデプロイs9sCLIを使用してMySQLGalera Clusterのデプロイを自動化する方法と、Ansible ClusterControlforMariaDBを使用してスタンドアロンMySQLからGaleraClusterへの移行を自動化する方法Puppet、Chef、Ansibleなどの一般的な構成管理ツールは、さまざまなITサービスを展開する上で実証済みのテクノロジーです。これらは、手作業を排除し、人的エラーのリスクを最小限に抑え、迅速な展開を可能にします。今日のブログでは、そのうちの1つを見ていきます。
Ansibleは、構成管理を一元化および自動化するためのオープンソースのシステム管理ツールです。 Ansibleを使用すると、さまざまなデータベースのデプロイを簡単に自動化し、簡単な管理タスクを実行できます。再現可能な環境でMySQLサーバーなどのソフトウェアを自動的にインストールして構成する方法を紹介します。このブログでは、MariaDBレプリケーションに焦点を当てますが、他のタスクに興味がある場合は、Ansibleについて詳しく説明している他のブログを確認してください。
Vagrant、Virtualbox、およびAnsible
Ansibleは、MySQLClusterをクラウドまたはオンプレミスにデプロイするのに役立ちます。このブログでは、VagrantとVirtualboxを搭載したデスクトップマシンでさまざまなテストを実行するための一般的なセットアップを使用します。
Vagrantは、開発環境を簡単に作成して、あるマシンから別のマシンに移動できるようにするシステムです。 Vagrantfileというファイルで必要なVMのタイプを定義し、1つのコマンドでそれらを起動するだけです。 VirtualBox、VMware、AWSなどの仮想マシンプロバイダーとうまく統合されており、私たちのタスクにとって重要なことは、Ansibleを強力にサポートしています。
Vagrantfileは、VirtualBoxプラットフォームに2つのインスタンスをデプロイします。1つはマスターノード用で、もう1つはスレーブノード用です。次に、Ansibleを使用して、必要なパッケージのインストールを実行し、マスター/スレーブの構成を実行します。以下は、実行するタスクのリストです。
- VagrantとVirtualboxをインストールする
- vagrantファイルとansibleプレイブックを構成する
- インスタンスを起動します
- 関連するVagrantボックスとVagrantfileをダウンロードします(これは自動的に行われます)
- Ansibleプレイブックを実行します(これは自動的に実行されます)
- 監視および管理タスク(バックアップ、セキュリティ、ユーザー管理、パフォーマンス管理など)のためにクラスターをClusterControlに追加します。
UbuntuへのVagrant、Virtualbox、Ansibleのインストール
パッケージをインストールする
sudo apt-get install ansible vagrant virtualbox
VagrantとAnsibleの構成ファイルを作成する
$ mkdir mariadbtest
$ vi Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provision "ansible" do |ansible|
ansible.playbook = "maria.yml"
ansible.sudo = true
end
config.vm.define "master" do |master|
master.vm.hostname = "master"
master.vm.network "forwarded_port", guest: 3306, host: 3336
master.vm.network "private_network", ip: "192.168.10.2"
end
config.vm.define "slave" do |slave|
slave.vm.hostname = "slave"
slave.vm.network "forwarded_port", guest: 3306, host: 3337
slave.vm.network "private_network", ip: "192.168.10.3"
end
config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 2
end
end
上記のvagrantファイルは、次の構成で2台のマシンを作成します。
- マスター:2 CPU、1 GB RAM、プライベートIP:192.168.10.2ポートフォワード:3336
- スレーブ:2CPU、1GB RAM、プライベートIP:192.168.10.3、ポートフォワード:3337
プレイブックの構造
このステップでは、Ansibleプレイブックを定義します。 Ansibleは、命令を定義するための簡単なマークアップ言語としてYAMLを使用します。 Mariadbから提供されたAnsibleファイルに基づいて次の「maria.yml」を作成します。
$vi maria.yml
- hosts: master:slave
user: vagrant
tasks:
- name: Install MariaDB repository
apt_repository: repo='deb http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.3/ubuntu trusty main' state=present
- name: Add repository key to the system
apt_key: keyserver=keyserver.ubuntu.com id=0xcbcb082a1bb943db
- name: Install MariaDB Server
apt: name=mariadb-server state=latest update_cache=yes
- name: Install python module
apt: name=python-mysqldb state=installed
- name: Create replication account
mysql_user: name=repl host="%" password=s3cr3tPaSSwordR priv=*.*:"REPLICATION SLAVE" state=present
- name: Create readwrite user
mysql_user: name=rwuser host="%" password=s3cr3tPaSSwordR priv=*.*:SELECT,INSERT,UPDATE,DELETE,CREATE,DROP state=present
- name: Modify configuration file to listen on all interfaces
lineinfile: dest=/etc/mysql/my.cnf regexp="^bind-address" line="bind-address=0.0.0.0"
- hosts: master
user: vagrant
tasks:
- name: Modify configuration file to setup server ID
lineinfile: dest=/etc/mysql/my.cnf regexp="^#server-id" line="server-id=1"
- name: Restart mysql service
service: name=mysql state=restarted
- name: Reset master binlog
command: /usr/bin/mysql -u root -e "RESET MASTER"
- hosts: slave
user: vagrant
tasks:
- name: Modify configuration file to setup server ID
lineinfile: dest=/etc/mysql/my.cnf regexp="^#server-id" line="server-id=2"
- name: Setup replication
command: /usr/bin/mysql -uroot -e "CHANGE MASTER TO master_host='192.168.10.2', master_user='repl', master_password='s3cr3tPaSSwordR', master_use_gtid=current_pos"
- name: Restart mysql service
service: name=mysql state=restarted
データベースインフラストラクチャ全体のClusterControlSingleコンソールClusterControlのその他の新機能を確認するClusterControlを無料でインストール 次に、インスタンスの時間です。 Vagrant upは、プレイブックのインストールをトリガーします。
$ vagrant up
DEPRECATION: The 'sudo' option for the Ansible provisioner is deprecated.
Please use the 'become' option instead.
The 'sudo' option will be removed in a future release of Vagrant.
==> vagrant: A new version of Vagrant is available: 2.2.4 (installed version: 2.2.3)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html
Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'slave' up with 'virtualbox' provider...
==> master: Box 'ubuntu/trusty64' could not be found. Attempting to find and install...
master: Box Provider: virtualbox
master: Box Version: >= 0
==> master: Loading metadata for box 'ubuntu/trusty64'
master: URL: https://vagrantcloud.com/ubuntu/trusty64
==> master: Adding box 'ubuntu/trusty64' (v20190429.0.1) for provider: virtualbox
master: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20190429.0.1/providers/virtualbox.box
master: Download redirected to host: cloud-images.ubuntu.com
master: Progress: 7% (Rate: 551k/s, Estimated time remaining: 0:14:31)
Bringing machine 'master' up with 'virtualbox' provider...
Bringing machine 'slave' up with 'virtualbox' provider...
Virtualboxからubuntuイメージをまだダウンロードしていない場合、vagrantは上記の例のように自動的にダウンロードします。
PLAY [master:slave] ************************************************************
TASK [Gathering Facts] *********************************************************
ok: [slave]
TASK [Install MariaDB repository] **********************************************
changed: [slave]
TASK [Add repository key to the system] ****************************************
changed: [slave]
TASK [Install MariaDB Server] **************************************************
プレイブックのインストールが成功すると、次の出力が表示され、事前定義された資格情報を使用してデータベースにログインできるようになります(プレイブックを参照)。
PLAY RECAP ********************************************************************
master : ok=12 changed=10 unreachable=0 failed=0
次のステップは、マスター/スレーブ構成をClusterControlにインポートすることです。 ClusterControlをインストールする最も簡単で便利な方法は、Severeninesが提供するインストールスクリプトを使用することです。スクリプトをダウンロードして、rootユーザーまたはsudoroot権限を持つユーザーとして実行するだけです。
$ wget http://www.severalnines.com/downloads/cmon/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user
ClusterControlのインストールをプレイブックに追加する場合は、次の手順を使用できます。
次のステップは、後でパスワードなしのSSHを設定するために使用するSSHキーを生成することです。使用したいキーペアがある場合は、新しいキーペアの作成をスキップできます。
ClusterControl:既存のクラスターをインポートしますインストールが正常に完了すると、最終的に、新しく作成したテストクラスターをClusterControlにインポートできます。
このブログ投稿で、AnsibleMariaDBマスター/スレーブレプリケーションのインストールとセットアップの基本についての洞察が得られたことを願っています。 Chef、Puppet、DockerforMariaDBデータベースおよびその他のデータベースクラスターの展開を紹介している他のブログを確認してください。