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

クラウドでのデータベース負荷分散-ProxySQL2.0を使用したMySQLマスターフェイルオーバー:パート1(導入)

    クラウドは、非常に柔軟な環境を提供します。ノードを追加または削除することで、簡単にスケールアップおよびスケールダウンできます。必要に応じて、環境のクローンを簡単に作成できます。これは、アップグレード、負荷テスト、障害復旧などのプロセスに使用できます。対処しなければならない主な問題は、アプリケーションが何らかの方法でデータベースに接続する必要があることです。また、柔軟なセットアップは、データベースにとって、特にマスタースレーブセットアップでは扱いにくい場合があります。幸いなことに、このプロセスを簡単にするためのいくつかのオプションがあります。

    1つの方法は、データベースプロキシを利用することです。選択できるプロキシはいくつかありますが、このブログ投稿では、MySQLとMariaDBで使用できるよく知られたプロキシであるProxySQLを使用します。これを使用して、アプリケーションに目に見える影響を与えることなく、MySQLノード間でトラフィックを効率的に移動する方法を示します。また、このアプローチのいくつかの制限と欠点についても説明します。

    初期クラウドセットアップ

    最初に、セットアップについて説明しましょう。環境にはAWSEC2インスタンスを使用します。テストしているだけなので、可能であることを証明したいこと、つまりシームレスなマスターの変更以外は、高可用性についてはあまり気にしません。したがって、単一のアプリケーションノードと単一のProxySQLノードを使用します。グッドプラクティスに従って、アプリケーションノードにProxySQLを配置し、Unixソケットを介してProxySQLに接続するようにアプリケーションを構成します。これにより、TCP接続に関連するオーバーヘッドが削減され、セキュリティが向上します。アプリケーションからプロキシへのトラフィックはローカルインスタンスを離れず、暗号化するProxySQL->MySQL接続のみが残ります。繰り返しになりますが、これは単純なテストであるため、SSLを設定しません。実稼働環境では、VPCを使用している場合でも、それを実行したいと考えています。

    環境は次の図のようになります。

    アプリケーションとして、MySQLの合成ベンチマークプログラムであるSysbenchを使用します。 。トランザクションの使用を無効または有効にするオプションがあります。これを使用して、ProxySQLがトランザクションを処理する方法を示します。

    ClusterControlを使用したMySQLレプリケーションクラスターのインストール

    デプロイメントを高速かつ効率的にするために、ClusterControlを使用してMySQLレプリケーションセットアップをデプロイします。 ClusterControlのインストールには、ほんの2、3の手順が必要です。ここでは詳しく説明しませんが、Webサイトを開いて、ClusterControlの登録とインストールを簡単に行う必要があります。 ClusterControlインスタンスとそれを使用して管理するすべてのノードの間にパスワードなしのSSHを設定する必要があることに注意してください。

    ClusterControlがインストールされると、ログインできます。デプロイメントウィザードが表示されます:

    すでにクラウドで実行されているインスタンスがあるため、 「デプロイ」オプション。次の画面が表示されます:

    クラスタータイプとしてMySQLレプリケーションを選択し、接続を提供する必要があります詳細。 rootユーザーを使用した接続にすることも、パスワードの有無にかかわらずsudoユーザーにすることもできます。

    次のステップでは、いくつかの決定を行う必要があります。最新バージョンでは、Percona ServerforMySQLを使用します。また、デプロイするノードでrootユーザーのパスワードを定義する必要があります。

    最後のステップでは、トポロジを定義する必要があります。最初に提案したもの-マスターと3人のスレーブ。

    ClusterControlが展開を開始します-[アクティビティ]タブで追跡できます。上のスクリーンショットに示されているように。

    展開が完了すると、クラスターリストにクラスターが表示されます。

    ClusterControlを使用したProxySQL2.0のインストール

    次のステップは、ProxySQLをデプロイすることです。 ClusterControlは私たちのためにこれを行うことができます。

    これは[管理]->[ロードバランサー]で実行できます。

    テストしているだけなので、ClusterControlインスタンスを再利用しますProxySQLおよびSysbenchの場合。実際には、「実際の」アプリケーションサーバーを使用することをお勧めします。ドロップダウンに見つからない場合は、いつでもサーバーアドレス(IPまたはホスト名)を手動で書き込むことができます。

    また、監視および管理ユーザーの資格情報を定義する必要があります。また、ProxySQL 2.0がデプロイされることを再確認しました(必要に応じていつでも1.4.xに変更できます)。

    ウィザードの下部で、次のようなユーザーを定義します。 MySQLとProxySQLの両方で作成されました。既存のアプリケーションがある場合は、おそらく既存のユーザーを使用することをお勧めします。アプリケーションに多数のユーザーを使用する場合は、ProxySQLがデプロイされた後、後でいつでも残りのユーザーをインポートできます。

    すべてのMySQLインスタンスがProxySQLで構成されるようにします。明示的なトランザクションを使用するため、それに応じてスイッチを設定します。これが私たちがする必要があるすべてです-残りは「DeployProxySQL」ボタンをクリックしてClusterControlにそのことをさせることです。

    インストールが完了すると、ProxySQLがノードのリストに表示されますクラスター内。上のスクリーンショットでわかるように、トポロジと、リーダーとライターのホストグループ全体に分散されたノードがすでに検出されています。

    Sysbenchのインストール

    最後のステップは、Sysbenchをインストールして「アプリケーション」を作成することです。プロセスはかなり簡単です。最初に、Sysbenchのコンパイルに必要な前提条件、ライブラリ、およびツールをインストールする必要があります。

    [email protected]:~# apt install git automake libtool make libssl-dev pkg-config libmysqlclient-dev

    次に、sysbenchリポジトリのクローンを作成します:

    [email protected]:~# git clone https://github.com/akopytov/sysbench.git

    最後に、Sysbenchをコンパイルしてインストールします:

    [email protected]:~# cd sysbench/
    
    [email protected]:~/sysbench# ./autogen.sh && ./configure && make && make install

    これで、Sysbenchがインストールされました。次に、いくつかのデータを生成する必要があります。そのためには、まずスキーマを作成する必要があります。ローカルProxySQLに接続し、それを介してマスター上に「sbtest」スキーマを作成します。 ProxySQLとの接続にUnixソケットを使用したことに注意してください。

    [email protected]:~/sysbench# mysql -S /tmp/proxysql.sock -u sbtest -psbtest
    
    mysql> CREATE DATABASE sbtest;
    
    Query OK, 1 row affected (0.01 sec)

    これで、sysbenchを使用してデータベースにデータを入力できます。繰り返しになりますが、プロキシとの接続にはUnixソケットを使用します:

    [email protected]:~# sysbench /root/sysbench/src/lua/oltp_read_write.lua --threads=4 --events=0 --time=3600 --mysql-socket=/tmp/proxysql.sock --mysql-user=sbtest --mysql-password=sbtest --tables=32 --report-interval=1 --skip-trx=on --table-size=100000 --db-ps-mode=disable prepare

    データの準備ができたら、テストに進むことができます。

    結論

    このブログの第2部では、ProxySQLの接続の処理、フェイルオーバー、およびアプリケーションへの影響を最小限に抑える方法でマスタースイッチを管理するのに役立つ設定について説明します。


    1. SelectでID列名を指定せずにID列の値を取得する方法-SQLServer/T-SQLチュートリアルパート46

    2. SQL ServerでFORMAT()を使用するときに不変カルチャを指定する方法

    3. Oracleデータベースの日時値から分を取得する2つの方法

    4. 入力ファイルはテキスト形式のダンプのようです。 psqlを使用してください