sql >> データベース >  >> RDS >> MariaDB

AnsibleとVagrantを使用してMariaDB10.3レプリケーションをセットアップする方法

    手動によるデプロイメントは一般的ですが、低速で単調になる可能性があります。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データベースおよびその他のデータベースクラスターの展開を紹介している他のブログを確認してください。


    1. トランザクションがすでに開始されていることをどのように検出しますか?

    2. java.sql.SQLException:-ORA-01000:最大オープンカーソルを超えました

    3. ダウンタイムなしでDjangoでインデックスを作成する方法

    4. 日付範囲の重複チェック制約