MySQL Router 完全讲解

MySQL Router 是一款轻量级 MySQL 中间件,提供应用与任意 MySQL 后端服务器的透明路由。同时插件式架构也方便开发者扩展其功能。

1. 安装

rpm -ivh mysql-router-2.0.4-1.el6.x86_64.rpm

 

2. 配置文件

2.1 配置文件语法

2.1.1 注释

支持 # 和 ; 作为注释

不支持行尾的注释

2.1.2 section

[section name:optional section key]
option = value
option = value
option = value
[section name]
option = value
option = value
option = value

每个section 包含一个name和一个可选的key,[ ]内不能有空格。但是键值对可以含有空格,服务器会自动忽略。且键值对大小写不敏感。

可以使用{ }引用变量。当{ }内的变量名没有定义,就使用字面意思。

 [DEFAULT]
prefix = /usr/
[sample]
bin = {prefix}bin/{name}
lib = {prefix}lib/{name}
name = magic
directory = C:\foo\bar\{3a339172-6898-11e6-8540-9f7b235afb23}

所以,这里 directory = C:\foo\bar\3a339172-6898-11e6-8540-9f7b235afb23。

2.2 配置文件位置

2.2.1 读取顺序

依次读取:

  • /etc/mysqlrouter/mysqlrouter.ini
  • $HOME/.mysqlrouter.ini

另外,还可以使用两个参数指定

    -c : 当指定这个参数,就不扫描默认位置了。

    -a: 指定额外胚子文件。当读取了默认位置的配置文件(或用-c 指定的配置文件),紧接着读取这个位置的配置文件。

如下所示:

shell> mysqlrouter -c /custom/path/to/router.ini -a /another/config.ini

3. 配置

3.1 general

bind_address 和 bind_port

将router绑定到哪个网络接口NIC,

可以写成

[routing:example_1]

bind_address =127.0.0.1
bind_port = 7001

或者

[routing:example_1]

bind_address =127.0.0.1:7001

Connect Timeout

connect_timeout = 1

允许范围1-65536 ,read-write模式可以设置大一些,read-only模式要设置低一点。

Destinations

destinations= a.example.com,b.example.com,c.example.com

提供一个逗号分隔的用于建立连接使用的地址池。默认端口3306。

Modes

[routing:example_strategy]
bind_port = 7001
destinations = master1.example.com,master2.example.com,master3.example.com
mode = read-write

必须参数

read-write:

 主要用于路由到 mysql master。

       In read-write mode, all traffic is directed to the initial address on the list. If that fails,then MySQL Router will try the next entry on the list, and will continue trying each MySQL server on the list. If no more MySQL servers are available on the list, then routing is aborted. This method is also known as ”first-available“。

  第一个成功连接的服务器保存在内存中,以用于未来的连接请求,但这是一个临时状态,重启就失去记忆了。

read-only:

主要用于路由到 slave 上。

 使用一种简单的 round-robin 方式来扫描服务器,第一个连接发送到第一个地址,第二个连接发送到第二个地址,以此类推,往返重复。如果其中一个地址不可达,直接跳过。不可达的地址将被隔离。当它恢复后,将被重新添加到可用队列中。

Max Connections

max_connections = 512

类似于Mysql的max_connections,一种可用的应用是抵御DDOS,范围从1-65536,默认512。

max_connect_errors

  默认= 100 , 类似于 mysql 的 max_connect_errors 参数。

client_connect_timeout

 默认 = 9 , 类似于 mysql 的  connect_timeout ,合法的范围是 2-31536000.

3.2 Logging

[logger]
level = DEBUG

可选的有 INFO (default) 和 DEBUG,不区别大小写。

INFO = all informational messages, warnings, and error messages

DEBUG= additional diagnostic information from the Router code, including successful routes.

 默认是 INFO级别。这个需要在 [default]里先设置 logging_folder,如果 logging_folder 留空或者没设置,将输出到命令行。

3.3 配置文件demo

[DEFAULT]
logging_folder = /var/log/mysqlrouter #后面不指定具体的文件名
[logger]
level = DEBUG
[routing:failover]  # failover可选,方便理解
bind_port = 7001
mode = read-write
destinations = a.example.com,b.example.com,c.example.com

上面案例,read-write 模式,所有请求将转发至 a.example.com ,当它挂了,转发到 b.example.com,以此类推。但如果 read-only 模式,将使用round-robin 轮训。

 

4. Router的应用

4.1 用户选项

  • -v 显示更多
  • -h 帮助
  • -c 指定配置文件
  • -a 指定额外配置文件

4.2 启动Router

shell> mysqlrouter --config=/path/to/file/my_router.ini
2015-10-22 10:51:34 INFO [7f5f66768700] routing:basic_redirect started: listening on localhost:7001; read-write
2015-10-22 10:51:34 INFO [7f5f65f67700] routing:read_only_redirect started: listening on localhost:7002;

 

5. Plugins

5.1 Connection Routing 插件

[DEFAULT]
logging_folder = /var/log/mysql/router
config_folder = /usr/local/etc/mysqlrouter
plugin_folder = /usr/local/lib/mysqlrouter
runtime_folder = /usr/local/
[logger]
level = INFO
[routing]
bind_address = 127.0.0.1:7002
destinations = slave1.example.com,slave2.example.com,slave3.example.com
mode = read-only

其实就是前面讲到的内容的一个简单应用。

 

6. Q&A

6.1 Router 应该部署在哪?

应该和应用部署在一台服务器上。

6.2 可以运行多个router实例吗?

可以。

6.3 怎么部署router的高可用?

目前还木有。不过你可以使用脚本或类似的机制监控router。

6.4 router对性能会有影响吗?

测试发现,大约会有1%的影响。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值