- 1. proxysql cluster背景
- 2. proxysql cluster
- 2.1. 组件
- 2.2. cluster同步的表
- 2.3. 相关配置变量
- 3. 具体操作
- 3.1. 匹配多个PROXYSQL之间的凭证/信息同步和检查
- 3.2. 添加PROXYSQL SERVER信息
- 3.3. 变更操作触发
proxysql cluster 集群
1. proxysql cluster背景
proxysql作为后端mysql服务和应用之间的桥梁。保证其可靠性也是很重要的
可以把这个Proxysql和应用放在一起。但是带来问题就是节点多的话。
- 管理配置比较麻烦。
- 配置是分散的,怎么保证配置的一致性
- 需要依赖额外的管理工具去部署/维护,运维难度也加大
另一种方式就是将proxysql实现集群cluster。保证高可用
2. proxysql cluster
2.1. 组件
只依靠两个组件
- monitoring
- re-configuration
2.2. cluster同步的表
cluster可以同步以下表,来保证cluster集群节点之间的配置同步
- global_variables (Supported from ProxySQL 2.1.x)
- mysql_query_rules
- mysql_servers
- mysql_users
- proxysql_servers
2.3. 相关配置变量
- admin-checksum_mysql_query_rules: 默认True, 每次执行LOAD MYSQL QUERY RULES TO RUNTIME时,ProxySQL都会生成一个新的配置校验和。如果设置为false,则不会自动传播新配置,也不会从远程节点同步
- admin-checksum_mysql_query_rules: 默认True, 每次执行LOAD MYSQL SERVERS TO RUNTIME时,ProxySQL都会生成一个新的配置校验和。如果设置为false,则不会自动传播新配置,也不会从远程节点同步
- admin-checksum_mysql_query_rules: 默认True, 每次执行LOAD MYSQL USERS TO RUNTIME时,ProxySQL都会生成一个新的配置校验和。如果设置为false,则不会自动传播新配置,也不会从远程节点同步
- admin-cluster_username/admin-cluster_password: monitor使用此凭据连接其他ProxySQL实例。注意,用户名/密码对也应该出现在admin-admin_credentials中定义,否则连接不上对方实例。如果没有定义admin-cluster_username,则Clustering不会执行任何检查
- admin-cluster_check_interval_ms: 该变量定义校验和检查之间的间隔。默认值:1000。最小:10,最大:300000
- admin-cluster_check_status_frequency: 如果大于0,则此变量定义执行状态检查的校验和次数。默认值:10。最小值:0,最大值:10000
- admin-cluster_mysql_query_rules_save_to_disk: 当为true(默认)时,在远程同步和加载到运行时后,新的mysql_query_rules也被保存到磁盘;
- admin-cluster_mysql_servers_save_to_disk: 当为true(默认)时,在远程同步和加载到运行时后,新的mysql_servers也被保存到磁盘上;
- admin-cluster_mysql_users_save_to_disk: 当为true(默认)时,在远程同步和加载到运行时后,新的mysql_users也被保存到磁盘上;
- admin-cluster_proxysql_servers_save_to_disk: 当为true(默认)时,在远程同步和加载到运行时后,新的proxysql_servers也被保存到磁盘上;
- admin-cluster_mysql_query_rules_diffs_before_sync: 定义有多少次检查到mysql_query_rules的差异后触发mysql_query_rules的同步。最小值:0(从不同步) 最大值:1000
- admin-cluster_mysql_servers_diffs_before_sync: 定义有多少次检查到mysql_servers的差异后触发mysql_servers的同步。最小值:0(从不同步) 最大值:1000
- admin-cluster_mysql_users_diffs_before_sync: 定义有多少次检查到mysql_users的差异后触发mysql_users的同步。最小值:0(从不同步) 最大值:1000
- admin-cluster_proxysql_servers_diffs_before_sync: 定义有多少次检查到proxysql_servers的差异后触发proxysql_servers的同步。最小值:0(从不同步) 最大值:1000
3. 具体操作
3.1. 匹配多个PROXYSQL之间的凭证/信息同步和检查
-- 添加登陆账号密码,用于cluster账号互联
update global_variables set variable_value='admin:admin;proxysql:1234;cluster_admin:1234' where variable_name='admin-admin_credentials';
-- 配置cluster账号密码
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';
-- 配置mysql_monitor账号密码
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';
--- 配置cluster间的检查频率及延时
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';
3.2. 添加PROXYSQL SERVER信息
需要预先的将这个集群中的PROXYSQL 进行一个配置,以上的操作需要在每个PROXYSQL中操作
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;
3.3. 变更操作触发
当执行以下命令时,会触发Proxysql的集群状态同步,去不同的节点查询,更改后的配置是一致的
SAVE MYSQL USERS TO DISK;
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
LOAD MYSQL VARIABLES TO RUNTIME;
SAVE ADMIN VARIABLES TO DISK;
LOAD ADMIN VARIABLES TO RUNTIME;