c mysql 8.0,MySQL Router 8.0 安装及说明

本文详细介绍了MySQL Router 8.0的部署过程,包括配置文件的调整、端口设置及路由策略。重点指出Router的不足,如缺乏自动读写分离功能,不适用于大规模复杂场景。适合初级用户了解基本用法,但对于高级需求可能不够强大。
摘要由CSDN通过智能技术生成

1,461 total views, 4 views today

1、MySQL Router介绍

MySQL Router 是InnoDB Cluster(MySQL shell + Router + master-slave replication)的一部分,轻量级中间件,在应用和后端数据库之间起到透明的路由分发的作用。

MySQL Router 8.0推荐搭配MySQL Server 8.0 和 5.7 使用。

部署建议:建议router与应用部署在一起,这样的好处

应用通过socket连接router

减少网络延迟

MySQL无需创建额外的账号给router

与应用同时扩展

2、部署Router 8.0 + master-slave replication

环境说明:

角色

IP

hostname

version

MySQL Router

10.0.2.233

pd-03

8.0.20

MySQL master

10.0.2.230

pd-01

5.7.24

MySQL slave

10.0.2.231

tikv-02

5.7.24

MySQL slave

10.0.2.232

tikv-03

5.7.24

2.1 下载二级制 Router 包

d366fd38fe42e917c28dc376df309703.png

2.2 解压安装

解包

xz -d mysql-router-8.0.20-linux-glibc2.12-x86_64.tar.xz

tar xvf mysql-router-8.0.20-linux-glibc2.12-x86_64.tar -C /usr/local/

1

2

xz-dmysql-router-8.0.20-linux-glibc2.12-x86_64.tar.xz

tarxvfmysql-router-8.0.20-linux-glibc2.12-x86_64.tar-C/usr/local/

查看目录结构

# cd /usr/local/mysql-router-8.0.20-linux-glibc2.12-x86_64/

# ls -tr

README.router LICENSE.router man bin share lib

1

2

3

4

# cd /usr/local/mysql-router-8.0.20-linux-glibc2.12-x86_64/

# ls -tr

README.routerLICENSE.routermanbinsharelib

将命令目录加入到环境变量中

echo "PATH=$PATH:/usr/local/mysql-router-8.0.20/bin" >/etc/profile.d/mysqlrouter.sh

chmod +x /etc/profile.d/mysqlrouter.sh

source /etc/profile.d/mysqlrouter.sh

1

2

3

echo"PATH=$PATH:/usr/local/mysql-router-8.0.20/bin">/etc/profile.d/mysqlrouter.sh

chmod+x/etc/profile.d/mysqlrouter.sh

source/etc/profile.d/mysqlrouter.sh

2.3 配置

2.3.1 创建相关目录

mkdir -p /usr/local/mysql-router-8.0.20/{log,run,data,conf}

1

mkdir-p /usr/local/mysql-router-8.0.20/{log,run,data,conf}

2.3.2 修改配置文件

# cat /usr/local/mysql-router-8.0.20/conf/myrouter.conf

[DEFAULT]

logging_folder =/usr/local/mysql-router-8.0.20/log

data_folder=/usr/local/mysql-router-8.0.20/data

runtime_folder=/usr/local/mysql-router-8.0.20/run

connect_timeout=3

read_timeout=30

[logger]

level=INFO

[routing:primary]

bind_address=0.0.0.0

bind_port=7001

mode=read-write

destinations=10.0.2.230:3307

routing_strategy=first-available

[routing:secondary]

bind_address=0.0.0.0

bind_port=7002

mode=read-only

destinations=10.0.2.231:3307,10.0.2.232:3306

routing_strategy=round-robin

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

# cat /usr/local/mysql-router-8.0.20/conf/myrouter.conf

[DEFAULT]

logging_folder=/usr/local/mysql-router-8.0.20/log

data_folder=/usr/local/mysql-router-8.0.20/data

runtime_folder=/usr/local/mysql-router-8.0.20/run

connect_timeout=3

read_timeout=30

[logger]

level=INFO

[routing:primary]

bind_address=0.0.0.0

bind_port=7001

mode=read-write

destinations=10.0.2.230:3307

routing_strategy=first-available

[routing:secondary]

bind_address=0.0.0.0

bind_port=7002

mode=read-only

destinations=10.0.2.231:3307,10.0.2.232:3306

routing_strategy=round-robin

参数说明:

参数

说明

logging_folder

日志文件路径

connect_timeout

router连接MySQL server的超时时间,默认1秒,范围1-65536。read-write模式,超时时间设置的稍大写,防止误认为主库不可用,而去连接备用主库。 read-only模式,尽量设置的小些。

read_timeout

用于控制router从MySQL实例读取数据的最大时间,默认是50秒。

level

日志记录级别。DEBUG,NOTE,INFO,WARNING,ERROR,SYSTEM,FATAL。INFO,记录普通消息、警告和错误。DEBUG则用于排查错误,展现额外的诊断信息。

bind_address

router服务所在的主机IP,默认写作0.0.0.0,表示只有本机可以访问。

bind_port

router的服务端口,router分为两个端口,只读和读写。应用通过这两个端口连接router。

mode

router的模式,两种: read-write、read-only。

destinations

router连接的目录MySQL实例的信息,格式为 IP:port,可以是一个,也可以是多个。

routing_strategy

路由策略。first-available,next-available,round-robin,round-robin-with-fallback 。

2.3.3 启动mysql router

mysqlrouter -c /usr/local/mysql-router-8.0.20/conf/myrouter.conf &

1

mysqlrouter-c/usr/local/mysql-router-8.0.20/conf/myrouter.conf&

查看是否启动成功

# ps -ef|grep mysql

root 23714 23577 0 15:33 pts/0 00:00:00 mysqlrouter -c /usr/local/mysql-router-8.0.20/conf/myrouter.conf

# netstat -napl |grep -E '7001|7002'

tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 23714/mysqlrouter

tcp 0 0 0.0.0.0:7002 0.0.0.0:* LISTEN 23714/mysqlrouter

1

2

3

4

5

6

# ps -ef|grep mysql

root2371423577015:33pts/000:00:00mysqlrouter-c/usr/local/mysql-router-8.0.20/conf/myrouter.conf

# netstat -napl |grep -E '7001|7002'

tcp000.0.0.0:70010.0.0.0:*LISTEN23714/mysqlrouter

tcp000.0.0.0:70020.0.0.0:*LISTEN23714/mysqlrouter

3、Router读测试

MySQL  Router设计的非常蛋疼,也很弱智,远远不如mycat、atlas等中间件,无法自身实现读写分离功能。

router启动时会启动读写端口(7001和7002,),应用程序需手动填写读端口、写端口实现读写分离。

router有两个端口,一个负责读、一个负责写。比如上面的配置文件中,端口7001负责写,端口7002负责读。

我们则需要配置应用的写模块指向端口7001,读模块指向端口7002。是不是非常不方便,router用的少是有原因的。

在上面的配置文件中,从库的路由策略为 routing_strategy=round-robin ,也就是轮询。下面我们测试通过router轮询从库。

可以看到,很规律的轮流访问 tikv-02(10.0.2.231)和 tikv-03(10.0.2.232)。

# mysql -urepl -prepl4slave -h127.0.0.1 -P7002 -e"select @@hostname"

mysql: [Warning] Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| tikv-02 |

+------------+

[root@pd-03 conf]# mysql -urepl -prepl4slave -h127.0.0.1 -P7002 -e"select @@hostname"

mysql: [Warning] Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| tikv-03 |

+------------+

[root@pd-03 conf]# mysql -urepl -prepl4slave -h127.0.0.1 -P7002 -e"select @@hostname"

mysql: [Warning] Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| tikv-02 |

+------------+

[root@pd-03 conf]# mysql -urepl -prepl4slave -h127.0.0.1 -P7002 -e"select @@hostname"

mysql: [Warning] Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| tikv-03 |

+------------+

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

# mysql -urepl -prepl4slave -h127.0.0.1 -P7002 -e"select @@hostname"

mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.

+------------+

|@@hostname|

+------------+

|tikv-02|

+------------+

[root@pd-03conf]# mysql -urepl -prepl4slave -h127.0.0.1 -P7002 -e"select @@hostname"

mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.

+------------+

|@@hostname|

+------------+

|tikv-03|

+------------+

[root@pd-03conf]# mysql -urepl -prepl4slave -h127.0.0.1 -P7002 -e"select @@hostname"

mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.

+------------+

|@@hostname|

+------------+

|tikv-02|

+------------+

[root@pd-03conf]# mysql -urepl -prepl4slave -h127.0.0.1 -P7002 -e"select @@hostname"

mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.

+------------+

|@@hostname|

+------------+

|tikv-03|

+------------+

4、router写测试

写操作只能对应一个MySQL实例。

# mysql -urepl -prepl4slave -h127.0.0.1 -P7001 -e"select @@hostname"

mysql: [Warning] Using a password on the command line interface can be insecure.

+------------+

| @@hostname |

+------------+

| pd-01 |

+------------+

1

2

3

4

5

6

7

# mysql -urepl -prepl4slave -h127.0.0.1 -P7001 -e"select @@hostname"

mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.

+------------+

|@@hostname|

+------------+

|pd-01|

+------------+

但是配置文件中,destinations也可以写多个MySQL 实例,并通过routing_strategy 参数确定何时访问第二个、第三个MySQL实例。

[routing:primary]

bind_address=0.0.0.0

bind_port=7001

destinations=10.0.2.230:3307,10.0.2.231:3307,10.0.2.232:3306

routing_strategy=first-available

1

2

3

4

5

[routing:primary]

bind_address=0.0.0.0

bind_port=7001

destinations=10.0.2.230:3307,10.0.2.231:3307,10.0.2.232:3306

routing_strategy=first-available

routing_strategy的各种策略:

first-available 新连接路由到destinations列表中的第一个可用MySQL 实例。当第一个MySQL实例不可用,那么路由到第二个MySQL实例,如果第二个MySQL实例也不可用,那么路由到第三个MySQL实例。当列表中所有实例都不可用,那么停止工作。

next-available与first-available类似,都是连接列表中的第一个可用的MySQL实例。不同的是,如果列表中的MySQL实例被标注为不可连接,那么它就从列表中排除,直到重启router。

当MySQL replication 集群中主库宕机后,无论是哪种策略,都无法主动判断出新主库的IP地址,从而让业务继续可用。

因此,router中,主库[routing:primary]中,destinations只写一个主库的IP。

5、总结

Router 是MySQL官方提供的一款“轻量级”中间件,其提供read-write、read-only两个端口,用于应用根据不同功能模块连接读写或者只读。

Router,并不是我之前想象的,应用连接Router的IP,剩余的连接主库还是从库都由Router自身完成,这让我很失望。

Router 并没有提供完善的读写分离功能,这点远远不如上古时代具有读写分离功能的Atlas;更别提具有分库分表的Mycat。

因此,Router是一个半拉子中间件,功能太弱。如果你的团队具有二次开发能力,那么可以自行实现读写分离功能;如果不具备开发能力,那么Router不具备使用价值。

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值