ProxySQL MySQL MGR8配置
上一篇博文记录了如何使用MySQL8.0.12部署mgr集群(单主模式或者多主模式都可以),那么在实际环境中应用如何去连接mgr集群呢?再比如单主模式如何实现读写分离呢?用代理软件需要配合各种脚本太麻烦,修改程序对开发是个考验,维护方面不是很方便。正好听说ProxySQL新版本1.4在最新的功能性增强,包含了对MGR的原生支持,不在需要使用第三方脚本进行配合使用。那么这一点对运维人员也是最大的福音。网上查了很多文档,包括官方文档等等,看的云里雾里的。说还得用什么sql存储过程。感觉都是坑。个人觉得没有一篇文档能有完全的参考价值。这里意思是说不能完全照着一篇文章做下来,综合了多个文档一天半才搞定。说多了全是眼泪~~~希望看到我这篇博客的小伙伴你们不会有此想法。
前期准备工作:
1)mysql8.0.12 mgr集群(一主两从)配置完成,172.17.0.5是主节点。不会配置的请参考上一篇文章。
2)再准备一台服务器,需要能通互联网。另外和mgr集群一个网段。
3)关闭所有服务器的防火墙。
开始工作:
1、proxysql的安装(使用最新稳定版本1.4.11)
既然mgr集群是基于docker环境上部署,那么再用docker创建一个proxysql容器docker run -d -it --privileged --name=proxysql centos /usr/sbin/init
docker exec -it proxysql bash
rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
yum install perl perl-DBD-mysql mysql -y
wget https://github.com/sysown/proxysql/releases/download/v1.4.11/proxysql-1.4.11-1-centos7.x86_64.rpm
rpm -ivh proxysql-1.4.11-1-centos7.x86_64.rpm
systemctl start proxysql
2、proxysql需要和mgr集群通信,那么肯定是通过用户,这里在mgr主节点上创建两个用户,一个监控用户用于取数据来判断mgr组里面mysql的读写状态,另外一个业务用户用于最后测试读写分离效果。mysql> create user monitor@'%' identified by 'Monitor@123';
mysql> grant select on sys.* to monitor@'%';
mysql> create user test@'%' identified by 'Test@123';
mysql> grant all on *.* to test@'%';
mysql> FLUSH PRIVILEGES;
本来应该到这可以了。但是proxysql内置的mysql是8之前的版本,而mgr集群中的mysql是8.0.12版本。采用的是默认认证方式是caching_sha2_password,两者的身份认证不同。所以为了让mysql8能兼容新老版本的认证方式需要为上述创建的两个用户执行以下命令。这个问题卡了我很长时间,至少我看过的文档里面没有一个人提到这个问题。不然后续proxysql连接mgr会报错:
error 2059: Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directorymysql> ALTER USER 'monitor'@'%' IDENTIFIED BY 'Monitor@123' PASSWORD EXPIRE NEVER;
mysql> alter user 'monitor'@'%' IDENTIFIED WITH mysql_native_password BY 'Monitor@123';
mysql> ALTER USER 'test'@'%' IDENTIFIED BY 'Test@123' PASSWORD EXPIRE NEVER;
mysql> alter user 'test'@'%' IDENTIFIED WITH mysql_native_password BY 'Test@123';
mysql> FLUSH PRIVILEGES;
到此mgr集群就不需要再做什么配置了。
3、配置proxysql,其实有两种方法,第一种是动态配置,也就是sql语句的这种。第二种是通过proxysql.cnf文件配置(个人觉得配置文件简单,不用敲那么多命令,但是不尝试第一种动态配置,或许你用配置文件可能不是那么很好理解proxysql的实现过程)。所以还是先看第一种吧!proxysql有两个端口,一个是管理端口6032,一个是业务连接端口6033。mysql -u admin -padmin -h 127.0.0.1 -P6032
MySQL > \R Admin>
进入管理员模式
插入mgr集群的三个节点信息,组id都设置一样。Admin>INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'172.17.0.5',3306);
Admin>INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'172.17.0.6',3306);
Admin>INSERT INTO mysql_servers(hostgroup_id,hostname,port) VALUES (1,'172.17.0.7',3306);
Admin>select * from mysql_servers;
更新proxysql的监控用户和密码及各种时间Admin>UPDATE global_variables SET variable_value='monitor' WHERE variable_name='mysql-monitor_username';
Admin>UPDATE global_variables SET variable_value='Monitor@123' WHERE variable_name='mysql-monitor_password';
Admin>UPDATE global_variables SET variable_value='2000' WHERE variable_name IN ('mysql-monitor_connect_interval','mysql-monitor_ping_interval','mysql-monitor_read_only_interval');
进行验证Admin>SELECT * FROM global_variables WHERE variable_name LIKE 'mysql-monitor_%';
将配置写入运行中,然后再保存到磁盘Admin>LOAD MYSQL VARIABLES TO RUNTIME;
Admin>SAVE MYSQL VARIABLES TO DISK;
验证是否可以检测到后端mgr集群并获取数据Admin>SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start_us DESC LIMIT 10;
Admin>SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start_us DESC LIMIT 10;
Admin>LOAD MYSQL SERVERS TO RUNTIME;
再查看一下第一步插入的后端mgr集群数据,似乎没什么变化Admin>SELECT * FROM mysql_servers;
现在对后端的mgr集群进行分组,1为写,2为读,名称为cluster1Admin>INSERT INTO mysql_replication_hostgroups VALUES (1,2,'cluster1');
Admin>LOAD MYSQL SERVERS TO RUNTIME;
从proxysql验证读写状态,已经区分很明显了Admin>SELECT * FROM monitor.mysql_server_read_only_log ORDER BY time_start_us DESC LIMIT 10;
再查一下状态,貌似发生了改变,proxysql 已经将172.17.0.5划到了写组,172.17.0.6和172.17.0.7划到了读组Admin>SELECT * FROM mysql_servers;
Admin>SAVE MYSQL SERVERS TO DISK;
Admin>SAVE MYSQL VARIABLES TO DISK;
这样就基本完成了proxysql配置。接下来我们去验证读写分离效果
插入用户名、密码、组Admin>insert into mysql_users(username,password,default_hostgroup) values('test','Test@123',1);
插入读写分离规则,1是写,2是读,千万别弄混了。以select开头的请求到2组,但是还有一种请求是查询后更新的语句,这种要配置请求到1组Admin>insert into mysql_query_rules(rule_id,active,username,match_digest,destination_hostgroup,apply) values(1,1,'test','^SELECT.*FRO UPDATE$',1,1),(2,1,'test','^SELECT',2,1);
Admin>load mysql users to runtime;
Admin>save mysql users to disk;
Admin>load mysql query rules to runtime;
Admin>save mysql query rules to disk;
退出管理员模式,在proxysql上测试读写分离 mysql -utest -pTest@123 -h 127.0.0.1 -P6033 -e 'create database test;'
mysql -utest -pTest@123 -h 127.0.0.1 -P6033 -e 'show databases;'
mysql -utest -pTest@123 -h 127.0.0.1 -P6033 -e 'select user,host from mysql.user;'
进入proxysql查看读写分离效果,不需要进管理模式即可mysql -u admin -padmin -h 127.0.0.1 -P6032
mysql> SELECT * from stats_mysql_query_digest;
从上图看到create和show语句请求的是写,select请求的从,这样就完成了读写分离测试。
还有另外一个问题我们需要进行测试,当mgr主节点故障,新选举的主节点会不会被proxysql识别到?
手动停止mgr当前的主库systemctl stop mysqld
随便进入剩下两个节点中的一个查看当前的主 mysql> select * from performance_schema.replication_group_members;
从图中我们没法看到IP,只能看到主机名,肯定是发生了切换,当前主是172.17.0.6
再进入proxysql查看读到的mgr状态mysql> select hostgroup_id,hostname,port,status from runtime_mysql_servers;
已经看到172.1.0.5状态是SHUNNED,当前hostgroup_id为1的主是172.17.0.6
再次写入数据测试mysql -utest -pTest@123 -h 127.0.0.1 -P6033 -e 'create database test1;'
在proxysql上进行查看是否创建成功mysql -utest -pTest@123 -h 127.0.0.1 -P6033 -e 'show databases;'
test1库正常创建。到此第一种动态配置方法完成。
下面开始通过配置文件读取,然后也方便做到docker容器里面。配置文件内容如下:
cat /etc/proxysql.cnf
datadir="/var/lib/proxysql"
admin_variables=
{
admin_credentials="admin:admin" mysql_ifaces="0.0.0.0:6032"
}
mysql_variables=
{
threads=4 max_connections=2048 default_query_delay=0 default_query_timeout=36000000 have_compress=true poll_timeout=2000 interfaces="0.0.0.0:6033;/tmp/proxysql.sock" default_schema="information_schema" stacksize=1048576 server_version="5.5.30" connect_timeout_server=3000 monitor_username="monitor" monitor_password="Monitor@123" monitor_history=600000 monitor_connect_interval=2000 monitor_ping_interval=2000 monitor_read_only_interval=2000 monitor_read_only_timeout=500 ping_interval_server_msec=120000 ping_timeout_server=500 commands_stats=true sessions_sort=true connect_retries_on_failure=10
}
mysql_servers =
(
{ address="172.17.0.5" , port=3306 , hostgroup=1, max_connections=1000 }, { address="172.17.0.6" , port=3306 , hostgroup=1, max_connections=1000 }, { address="172.17.0.7" , port=3306 , hostgroup=1, max_connections=1000 }
)
mysql_users=
(
{ username = "test" , password = "Test@123" , default_hostgroup = 1 , active = 1 }
)
mysql_query_rules=
(
{ rule_id=1 active=1 match_pattern="^SELECT .* FOR UPDATE$" destination_hostgroup=1 apply=1 }, { rule_id=2 active=1 match_pattern="^SELECT" destination_hostgroup=2 apply=1 }
)
mysql_replication_hostgroups=
(
{ writer_hostgroup=1 reader_hostgroup=2 comment="cluster1" }
)`
其实就是把第一种方法里面配置的内容都写到proxysql.cnf文件里面。第二种静态配置文件测试方法很简单,删掉/var/lib/proxysql目录下db结尾的文件,然后重启proxysql服务。最后进入proxysql查看数据是否都存在即可!这里就不再进行测试!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
k8s入门
这也是今天用心写的一篇原创文,带段子的技术文。也许有的读者看不懂,没关系,文中有段子,看段子就好了。学习任何东西都要去在基于『理解』的基础上去学,这样往往会事半功倍。也有人说我有点高调,但见过我的人都应该有所接触,现实中完全不是这样的。别人在给我说观点的时候,更多时候我只是一个倾听者。哪怕听到有一些不太认同的观点,我也基本不会去反驳。 废话有点多,前天我生日, 这是我写过最帅的代码!这篇文章赞赏超过 100 多,感谢大家的支持和认可。我继续努力,争取把我所学到的,见到的都后续分享出来,能有帮助就好。我本身就是个念旧的人,身上的钱包从大二开始到现在用了8年左右没换过,媳妇还给我送了一个钱包,大概是希望继续在多多赚钱吧。。 因为最近工作中需要用到k8s,基本白天去公司实操,晚上回来看书。一口气买了两本技术类书籍。今天就把我所学到的分享给大家,对不起,久等了。 记得入职当天,因为我们组就 3 个人。负责公司的 k8s 集群架构。责任比较重大,一旦环境出问题,意味着所有的开发和测试都要歇菜休息,大家想想出问题了,他们肯定不愿意,白天浪费太多的时间意味着他们都要晚上加班。要搁我身上,我也不愿意。...
- 下一篇
【图文】实操创建快照
大家好,本期为大家介绍阿里云如何创建快照。当您希望使用某块磁盘上的数据作为其它磁盘的基础数据,或者是当磁盘上的数据出现问题需要回滚磁盘的时候,都需要用到磁盘快照。下面开始说明:首先登录阿里云控制台,进入云服务器ECS实例页面,选择需要创建快照的实例。之后点击本实例磁盘。这里我们可以看到本实例的系统盘和数据盘。下面我们可以通过两种方式来创建快照:手动创建和设置自动快照策略。我们先介绍一下手动创建,点击创建快照。在弹出的页面中输入快照名称,标签可以定义快照,方便管理,非必填项,大家可根据需求选择。最后点击确定。之后点击左侧导航栏的本实例快照。这里就可以看到我们刚刚手动创建的快照,等进度变成100%的时候,快照就创建好了。同时也可以在这里通过快照进行回滚磁盘和创建自定义镜像的操作。接下来介绍一下如何创建自定义快照策略。在云服务器ECS页面下点击自动快照策略。这里可以看到我之前创建的快照策略,点击右上角的创建策略。在弹出的页面中输入策略名称,选择创建时间和重复日期,这两项都可以多选,大家根据业务需求自行选择。最后选择快照的保留时间然后点击确定。之后自动快照策略就创建好了,接下来还需要我们将这条...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装