Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk melaksanakan replikasi tuan-hamba MySQL berdasarkan sambungan selamat SSL

Bagaimana untuk melaksanakan replikasi tuan-hamba MySQL berdasarkan sambungan selamat SSL

王林
王林ke hadapan
2023-05-26 17:38:301225semak imbas

    Hos mysql dalam persekitaran pengeluaran mempunyai satu titik kegagalan, jadi kita perlu memastikan ketersediaan mysql yang tinggi, iaitu, jika salah satu daripada dua pelayan MySQL menutup telefon, , yang satu lagi boleh mengambil alih tugasnya dengan segera.

    Prinsip replikasi tuan-hamba

    Tuan merekodkan log binari Sebelum setiap transaksi mengemas kini data, tuan merekodkan perubahan ini dalam log kedua. Enjin storan menerima pemberitahuan daripada pelayan induk selepas log binari selesai untuk melakukan transaksi MySQL. Seterusnya, hamba perlu menyalin log binari tuan ke log gegantinya sendiri. Mula-mula, hamba memulakan benang berfungsi - benang I/O membuka sambungan biasa pada induk, dan kemudian memulakan proses pembuangan binlog. Proses pembuangan Binlog membaca peristiwa daripada log perduaan induk Jika induk telah disegerakkan, ia tidur dan menunggu induk menjana peristiwa baharu. Langkah terakhir proses ini dikendalikan oleh benang hamba SQL.. Benang SQL membaca peristiwa dalam log geganti dan mengeluarkan semula peristiwa ini untuk mengemas kini data dalam pangkalan data hamba untuk mengekalkan konsistensi dengan data dalam pangkalan data induk. Oleh kerana log geganti biasanya disimpan dalam cache sistem pengendalian, log geganti mempunyai sedikit overhed selagi benang itu konsisten dengan utas I/O.

    Persediaan persekitaran: Buka dua pelayan MySQL dan gunakan persekitaran rangkaian.

    Bagaimana untuk melaksanakan replikasi tuan-hamba MySQL berdasarkan sambungan selamat SSL

    Kerahkan induk

    1 Cipta fail SSL/RSA pada hos

    [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. Log masuk ke mysql untuk menyemak sama ada ssl didayakan dan buat pengguna replikasi.

    Bagaimana untuk melaksanakan replikasi tuan-hamba MySQL berdasarkan sambungan selamat SSL

    Nota: Dayakan mysql untuk menyokong sambungan selamat ssl, yang digunakan terutamanya untuk replikasi master-slave mysql (LAN boleh menggunakan sambungan bukan ssh atau replikasi teks yang jelas, tetapi ia disyorkan untuk menggunakan sambungan ssl untuk replikasi internet)

    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.

    Perlu diingatkan bahawa server_id mestilah unik.

    [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. Anda boleh mematikan tembok api dalam persekitaran percubaan, anda perlu mengkonfigurasi peraturan tembok api untuk membenarkan port 3306.

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

    6. Salin fail ssl ke 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

    Deploy slave

    1 Dayakan log ssl dan relay, berikan kebenaran membaca kepada fail ssl dan mulakan semula mysql.

    [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. Sahkan bahawa SSL berjaya dihidupkan

    [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 Sebelum mengkonfigurasi replikasi master-slave, anda boleh cuba menggunakan SSL untuk menyambung ke pelayan induk pada mysql hamba.

    Beri perhatian untuk membezakan IP 8.2 ialah IP induk Anda dapat melihat bahawa protokol ssl Cipher yang digunakan ialah ECDHE-RSA-AES128-GCM-SHA256

    [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
    --------------

    1. Log masuk ke pelayan hamba dan konfigurasikan tuan dan hamba replika

    Ingat untuk keluar dari sambungan dahulu dan log masuk ke perkhidmatan mysql hamba.

    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)

    Sahkan pengaktifan berjaya.

    Bagaimana untuk melaksanakan replikasi tuan-hamba MySQL berdasarkan sambungan selamat SSL

    Menguji replikasi induk-hamba SSL

    1 Log masuk ke induk dan tulis beberapa data

    [root@master ~]# mysql -uroot -p123
    #省略部分内容
    mysql> create database bbs;
    Query OK, 1 row affected (0.01 sec)
     
    mysql> use bbs;
    Database changed
    mysql> create table tb1(id int,
        -> name varchar(20));
    Query OK, 0 rows affected (0.02 sec)
     
    mysql> insert into tb1 values(1,'z3');
    Query OK, 1 row affected (0.02 sec)

    2 budak dan lihat data

    [root@slave ~]# mysql -uroot -p123
    #省略部分内容
    mysql> select * from bbs.tb1;
    +------+------+
    | id   | name |
    +------+------+
    |    1 | z3   |
    +------+------+
    1 row in set (0.01 sec)

    Akhirnya, anda boleh melihat z3, tuan dan hamba berjaya.

    Atas ialah kandungan terperinci Bagaimana untuk melaksanakan replikasi tuan-hamba MySQL berdasarkan sambungan selamat SSL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam