针对 InnoDB Cluster 引导 MySQL Router
MySQLRouter 与代理命令
# Generates config from metadata and creates the router account; --user is required when run as root
mysqlrouter --bootstrap icadmin@db1:3306 --directory /etc/mysqlrouter/prod --account routeruser --account-create if-not-exists --name router01 --conf-bind-address 0.0.0.0 --user mysqlrouter
/etc/mysqlrouter/prod/start.sh
# Ports: 6446 RW, 6447 RO, 6450 RW split (classic); 6448 / 6449 X protocol
mysql -h app-host -P 6446 -u app -p -e "SELECT @@hostname"
mysql -h app-host -P 6447 -u app -p -e "SELECT @@hostname"
mysqlsh icadmin@db1:3306 -- cluster list-routers作用
将 Router 注册到集群元数据中并生成账户和配置;应用通过 RW 端口访问当前主节点,通过 RO 端口以轮询方式访问从节点。
适用场景
在 InnoDB Cluster / ClusterSet / ReplicaSet 前面放置透明的故障转移层时;通常每台应用服务器一个 Router。
注意
Router 是无状态的;在应用旁边运行可避免单点故障,而单个集中式 Router 则不能。引导账户只在引导期间使用;Router 使用自己的账户(routeruser)读取元数据。它通过元数据缓存获知拓扑变化,无需重新引导。RW 分离端口(6450)将事务内的读取发送到主节点,其他读取发送到从节点;对期望 read-your-writes 的应用要小心。Router 版本不得低于集群中的 MySQL 服务器版本。