mysql server configuration_MySQL Server Configuration

Configuring Backend MySQL Servers in ProxySQL

ProxySQL主要是通过mysql_servers来配置MySQL servers,有时候可能会用到mysql_replication_hostgroups

注意:

更新mysql_servers 和mysql_replication_hostgroups表后,如果不执行LOAD MYSQL SERVERS TO RUNTIME,当前配置并不会生效

如果不执行SAVE MYSQL SERVERS TO DISK,当前配置并不会被持久化,服务重启后数据将丢失

Adding a new server

要添加一个后台MySQL server,insert一条新纪录到mysql_servers表即可,这张表部分列都带有默认值

下面的操作是新增一个MySQL server,除hostname外其他都采用默认值

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT * FROMmysql_servers;2 Empty set (0.00sec)3

4 Admin> INSERT INTO mysql_servers (hostname) VALUES ('172.16.0.1');5 Query OK, 1 row affected (0.00sec)6

7 Admin> SELECT * FROMmysql_servers\G8 *************************** 1. row ***************************

9 hostgroup_id: 0

10 hostname: 172.16.0.1

11 port: 3306

12 status: ONLINE13 weight: 1

14 compression: 0

15 max_connections: 1000

16 max_replication_lag: 0

17 use_ssl: 0

18 max_latency_ms: 0

19 comment:20 1 row in set (0.00 sec)

View Code

Adding new servers to a hostgroup

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname FROMmysql_servers;2 +--------------+------------+

3 | hostgroup_id | hostname |

4 +--------------+------------+

5 | 0 | 172.16.0.1 |

6 +--------------+------------+

7 1 row in set (0.00sec)8

9 Admin> INSERT INTO mysql_servers (hostgroup_id, hostname) VALUES (1, '172.16.0.2'), (1,'172.16.0.3');10 Query OK, 2 rows affected (0.00sec)11

12 Admin> SELECT hostgroup_id,hostname FROMmysql_servers;13 +--------------+------------+

14 | hostgroup_id | hostname |

15 +--------------+------------+

16 | 0 | 172.16.0.1 |

17 | 1 | 172.16.0.2 |

18 | 1 | 172.16.0.3 |

19 +--------------+------------+

20 3 rows in set (0.00 sec)

View Code

Limiting the number of connections to a backend

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname,max_connections FROMmysql_servers;2 +--------------+------------+-----------------+

3 | hostgroup_id | hostname | max_connections |

4 +--------------+------------+-----------------+

5 | 0 | 172.16.0.1 | 1000 |

6 | 1 | 172.16.0.2 | 1000 |

7 | 1 | 172.16.0.3 | 1000 |

8 +--------------+------------+-----------------+

9 3 rows in set (0.00sec)10

11 Admin> UPDATE mysql_servers SET max_connections=10 WHERE hostname='172.16.0.2';12 Query OK, 1 row affected (0.00sec)13

14 Admin> SELECT hostgroup_id,hostname,max_connections FROMmysql_servers;15 +--------------+------------+-----------------+

16 | hostgroup_id | hostname | max_connections |

17 +--------------+------------+-----------------+

18 | 0 | 172.16.0.1 | 1000 |

19 | 1 | 172.16.0.2 | 10 |

20 | 1 | 172.16.0.3 | 1000 |

21 +--------------+------------+-----------------+

22 3 rows in set (0.00 sec)

View Code

Prioritizing traffic by changing the weight of a backend

只有在同一个hostgroup内的server才互相区分权重

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname,weight FROMmysql_servers;2 +--------------+------------+--------+

3 | hostgroup_id | hostname | weight |

4 +--------------+------------+--------+

5 | 0 | 172.16.0.1 | 1 |

6 | 1 | 172.16.0.2 | 1 |

7 | 1 | 172.16.0.3 | 1 |

8 +--------------+------------+--------+

9 3 rows in set (0.00sec)10

11 Admin> UPDATE mysql_servers SET weight=1000 WHERE hostname NOT IN ('172.16.0.2', '172.16.0.1') AND hostgroup_id=1;12 Query OK, 1 row affected (0.00sec)13

14 Admin> SELECT hostgroup_id,hostname,weight FROMmysql_servers;15 +--------------+------------+--------+

16 | hostgroup_id | hostname | weight |

17 +--------------+------------+--------+

18 | 0 | 172.16.0.1 | 1 |

19 | 1 | 172.16.0.2 | 1 |

20 | 1 | 172.16.0.3 | 1000 |

21 +--------------+------------+--------+

22 3 rows in set (0.00 sec)

View Code

Using SSL connections for a specific backend

下面是一个配置SSL连接的例子,不过不是一个完整的全局配置,详细完整的配置参考here

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname,use_ssl FROMmysql_servers;2 +--------------+------------+---------+

3 | hostgroup_id | hostname | use_ssl |

4 +--------------+------------+---------+

5 | 0 | 172.16.0.1 | 1 |

6 | 1 | 172.16.0.2 | 0 |

7 | 1 | 172.16.0.3 | 0 |

8 +--------------+------------+---------+

9 3 rows in set (0.00 sec)

View Code

Automatically shunning slaves with replication lag

如果max_replication_lag设置成非零值,监控模块将会监控后台mysql server的复制延迟

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname,max_replication_lag FROMmysql_servers;2 +--------------+------------+---------------------+

3 | hostgroup_id | hostname | max_replication_lag |

4 +--------------+------------+---------------------+

5 | 0 | 172.16.0.1 | 0 |

6 | 1 | 172.16.0.2 | 0 |

7 | 1 | 172.16.0.3 | 0 |

8 +--------------+------------+---------------------+

9 3 rows in set (0.00sec)10

11 Admin> UPDATE mysql_servers SET max_replication_lag=30 WHERE hostname='172.16.0.3';12 Query OK, 1 row affected (0.00sec)13

14 Admin> SELECT hostgroup_id,hostname,max_replication_lag FROMmysql_servers;15 +--------------+------------+---------------------+

16 | hostgroup_id | hostname | max_replication_lag |

17 +--------------+------------+---------------------+

18 | 0 | 172.16.0.1 | 0 |

19 | 1 | 172.16.0.2 | 0 |

20 | 1 | 172.16.0.3 | 30 |

21 +--------------+------------+---------------------+

22 3 rows in set (0.00 sec)

View Code

就上面的这个配置,如果复制延迟超过30秒,连接将不再被路由到172.16.0.3,如果max_replication_lag设置成0(SET max_replication_lag=0),那么监控模块将不再检查延迟,详见mysql-monitor_slave_lag_when_null

Adding a server to two different hostgroups

mysql_servers表的主键被定义成PRIMARY KEY (hostgroup_id, hostname, port),也就是说同一个后台的MySQL  sever可以有两个不同的hostgroups,其实在很多场景会用到这种配置。

比如,在一个一主两从的复制结构中,如果从库不可用了(挂了,或者延迟太高),那么读就可以路由到master。

看下面的例子

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname,weight,max_replication_lag FROMmysql_servers;2 +--------------+------------+--------+---------------------+

3 | hostgroup_id | hostname | weight | max_replication_lag |

4 +--------------+------------+--------+---------------------+

5 | 0 | 172.16.0.1 | 1 | 0 |

6 | 1 | 172.16.0.2 | 1 | 0 |

7 | 1 | 172.16.0.3 | 1000 | 30 |

8 +--------------+------------+--------+---------------------+

9 3 rows in set (0.00sec)10

11 Admin> INSERT INTO mysql_servers(hostgroup_id,hostname) VALUES (1,'172.16.0.1');12 Query OK, 1 row affected (0.00sec)13

14 Admin> SELECT hostgroup_id,hostname,weight,max_replication_lag FROMmysql_servers;15 +--------------+------------+--------+---------------------+

16 | hostgroup_id | hostname | weight | max_replication_lag |

17 +--------------+------------+--------+---------------------+

18 | 0 | 172.16.0.1 | 1 | 0 |

19 | 1 | 172.16.0.2 | 1 | 0 |

20 | 1 | 172.16.0.3 | 1000 | 30 |

21 | 1 | 172.16.0.1 | 1 | 0 |

22 +--------------+------------+--------+---------------------+

23 4 rows in set (0.00sec)24

25 Admin> UPDATE mysql_servers SET max_replication_lag=30, weight=1000;26 Query OK, 4 rows affected (0.00sec)27

28 Admin> UPDATE mysql_servers SET weight=1 WHERE hostname='172.16.0.1' AND hostgroup_id=1;29 Query OK, 1 row affected (0.00sec)30

31 Admin> SELECT hostgroup_id,hostname,weight,max_replication_lag FROMmysql_servers;32 +--------------+------------+--------+---------------------+

33 | hostgroup_id | hostname | weight | max_replication_lag |

34 +--------------+------------+--------+---------------------+

35 | 0 | 172.16.0.1 | 1000 | 30 |

36 | 1 | 172.16.0.2 | 1000 | 30 |

37 | 1 | 172.16.0.3 | 1000 | 30 |

38 | 1 | 172.16.0.1 | 1 | 30 |

39 +--------------+------------+--------+---------------------+

40 4 rows in set (0.00 sec)

View Code

在上面的例子,我们将HG1组配置成读,那么99.95%的连接负载将会路由到172.16.0.2 和172.16.0.3,0.05%的被路由到172.16.0.1.如果172.16.0.2 and 172.16.0.3都不可用了,那么所有的连接都会被路由到172.16.0.1

注意:max_replication_lag只是对slaves有用,如果没有从库,监控将不会监控延迟

mysql_servers.compression设置成非零值即可启用压缩传输,注意只有这个配置被加载到runtime后才被初始化的连接才会拥有压缩传输的特性

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname,compression FROMmysql_servers;2 +--------------+------------+-------------+

3 | hostgroup_id | hostname | compression |

4 +--------------+------------+-------------+

5 | 0 | 172.16.0.1 | 0 |

6 | 1 | 172.16.0.2 | 0 |

7 | 1 | 172.16.0.3 | 0 |

8 | 1 | 172.16.0.1 | 0 |

9 +--------------+------------+-------------+

10 4 rows in set (0.00sec)11

12 Admin> UPDATE mysql_servers SET compression=1 WHERE hostname='172.16.0.2' AND hostgroup_id=1;13 Query OK, 1 row affected (0.00sec)14

15 Admin> SELECT hostgroup_id,hostname,compression FROMmysql_servers;16 +--------------+------------+-------------+

17 | hostgroup_id | hostname | compression |

18 +--------------+------------+-------------+

19 | 0 | 172.16.0.1 | 0 |

20 | 1 | 172.16.0.2 | 1 |

21 | 1 | 172.16.0.3 | 0 |

22 | 1 | 172.16.0.1 | 0 |

23 +--------------+------------+-------------+

24 4 rows in set (0.00 sec)

View Code

Gracefully disabling a backend server

将status设置成OFFLINE_SOFT能让后台server优雅的停用掉,这意味着当前活跃的事务和连接任然有效,只是新的连接将不会被路由到这个节点

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname,status FROMmysql_servers;2 +--------------+------------+--------+

3 | hostgroup_id | hostname | status |

4 +--------------+------------+--------+

5 | 0 | 172.16.0.1 | ONLINE |

6 | 1 | 172.16.0.2 | ONLINE |

7 | 1 | 172.16.0.3 | ONLINE |

8 | 1 | 172.16.0.1 | ONLINE |

9 +--------------+------------+--------+

10 4 rows in set (0.00sec)11

12 Admin> UPDATE mysql_servers SET status='OFFLINE_SOFT' WHERE hostname='172.16.0.2';13 Query OK, 1 row affected (0.00sec)14

15 Admin> SELECT hostgroup_id,hostname,status FROMmysql_servers;16 +--------------+------------+--------------+

17 | hostgroup_id | hostname | status |

18 +--------------+------------+--------------+

19 | 0 | 172.16.0.1 | ONLINE |

20 | 1 | 172.16.0.2 | OFFLINE_SOFT |

21 | 1 | 172.16.0.3 | ONLINE |

22 | 1 | 172.16.0.1 | ONLINE |

23 +--------------+------------+--------------+

24 4 rows in set (0.00 sec)

View Code

Immediately disabling a backend server

将mysql_serves表中对应记录的status字段值设置成OFFLINE_HARD即可,这时包括当前连接也会立即断开

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname,status FROMmysql_servers;2 +--------------+------------+--------------+

3 | hostgroup_id | hostname | status |

4 +--------------+------------+--------------+

5 | 0 | 172.16.0.1 | ONLINE |

6 | 1 | 172.16.0.2 | OFFLINE_SOFT |

7 | 1 | 172.16.0.3 | ONLINE |

8 | 1 | 172.16.0.1 | ONLINE |

9 +--------------+------------+--------------+

10 4 rows in set (0.00sec)11

12 Admin> UPDATE mysql_servers SET status='OFFLINE_HARD' WHERE hostname='172.16.0.1' AND hostgroup_id=1;13 Query OK, 1 row affected (0.00sec)14

15 Admin> SELECT hostgroup_id,hostname,status FROMmysql_servers;16 +--------------+------------+--------------+

17 | hostgroup_id | hostname | status |

18 +--------------+------------+--------------+

19 | 0 | 172.16.0.1 | ONLINE |

20 | 1 | 172.16.0.2 | OFFLINE_SOFT |

21 | 1 | 172.16.0.3 | ONLINE |

22 | 1 | 172.16.0.1 | OFFLINE_HARD |

23 +--------------+------------+--------------+

24 4 rows in set (0.00 sec)

View Code

Re-enabling an offline / disabled backend server

将status改为ONLINE即可

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname,status FROMmysql_servers;2 +--------------+------------+--------------+

3 | hostgroup_id | hostname | status |

4 +--------------+------------+--------------+

5 | 0 | 172.16.0.1 | ONLINE |

6 | 1 | 172.16.0.2 | OFFLINE_SOFT |

7 | 1 | 172.16.0.3 | ONLINE |

8 | 1 | 172.16.0.1 | OFFLINE_HARD |

9 +--------------+------------+--------------+

10 4 rows in set (0.00sec)11

12 Admin> UPDATE mysql_servers SET status='ONLINE' WHERE status NOT IN ('ONLINE');13 Query OK, 2 rows affected (0.00sec)14

15 Admin> SELECT hostgroup_id,hostname,status FROMmysql_servers;16 +--------------+------------+--------+

17 | hostgroup_id | hostname | status |

18 +--------------+------------+--------+

19 | 0 | 172.16.0.1 | ONLINE |

20 | 1 | 172.16.0.2 | ONLINE |

21 | 1 | 172.16.0.3 | ONLINE |

22 | 1 | 172.16.0.1 | ONLINE |

23 +--------------+------------+--------+

24 4 rows in set (0.00 sec)

View Code

Removing a backend server

将mysql_servers中对应记录delete掉即可

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 Admin> SELECT hostgroup_id,hostname,status FROMmysql_servers;2 +--------------+------------+--------+

3 | hostgroup_id | hostname | status |

4 +--------------+------------+--------+

5 | 0 | 172.16.0.1 | ONLINE |

6 | 1 | 172.16.0.2 | ONLINE |

7 | 1 | 172.16.0.3 | ONLINE |

8 | 1 | 172.16.0.1 | ONLINE |

9 +--------------+------------+--------+

10 4 rows in set (0.00sec)11

12 Admin> DELETE FROM mysql_servers WHERE hostgroup_id=1 AND hostname IN ('172.16.0.1','172.16.0.2');13 Query OK, 2 rows affected (0.00sec)14

15 Admin> SELECT hostgroup_id,hostname,status FROMmysql_servers;16 +--------------+------------+--------+

17 | hostgroup_id | hostname | status |

18 +--------------+------------+--------+

19 | 0 | 172.16.0.1 | ONLINE |

20 | 1 | 172.16.0.3 | ONLINE |

21 +--------------+------------+--------+

22 2 rows in set (0.00 sec)

View Code

delete和set OFFLINE_HARD实质上一样的,当执行了LOAD MYSQL SERVERS TO RUNTIME后,Hostgroup_Manager将会发现后台有服务被delete掉了并且内部会将他标记为OFFLINE_HARD。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值