美文网首页
mysqlrouter的使用

mysqlrouter的使用

作者: 陆阳226 | 来源:发表于2021-03-29 16:17 被阅读0次

环境

在vm的docker中使用mysql router实现group replication 组复制的读写分离和负载均衡
由于官方的docker镜像需要和InnoDb Cluster一起使用,这里自己创建镜像
group replication 组复制搭建:https://www.jianshu.com/p/8187f72bcaa6

目录结果

/home/ysh/docker/router
├── Dockerfile
└── mysqlrouter.conf

创建镜像

使用的ubuntu作为基础镜像, 需要添加国内源
Dockfile文件:

FROM ubuntu:20.10
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
    apt update && apt install -y mysql-router &&\
    rm -rf /var/lib/apt/lists/*
entrypoint ["mysqlrouter"] 

创建router镜像:

docker build -t router .

配置文件

[logger]                                                                                                                     
level = INFO

[routing:primary]
bind_address = 0.0.0.0
bind_port = 3300
# router容器跟group replication使用同一个docker网络
# 可以使用容器名代替ip地址
destinations = db1:3306
routing_strategy = first-available

[routing:secondary]
bind_address = 0.0.0.0
bind_port = 3301
destinations = db1:3306,db2:3306,db3:3306
routing_strategy = round-robin
  • routing:primaryrouting:secondary定义了两个路由配置
  • bind_address 连接到mysqlrouter的机器的地址, 就是我们的应用在的机器, 0.0.0.0表示所有的地址都可以连接mysqlrouter
  • bind_port 绑定的端口
  • destinations是mysqlrouter需要连接的mysql机器地址
  • routing_strategy 路由策略
    • first-available: 使用第一个可用的连接,如果失败使用下一个连接,会循环判断直到没有可用的连接
    • round-robin: 每个新连接会连接到下一个可用的连接,轮询的负载均衡

启动容器

启动容器:
这里映射了3300和3301两个端口,连接到了mysql group replication使用的docker网络中,自定义的mysqlrouter配置挂载到容器中

docker run -d --name router -p 3300:3300 -p 3301:3301 --network mgr -v /home/ysh/docker/router:/etc/mysqlrouter router

然后再连接mysql服务器时, 只需使用router的端口即可, 使用mysql workbench连接3301端口, 每创建一个连接都会连接到下一个可用的mysql服务器上, 使用select @@hostname;查看当前连接到的mysql服务器的hostname就可以验证了

router不能解决的问题

  • 添加或删除mysql服务器时, router需要重启, 不过重启很快
  • router连接数量有限制,且有单点失效问题,官方文档建议跟应用配置在同一台机器上
  • 应用使用连接池时,由于连接池中的连接数量有限且长时间存在,如果有mysql服务器宕机了,该服务器上的连接会被router连接到其他可用的服务器上,该宕机服务器重新加入group replication后会收不到新的连接. 可以通过配置连接池中连接的存活时间,在连接死亡后再次创建连接router后就可以正常的负载到该服务器了
  • mysql宕机后,正在进行的连接会失败,router没有重试的功能,需要应用自行实现,重试的包也有很多,例如:spring retry

相关文章

  • mysqlrouter的使用

    环境 在vm的docker中使用mysql router实现group replication 组复制的读写分离和...

  • iconfont的使用(下载使用)

    1、下载文件 2、在生命周期中引入项目 beforeCreate () { var domModule = ...

  • Gson的使用--使用注解

    Gson为了简化序列化和反序列化的过程,提供了很多注解,这些注解大致分为三类,我们一一的介绍一下。 自定义字段的名...

  • 记录使用iframe的使用

    默认记录一下----可以说 这是我第一次使用iframe 之前都没有使用过; 使用方式: 自己开发就用了这几个属...

  • with的使用

    下面例子可以具体说明with如何工作: 运行代码,输出如下

  • this的使用

    什么是this? this是一个关键字,这个关键字总是返回一个对象;简单说,就是返回属性或方法“当前”所在的对象。...

  • this的使用

    JS中this调用有几种情况 一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象...

  • ==的使用

    积累日常遇到的编码规范,良好的编码习惯,持续更新。。。 日常使用==用于判断的时候,习惯性将比较值写前面,变量写后...

  • this的使用

    1.默认绑定,就是函数立即执行。 函数立即执行就是指向window,但是如果是node环境,就是指向全局conso...

  • %in% 的使用

    写在前面:From 生信技能书向量难点之一:%in% 难点 (1)== 与 %in% 的区别== 强调位置,x和对...

网友评论

      本文标题:mysqlrouter的使用

      本文链接:https://www.haomeiwen.com/subject/jifmhltx.html