MySQL Router的安裝部署
01 MySQL Router介紹
前面的文章中,我們說瞭ReplicaSet的基本概念MySQL Shell工具以及如何使用MySQL Shell搭建Innodb Replicaset。今天我們來看InnoDB ReplicaSet部署過程中的另一個重要組件MySQL Router。
MySQL Router是什麼?
為瞭更好的理解Innodb Replicaset,我們把之前的那張圖搬遷過來,如下:
通過上面的圖,不難看出,MySQL Router是應用程序連接的入口,它的存在,讓底層的架構對應用程序透明,應用程序隻需要連接MySQL Router就可以和底層的數據庫打交道,而數據庫的主從架構,都是記錄在MySQL Router的原信息裡面的。
版本
MySQL Router是MySQL官方的一款輕量級的高性能中間件,它介於應用程序和MySQL Server之間,應用程序通過連接MySQL Router和底層的MySQL Server之間通信,它對應用程序是透明的。官方文檔建議搭配MySQL8.0或者MySQL5.7的Server使用。目前最新的版本是MySQL Router 8,如果您使用過MySQL Router的2.0或者2.1版本,強烈建議升級到MySQL Router 8。
MySQL Router特點?
1、對應用透明。MySQL Router要做到對應用透明,它必須連接底層的MySQL,並知道當前哪個節點是Primary,這樣,才能夠在發生故障的時候進行故障轉移。
2、使用場景。基於這個特性,它可以用在Innodb Cluster、Innodb Replicaset或者MGR的環境中。
3、MySQL Router會保留在線的MySQL實例的緩存列表,或者已經配置好的Innodb Cluster集群的拓撲關系,除此啟動的時候,這些信息將從MySQL Router的配置表中獲取。
4、為保證緩存中的元信息能夠得到即時更新,MySQL Router需要保證至少能夠和集群中的一個正常節點保持通信,它會從當前實例的Performance_schema表中獲取數據庫的原信息和實時狀態。
5、當集群中和MySQL Router通信的節點關閉時,MySQL Router會嘗試訪問集群中的其他節點。並重新獲取相關元數據信息。
02 MySQL Router的安裝部署
為瞭獲取更好的性能,通常情況下,MySQL Router會和應用程序部署在一起,這通常是基於下面的考慮:
1、可以通過socket套接字連接到MySQL Router,而不是tcp/ip方法
2、減少瞭網絡上的延時
3、可以配置指定的賬戶來訪問數據庫,例如myapp@’host’而不是類似myapp@’%’這種全網段的賬號,有利於提升安全性
4、通常,相比數據庫服務器,應用服務器更容易擴展。
官方給的部署架構圖如下:
下載安裝過程:
1、直接登錄官網下載MySQL Router的對應版本。
https://downloads.mysql.com/archives/router/
2、下載完成之後,解壓,以8.0.20為例,由於是tar.xz格式的文件,解壓命令如下:
xz -d xxx.tar.xz (解壓成tar格式)
tar xvf xxx.tar (即可)
接下來就是初始化過程瞭,初始化的時候,需要我們的MySQL Server部署完畢,在之前的文章中,我們已經部署好瞭一個Innodb Replicaset架構,它有一主一從,IP地址分別是:
192.168.1.10 5607 Primary
192.168.1.20 5607 Secondary
初始化過程:
1、利用初始化命令初始化MySQL Router:
mysqlrouter --bootstrap superdba@'10.13.3.129':5607 --directory /data1/yazhou5/mysql/mysql-router --conf-use-sockets --account routerfriend --account-create always
這裡,需要解釋一下其中的幾個參數:
--bootstrap 代表引導的實例,後面接一個連接信息的URL; --directory 代表生成的配置目錄 --conf-use-sockets 代表是否啟用套接字連接(是否生成套接字文件) --account 代表初始化後MySQL Router使用什麼賬號連接MySQL Server --account-create 代表賬號創建策略,always代表隻有在account不存在的時候才進行bootstrap操作
這個命令敲下去之後,返回報錯信息如下:
Error: You are bootstraping as a superuser. This will make all the result files (config etc.) privately owned by the superuser. Please use --user=username option to specify the user that will be running the router. Use --user=root if this really should be the superuser.
系統檢測到我們使用root賬號來進行的MySQL Router初始化,提示我們如果使用root操作,需要在最後面補充–user=root
2、補充–user=root之後,重新執行命令,結果如下:
[root mysql-router]# /usr/local/mysql-router-8.0.20/bin/mysqlrouter --bootstrap [email protected]:5607 --directory /data1/yazhou5/mysql/mysql-router --conf-use-sockets --account routerfriend --account-create always --user=root --force Please enter MySQL password for superdba: # 這裡輸入我們已知的superdba賬號密碼 # Bootstrapping MySQL Router instance at '/data1/yazhou5/mysql/mysql-router'... Please enter MySQL password for routerfriend: # 這裡創建新的account賬號的密碼 - Creating account(s) - Verifying account (using it to run SQL queries that would be run by Router) - Storing account in keyring - Adjusting permissions of generated files - Creating configuration /data1/yazhou5/mysql/mysql-router/mysqlrouter.conf # MySQL Router configured for the InnoDB ReplicaSet 'yeyz_test' After this MySQL Router has been started with the generated configuration $ /usr/local/mysql-router-8.0.20/bin/mysqlrouter -c /data1/yazhou5/mysql/mysql-router/mysqlrouter.conf the cluster 'yeyz_test' can be reached by connecting to: ## MySQL Classic protocol - Read/Write Connections: localhost:6446, /data1/yazhou5/mysql/mysql-router/mysql.sock - Read/Only Connections: localhost:6447, /data1/yazhou5/mysql/mysql-router/mysqlro.sock ## MySQL X protocol - Read/Write Connections: localhost:64460, /data1/yazhou5/mysql/mysql-router/mysqlx.sock - Read/Only Connections: localhost:64470, /data1/yazhou5/mysql/mysql-router/mysqlxro.sock
可以看到,提示我們輸入兩次密碼之後,bootstrap的操作就算成功瞭。
3、此時我們進入參數中指定的–directory目錄中,查看生成的初始化文件,可以看到:
drwx------ 2 root root 4096 Apr 12 23:15 data drwx------ 2 root root 4096 Apr 12 23:15 log -rw------- 1 root root 1532 Apr 12 23:15 mysqlrouter.conf -rw------- 1 root root 104 Apr 12 23:15 mysqlrouter.key drwx------ 2 root root 4096 Apr 12 23:15 run -rwx------ 1 root root 353 Apr 12 23:15 start.sh -rwx------ 1 root root 209 Apr 12 23:15 stop.sh
生成瞭一些配置文件和啟停腳本,我們打開這個配置文件mysqlrouter.conf看看內容:
# File automatically generated during MySQL Router bootstrap [DEFAULT] user=root logging_folder=/data1/yazhou5/mysql/mysql-router/log runtime_folder=/data1/yazhou5/mysql/mysql-router/run data_folder=/data1/yazhou5/mysql/mysql-router/data keyring_path=/data1/yazhou5/mysql/mysql-router/data/keyring master_key_path=/data1/yazhou5/mysql/mysql-router/mysqlrouter.key connect_timeout=15 read_timeout=30 dynamic_state=/data1/yazhou5/mysql/mysql-router/data/state.json [logger] level = INFO [metadata_cache:yeyz_test] cluster_type=rs router_id=1 user=routerfriend metadata_cluster=yeyz_test ttl=0.5 auth_cache_ttl=-1 auth_cache_refresh_interval=2 [routing:yeyz_test_rw] bind_address=0.0.0.0 bind_port=6446 socket=/data1/yazhou5/mysql/mysql-router/mysql.sock destinations=metadata-cache://yeyz_test/?role=PRIMARY routing_strategy=first-available protocol=classic [routing:yeyz_test_ro] bind_address=0.0.0.0 bind_port=6447 socket=/data1/yazhou5/mysql/mysql-router/mysqlro.sock destinations=metadata-cache://yeyz_test/?role=SECONDARY routing_strategy=round-robin-with-fallback protocol=classic [routing:yeyz_test_x_rw] bind_address=0.0.0.0 bind_port=64460 socket=/data1/yazhou5/mysql/mysql-router/mysqlx.sock destinations=metadata-cache://yeyz_test/?role=PRIMARY routing_strategy=first-available protocol=x [routing:yeyz_test_x_ro] bind_address=0.0.0.0 bind_port=64470 socket=/data1/yazhou5/mysql/mysql-router/mysqlxro.sock destinations=metadata-cache://yeyz_test/?role=SECONDARY routing_strategy=round-robin-with-fallback protocol=x
4、分析生成的配置文件,不難發現,MySQL Router配置瞭4個端口,分別是6446、6447、64460、64470和對應的套接字文件。
當然,我們可以通過一些參數的配置改變默認的端口和套接字,例如:
--conf-use-sockets:(可選)為所有四種連接類型啟用UNIX域套接字,。 --conf-skip-tcp: (可選)禁用TCP端口,如果隻希望使用套接字,則可以通過--conf-use-sockets傳遞該選項。 --conf-base-port: (可選)更改端口范圍,而不使用默認端口。 默認為6446。 --conf-bind-address:(可選)更改每個路由的bind_address值。
5、使用命令在本地啟動MySQL Router,指定本地生成的配置文件,命令如下:
[root@ mysql-router]# /usr/local/mysql-router-8.0.20/bin/mysqlrouter -c /data1/yazhou5/mysql/mysql-router/mysqlrouter.conf &
啟動之後,我們使用剛才創建的routerfriend賬號以及6446這個讀寫端口來連接MySQL Router:
[root@ mysql-router]# mysql -u routerfriend -h 127.0.0.1 -P 6446 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 95696 Server version: 8.0.19 MySQL Community Server - GPL Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. [email protected] [(none)] 23:42:00> [email protected] [(none)] 23:42:01>select @@port; +--------+ | @@port | +--------+ | 5607 | +--------+ 1 row in set (0.00 sec)
我們通過6446端口連接MySQL Router之後,然後在MySQL Router中執行select @@port命令查看當前的端口號信息,可以看到,返回值是5607,說明MySQL Router已經幫我們路由到瞭底層的MySQL Server上面。
這個routerfriend賬號的權限可能不夠,我們也可以換成superdba的高權限賬號去連接mysqlrouter,這樣就可以對MySQL Server中的庫表進行讀寫操作。
03 查看MySQL Router的元信息
MySQL Router搭建完畢後,可以通過查看元信息庫mysql_innodb_cluster_metadata裡面的表信息,包含cluster表、router表、以及instances表,對應的如下:
[email protected] [mysql_innodb_cluster_metadata] 23:51:20>select * from instances; +-------------+--------------------------------------+--------------------+--------------------------------------+--------------------+----------------------------------------+------------+-------------+ | instance_id | cluster_id | address | mysql_server_uuid | instance_name | addresses | attributes | description | +-------------+--------------------------------------+--------------------+--------------------------------------+--------------------+----------------------------------------+------------+-------------+ | 1 | 94d5f935-990e-11eb-8832-fa163ebd2444 | 192.168.1.10:5607 | 0609f966-690f-11eb-bd89-fa163ebd2444 | 192.168.1.10:5607 | {"mysqlClassic": "192.168.1.10:5607"} | {} | NULL | | 2 | 94d5f935-990e-11eb-8832-fa163ebd2444 | 192.168.1.20:5607 | c6ba0bf0-6d4d-11eb-aa4b-b00875209c1c | 192.168.1.20:5607 | {"mysqlClassic": "192.168.1.20:5607"} | {} | NULL | +-------------+--------------------------------------+--------------------+--------------------------------------+--------------------+----------------------------------------+------------+-------------+ 2 rows in set (0.00 sec) [email protected] [mysql_innodb_cluster_metadata] 23:51:30> [email protected] [mysql_innodb_cluster_metadata] 23:51:30>select * from clusters; +--------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+ | cluster_id | cluster_name | description | options | attributes | cluster_type | primary_mode | router_options | +--------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+ | 94d5f935-990e-11eb-8832-fa163ebd2444 | yeyz_test | Default ReplicaSet | NULL | {"adopted": 0, "opt_gtidSetIsComplete": false} | ar | pm | NULL | +--------------------------------------+--------------+--------------------+---------+------------------------------------------------+--------------+--------------+----------------+ 1 row in set (0.00 sec) [email protected] [mysql_innodb_cluster_metadata] 23:51:57> [email protected] [mysql_innodb_cluster_metadata] 23:51:58>select * from routers; +-----------+-------------+--------------+-------------+---------+---------------------+------------------------------------------------------------------------------------------------------------------------------+--------------------------------------+---------+ | router_id | router_name | product_name | address | version | last_check_in | attributes | cluster_id | options | +-----------+-------------+--------------+-------------+---------+---------------------+------------------------------------------------------------------------------------------------------------------------------+--------------------------------------+---------+ | 1 | | MySQL Router | 10.13.3.129 | 8.0.20 | 2021-04-12 23:52:29 | {"ROEndpoint": "6447", "RWEndpoint": "6446", "ROXEndpoint": "64470", "RWXEndpoint": "64460", "MetadataUser": "routerfriend"} | 94d5f935-990e-11eb-8832-fa163ebd2444 | NULL | +-----------+-------------+--------------+-------------+---------+---------------------+------------------------------------------------------------------------------------------------------------------------------+--------------------------------------+---------+ 1 row in set (0.00 sec)
還可以從表中查看當前的primary節點信息,primary_master字段為1的,即為primary節點。
[email protected] [mysql_innodb_cluster_metadata] 23:52:29>select * from async_cluster_members; +--------------------------------------+---------+-------------+--------------------+----------------+------------------------------------------------------------------------------------------------------------------+ | cluster_id | view_id | instance_id | master_instance_id | primary_master | attributes | +--------------------------------------+---------+-------------+--------------------+----------------+------------------------------------------------------------------------------------------------------------------+ | 94d5f935-990e-11eb-8832-fa163ebd2444 | 2 | 1 | NULL | 1 | {"instance.address": "192.168.1.10:5607", "instance.mysql_server_uuid": "0609f966-690f-11eb-bd89-fa163ebd2444"} | | 94d5f935-990e-11eb-8832-fa163ebd2444 | 3 | 1 | NULL | 1 | {"instance.address": "192.168.1.10:5607", "instance.mysql_server_uuid": "0609f966-690f-11eb-bd89-fa163ebd2444"} | | 94d5f935-990e-11eb-8832-fa163ebd2444 | 3 | 2 | 1 | 0 | {"instance.address": "192.168.1.20:5607", "instance.mysql_server_uuid": "c6ba0bf0-6d4d-11eb-aa4b-b00875209c1c"} | +--------------------------------------+---------+-------------+--------------------+----------------+------------------------------------------------------------------------------------------------------------------+ 3 rows in set (0.01 sec)
以上就是MySQL Router的安裝部署的詳細內容,更多關於MySQL Router的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- None Found