mysql 服务发现_ProxySQL的服务发现机制

2ff34e647e2e3cdfd8dca593e17d9b0a.png

ProxySQL内部有一个Monitor模块,通过一个monitor账户对后端数据库进行监控,监控的内容主要包括:数据库可用性,是否read_only以及slave延迟。

配置监控账户

首先要在ProxySQL中配置监控账户。它是通过global variables来配置的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28mysql> select * from global_variables where variable_name like '%monitor%';

+-----------------------------------------------------+----------------+

| variable_name | variable_value |

+-----------------------------------------------------+----------------+

| mysql-monitor_enabled | true |

| mysql-monitor_connect_timeout | 600 |

| mysql-monitor_ping_max_failures | 3 |

| mysql-monitor_ping_timeout | 1000 |

| mysql-monitor_read_only_max_timeout_count | 3 |

| mysql-monitor_replication_lag_interval | 10000 |

| mysql-monitor_replication_lag_timeout | 1000 |

| mysql-monitor_groupreplication_healthcheck_interval | 5000 |

| mysql-monitor_groupreplication_healthcheck_timeout | 800 |

| mysql-monitor_replication_lag_use_percona_heartbeat | |

| mysql-monitor_query_interval | 60000 |

| mysql-monitor_query_timeout | 100 |

| mysql-monitor_slave_lag_when_null | 60 |

| mysql-monitor_wait_timeout | true |

| mysql-monitor_writer_is_also_reader | true |

| mysql-monitor_username | monitor |

| mysql-monitor_password | monitor |

| mysql-monitor_history | 600000 |

| mysql-monitor_connect_interval | 60000 |

| mysql-monitor_ping_interval | 10000 |

| mysql-monitor_read_only_interval | 1500 |

| mysql-monitor_read_only_timeout | 500 |

+-----------------------------------------------------+----------------+

22 rows in set (0.00 sec)

如上面所示:mysql-monitor_username为监控账户的用户名;mysql-monitor_password是密码。它们都是monitor, 当然你可以update这个表,将它们更新成任何你想要的字符串。上面这些monitor相关的配置变量,可根据需要自行更新。

这里多说一个变量:mysql-monitor_writer_is_also_reader, 它的意思是wirter节点是否可以为reader节点,这里设置的是true. 当一个节点的read_only=ON,变为read_only=OFF时,在mysql_servers表中会复制一条同样记录,放到writer_hostgroup中。即这台机器会有两条记录,一条属于writer,另一条属于reader。 当mysql-monitor_writer_is_also_reader值为false时,则会将该机器移动到writer组中,该机器不会在mysql_servers表中重复存在。

接下来就要在后端数据库创建monitor账户。授予权限如下:

1GRANT REPLICATION CLIENT ON *.* TO 'monitor'@'%' identified by 'monitor';

授予复制权限是为了监控复制延迟,不然仅usage权限就够了。

监控只读属性

对于传统复制架构,若要监控只读属性,必须配置表mysql_replication_hostgroups。这个表中每一行都代表一个复制组。

1

2

3

4

5

6

7mysql> select * from mysql_replication_hostgroups;

+------------------+------------------+----------+

| writer_hostgroup | reader_hostgroup | comment |

+------------------+------------------+----------+

| 0 | 1 | |

| 2 | 3 | test_app |

+------------------+------------------+----------+

可以看到这个表的内容很简单,只有三个字段。它们分别指定了writer_hostgroup和reader_hostgroup的ID, 这些ID和表mysql_servers表中的hostgroup_id相关联。

1

2

3

4

5

6

7mysql> select * from mysql_servers;

+--------------+-----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+

| hostgroup_id | hostname | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment |

+--------------+-----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+

| 0 | 192.168.216.203 | 3306 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |

| 1 | 192.168.216.204 | 3306 | ONLINE | 1 | 0 | 1000 | 0 | 0 | 0 | |

+--------------+-----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+---------+

当一台mysql server的read_only属性发生变化时,monitor模块会自动更新hostgroup_id.如IP 203主机hostgroup_id是0, 在writer组中,若把它的read_only设置为ON, 它的hostgroup_id会被更新为1,即被分配到reader组。但表mysql_users中的default_hostgroup不会改变。另外需要注意的是,配置完mysql_servsers后,只有执行load mysql servsers to runtime;后monitor才会起作用!

监控复制延迟

怎样启用复制延迟监控呢?也很简单,只需要在mysql_servers表中为从库的max_replication_lag设置一个大于0(秒)的值就可以了。当复制延迟超过这个阈值时,ProxySQL会屏蔽掉该主机,不再路由SQL给他,直到它复制延迟小于所设阈值。

查看监控日志

ProxySQL中使用日志表记录监控信息,执行show tables from monitor;可看的这些表。

1

2

3

4

5

6

7

8

9

10

11mysql> show tables from monitor;

+------------------------------------+

| tables |

+------------------------------------+

| mysql_server_connect_log |

| mysql_server_group_replication_log |

| mysql_server_ping_log |

| mysql_server_read_only_log |

| mysql_server_replication_lag_log |

+------------------------------------+

5 rows in set (0.00 sec)mysql_server_connect_log 记录连接后台mysql的日志,成功/失败

mysql_server_ping_log 记录ping后台实例的日志。当失败此时超过变量mysql-monitor_ping_max_failures所设的值时,通知MySQL_Hostgroups_Manager kill掉该实例的连接。

mysql_server_replication_lag_log 检查Seconds_Behind_Master,并将结果信息记录到该表中。如果Seconds_Behind_Master > max_replication_lag 则该节点会被屏蔽,直到Seconds_Behind_Master < max_replication_lag。

mysql_server_read_only_log 检查表mysql_replication_hostgroups配置的所有主机mysql的read_only属性,并将结果记录到该表中。如果read_only=1该主机会被复制/移动到reader_hostgroup中,否则复制/移动到writer_hostgroup中。

ProxySQL的这一特性可与后端mysql自动failover工具(MHA, mysqlfailover等)相结合,使得failover发生时,无须执行ip_failover通知上层,ProxySQL 会自动检测MySQL的主从架构变化,并调整读写hostgroup中的主机。使整个failover过程更加默契。但在ProxySQL层又存在了新的高可用问题,一台proxy实例挂了,优雅地通知上层应用连接另一台?(vip ? DNS ? zookeeper ?)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值