Este documento apresenta:
1) Wagner Bianchi, palestrante sobre MaxScale 2.0;
2) A agenda inclui instalação e configuração do MaxScale para ReadWriteSplit, Schemarouter e Binlogrouter;
3) É fornecido um Vagrantfile para criar ambientes virtuais com MariaDB e configurar o MaxScale.
Meetup São Paulo, Maxscale Implementação e Casos de Uso
1. MAXSCALE 2.0
IMPLEMENTAÇÃO E CASOS DE USO
By Wagner Bianchi, Principal Remote DBA @ MariaDB Corporation
Email: wagner.bianchi@mariadb.com
Twitter: @wagnerbianchijr
2. MEETUP SÃO PAULO, 2017
WAGNER BIANCHI
Wagner Bianchi ou somente Bianchi, é atualmente Principal Remote DBA na US/Finlandesa MariaDB Corporation,
tendo trabalhado anteriormente em empresas como Percona, Pythian, IBM e Oracle, sempre com operações e entrega
de serviços. Bianchi é focado em MariaDB/MySQL/Percona Server, atuando em projetos de alta-disponibilidade,
escalabilidade e análise de performance. Além disso, como trabalha em ambiente de operações, tem experiência com
soluções de provisionamento, orchestration e monitoramento. Formado em Gerenciamento de Bancos de Dados pela
Faculdade Infórium de Tecnologia, com MBA em Administração pela Função Getúlio Vargas e MBA Oracle Database,
Bianchi milita na área de sistemas, bancos de dados e operações há mais de 11 anos.
Além disso, Bianchi é Oracle Certified Expert (OCE) e Oracle ACE Director desde 2014.
Twitter: @wagnerbianchijr
Email: wagner.bianchi@mariadb.com
2
3. MEETUP SÃO PAULO, 2017
AGENDA
▸ Explorando o cenário de trabalho;
▸ Instalando Maxscale 2.0;
▸ Configurando o Maxscale 2.0 para:
▸ Maxscale::ReadWriteSplit;
▸ Maxscale::Schemarouter;
▸ Maxscale::Binlogrouter;
3
4. MEETUP SÃO PAULO, 2017
EXPLORANDO O CENÁRIO DE TRABALHO
▸ VirtualBox + Vagrant
▸ Pastebin (https://tinyurl.com/nyjyvxk):
$ vagrant status
Current machine states:
box01 running (virtualbox) (MASTER, SSL)
box02 running (virtualbox) (SLAVE, SSL)
box03 running (virtualbox) (SLAVE, SSL)
maxscale running (virtualbox) (SLAVE, SSL)
Vagrantfile: arquivo de configurado do projeto Vagrant (necessário box "centos7.0_x86_64")
MariaDB.repo: repositório YUM MariaDB 10.1 (CentOS 7)
setup_env.sh: script que vai instalar os pacotes, iniciar os serviços e replicação
setup_maxscale.sh: script que fará a instalação do maxscale com configuração básica
server-01.cnf: arquivo de configuração do MariaDB Server no box01
server-01.cnf: arquivo de configuração do MariaDB Server no box02
server-01.cnf: arquivo de configuração do MariaDB Server no box03
maxscale.cnf: arquivo de configurações básicas para o Maxscale
4
5. MEETUP SÃO PAULO, 2017
SOBRE O MAXSCALE
▸ Maxscale é um Database Proxy;
▸ Vários built-in routers e monitors;
▸ Fácil configuração e monitoramento dos bancos de dados;
▸ Onde possível, deve ser utilizado;
▸ Rápido particionamento de escritas e leituras;
▸ Possibilidades inúmeras;
5
6. MEETUP SÃO PAULO, 2017
INSTALANDO E INICIAND O MAXSCALE
▸ Faça o download do Maxscale 2.0:
▸ Inicie o Maxscale através do systemd:
▸ Ou se existir um script que você queira apontar:
$ sudo rpm -Uvih
https://downloads.mariadb.com/MaxScale/2.0.3/rhel/7/x86_64/maxscale-2.0.3-1.rhel.7.x86_64.rpm
$ systemctl status maxscale.service
$ systemctl start maxscale.service
$ systemctl status maxscale.service
$ sudo maxscale —config=/root/maxscale_config/readwritesplit.cnf
7. MEETUP SÃO PAULO, 2017
INSTALANDO E INICIAND O MAXSCALE
▸ Verifique o arquivo de log:
[root@maxscale ~]# tail -f -n100 /var/log/maxscale/maxscale1.log
MariaDB Corporation MaxScale/var/log/maxscale/maxscale1.log Mon May 8 16:25:00 2017
-----------------------------------------------------------------------
2017-05-08 16:25:00 notice : Working directory: /var/log/maxscale
2017-05-08 16:25:00 notice : MariaDB MaxScale 2.0.3 started
2017-05-08 16:25:00 notice : MaxScale is running in process 4670
2017-05-08 16:25:00 notice : Configuration file: /etc/maxscale.cnf
2017-05-08 16:25:00 notice : Log directory: /var/log/maxscale
2017-05-08 16:25:00 notice : Data directory: /var/lib/maxscale
2017-05-08 16:25:00 notice : Module directory: /usr/lib64/maxscale
2017-05-08 16:25:00 notice : Service cache: /var/cache/maxscale
[…snip…]
2017-05-08 16:25:00 notice : Started MaxScale log flusher.
2017-05-08 16:25:00 notice : Server changed state: box01[192.168.50.11:3306]: new_master. [Running] -> [Master, Running]
2017-05-08 16:25:00 notice : Server changed state: box02[192.168.50.12:3306]: new_slave. [Running] -> [Slave, Running]
2017-05-08 16:25:00 notice : Server changed state: box03[192.168.50.13:3306]: new_slave. [Running] -> [Slave, Running]
2017-05-09 19:57:44.323 notice : A Master Server is now available: 192.168.50.11:3306
8. MEETUP SÃO PAULO, 2017
REQUISITOS MÍNIMOS MAXSCALE CONFIGS
▸ Os requisitos mínimos para iniciar o Maxscale (arquivo /etc/maxscale.cnf):
▸ Threads
▸ Service
▸ Listener
▸ MySQL Monitor
▸ Maxadmin Configuration
9. MEETUP SÃO PAULO, 2017
DEFININDO A [MAXSCALE] SECTION
▸ Globalmente, todo arquivo de configuração do Maxscale começa com uma
sessão [maxscale], como abaixo:
▸ threads: # de threads utilizadas pelo Maxscale * (1.4 | 2.0 | 2.1)
▸ auth_connect_timeout: timeout para conexão com backend;
▸ auth_read_timeout: tempo em segundos de timeout para leitura de dados;
▸ ms_timeout: habilita milissegundos nos logs;
[maxscale]
threads=auto
auth_connect_timeout=900000
auth_read_timeout=900000
ms_timestamp=1
10. MEETUP SÃO PAULO, 2017
MAXKEYS, SENHA DE ACESSO AO BANCO CRIPTOGRAFADA
▸ O client maxkeys é parte da instalação do Maxscale:
▸ Quando iniciar o Maxscale, os logs apontarão:
#: generate keys
[root@maxscale ~]# maxkeys
Generating .secrets file in /var/lib/maxscale.
#: generate the encrypted password to add to the maxscale config file
[root@maxscale ~]# maxpasswd /var/lib/maxscale/ <password do usuário no db>
DF5822F1038A154FEB68E667740B1160
notice : Using encrypted passwords. Encryption key: '/var/lib/maxscale/.secrets'
11. MEETUP SÃO PAULO, 2017
MAXSCALE CLIENT INTERFACE: MAXADMIN
▸ Configurações para o Maxadmin (arquivo /etc/maxscale.cnf):
[MaxAdmin]
type=service
router=cli
[MaxAdmin Unix Listener]
type=listener
service=MaxAdmin
protocol=maxscaled
socket=default
[MaxAdmin Inet Listener]
type=listener
service=MaxAdmin
protocol=maxscaled
address=localhost
port=6603
12. MEETUP SÃO PAULO, 2017
MAXSCALE::READWRITESPLIT (OVERVIEW)
Data Writes
Reads
Reads
13. MEETUP SÃO PAULO, 2017
MAXSCALE::READWRITESPLIT
▸ O ReadWriteSplit é um módulo disponível no Maxscale;
▸ Projetado aumentar a escala de leitura, mantendo a consistência dos dados;
▸ Consultas de leitura são enviadas à todos e/ou somente slaves;
▸ Consultas de escrita são enviadas ao master;
▸ Vamos definir o arquivo ~/maxscale_configs/readwritesplit.conf nos próximos
slides;
14. MEETUP SÃO PAULO, 2017
MAXSCALE::READWRITESPLIT (SERVICE)
▸ Configurações para o serviço [readwritesplit_router]:
▸ Aqui temos:
▸ max_slave_lagging=30
▸ max_slave_connections=2
▸ router_options para detectar o slave mais adiantado (evitar ler stall data)
[readwritesplit_router]
type=service
router=readwritesplit
servers=box01,box02,box03
max_slave_replication_lag=30
max_slave_connections=2
router_options=slave_selection_criteria=LEAST_BEHIND_MASTER,master_accept_reads=false
user=maxuser
passwd=B264592E96D87B1175F315D5931A60D2
15. MEETUP SÃO PAULO, 2017
MAXSCALE::READWRITESPLIT (MYSQL MONITOR)
▸ Configurações para o MySQL Monitor [monitor]:
▸ Aqui temos:
▸ detect_replication_lag=true
▸ detect_stale_master=true
▸ events
▸ script
[monitor]
type=monitor
module=mysqlmon
servers=box01,box02,box03
monitor_interval=100
detect_replication_lag=true
detect_stale_master=true
script=/root/maxscale_configs/max_failover_check.wb
events=master_down,slave_down
user=maxmon
passwd=B264592E96D87B1175F315D5931A60D2
16. MEETUP SÃO PAULO, 2017
MAXSCALE::READWRITESPLIT (LISTENER)
▸ Configurações para o listener [readwritesplit_listener] - qual porta connectar?
▸ Aqui temos:
▸ A aplicação se conecta ao endereço -h address -P 53306
▸ A variável address não é mandatório e pode ser omitida (bind to all interfaces)
▸ Suporte nativo à SSL
[readwritesplit_listener]
type=listener
service=readwritesplit_router
protocol=MySQLClient
address=192.168.50.100
port=53306
17. MEETUP SÃO PAULO, 2017
MAXSCALE::READWRITESPLIT (RODANDO)
▸ Após iniciar o maxscale:
▸ Serviços ativos:
[root@maxscale maxscale_configs]# maxadmin list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
box01 | 192.168.50.11 | 3306 | 10 | Master, Running
box02 | 192.168.50.12 | 3306 | 122 | Slave, Running
box03 | 192.168.50.13 | 3306 | 98 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
[root@maxscale maxscale_configs]# maxadmin list services
Services.
--------------------------+----------------------+--------+---------------
Service Name | Router Module | #Users | Total Sessions
--------------------------+----------------------+--------+---------------
readwritesplit_router | readwritesplit | 43 | 216
MaxAdmin | cli | 3 | 3
--------------------------+----------------------+--------+---------------
18. MEETUP SÃO PAULO, 2017
MAXSCALE::READWRITESPLIT (STATISTICS)
▸ Depois de alguns rounds de sysbench (oltp.lua):
MaxScale> show service "readwritesplit_router"
Service 0x109ba70
Service: readwritesplit_router
Router: readwritesplit (0x7fab5e36c2c0)
State: Started
Number of router sessions: 2822
Current no. of router sessions: 0
Number of queries forwarded: 5644
Number of queries forwarded to master:2815 (49.88%)
Number of queries forwarded to slave: 2829 (50.12%)
Number of queries forwarded to all: 0 (0.00%)
Started: Tue May 9 22:44:15 2017
Root user access: Disabled
Backend databases:
192.168.50.11:3306 Protocol: MySQLBackend
192.168.50.12:3306 Protocol: MySQLBackend
192.168.50.13:3306 Protocol: MySQLBackend
Users data: 0x10b0570
Total connections: 2823
Currently connected: 1657
19. MEETUP SÃO PAULO, 2017
MAXSCALE::SCHEMAROUTER
accounts_west
accounts_east
accounts_central
20. MEETUP SÃO PAULO, 2017
MAXSCALE::SCHEMAROUTER
▸ Seguindo o mesmo esquema de configurações, o log nos mostra que:
MariaDB Corporation MaxScale/var/log/maxscale/maxscale1.log Wed May 10 02:03:07 2017
-----------------------------------------------------------------------
2017-05-10 02:03:07 notice : Working directory: /var/log/maxscale
2017-05-10 02:03:07 notice : MariaDB MaxScale 2.0.3 started
2017-05-10 02:03:07 notice : MaxScale is running in process 4289
2017-05-10 02:03:07 notice : Configuration file: /root/maxscale_configs/schemarouter.cnf
2017-05-10 02:03:07 notice : Log directory: /var/log/maxscale
2017-05-10 02:03:07 notice : Data directory: /var/lib/maxscale
2017-05-10 02:03:07 notice : Module directory: /usr/lib64/maxscale
2017-05-10 02:03:07 notice : Service cache: /var/cache/maxscale
2017-05-10 02:03:07 notice : Initializing Schema Sharding Router.
2017-05-10 02:03:07 notice : Loaded module schemarouter: V1.0.0 from /usr/lib64/maxscale/libschemarouter.so
2017-05-10 02:03:07 notice : Initialise the MySQL Monitor module V1.4.0.
2017-05-10 02:03:07 notice : Loaded module mysqlmon: V1.4.0 from /usr/lib64/maxscale/libmysqlmon.so
2017-05-10 02:03:07 notice : No query classifier specified, using default 'qc_sqlite'.
2017-05-10 02:03:07 notice : Loaded module qc_sqlite: V1.0.0 from /usr/lib64/maxscale/libqc_sqlite.so
2017-05-10 02:03:07 notice : Schemarouter: Authentication data is fetched from all servers. To disable this add 'auth_all_servers=0' to the service.
2017-05-10 02:03:07 notice : Loaded 3 MySQL Users for service [Sharded Service].
2017-05-10 02:03:07 notice : Loaded module MySQLClient: V1.1.0 from /usr/lib64/maxscale/libMySQLClient.so
2017-05-10 02:03:07 notice : Listening connections at 0.0.0.0:4000 with protocol MySQL
2017-05-10 02:03:07 notice : MaxScale started with 1 server threads.
2017-05-10 02:03:07 notice : Started MaxScale log flusher.
21. MEETUP SÃO PAULO, 2017
MAXSCALE::SCHEMAROUTER
▸ Características desse serviço:
▸ Cada MariaDB envolvido precisa ter diferente bancos de dados de usuário;
▸ Caso haja um mesmo banco de dados em mais de um db, problema;
▸ O router determina quais são os bancos e seus hosts ao iniciar o Maxscale;
▸ As consultas são roteadas com base em uma tabela montado onStart;
[root@maxscale maxscale_configs]# maxadmin list servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server | Address | Port | Connections | Status
-------------------+-----------------+-------+-------------+--------------------
accounts_east | 192.168.50.14 | 3306 | 16534 | Running
accounts_west | 192.168.50.15 | 3306 | 7590 | Running
-------------------+-----------------+-------+-------------+--------------------
22. MEETUP SÃO PAULO, 2017
MAXSCALE::BINLOGROUTER
Binary Log Download
Reading Binary Logs
23. MEETUP SÃO PAULO, 2017
CONCLUSÃO
▸ Database Proxy atualmente é parte básica da topologia de bancos de dados;
▸ É possível adicionar caches de consultas, filtros e muitos outros serviços;
▸ Combinar os módulos só depende da criatividade do administrador de sistemas;
▸ Persistent Connections para sistemas que trabalham com Connection Pooling;
▸ Além de módulos, possui filtros como:
▸ Database Firewall;
▸ Query Cache;
▸ Query Log;
▸ Named Server (regex based routing);
▸ Top Filter (query statistics);
▸ Tee Filter (query mirroring).