replicação mestre-escravo mysql, separação leitura-gravação, replicação mestre-escravo duplo, separação leitura-gravação

Replicação mestre-escravo MySQL

Visão geral

       A replicação mestre-escravo consiste em transferir os dados do banco de dados mestre para o servidor de banco de dados escravo por meio do log binário (binlog) e, em seguida, executar novamente esses logs no banco de dados escravo, de modo que os dados do banco de dados escravo e do banco de dados mestre estão sincronizados.

Insira a descrição da imagem aqui

princípio

Insira a descrição da imagem aqui

construir

Prepare dois servidores

Mestre: 192.168.40.137

Escravista: 192.168.40.138

1. Desligue o firewall

[root@mysql-master ~]# systemctl stop firewalld
[root@mysql-master ~]# systemctl disable firewalld
[root@mysql-slaver ~]# systemctl stop firewalld
[root@mysql-slaver ~]# systemctl disable firewalld

2.Instale o mysql

Instale o mysql em ambos os servidores, use ps para verificar se a instalação foi bem-sucedida

[root@mysql-master ~]# ps aux|grep mysqld
[root@mysql-slaver ~]# ps aux|grep mysqld

3. Configuração da biblioteca principal

Modifique o arquivo de configuração da biblioteca principal /etc/my.cnf

# mysql服务器id,保证整个集群环境中唯一
server-id=1
# 是否只读,1代表只读,0代表读写
read-only=0

Reinicie o servidor MySQL

[root@mysql-master ~]# systemctl restart mysqld

Faça login no MySQL, crie uma conta para conexão remota e conceda permissões de replicação mestre-escravo

# 创建root用户,并设置密码,该用户可以在任意主机连接mysql服务
mysql> create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 为'root'@'%'用户分配主从复制权限
mysql> grant replication slave on *.* to 'root'@'%';

Ver coordenadas binárias

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000004 |      377 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+

4. Configuração da biblioteca

Modifique o arquivo de configuração escravo /etc/my.cnf

# mysql服务器id,保证整个集群环境中唯一
server-id=2
# 是否只读,1代表只读,0代表读写
read-only=1

Reinicie o servidor MySQL

[root@mysql-master ~]# systemctl restart mysqld

Faça login no MySQL e defina a configuração do banco de dados principal

mysql> change replication source to source_host="192.168.40.137",source_user="root",source_password='123456',source_log_fike='binlog.000004',source_log_pos=377;

Habilitar operação de sincronização

mysql> start replica;

Ver o status da replicação mestre-escravo

mysql> show replica status\G;

Insira a descrição da imagem aqui

5. Teste

Crie um banco de dados, depois crie uma tabela e insira os dados para visualizar

mysql> CREATE DATABASE MyDatabase;
Query OK, 1 row affected (0.01 sec)

mysql> USE MyDatabase;
Database changed
mysql> CREATE TABLE MyTable (
    ->   id INT NOT NULL AUTO_INCREMENT,
    ->   name VARCHAR(50) NOT NULL,
    ->   age INT NOT NULL,
    ->   PRIMARY KEY (id)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO MyTable (name, age) VALUES
    ->   ('张三', 20),
    ->   ('李四', 25),
    ->   ('王五', 30);
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql>INSERT INTO MyTable (name, age) VALUES
    ->   ('张三', 20),
    ->   ('李四', 25),
    ->   ('王五', 30);
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> update MyTable set age=20;
Query OK, 2 rows affected (0.01 sec)
Rows matched: 6  Changed: 2  Warnings: 0

Insira a descrição da imagem aqui

MyCat implementa separação de leitura e escrita

       A separação leitura-gravação consiste em separar as operações de leitura e gravação no banco de dados para corresponder a diferentes servidores de banco de dados. A biblioteca mestre fornece operações de gravação e a biblioteca escrava fornece operações de leitura, o que pode efetivamente reduzir a pressão em um único banco de dados.
Insira a descrição da imagem aqui

Preparação de um ambiente mestre e um escravo

Verifique se o ambiente de replicação mestre-escravo anterior está normal. Da mesma forma, se os seguintes efeitos aparecerem, é normal.

Insira a descrição da imagem aqui

Configuração

MyCat controla a separação leitura-gravação e o balanceamento de carga do banco de dados em segundo plano pelo atributo balance da tag datahost no arquivo schema.xml.

valor do saldo
Insira a descrição da imagem aqui

1. Modifique o arquivo schema.xml, especifique a biblioteca lógica e leia e grave o IP do host

 <!-- 新建一个逻辑库 dataNode为dn4-->
        <schema name="DB_RW" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn4" >
        </schema>
        <dataNode name="dn4" dataHost="dhost4" database="db1" />
        <!--新建一个主机dhost4 负载均衡策略为1-->
        <dataHost name="dhost4" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- 写操作对应的主机-->
                <writeHost host="hostM1" url="jdbc:mysql://192.168.40.137:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                 <!-- 读操作对应的主机-->
                        <readHost host="hostS1" url="jdbc:mysql://192.168.40.138:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                        </readHost>
                </writeHost>
        </dataHost>

2. Adicione a permissão do usuário para acessar o banco de dados no arquivo server.xml

Insira a descrição da imagem aqui

3. Reinicie o MyCat

[root@mysql-master mycat]# bin/mycat restart

Visualização de teste

Insira a descrição da imagem aqui

Como a replicação mestre-escravo está configurada, as modificações nos dados no banco de dados escravo não afetarão o banco de dados mestre, portanto, modifique os dados no banco de dados escravo e consulte o banco de dados mestre para ver se os dados consultados são do banco de dados escravo ou do banco de dados escravo. banco de dados mestre.

Insira a descrição da imagem aqui

Percebe-se que os dados da biblioteca foram modificados, e os dados da biblioteca são recuperados, o que realiza a separação entre leitura e escrita.

Introdução ao mestre duplo e escravos duplos e preparação do ambiente

1. Introdução

       Um host Master1 é usado para lidar com todas as solicitações de gravação, e seu escravo Slave1 e outro host Master2 e seu escravo Slave2 são responsáveis ​​por todas as solicitações de leitura. Quando o host Master1 fica inativo, o host Master2 é responsável por escrever solicitações, e Master1 e Master2 são máquinas de backup um para o outro.

Insira a descrição da imagem aqui

2. Preparação do ambiente

servidor instalar software ilustrar
192.168.40.137 JDK,MyCat,MySQL Servidor intermediário MyCat
192.168.40.138 MySQL Mestre1
192.168.40.139 MySQL Escravo1
192.168.40.170 MySQL Mestre2
192.168.40.171 MySQL Escravo2

Desligue todos os firewalls

systemctl stop firewalld
systemctl disable firewalld

Configuração

Insira a descrição da imagem aqui

1. Configuração do banco de dados principal (Master1)

Modifique o arquivo de configuração /etc/my.cnf

# 主库配置
# mysql服务器id,保证整个集群环境中唯一
server-id=1
# 指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作为从数据库的时候,有写入操作也要更新二进制文件
log-slave-updates

Reiniciar serviço

systemctl restart mysqld

2. Configuração da biblioteca principal (Master2)

Modifique o arquivo de configuração /etc/my.cnf

# 主库配置
# mysql服务器id,保证整个集群环境中唯一
server-id=3
# 指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
# 在作为从数据库的时候,有写入操作也要更新二进制文件
log-slave-updates

Reiniciar serviço

systemctl restart mysqld

3. Crie uma conta para replicação mestre-escravo

Tanto Master1 quanto Master2 executam

# 创建root用户,并设置密码,该用户可以在任意主机连接mysql服务
mysql> create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 为'root'@'%'用户分配主从复制权限
mysql> grant replication slave on *.* to 'root'@'%';

Veja as coordenadas binárias das duas bibliotecas principais

mysql> show master status;

Mestre1

mysql> show master status;
+---------------+----------+----------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB   | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+----------------+------------------+-------------------+
| binlog.000004 |      659 | db01,db02,db03 |                  |                   |
+---------------+----------+----------------+------------------+-------------------+
1 row in set (0.00 sec)

Mestre2

mysql> show master status;
+---------------+----------+----------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB   | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+----------------+------------------+-------------------+
| binlog.000002 |      659 | db01,db02,db03 |                  |                   |
+---------------+----------+----------------+------------------+-------------------+
1 row in set (0.00 sec)

4. Configuração da biblioteca escrava (Slave1)

Modifique o arquivo de configuração escravo /etc/my.cnf

# mysql服务器id,保证整个集群环境中唯一
server-id=2

Reinicie o servidor MySQL

systemctl restart mysqld

5. Configuração da biblioteca escrava (Slave2)

Modifique o arquivo de configuração escravo /etc/my.cnf

# mysql服务器id,保证整个集群环境中唯一
server-id=4

Reinicie o servidor MySQL

systemctl restart mysqld

6. Configure as duas bibliotecas escravas para associar à biblioteca principal

Executar em Slave1

mysql> change master to master_host="192.168.40.138",master_user="root",master_password='123456',master_log_file='binlog.000004',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.04 sec)

iniciar repositório

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)

Ver o status da replicação mestre-escravo

mysql> show slave status\G;

Insira a descrição da imagem aqui


Executar em Slave2

mysql> change master to master_host="192.168.40.170",master_user="root",master_password='123456',master_log_file='binlog.000002',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.04 sec)

iniciar repositório

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.03 sec)

Ver o status da replicação mestre-escravo

mysql> show slave status\G;

Insira a descrição da imagem aqui

7. Copie um ao outro entre as duas bibliotecas principais

Master1 replica Master2 ,Executado em Master1

mysql>  change master to master_host="192.168.40.170",master_user="root",master_password='123456',master_log_file='binlog.000002',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.04 sec)

Inicie a biblioteca escrava e verifique o status da replicação mestre-escravo

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> show slave status\G;

Insira a descrição da imagem aqui


Master2 replica Master1 ,Executado em Master2

mysql>  change master to master_host="192.168.40.138",master_user="root",master_password='123456',master_log_file='binlog.000004',master_log_pos=659;
Query OK, 0 rows affected, 8 warnings (0.01 sec)

Inicie a biblioteca escrava e verifique o status da replicação mestre-escravo

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)
mysql> show slave status\G;

Insira a descrição da imagem aqui

8. Teste

Crie o banco de dados DB01:

CREATE DATABASE db01;

Selecione o banco de dados DB01:

USE db01;

Crie uma mytabletabela nomeada com 3 campos:

CREATE TABLE mytable (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    age INT NOT NULL,
    address VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
);

mytableInsira 5 dados chineses na tabela :

INSERT INTO mytable (name, age, address) VALUES
    ('张三', 20, '北京'),
    ('李四', 25, '上海'),
    ('王五', 30, '广州'),
    ('赵六', 35, '深圳'),
    ('钱七', 40, '成都');

Um teste simples mostra que as funções dual-master e dual-slave podem ser realizadas.

Configuração de separação de leitura e gravação de mestre duplo e escravo duplo

       A separação leitura-gravação e o balanceamento de carga do banco de dados do console MyCat são controlados pelo atributo balance da tag dataHost no arquivo schema.xml e a comutação automática é concluída em caso de falha por meio de writeType e switchType.

Modifique o arquivo schema.xml do MyCat

   <!--因为只设置了db01这个库,以它为例-->
        <dataNode name="dn4" dataHost="dhost4" database="db01" />
        <!--新建一个主机dhost4 负载均衡策略为1-->
        <dataHost name="dhost4" maxCon="1000" minCon="10" balance="1"
                          writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- 写操作对应的主机 Master1 - Slave1-->
                <writeHost host="Master1" url="jdbc:mysql://192.168.40.138:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                 <!-- 读操作对应的主机-->
                        <readHost host="Slave1" url="jdbc:mysql://192.168.40.139:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                        </readHost>
                </writeHost>
                <!-- Master2 - Slave2 -->
                <writeHost host="Master2" url="jdbc:mysql://192.168.40.170:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                 <!-- 读操作对应的主机-->
                        <readHost host="Slave2" url="jdbc:mysql://192.168.40.171:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="123456">
                        </readHost>
                </writeHost>
        </dataHost>

Insira a descrição da imagem aqui

Reinicie o MyCat

[root@mycat mycat]# bin/mycat restart

Faça login para visualizar

[root@mycat mycat]# mysql -h 192.168.40.137 -P 8066 -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.29-mycat-1.6.7.3-release-20210913163959 MyCat Server (OpenCloudDB)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> show databases;
+----------+
| DATABASE |
+----------+
| DB01     |
| DB_RW    |
+----------+
2 rows in set (0.00 sec)

mysql> use DB_RW;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------+
| Tables_in_db01 |
+----------------+
| mytable        |
+----------------+
1 row in set (0.02 sec)

Visualização de teste

       O teste pode ser feito inserindo dados para visualizar ou deixando o Master1 desligar, e então se o Master2 pode ser iniciado para atingir alta disponibilidade. O teste é relativamente simples, então não vou postar fotos.

Soluções para pequenos problemas de rede

Cancele o NetworkManager assumindo as configurações de rede:

nmcli n off

Configure o NetworkManager para assumir as configurações de rede:

nmcli n on

Acho que você gosta

Origin blog.csdn.net/qq_52589631/article/details/131138964
Recomendado
Clasificación