MYSQL PROXYSQL "集群"怎么搞 与 灵活的proxysql 应用

2020-10-30 10:20:25 浏览数 (1)

PROXYSQL 是一个集中化的服务节点,在部署PROXYSQL的时候大部分都是单节点来部署,或者和应用节点一起部署.

和应用节点一起部署的好处是当应用节点DOWN掉后,本身也不会影响其他应用上的应用和PROXYSQL的配置,但这样做也有一些问题,例如当我们的应用进行扩展的时候, PROXYSQL 本身也要进行自行的扩展,而多台PROXYSQL 统一维护一些配置信息将是困难和容易出现问题的,所以当我们需要多个PROXYSQL 的进行统一配置的时候,这时就会出现问题.

所以PROXYSQL 题目上的集群,实际上并不是实际意义上的集群,而是一个类似于信息复制的PROXYSQL 复制组的概念.

上面的图可能看上去有些乱,实际上是可以通过PROXYSQL 进行通用的多MYSQL 大型集群的共享方式的访问.配合应用端的设计可以实现多点的复合式的高可用数据访问.

在我们配置PROXYSQL 多点的时候,将访问多个MYSQL的配置写入一台PROXYSQL服务器,通过PROXYSQL 的配置信息复制的方式将后期加入的节点都作为通用型的整体的MYSQL 所有集群节点的访问.

这样的做法在配合应用的情况下,对于应用来说,访问所有的数据库系统都可以在一个节点上进行操作,而不必记得每个系统的地址, 并且多个PROXYSQL 访问任何节点都可以到达,对应的MYSQL 节点,这样对于应用系统的上层是友好的,给应用访问数据库提供了更多的方便和高可用保证.

我们下面做一个简单的多proxysql

PROXYSQL

192.168.198.106

192.168.198.67

192.168.198.68

MYSQL

192.168.198.101

192.168.198.102

怎么搭建MYSQL 和主从并不是关键点,并且也是基础知识,就忽略过了

安装proxysql 的版本是2.012这里也忽略如何安装,这里提示直接下载,yum 安装即可.

在安装后,我们需要住一个需要对三个PROXYSQL 先进行初始化设置

update global_variables set variable_value='admin:admin;proxysql:1234;cluster_admin:1234' where variable_name='admin-admin_credentials';

update global_variables set variable_value='cluster_admin' where variable_name='admin-cluster_username';

update global_variables set variable_value='1234' where variable_name='admin-cluster_password';

update global_variables set variable_value='proxysql' where variable_name='mysql-monitor_username';

update global_variables set variable_value='1234' where variable_name='mysql-monitor_password';

这里需要设置登陆PROXYSQL的用户名密码, PROXYSQL cluster的用户名密码,以及PROXYSQL 监控MYSQL的用户名密码.

同时MYSQL 中需要配置PROXYSQL连接MYSQL 的监控账号和密码,否则整个系统不会正常工作

update global_variables set variable_value=1000 where variable_name='admin-cluster_check_interval_ms';

update global_variables set variable_value=10 where variable_name='admin-cluster_check_status_frequency';

update global_variables set variable_value='true' where variable_name='admin-cluster_mysql_query_rules_save_to_disk';

update global_variables set variable_value='true' where variable_name='admin-cluster_mysql_servers_save_to_disk';

update global_variables set variable_value='true' where variable_name='admin-cluster_mysql_users_save_to_disk';

update global_variables set variable_value='true' where variable_name='admin-cluster_proxysql_servers_save_to_disk';

update global_variables set variable_value=3 where variable_name='admin-cluster_mysql_query_rules_diffs_before_sync';

update global_variables set variable_value=3 where variable_name='admin-cluster_mysql_servers_diffs_before_sync';

update global_variables set variable_value=3 where variable_name='admin-cluster_mysql_users_diffs_before_sync';

update global_variables set variable_value=3 where variable_name='admin-cluster_proxysql_servers_diffs_before_sync';

以上的配置是匹配多个PROXYSQL 之间的信息同步和检查

LOAD MYSQL USERS TO RUNTIME;

SAVE MYSQL USERS TO DISK;

LOAD MYSQL SERVERS TO RUNTIME;

SAVE MYSQL SERVERS TO DISK;

LOAD MYSQL QUERY RULES TO RUNTIME;

SAVE MYSQL QUERY RULES TO DISK;

LOAD MYSQL VARIABLES TO RUNTIME;

SAVE MYSQL VARIABLES TO DISK;

LOAD ADMIN VARIABLES TO RUNTIME;

SAVE ADMIN VARIABLES TO DISK;

加载后

INSERT INTO proxysql_servers (hostname,port,weight,comment) VALUES ('192.168.198.106',6032,0,'p1');

INSERT INTO proxysql_servers (hostname,port,weight,comment) VALUES ('192.168.198.67',6032,0,'p2');

INSERT INTO proxysql_servers (hostname,port,weight,comment) VALUES ('192.168.198.68',6032,0,'p3');

LOAD PROXYSQL SERVERS TO RUNTIME;

SAVE PROXYSQL SERVERS TO DISK;

需要预先的将这个集群中的PROXYSQL 进行一个配置,

以上的操作需要在每个PROXYSQL中操作.

此时我们查看每个PROXYSQL的日志

测试三台机器开始评判相关的配置的版本

这里需要关注的几点

1 服务器之间同步的信息包括了以下的信息

  • mysql_query_rules
  • mysql_servers
  • mysql_users
  • proxysql_servers

2 只有在上载后,相关的服务器的信息才能被传到其他的PROXYSQL服务器

3 相关的 SELECT name, version, FROM_UNIXTIME(epoch), checksum FROM runtime_checksums_values ORDER BY name;

要查询相关的可以在多个服务器上传递的信息,需要查看runtime_checksums_values 表,这里有每个服务器的配置信息的版本,并且如果服务器组中的 checksum 不一致就说明配置信息在集群中存在不一致的情况,需要进行查看和改正.

实际上通过PROXYSQL 的"集群" 方案可以更灵活的访问MYSQL 并且设置相关的"门槛" , 并且在大规模访问的情况下,可以降低连接的消耗,提高连接的复用.

4 如果PROXYSQL 一个节点DOWN 掉后,再次启动后,会将落后的版本配置更新,追上其他节点的最新版本

5 通过其他程序,可以编写判断节点是否存活的程序,并且将访问导向可以提供服务的PROXYSQL

0 人点赞