Gtid+MGR+atlas読み書き分離および負荷分散高可用性アーキテクチャ
MySQL5.7.24 Gtid+MGR+atlas読み書き分離及び負荷等化高可用性アーキテクチャ
一.サーバ環境の紹介:
テンセントクラウドのクラウドホストは360オープンソースのmysql中間キーAtlasテンセントクラウドマシンの外部ネットワークip:19.29.97.131滄州233をインストールして物理マシンの外部ネットワークip 192をテストする.168.1.233(安全のためにわざとイントラネットに書いたipは、実はイントラネットipです)
二.mysqlGtid+MGRインストール
参考ブログアドレス:https://blog.51cto.com/wujianwei/2336812
三.中間キーAtlasの概要
(抜粋:https://github.com/Qihoo360/Atlas)
AtlasはQihoo 360社のWebプラットフォーム部インフラストラクチャチームが開発・維持するMySQLプロトコルに基づくデータ中間層プロジェクトである.MySQLが公式に発表したMySQL-Proxy 0.8.2バージョンに加え、多くのバグを修正し、多くの機能特性を追加しました.現在、このプロジェクトは360社内で広く応用されており、多くのMySQL業務がAtlasプラットフォームに接続されており、毎日の読み書き要求数は数十億件に達している.また、50社以上の企業が生産環境にAtlasを導入し、800人以上が開発者のコミュニケーショングループに参加し、これらの数字は増加しています.主な機能:1.読み書き分離2.ライブラリからの負荷分散3.IPフィルタ4.自動分割表5.DBAは上下線DB 6を滑らかにすることができる.ダウンタイムDBの自動取り外し
公式リンク:https://github.com/Qihoo360/Atlas
Atlasの構成パラメータおよび原理の詳細については、次の文書を参照してください.https://github.com/Qihoo360/Atlas/wiki/Atlas部分配置パラメータと原理の詳細
Atlasの実行およびよくある質問については、次の文書を参照してください.https://github.com/Qihoo360/Atlas/wiki/Atlasの運用およびFAQ
四.Atlasのインストールと構成手順:
4.1 Atlasプロファイルの編集:
データベース内のユーザーの準備
テンセントクラウドのクラウドホストにログインしてリモートで192.168.1.233マシンのmysqlインスタンスにログインできるかどうかをテストします
テストはログイン可能です
データベースを使用するユーザーパスワードの暗号化:/usr/local/mysql-proxy/bin/encrypt jianweiuserの実行
パスワード列W 7 moDRl 9 VZ 8 jaj+4 argKVA==atlasのプロファイルmgrmulに追加する.cnf
プロファイルの詳細パラメータの説明の参考:https://github.com/Qihoo360/Atlas/wiki/Atlasのインストール
4.2プレゼンテーション環境で使用可能なプロファイルの内容は次のとおりです.
4.3 Atlas重要パラメータの紹介:
五.Atlasアプリケーションのデモ
5.1 Atlasの管理ポートのデモ:
Atlas管理インタフェースにログインして動的にmysqlをオンラインとオフラインのノードを行い、各mysqlノードの状態を表示し、ログイン可能なクライアントのip情報を表示し、オンラインでクライアントのipを追加と削除してAtlasをリンクすることができ、オンラインで現在Atlasにログインできるユーザーを表示し、オンラインでAtlasを追加と削除できるアカウントとパスワードを表示することができます.オンラインでデータを追加してAtlasのプロファイルなどに保存できる
5.2 Aatlas負荷等化機能:
ヒント:テンセントクラウドホストは自機の外網のipがAtlasのポートにアクセスすることを許可します:1200だからテンセントクラウドのコンソールの安全なグループの中で運行するクラウドホストの外網のipが1200ポートにアクセスすることを設置します
読み取り専用負荷等化テスト:select@@port、ポート区分が異なる読み取り可能mysqlインスタンスから表示されます.
SQLログから見た負荷分散機能
5.3 Atlas読み書き分離テスト
読み書き分離テスト:Atlasエージェントのメカニズムは、プロファイルに記録されている書き込み可能なノードの最初の書き込みにのみ使用可能であることを決定し、最初の書き込みが使用できない場合は2番目にアクセスし、使用可能なものが見つかるまでホストにのみ書き込みます.読むとプロファイル内のすべての読み取り可能なノードから読みます.
テスト用のテストテーブルを作成するには、次の手順に従います.
sqlログを表示すると、読み書き分離が実現されていることがわかります.
masteインスタンスmysql 3306のデモを閉じる
[root@localhost ~]#/etc/init.d/mysqld stopShutting down MySQL............. SUCCESS! [root@localhost ~]#
test 02ライブラリとtest 02テストテーブルを作成します.
ライトライブラリがmysql 3307インスタンスに切り替わり、リードライブラリがmysql 3307とmysql 3308インスタンスの間で輪訓的に切り替わることが分かった.
ヒント:以上のMGRはmulti master方式で実証されていますが、デフォルトのsingle masterモードを採用すると、read-onlyなどの再選主に問題が発生し、新しい主ライブラリが書き込めないことをヒントにします.
Gtid+MGR+atlas読み書き分離と負荷均衡高可用性アーキテクチャのプレゼンテーションはこれで終わり、学生たちと一緒に交流し、勉強することを歓迎します.
一.サーバ環境の紹介:
テンセントクラウドのクラウドホストは360オープンソースのmysql中間キーAtlasテンセントクラウドマシンの外部ネットワークip:19.29.97.131滄州233をインストールして物理マシンの外部ネットワークip 192をテストする.168.1.233(安全のためにわざとイントラネットに書いたipは、実はイントラネットipです)
二.mysqlGtid+MGRインストール
参考ブログアドレス:https://blog.51cto.com/wujianwei/2336812
三.中間キーAtlasの概要
(抜粋:https://github.com/Qihoo360/Atlas)
AtlasはQihoo 360社のWebプラットフォーム部インフラストラクチャチームが開発・維持するMySQLプロトコルに基づくデータ中間層プロジェクトである.MySQLが公式に発表したMySQL-Proxy 0.8.2バージョンに加え、多くのバグを修正し、多くの機能特性を追加しました.現在、このプロジェクトは360社内で広く応用されており、多くのMySQL業務がAtlasプラットフォームに接続されており、毎日の読み書き要求数は数十億件に達している.また、50社以上の企業が生産環境にAtlasを導入し、800人以上が開発者のコミュニケーショングループに参加し、これらの数字は増加しています.主な機能:1.読み書き分離2.ライブラリからの負荷分散3.IPフィルタ4.自動分割表5.DBAは上下線DB 6を滑らかにすることができる.ダウンタイムDBの自動取り外し
公式リンク:https://github.com/Qihoo360/Atlas
Atlasの構成パラメータおよび原理の詳細については、次の文書を参照してください.https://github.com/Qihoo360/Atlas/wiki/Atlas部分配置パラメータと原理の詳細
Atlasの実行およびよくある質問については、次の文書を参照してください.https://github.com/Qihoo360/Atlas/wiki/Atlasの運用およびFAQ
四.Atlasのインストールと構成手順:
wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
yum -y localinstall Atlas-2.2.1.el6.x86_64.rpm
Atlas
/usr/local/mysql-proxy/bin/mysql-proxyd mgrmul start
/usr/local/mysql-proxy/bin/mysql-proxyd mgrmul stop
/usr/local/mysql-proxy/bin/mysql-proxyd mgrmul status
/usr/local/mysql-proxy/bin/mysql-proxyd mgrmul restart
4.1 Atlasプロファイルの編集:
データベース内のユーザーの準備
MGR mysql3306 ,mysql3307 mysql3308 slave
mysql3306 sql , mysql3307 mysql3308
grant all on *.* to jianweiuser@'119.29.97.131' identified by 'jianwei@559886';flush privileges;
テンセントクラウドのクラウドホストにログインしてリモートで192.168.1.233マシンのmysqlインスタンスにログインできるかどうかをテストします
mysql -ujianweiuser -p'jianwei@559886' -h192.168.1.233 -P3306
mysql -ujianweiuser -p'jianwei@559886' -h192.168.1.233 -P3307
mysql -ujianweiuser -p'jianwei@559886' -h192.168.1.233 -P3308
テストはログイン可能です
データベースを使用するユーザーパスワードの暗号化:/usr/local/mysql-proxy/bin/encrypt jianweiuserの実行
パスワード列W 7 moDRl 9 VZ 8 jaj+4 argKVA==atlasのプロファイルmgrmulに追加する.cnf
プロファイルの詳細パラメータの説明の参考:https://github.com/Qihoo360/Atlas/wiki/Atlasのインストール
4.2プレゼンテーション環境で使用可能なプロファイルの内容は次のとおりです.
[root@VM_82_178_centos ~]# cat /usr/local/mysql-proxy/conf/mgrmul.cnf
[mysql-proxy]
# #
#
admin-username = zykjwtest
#
admin-password = zykjwtest01
#Atlas MySQL IP , ,
proxy-backend-addresses=192.168.1.233:3306,192.168.1.233:3307,192.168.1.233:3308
#Atlas MySQL IP ,@ , , 1, ,
proxy-read-only-backend-addresses = 192.168.1.233:3307@1,192.168.1.233:3308@1
# MySQL , PREFIX/bin encrypt , user1 user2 , MySQL !
pwds = 01test:XU7LYbEX2MY62nXU/3RMPA==, jianweiuser:XU7LYbEX2MY12rq2Ryj6/g==
# Atlas , true , false , false, true,true 。
daemon = true
# Atlas , true Atlas , monitor, worker,monitor worker , false worker, monitor, false, true,true 。
keepalive = true
# , Atlas ,
event-threads = 4
# , message、warning、critical、error、debug
log-level = warning
#
log-path = /usr/local/mysql-proxy/log
#SQL , OFF、ON、REALTIME,OFF SQL ,ON SQL ,REALTIME SQL , OFF
sql-log = REALTIME
# 。 , sql-log-slow( :ms) 。 。
#sql-log-slow = 10
# , Atlas
instance = mgrmul
#Atlas IP
proxy-address = 0.0.0.0:1200
#Atlas IP
admin-address = 0.0.0.0:1300
# , person ,mt ,id ,3 , , ,
#tables = person.mt.id.3
# , SET NAMES
#charset = utf8
# Atlas IP, IP, IP , , IP , IP
client-ips = 127.0.0.1, 192.168.1, 119.29.97.131
#Atlas LVS IP( IP), LVS client-ips ,
#lvs-ips = 192.168.1.1
[root@VM_82_178_centos ~]#
4.3 Atlas重要パラメータの紹介:
(1)Atlas
proxy-address , proxy-address = 0.0.0.0:1200 1200 Atlas SQL 。
(2)Atlas
admin-address , admin-address = 0.0.0.0:1300 DBA 1300 Atlas 。
(3)
admin-username admin-password , Atlas , MySQL , , MySQL 。
(4) , mysql ,
pwds = 01test:XU7LYbEX2MY62nXU/3RMPA==, jianweiuser:XU7LYbEX2MY12rq2Ryj6/g==
(5) Atlas IP, IP, IP , , > IP , IP
client-ips = 127.0.0.1, 192.168.1, 119.29.97.131
(6)#SQL , OFF、ON、REALTIME,OFF SQL ,ON SQL ,REALTIME SQL , OFF
sql-log = REALTIME ### , , sql SQL
(7)mgrmul.cnf instance
mgrmul conf , instance ,
[root@VM_82_178_centos conf]# grep mgrmul /usr/local/mysql-proxy/conf/mgrmul.cnf
instance = mgrmul
五.Atlasアプリケーションのデモ
5.1 Atlasの管理ポートのデモ:
Atlas管理インタフェースにログインして動的にmysqlをオンラインとオフラインのノードを行い、各mysqlノードの状態を表示し、ログイン可能なクライアントのip情報を表示し、オンラインでクライアントのipを追加と削除してAtlasをリンクすることができ、オンラインで現在Atlasにログインできるユーザーを表示し、オンラインでAtlasを追加と削除できるアカウントとパスワードを表示することができます.オンラインでデータを追加してAtlasのプロファイルなどに保存できる
[root@VM_82_178_centos ~]# mysql -uzykjwtest -p'zykjwtest01' -P1300
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'zykjwtest'@'localhost' (using password: YES)
[root@VM_82_178_centos ~]# mysql -uzykjwtest -p'zykjwtest01' -h127.0.0.1 -P1300
[email protected] [(none)]>SELECT * FROM help;
+----------------------------+---------------------------------------------------------+
| command | description |
+----------------------------+---------------------------------------------------------+
| SELECT * FROM help | shows this help |
| SELECT * FROM backends | lists the backends and their state |
| SET OFFLINE $backend_id | offline backend server, $backend_id is backend_ndx's id |
| SET ONLINE $backend_id | online backend server, ... |
| ADD MASTER $backend | example: "add master 127.0.0.1:3306", ... |
| ADD SLAVE $backend | example: "add slave 127.0.0.1:3306", ... |
| REMOVE BACKEND $backend_id | example: "remove backend 1", ... |
| SELECT * FROM clients | lists the clients |
| ADD CLIENT $client | example: "add client 192.168.1.2", ... |
| REMOVE CLIENT $client | example: "remove client 192.168.1.2", ... |
| SELECT * FROM pwds | lists the pwds |
| ADD PWD $pwd | example: "add pwd user:raw_password", ... |
| ADD ENPWD $pwd | example: "add enpwd user:encrypted_password", ... |
| REMOVE PWD $pwd | example: "remove pwd user", ... |
| SAVE CONFIG | save the backends to config file |
| SELECT VERSION | display the version of Atlas |
+----------------------------+---------------------------------------------------------+
16 rows in set (0.01 sec)
[email protected] [(none)]>SELECT * FROM backends;
+-------------+--------------------+-------+------+
| backend_ndx | address | state | type |
+-------------+--------------------+-------+------+
| 1 | 192.168.1.233:3306 | up | rw |
| 2 | 192.168.1.233:3307 | up | rw |
| 3 | 192.168.1.233:3308 | up | rw |
| 4 | 192.168.1.233:3307 | up | ro |
| 5 | 192.168.1.233:3308 | up | ro |
+-------------+--------------------+-------+------+
5 rows in set (0.00 sec)
[email protected] [(none)]>
5.2 Aatlas負荷等化機能:
ヒント:テンセントクラウドホストは自機の外網のipがAtlasのポートにアクセスすることを許可します:1200だからテンセントクラウドのコンソールの安全なグループの中で運行するクラウドホストの外網のipが1200ポートにアクセスすることを設置します
読み取り専用負荷等化テスト:select@@port、ポート区分が異なる読み取り可能mysqlインスタンスから表示されます.
[root@VM_82_178_centos ~]# mysql -ujianweiuser -p'jianwei@559886' -h127.0.0.1 -P1200
[email protected] [(none)]>select @@port;
+--------+
| @@port |
+--------+
| 3307 |
+--------+
1 row in set (0.04 sec)
[email protected] [(none)]>select @@port;
+--------+
| @@port |
+--------+
| 3308 |
+--------+
1 row in set (0.05 sec)
[email protected] [(none)]>
[root@VM_82_178_centos ~]# tailf /usr/local/mysql-proxy/log/sql_mgrmul.log
[12/29/2018 22:03:08] C:127.0.0.1:34600 S:192.168.1.233:3307 OK 43.210 "select @@port"
[12/29/2018 22:03:11] C:127.0.0.1:34600 S:192.168.1.233:3308 OK 42.856 "select @@port"
SQLログから見た負荷分散機能
5.3 Atlas読み書き分離テスト
読み書き分離テスト:Atlasエージェントのメカニズムは、プロファイルに記録されている書き込み可能なノードの最初の書き込みにのみ使用可能であることを決定し、最初の書き込みが使用できない場合は2番目にアクセスし、使用可能なものが見つかるまでホストにのみ書き込みます.読むとプロファイル内のすべての読み取り可能なノードから読みます.
mysql -ujianweiuser -p'jianwei@559886' -h127.0.0.1 -P1200
mysql -ujianweiuser -p'jianwei@559886' -h119.29.97.131 -P1200
テスト用のテストテーブルを作成するには、次の手順に従います.
create database test01;use test01;
CREATE TABLE `test01` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`titles` char(15) NOT NULL,
`icon` smallint(6) unsigned DEFAULT '0',
`integral` int(10) NOT NULL DEFAULT '0',
`isdefault` tinyint(1) unsigned NOT NULL DEFAULT '0',
`create_time` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `integral` (`integral`)
) ENGINE=Innodb AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
insert into test01.test01 values(1,' ',1,0,1,now());
insert into test01.test01 values(2,' ',2,1000,1,now());
sqlログを表示すると、読み書き分離が実現されていることがわかります.
[root@VM_82_178_centos ~]# tailf /usr/local/mysql-proxy/log/sql_mgrmul.log
[12/29/2018 22:07:23] C:127.0.0.1:34600 S:192.168.1.233:3306 OK 50.116 "create database test01"
[12/29/2018 22:07:23] C:127.0.0.1:34600 S:192.168.1.233:3307 OK 43.100 "SELECT DATABASE()"
[12/29/2018 22:07:23] C:127.0.0.1:34600 S:192.168.1.233:3307 OK 86.225 "show databases"
[12/29/2018 22:07:24] C:127.0.0.1:34600 S:192.168.1.233:3308 OK 85.390 "show tables"
[12/29/2018 22:07:35] C:127.0.0.1:34600 S:192.168.1.233:3306 OK 148.760 "CREATE TABLE `test01` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`titles` char(15) NOT NULL,
`icon` smallint(6) unsigned DEFAULT '0',
`integral` int(10) NOT NULL DEFAULT '0',
`isdefault` tinyint(1) unsigned NOT NULL DEFAULT '0',
`create_time` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `integral` (`integral`)
) ENGINE=Innodb AUTO_INCREMENT=0 DEFAULT CHARSET=utf8"
[12/29/2018 22:09:00] C:127.0.0.1:34600 S:192.168.1.233:3306 OK 95.845 "insert into test01.test01 values(1,' ',1,0,1,now())"
[12/29/2018 22:09:01] C:127.0.0.1:34600 S:192.168.1.233:3306 OK 96.185 "insert into test01.test01 values(2,' ',2,1000,1,now())"
[12/29/2018 22:09:37] C:127.0.0.1:34600 S:192.168.1.233:3306 OK 86.894 "select * from test01.test01"
[12/29/2018 22:09:39] C:127.0.0.1:34600 S:192.168.1.233:3307 OK 86.323 "select * from test01.test01"
[12/29/2018 22:11:19] C:119.29.97.131:35378 S:192.168.1.233:3308 OK 277.726 "select @@version_comment limit 1"
[12/29/2018 22:11:19] C:119.29.97.131:35378 S:192.168.1.233:3307 OK 277.027 "select USER()"
masteインスタンスmysql 3306のデモを閉じる
[root@localhost ~]#/etc/init.d/mysqld stopShutting down MySQL............. SUCCESS! [root@localhost ~]#
test 02ライブラリとtest 02テストテーブルを作成します.
mysql -ujianweiuser -p'jianwei@559886' -h119.29.97.131 -P1200
create database test02;use test02;
CREATE TABLE `test02` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`titles` char(15) NOT NULL,
`icon` smallint(6) unsigned DEFAULT '0',
`integral` int(10) NOT NULL DEFAULT '0',
`isdefault` tinyint(1) unsigned NOT NULL DEFAULT '0',
`create_time` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `integral` (`integral`)
) ENGINE=Innodb AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
insert into test02.test02 values(1,' ',1,0,1,now());
insert into test02.test02 values(2,' ',2,1000,1,now());
select * from test01.test01;select * from test02.test02;
ライトライブラリがmysql 3307インスタンスに切り替わり、リードライブラリがmysql 3307とmysql 3308インスタンスの間で輪訓的に切り替わることが分かった.
[root@VM_82_178_centos ~]# tailf /usr/local/mysql-proxy/log/sql_mgrmul.log
[12/29/2018 22:23:15] C:119.29.97.131:36168 S:192.168.1.233:3308 OK 42.392 "select @@version_comment limit 1"
[12/29/2018 22:23:15] C:119.29.97.131:36168 S:192.168.1.233:3307 OK 41.100 "select USER()"
[12/29/2018 22:25:20] C:119.29.97.131:36168 S:192.168.1.233:3307 OK 304.954 "create database test02"
[12/29/2018 22:25:20] C:119.29.97.131:36168 S:192.168.1.233:3308 OK 42.489 "SELECT DATABASE()"
[12/29/2018 22:25:21] C:119.29.97.131:36168 S:192.168.1.233:3308 OK 85.458 "show databases"
[12/29/2018 22:25:21] C:119.29.97.131:36168 S:192.168.1.233:3307 OK 77.739 "show tables"
[12/29/2018 22:25:21] C:119.29.97.131:36168 S:192.168.1.233:3307 OK 139.017 "CREATE TABLE `test02` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`titles` char(15) NOT NULL,
`icon` smallint(6) unsigned DEFAULT '0',
`integral` int(10) NOT NULL DEFAULT '0',
`isdefault` tinyint(1) unsigned NOT NULL DEFAULT '0',
`create_time` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `integral` (`integral`)
) ENGINE=Innodb AUTO_INCREMENT=0 DEFAULT CHARSET=utf8"
[12/29/2018 22:25:21] C:119.29.97.131:36168 S:192.168.1.233:3307 OK 93.835 "insert into test02.test02 values(1,' ',1,0,1,now())"
[12/29/2018 22:25:24] C:119.29.97.131:36168 S:192.168.1.233:3307 OK 92.871 "insert into test02.test02 values(2,' ',2,1000,1,now())"
[12/29/2018 22:27:53] C:119.29.97.131:36168 S:192.168.1.233:3307 OK 85.442 "select * from test01.test01"
[12/29/2018 22:27:53] C:119.29.97.131:36168 S:192.168.1.233:3308 OK 84.813 "select * from test02.test02"
ヒント:以上のMGRはmulti master方式で実証されていますが、デフォルトのsingle masterモードを採用すると、read-onlyなどの再選主に問題が発生し、新しい主ライブラリが書き込めないことをヒントにします.
Gtid+MGR+atlas読み書き分離と負荷均衡高可用性アーキテクチャのプレゼンテーションはこれで終わり、学生たちと一緒に交流し、勉強することを歓迎します.