ProxySQL新版本對MGR的原生支援
導讀
譯者:張銳志(微訊號:516160507),知數堂第10期MySQL學員
原文出處:http://lefred.be/content/mysql-group-replication-native-support-in-proxysql/
原文作者:lefred
ProxySQL在MySQL的代理和負載均衡中一直處於領先地位。其中包含了諸如快取查詢,多路複用,流量映象,讀寫分離,路由等等的強力功能。在最新的功能性增強中,包含了對MGR的原生支援,不在需要使用第三方指令碼進行適配。
ProxySQL is the leader in proxy and load balancing solution for MySQL. It has great features like query caching, multiplexing, mirroring, read/write splitting, routing, etc… The latest enhancement in ProxySQL is the
native support of MySQL Group Replication. No more need to use an external script within the scheduler like I explained in this previous post.
最新的增強中,提供了對單寫和多寫叢集組的支援,甚至可以在多寫組上指定只由某個成員進行寫入操作。
This implementation supports Groups in Single-Primary and in Multi-Primary mode. It is even possible to setup a Multi-Primary Group but dedicate writes on only one member.
ProxySQL的主要開發者René,更進一步的可以(利用ProxySQL)做到例如在一個七個節點的多寫叢集中,指定2組寫節點,2組備用寫節點,3個只讀節點的操作。即ProxySQL雖然識別出來所有的節點皆為寫節點,但只路由寫操作到選定的兩個寫節點(通過Hostgroup的方式),同時將另外兩個寫節點新增到備用寫節點組中,最後三個讀節點加入讀組。(本段中的組皆為ProxySQL中的hostgroup含義)。
René, the main developer of ProxySQL, went even further. For example in a 7 nodes clusters (Group of 7 members) where all nodes are writers (Multi-Primary mode), it’s possible to decide to have only 2 writers, 3 readers and 2 backup-writers. This mean that ProxySQL will see all the nodes as possible writers but will only route writes on 2 nodes (add them in the writer hostgroup, because we decided to limit it to 2 writers for example), then it will add the others in the backup-writers group, this group defines the other writer candidates. An finally add 2 in the readers hostgroup.
除此之外,還可以限制連線訪問叢集中超出最大設定落後事務值的慢節點。
It’s also possible to limit the access to a member that is slower in applying the replicated transactions (applying queue reaching a threshold).
ProxySQL從1.4.0版本開始增加對MGR的原生支援,若發行版中沒有,可以從GitHub中編譯獲取。
It is time to have a look at this new ProxySQL version. The version supporting MySQL Group Replication is 1.4.0 and currently is only available on github (but stay tuned for a new release soon).
下面我們看下對於使用者來說有哪些明顯的變化,開始進行admin埠連線後會發現比之前多了一個mysql_group_replication_hostgroups
表
So let’s have a look at what is new for users. When you connect to the admin interface of ProxySQL, you can see a new table:
mysql_group_replication_hostgroups
我們將在這個表中進行節點的歸屬組(hostgroup)的設定。
This is the table we will use to setup in which hostgroup a node will belongs.
為了闡明ProxySQL 對MGR支援的原理,下面我會用到一個三節點的叢集。
To illustrate how ProxySQL supports MySQL Group Replication, I will use a cluster of 3 nodes:
name | ip |
---|---|
mysql1 | 192.168.90.2 |
mysql2 | 192.168.90.3 |
mysql3 | 192.168.90.4 |
首先,我們照舊插入三個節點的資訊到mysql_servers
表中。
So first, as usual we need to add our 3 members into the
mysql_servers
table:
在設定MGR節點在ProxySQL中的行為之前,先檢視下新加入的mysql_group_replication_hostgroups
表的DDL。
Now we can setup ProxySQL’s behavior with our Group Replication cluster, but before let’s check the definition of the new
mysql_group_replication_hostgroups
table:
看一下之前沒有出現過的新列的含義
There are many new columns, let’s have a look at their meaning:
Column Name | Description |
---|---|
writer_hostgroup | the id of the hostgroup that will contain all the members that are writer |
backup_writer_hostgroup | if the group is running in multi-primary mode, there are multi writers (read_only=0) but if the amount of these writer is larger than the max_writers, the extra nodes are located in that backup writer group |
reader_hostgroup | the id of the hostgroup that will contain all the members in read_only |
offline_hostgroup | the id of the hostgroup that will contain the host not being online or not being part of the Group |
active | when enabled, ProxySQL monitors the Group and move the server according in the appropriate hostgroups |
max_writers | limit the amount of nodes in the writer hostgroup in case of group in multi-primary mode |
writer_is_also_reader | boolean value, 0 or 1, when enabled, a node in the writer hostgroup will also belongs the the reader hostgroup |
熟悉了表的定義後,整個拓補將會如下圖所示:
Now that we are (or should be) more familiar with that table, we will set it up like this:
下面我們將MGR叢集的分組定義和關鍵引數寫入
mysql_group_replication_hostgroups
表中
So let’s add this:
然後將新更改的配置儲存到磁碟上,並載入到執行環境。
We should not forget to save our mysql servers to disk and load them on runtime:
同時,我們需要在MGR中新增如下的檢視,及其依賴的儲存過程。
It’s also important with the current version of MySQL Group Replication to add a view and its dependencies in sys schema: addition_to_sys.sql:
如此,我們便可以從MGR叢集中任意一個節點上執行下面的語句獲取MGR成員的基本資訊,ProxySQL 也是根據這個辦法進行監測節點的健康與落後情況。
So now from every members of the group, we can run the following statement. ProxySQL based its internal monitoring this same view:
同時,我們需要講sys庫的讀許可權賦給ProxySQL配置的監控MySQL的賬戶:
We also must not forget to create in our cluster the monitor user needed by ProxySQL:
接下來,我們馬上檢查下ProxySQL是如何將MGR節點分發到ProxySQL各個組中:
We can immediately check how ProxySQL has distributed the servers in the hostgroups :
寫節點被分配到之前定義好的ID為2的寫組中,其他所有的節點被分配到ID為3的只讀組中。(單寫模式)
The Writer (Primary-Master) is mysql1 (192.168.90.2 in hostgroup 2) and the others are in the read hostgroup (id=3).
這樣,我們就省掉了通過定時器去呼叫第三方複雜定義的指令碼將MGR節點匹配並分配到對應的ProxySQL組中的操作。
As you can see, there is no more need to create a scheduler calling an external script with complex rules to move the servers in the right hostgroup.
接下來,你就可以按照之前的做法對ProxySQL進行配置,例如關聯使用者到預設ProxySQL組中,或者新增查詢路由規則。
Now to use the proxy, it’s exactly as usual, you need to create users associated to default hostgroup or add routing rules.
另外,ProxySQL比之前多了一個監控MySQL例項的表,具體資訊如下面所示:
An extra table has also been added for monitoring:
Enjoy MySQL Group Replication & ProxySQL !
掃碼加入知數堂技術交流QQ群
(群號:579036588)
群內可@各位助教了解更多課程資訊
知數堂
葉金榮與吳炳錫聯合打造
領跑IT精英培訓
行業資深專家強強聯合,傾心定製
MySQL實戰/MySQL優化/大資料實戰 / Python/ SQL優化
數門精品課程
緊隨技術發展趨勢,定期優化培訓教案
融入大量生產案例,貼合企業一線需求
社群陪伴學習,一次報名,可學1年
DBA、開發工程師必修課
上千位學員已華麗轉身,薪資翻番,職位提升
改變已悄然發生,你還在等什麼?
掃碼下載知數堂精品課程試聽視訊
(MySQL 實戰/優化、大資料實戰、Python開發,及SQL優化等課程)
密碼:hg3h