Code Monkey home page Code Monkey logo

proxysql_groupreplication_checker's Introduction

Introduction

According to the blog HA with MySQL Group Replication and ProxySQL, we can use ProxySQL to make HA with MySQL Group Replication(MGR), and even we can realize Read-Write split above it. This project provides several shell scripts to be used in ProxySQL scheduler in order to meet the function we memtion.

proxysql_groupreplication_checker.sh

This script is an example of scheduler that can be used with ProxySQL to monitor MySQL Group Replication members

Modify from : https://github.com/lefred/proxysql_groupreplication_checker

Features and Limitations

Features

  • Read-Write split
  • Multi Write node
  • Automatic switch over when write node fail

Limitations

  • MGR must run in multi-primary mode

In general, we just need one write node and other node to be read, and we need to adapt MGR two mode: Multi-Primary Mode and Single-Primary Mode, so the scripts below come into the world.

gr_mw_mode_sw_cheker.sh

This script is using for monitoring MySQL Group Replication in Multi-Primary Mode, and we limit there is only one node to be write node at a time.

Features and Limitations

Features

  • Read-Write split
  • Automatic switch over when single write node fail

Limitations

  • MGR must run in multi-primary Mode
  • Only one node to be write node at a time

Configuration

Assume that we have one MGR group with 3 node deploy in multi-primary mode:

mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 4a48f63a-d47b-11e6-a16f-a434d920fb4d | CrazyPig-PC |       24801 | ONLINE       |
| group_replication_applier | 592b4ea5-d47b-11e6-a3cd-a434d920fb4d | CrazyPig-PC |       24802 | ONLINE       |
| group_replication_applier | 6610aa92-d47b-11e6-a60e-a434d920fb4d | CrazyPig-PC |       24803 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
3 rows in set (0.00 sec)

and we have deployed ProxySQL(version 1.3.2) correctly on one same machine.

Now we need to config MGR and ProxySQL to act together :

1) let ProxySQL have the privilege to connect and SELECT something from MGR members

In all MGR members, execute:

set SQL_LOG_BIN=0;
grant SELECT on *.* to 'proxysql'@'%' identified by 'proxysql';
flush privileges;
set SET SQL_LOG_BIN=1;

2) create custom function and view in MGR members

According to https://github.com/lefred/mysql_gr_routing_check/blob/master/addition_to_sys.sql, execute the sql in all of the MGR members.

Tip: we will use the custom function and view in the shell script.

3) config proxysql

Add MGR members to proyxsql mysql_servers table:

insert into mysql_servers (hostgroup_id, hostname, port) values(1, '127.0.0.1', 24801);
insert into mysql_servers (hostgroup_id, hostname, port) values(2, '127.0.0.1', 24801);
insert into mysql_servers (hostgroup_id, hostname, port) values(2, '127.0.0.1', 24802);
insert into mysql_servers (hostgroup_id, hostname, port) values(2, '127.0.0.1', 24803);

hostgroup_id = 1 represent the write group, and we have only one write node at a time, hostgroup_id = 2 represent the read group and it includes all the MGR members.

It’s time to add some routing rules to be able to use those hostgroups:

insert into mysql_query_rules (active, match_pattern, destination_hostgroup, apply) 
values (1,"^SELECT",2,1);

We will route all queries starting by select to hostgroup which hostgroup_id is 2.

This is not a recommendation of course a we will also send to hostgroup 2 all SELECT… FOR UPDATE, for example

And then we need to change the default proxysql monitor user and password we create in step 1)

UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_username';
UPDATE global_variables SET variable_value='proxysql' WHERE variable_name='mysql-monitor_password';

Finally we can load global_variables, mysql_servers, mysql_query_rules to runtime and even to disk:

LOAD MYSQL VARIABLES TO RUNTIME;
SAVE MYSQL VARIABLES TO DISK;
LOAD MYSQL SERVERS TO RUNTIME;
SAVE MYSQL SERVERS TO DISK;
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

4) config scheduler

First, put the script gr_mw_mode_sw_cheker.sh to path : /var/lib/proxysql/

Finally, we just need to config our script into proxysql scheduler and load it to runtime and even save to disk:

insert into scheduler(id, active, interval_ms, filename, arg1, arg2, arg3, arg4)
  values(1, 1, 5000, '/var/lib/proxysql/gr_mw_mode_sw_checker.sh', 1, 2, 1, '/var/lib/proxysql/checker.log');

LOAD SCHEDULER TO RUNTIME;
SAVE SCHEDULER TO DISK;
  • active : 1: enable scheduler to schedule the script we provide
  • interval_ms : invoke one by one in cycle (eg: 5000(ms) = 5s represent every 5s invoke the script)
  • filename: represent the script file path
  • arg1~arg4: represent the input parameters the script received

The script Usage:

gr_mw_mode_sw_cheker.sh writehostgroup_id readhostgroup_id [writeNodeCanRead] [log file]

So :

  • arg1 -> writehostgroup_id
  • arg2 -> readhostgroup_id
  • arg3 -> writeNodeCanRead, 1(YES, the default value), 0(NO)
  • arg4 -> log file, default: './checker.log'

gr_sw_mode_checker.sh

This script is using for monitoring MySQL Group Replication in Single-Primary Mode, so the limit is also : there is only one node to be write node at a time.

Features and Limitations

Features

  • Read-Write split
  • Switch over automatic when single write node failure

Limitations

  • MGR(MySQL Group Replication) run in single-primary Mode
  • Only one node to be write node at a time

Configuration

the same configuration step as gr_mw_mode_sw_cheker.sh, just in step 4), replace the script with gr_sw_mode_cheker.sh

proxysql_groupreplication_checker's People

Contributors

zzzcrazypig avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.