1.创建镜像
暂时没有发现proxysql的docker官方镜像,所以自己用rpm和centos7镜像自己打包一个首先去,https://github.com/sysown/proxysql/releases/ 下载想要版本的rpm包,我这里下载到的是 proxysql-1.4.10-1-centos7.x86_64.rpm
Dockerfile 如下
1 | FROM centos:7 |
用下面的命令build
docker build -t proxysql:1.4.10 .
上传到自己的registry
docker tag proxysql:1.4.10 10.168.136.193:5000/proxysql:1.4.10
docker push 10.168.136.193:5000/proxysql:1.4.10
配置文件
一般情况下,proxysql的配置是用sqllite持久化到磁盘中,这种方式不适合在容器中,因此需要将proxysql做成没有状态的,我们将所有配置都写入 proxysql.cnf ,然后docker启动的时候强制加载镜像,不登录proxysql进行配置、写盘等。配置通过configmap的形式挂载到pod中。
configmap的配置如下。
1 | apiVersion: v1 |
其中
interfaces=”0.0.0.0:6033;0.0.0.0:6034”是监听了2个端口。
mysql_servers ,mysql_users 配置了服务器的地址和用户名密码。
mysql_group_replication_hostgroups 里定义了mgr的配置,一般不用修改,除非你需要将master也设置为读节点,则修改 writer_is_also_reader
配置deployment
1 | apiVersion: apps/v1 |
除了 “proxysql -c /etc/proxysql/proxysql.cnf -D /var/lib/proxysql -f –initial” 这一行定义了启动的命令行,设置从配置文件加载配置,没有什么特别的地方。
mysql配置
创建proxysql用户名密码1
2CREATE USER proxysql@'172.30.%.%' IDENTIFIED BY 'proxysql';
grant all privileges on *.* to 'proxysql'@'172.30.%.%';
Proxy 探测 mgr,是需要额外的配置的, 在mysql中执行一下脚本
1 | USE sys; |
注意事项
在本文的配置中,没有单独使用monitor的用户,如果觉得有安全问题,请修改下面的配置。1
2monitor_username="proxysql"
monitor_password="proxysql"
然后在mysql配置monitor的用户的权限
1 | CREATE USER monitor@'%' IDENTIFIED BY 'monitor'; |
如果你是mysql 8.0,由于从网上大部分攻略链接到 https://gist.github.com/lefred/77ddbde301c72535381ae7af9f968322 来下载最后配置mgr视图的脚本。
由于mysql 8.0中 performance_schema.replication_group_member_stats 表的内容有整个集群的全部节点。因此创建的viewselect会出错。
测试方法
1 | select * from gr_member_routing_candidate_status; |
,如果报错,则执行下面的语句,替换相关的函数是view定义
(该脚本可以在后面的留言中看到)
1 | USE sys; |