Heim  >  Artikel  >  Datenbank  >  So implementieren Sie die MySQL-Master-Slave-Replikation basierend auf einer sicheren SSL-Verbindung

So implementieren Sie die MySQL-Master-Slave-Replikation basierend auf einer sicheren SSL-Verbindung

王林
王林nach vorne
2023-05-26 17:38:301158Durchsuche

    Ein MySQL-Host in der Produktionsumgebung hat einen einzigen Fehlerpunkt, daher müssen wir die hohe Verfügbarkeit von MySQL sicherstellen, das heißt, wenn einer der beiden MySQL-Server aufhängt, kann der andere sofort übernehmen seine Arbeit.

    Prinzip der Master-Slave-Replikation

                               Der Master zeichnet das Binärprotokoll auf. Bevor jede Transaktion die Daten aktualisiert, zeichnet der Master diese Änderungen im zweiten Protokoll auf. Die Speicher-Engine erhält vom Master-Server eine Benachrichtigung, nachdem das Binärprotokoll abgeschlossen ist, um die MySQL-Transaktion festzuschreiben. Als nächstes muss der Slave das Binärprotokoll des Masters in sein eigenes Relay-Protokoll kopieren. Zuerst startet der Slave einen Arbeitsthread – den I/O-Thread. Der I/O-Thread öffnet eine normale Verbindung auf dem Master und startet dann den Binlog-Dump-Prozess. Der Binlog-Dump-Prozess liest Ereignisse aus dem Binärprotokoll des Masters. Wenn der Master synchronisiert wurde, wartet er darauf, dass der Master neue Ereignisse generiert. Der letzte Schritt dieses Prozesses wird vom SQL-Slave-Thread ausgeführt. Der SQL-Thread liest die Ereignisse im Relay-Protokoll und reproduziert diese Ereignisse, um die Daten in der Slave-Datenbank zu aktualisieren und die Konsistenz mit den Daten in der Master-Datenbank aufrechtzuerhalten. Da Relay-Protokolle normalerweise im Cache des Betriebssystems gespeichert werden, entsteht nur wenig Overhead, solange der Thread mit dem E/A-Thread konsistent ist.

    Umgebungsvorbereitung: Öffnen Sie zwei MySQL-Server und stellen Sie die Netzwerkumgebung bereit.

    So implementieren Sie die MySQL-Master-Slave-Replikation basierend auf einer sicheren SSL-Verbindung

    Master bereitstellen

    1. SSL/RSA-Datei auf dem Host erstellen

    [root@master ~]# cd /usr/local/mysql/bin/
    [root@master bin]# mysql_ssl_rsa_setup --user=mysql --basedir=/usr/llocal/mysql --datadir=/usr/local/mysql/data

    2.

    [root@master bin]# chmod +r /usr/local/mysql/data/server-key.pem 
    [root@master bin]# service mysqld restart
    Shutting down MySQL..                                      [  确定  ]
    Starting MySQL.                                            [  确定  ]

    3. Melden Sie sich bei MySQL an, um zu überprüfen, ob SSL aktiviert ist, und erstellen Sie einen Kopierbenutzer.

    So implementieren Sie die MySQL-Master-Slave-Replikation basierend auf einer sicheren SSL-Verbindung

    Hinweis: Aktivieren Sie MySQL, um eine sichere SSL-Verbindung zu unterstützen, die hauptsächlich für die MySQL-Master-Slave-Replikation verwendet wird (das lokale Netzwerk kann eine Nicht-SSH-Verbindung oder eine Nur-Text-Replikation verwenden, es wird jedoch empfohlen, eine SSL-Verbindung für das Internet zu verwenden Replikation)

    mysql> grant replication slave on *.* to rep@'192.168.8.3' identified by '123';
    Query OK, 0 rows affected, 1 warning (0.07 sec)

    4. Der Master schaltet das Binärprotokoll ein und zeigt nach dem Neustart die Binärprotokolldatei an.

    Es ist zu beachten, dass server_id eindeutig sein muss.

    [root@master ~]# vim /etc/my.cnf
    #添加下面内容
    log-bin=mysql-bin
    service_id=1
    [root@master ~]# service mysqld restart
    Shutting down MySQL..                                      [  确定  ]
    Starting MySQL.                                            [  确定  ]
    [root@master ~]# mysql -uroot -p123 -e "show master status"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+

    5. Firewall-Konfiguration, die Firewall kann in der experimentellen Umgebung ausgeschaltet werden und Firewall-Regeln müssen in der Produktionsumgebung konfiguriert werden, um Port 3306 zuzulassen.

    [root@master ~]# firewall-cmd --permanent --add-port=3306/tcp
    success
    [root@master ~]# firewall-cmd --reload
    success

    6. Kopieren Sie die SSL-Datei auf den Slave

    [root@master data]# scp ca.pem client-cert.pem client-key.pem root@192.168.8.3:/usr/local/mysql/data
    The authenticity of host '192.168.8.3 (192.168.8.3)' can't be established.
    ECDSA key fingerprint is SHA256:LFby9KMDz/kkPfOESbeJ7Qh+3hmQaX2W5gkDDMwSGHA.
    ECDSA key fingerprint is MD5:03:32:64:b4:c2:5b:6c:a4:e2:f0:7f:df:7a:35:19:80.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.8.3' (ECDSA) to the list of known hosts.
    root@192.168.8.3's password: 
    ca.pem                             100% 1112   232.5KB/s   00:00    
    client-cert.pem                    100% 1112   240.4KB/s   00:00    
    client-key.pem                     100% 1676   205.0KB/s   00:00

    Stellen Sie SSL bereit, leiten Sie Protokolle weiter, erteilen Sie Leseberechtigung für die SSL-Datei und starten Sie MySQL neu.

    [root@slave ~]# vim /etc/my.cnf
    #添加下面内容
    server_id=2
    relay-log=relay-log
    ssl_ca=ca.pem
    ssl_cert=client-cert.pem
    ssl_key=client-key.pem
    
    [root@slave ~]# cd /usr/local/mysql/data
    [root@slave data]# ll ca.pem client-cert.pem client-key.pem 
    -rw-r--r--. 1 mysql mysql 1112 3月  31 14:31 ca.pem
    -rw-r--r--. 1 mysql mysql 1112 3月  31 14:31 client-cert.pem
    -rw-------. 1 mysql mysql 1676 3月  31 14:31 client-key.pem
    [root@slave data]# chmod +r client-key.pem
    [root@slave ~]# service mysqld restart
    Shutting down MySQL..                                      [  确定  ]
    Starting MySQL.                                            [  确定  ]

    2. Bestätigen Sie, dass SSL erfolgreich aktiviert ist

    [root@slave ~]# mysql -uroot -p123 -e "show variables like '%ssl%'"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    +-------------------------------------+-----------------+
    | Variable_name                       | Value           |
    +-------------------------------------+-----------------+
    | have_openssl                        | YES             |
    | have_ssl                            | YES             |
    | performance_schema_show_processlist | OFF             |
    | ssl_ca                              | ca.pem          |
    | ssl_capath                          |                 |
    | ssl_cert                            | client-cert.pem |
    | ssl_cipher                          |                 |
    | ssl_crl                             |                 |
    | ssl_crlpath                         |                 |
    | ssl_key                             | client-key.pem  |
    +-------------------------------------+-----------------+

    3 Bevor Sie die Master-Slave-Replikation konfigurieren, können Sie versuchen, SSL zu verwenden, um eine Verbindung zum Master-Server auf dem Slave-MySQL herzustellen.

                                                                                                                                                                            AES128-GCM-SHA256. Melden Sie sich beim MySQL-Dienst des Slaves an.

    [root@slave ~]# cd /usr/local/mysql/data
    [root@slave data]# mysql --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -u rep -p123 -h 192.168.8.2
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 3
    Server version: 5.7.40-log MySQL Community Server (GPL)
     
    Copyright (c) 2000, 2022, 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> 
    mysql> \s
    --------------
    mysql  Ver 14.14 Distrib 5.7.40, for linux-glibc2.12 (x86_64) using  EditLine wrapper
     
    Connection id:		3
    Current database:	
    Current user:		rep@192.168.8.3
    SSL:			Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
    Current pager:		stdout
    Using outfile:		''
    Using delimiter:	;
    Server version:		5.7.40-log MySQL Community Server (GPL)
    Protocol version:	10
    Connection:		192.168.8.2 via TCP/IP
    Server characterset:	latin1
    Db     characterset:	latin1
    Client characterset:	utf8
    Conn.  characterset:	utf8
    TCP port:		3306
    Uptime:			22 min 19 sec
     
    Threads: 1  Questions: 8  Slow queries: 0  Opens: 109  Flush tables: 1  Open tables: 102  Queries per second avg: 0.005
    --------------

    Bestätigen Sie, dass die Aktivierung erfolgreich war.

    SSL-Master-Slave-Replikation testen

    1. Melden Sie sich beim Master an und schreiben Sie einige Daten

    mysql> exit
    Bye
    [root@slave data]# mysql -uroot -p123
    #省略部分登录信息
    mysql> change master to
        -> master_host='192.168.8.2',						#masterIP
        -> master_user='rep',								#master用户
        -> master_password='123',							#master密码
        -> master_log_file='mysql-bin.000001',				#master二进制日志文件
        -> master_log_pos=154,								#master位置
        -> master_ssl=1,									#masterssl
        -> master_ssl_cert='client-cert.pem',
        -> master_ssl_key='client-key.pem',
        -> master_ssl_ca='ca.pem';
    Query OK, 0 rows affected, 2 warnings (0.07 sec)
     
    mysql> start slave;				#启用从
    Query OK, 0 rows affected (0.02 sec)
    So implementieren Sie die MySQL-Master-Slave-Replikation basierend auf einer sicheren SSL-Verbindung2. Melden Sie sich beim Slave an und sehen Sie sich die Daten an. Endlich können Sie z3 sehen, den Master. Sklave ist erfolgreich.

    Das obige ist der detaillierte Inhalt vonSo implementieren Sie die MySQL-Master-Slave-Replikation basierend auf einer sicheren SSL-Verbindung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen