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