メインコンテンツまでスキップ

Load balance

ロードバランシング

複数のFEノードをデプロイする場合、高可用性を実現するために、FEの上にロードバランスレイヤーをデプロイすることができます。

以下はいくつかの高可用性のオプションです:

コードアプローチ

一つの方法は、アプリケーションレイヤーにコードを実装して、再試行とロードバランシングを行うことです。たとえば、接続が切断された場合、他の接続で自動的に再試行します。このアプローチでは、ユーザーが複数のFEノードのアドレスを設定する必要があります。

JDBCコネクタ

JDBCコネクタは自動的な再試行をサポートしています:

jdbc:mysql:loadbalance://[ホスト1][:ポート],[ホスト2][:ポート][,[ホスト3][:ポート]]...[/[データベース]][?プロパティ名1=プロパティ値1[&プロパティ名2=プロパティ値2]...]

ProxySQL

ProxySQLはMySQLプロキシレイヤーであり、読み書きの分離、クエリのルーティング、SQLキャッシュ、動的なロードの設定、フェイルオーバー、SQLフィルタリングをサポートしています。

StarRocksのFEは接続とクエリのリクエストを受け付ける責任があり、水平にスケーラブルで高可用性です。ただし、FEは自動的なロードバランシングを実現するために、その上にプロキシレイヤーを設定する必要があります。セットアップの手順は以下の通りです:

1. 関連する依存関係をインストールする

yum install -y gnutls perl-DBD-MySQL perl-DBI perl-devel

2. インストールパッケージをダウンロードする

wget https://github.com/sysown/proxysql/releases/download/v2.0.14/proxysql-2.0.14-1-centos7.x86_64.rpm

3. カレントディレクトリに展開する

rpm2cpio proxysql-2.0.14-1-centos7.x86_64.rpm | cpio -ivdm

4. 設定ファイルを編集する

vim ./etc/proxysql.cnf

ユーザーがアクセス権限を持っているディレクトリに移動します(絶対パス):

datadir="/var/lib/proxysql"
errorlog="/var/lib/proxysql/proxysql.log"

5. 開始する

./usr/bin/proxysql -c ./etc/proxysql.cnf --no-monitor

6. ログインする

mysql -u admin -padmin -h 127.0.0.1 -P6032

7. グローバルログを設定する

SET mysql-eventslog_filename='proxysql_queries.log';
SET mysql-eventslog_default_log=1;
SET mysql-eventslog_format=2;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;

8. リーダーノードに挿入する

insert into mysql_servers(hostgroup_id, hostname, port) values(1, '172.26.92.139', 8533);

9. オブザーバーノードを挿入する

insert into mysql_servers(hostgroup_id, hostname, port) values(2, '172.26.34.139', 9931);
insert into mysql_servers(hostgroup_id, hostname, port) values(2, '172.26.34.140', 9931);

10. 設定をロードする

load mysql servers to runtime;
save mysql servers to disk;

11. ユーザー名とパスワードを設定する

insert into mysql_users(username, password, active, default_hostgroup, backend, frontend) values('root', '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29', 1, 1, 1, 1);

12. 設定をロードする

load mysql users to runtime; 
save mysql users to disk;

13. プロキシルールに書き込む

insert into mysql_query_rules(rule_id, active, match_digest, destination_hostgroup, mirror_hostgroup, apply) values(1, 1, '.', 1, 2, 1);

14. 設定をロードする

load mysql query rules to runtime; 
save mysql query rules to disk;