Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách triển khai máy chủ Percona cho MySQL để có tính khả dụng cao

Máy chủ Percona cho MySQL 8.0 cung cấp một số giải pháp phân cụm để có tính khả dụng cao ngay từ đầu:

  • Một cái chính:
    • Sao chép không đồng bộ
    • Sao chép bán đồng bộ
  • Nhiều cái:
    • Nhân rộng nhóm
    • InnoDB Cluster (sự kết hợp của MySQL Router, MySQL Shell và Percona Server với Group Replication)

Tất nhiên, giải pháp phổ biến nhất, đã được thử nghiệm trong trận chiến và có khả năng mở rộng cao là sao chép không đồng bộ. Trong bài đăng trên blog này, chúng tôi sẽ triển khai thiết lập sao chép Máy chủ Percona đặc biệt để có tính khả dụng cao. Các hướng dẫn được mô tả ở đây dựa trên CentOS 7.

Cài đặt Máy chủ Percona

Để có tính khả dụng cao, chúng tôi cần ít nhất hai nút trong một thiết lập sao chép chủ-nô lệ đơn giản:

  • db1 - master (192.168.0.61)
  • db2 - slave (192.168.0.62)

Các bước được mô tả trong phần này phải được thực hiện trên tất cả các nút cơ sở dữ liệu (db1 và db2). Chúng tôi sẽ bắt đầu bằng cách cài đặt gói kho lưu trữ Percona:

$ yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm

Phiên bản ổn định mới nhất tại thời điểm này là Máy chủ Percona cho MySQL 8.0, nhưng theo mặc định, gói kho lưu trữ chỉ được cấu hình cho đến phiên bản 5.7. Gói percona-release chứa một tập lệnh có thể kích hoạt các kho lưu trữ bổ sung cho các sản phẩm mới hơn. Hãy chạy tập lệnh đó và kích hoạt kho lưu trữ 8.0:

$ percona-release setup ps80

Sau đó cài đặt Máy chủ Percona mới nhất và Percona Xtrabackup:

$ yum -y install percona-server-server percona-xtrabackup-80

Tại thời điểm này, bạn nên cài đặt Máy chủ Percona cho MySQL 8.0.21. Tất cả các gói phụ thuộc sẽ được cài đặt như gói shared-compat, shared và client. Sau đó, chúng tôi có thể kích hoạt dịch vụ MySQL khi khởi động và khởi động dịch vụ:

$ systemctl enable mysql
$ systemctl start mysql

Mật khẩu gốc mới sẽ được tạo trong lần khởi động đầu tiên. Trước tiên, chúng tôi cần truy xuất thông tin mật khẩu gốc từ nhật ký lỗi MySQL (mặc định là /var/log/mysqld.log trong các hệ thống dựa trên RHEL):

$ cat /var/log/mysqld.log | grep temporary
2020-11-06T04:53:07.402040Z 6 [Note] [MY-010454] [Server] A temporary password is generated for [email protected]: o%(_M>t1)R-P

Như bạn có thể thấy mật khẩu được tạo là "o% (_ M> t1) R-P". Tiếp theo, chúng ta cần thực hiện tác vụ sau cài đặt để bảo mật cài đặt máy chủ MySQL. Chạy lệnh sau:

$ mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:

The existing password for the user account root has expired. Please set a new password.


New password:
Re-enter new password:

The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.

Using existing password for root.


Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:

Re-enter new password:

Estimated strength of the password: 100

Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.

You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Mật khẩu gốc đã tạo sẽ hết hạn ngay sau lần đăng nhập gốc đầu tiên. Tập lệnh trình trợ giúp ở trên giúp chúng tôi định cấu hình mật khẩu gốc MySQL mới, vô hiệu hóa đăng nhập từ xa cho thư mục gốc, xóa cơ sở dữ liệu thử nghiệm và người dùng ẩn danh, đồng thời tải lại các bảng đặc quyền.

Bây giờ chúng tôi đã sẵn sàng để định cấu hình tính năng sẵn sàng cao cho Percona Server 8.0.

Sao chép bán đồng bộ

Sao chép bán đồng bộ nằm giữa sao chép không đồng bộ và nhân rộng hoàn toàn đồng bộ. Nguồn đợi cho đến khi ít nhất một bản sao nhận được và ghi lại các sự kiện, sau đó thực hiện giao dịch. Nguồn không đợi tất cả các bản sao xác nhận đã nhận và nó chỉ yêu cầu xác nhận từ các bản sao, không phải rằng các sự kiện đã được thực hiện đầy đủ và được cam kết ở phía bản sao. Do đó, sao chép bán đồng bộ đảm bảo rằng nếu nguồn gặp sự cố, tất cả các giao dịch mà nó đã cam kết sẽ được truyền tới ít nhất một bản sao.

Để có tính toàn vẹn của bản sao tốt nhất, hãy chọn bản sao bán đồng bộ. Để cấu hình nó, trên nút đầu tiên, db1 (192.168.0.61), thêm các dòng sau vào bên trong /etc/my.cnf (nó phải nằm trong phần [mysqld]):

# Compatibility
default-authentication-plugin = mysql_native_password

# Replication
server_id = 61 # must be distinct on all nodes in the cluster
binlog_format = ROW
log_bin = binlog
log_slave_updates = 1
gtid_mode = ON
enforce_gtid_consistency = 1
binlog_expire_logs_seconds = 604800 # 7 days
sync_binlog = 1
report_host = 192.168.0.61 # IP address of this host
read_only = OFF # Set ON on slave
super_read_only = OFF # Set ON on slave

# Replication safety
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON

# Semi-sync
plugin_load_add = rpl_semi_sync_master=semisync_master.so
plugin_load_add = rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_master_enabled = ON
rpl_semi_sync_master_timeout = 1000
rpl_semi_sync_slave_enabled = ON

Trên nút thứ hai, db2 (192.168.0.62), thêm các dòng sau vào bên trong /etc/my.cnf (nó phải nằm dưới phần [mysqld]):

# Compatibility
default-authentication-plugin = mysql_native_password

# Replication
server_id = 62 # must be distinct on all nodes in the cluster
binlog_format = ROW
log_bin = binlog
log_slave_updates = 1
gtid_mode = ON
enforce_gtid_consistency = 1
binlog_expire_logs_seconds = 604800 # 7 days
sync_binlog = 1
report_host = 192.168.0.62 # IP address of this host
read_only = ON # Set ON on slave
super_read_only = ON # Set ON on slave

# Replication safety
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON

# Semi-sync
plugin_load_add = rpl_semi_sync_master=semisync_master.so
plugin_load_add = rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_master_enabled = ON
rpl_semi_sync_master_timeout = 1000
rpl_semi_sync_slave_enabled = ON

Sau đó, chúng tôi có thể tiến hành thiết lập liên kết sao chép như được mô tả trong phần "Thiết lập liên kết sao chép" ở phía dưới.

Sao chép Không đồng bộ

Đối với sao chép không đồng bộ, chỉ cần loại bỏ tất cả các tùy chọn liên quan đến sao chép bán đồng bộ và chúng ta sẽ tốt. Trên nút đầu tiên, db1 (192.168.0.61), thêm các dòng sau vào bên trong /etc/my.cnf (nó phải nằm trong phần [mysqld]):

# Compatibility
default-authentication-plugin = mysql_native_password

# Replication
server_id = 61 # must be distinct on all nodes in the cluster
binlog_format = ROW
log_bin = binlog
log_slave_updates = 1
gtid_mode = ON
enforce_gtid_consistency = 1
binlog_expire_logs_seconds = 604800 # 7 days
sync_binlog = 1
report_host = 192.168.0.61 # IP address of this host
read_only = OFF # Set ON on slave
super_read_only = OFF # Set ON on slave

# Replication safety
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON

Trên nút thứ hai, db2 (192.168.0.62), thêm các dòng sau vào bên trong /etc/my.cnf (nó phải nằm dưới phần [mysqld]):

# Compatibility
default-authentication-plugin = mysql_native_password

# Replication
server_id = 62 # must be distinct on all nodes in the cluster
binlog_format = ROW
log_bin = binlog
log_slave_updates = 1
gtid_mode = ON
enforce_gtid_consistency = 1
binlog_expire_logs_seconds = 604800 # 7 days
sync_binlog = 1
report_host = 192.168.0.62 # IP address of this host
read_only = ON # Set ON on slave
super_read_only = ON # Set ON on slave

# Replication safety
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON

Sau đó, chúng tôi có thể tiến hành thiết lập liên kết sao chép như được mô tả trong phần "Thiết lập liên kết sao chép" bên dưới.

Thiết lập Liên kết Sao chép

Trên máy chủ (db1), hãy tạo một người dùng phụ và cho phép người dùng kết nối từ tất cả các máy chủ trong mạng này (sử dụng ký tự đại diện%):

mysql> CREATE USER 'slave'@'192.168.0.%' IDENTIFIED WITH mysql_native_password BY '[email protected]&9';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.0.%';

Trên máy chủ (db2), đặt lại nhật ký nhị phân, định cấu hình thông tin xác thực sao chép và bắt đầu quá trình sao chép:

mysql> RESET MASTER;
mysql> CHANGE MASTER TO MASTER_HOST = '192.168.0.61', MASTER_USER = 'slave', MASTER_PASSWORD = '[email protected]&9', MASTER_AUTO_POSITION = 1;
mysql> START SLAVE;

Kiểm tra trạng thái sao chép:

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.61
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: binlog.000008
          Read_Master_Log_Pos: 912
               Relay_Log_File: db2-relay-bin.000007
                Relay_Log_Pos: 1081
        Relay_Master_Log_File: binlog.000008
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 912
              Relay_Log_Space: 1500
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 66
                  Master_UUID: f60cf793-1feb-11eb-af72-5254008afee6
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: f60cf793-1feb-11eb-af72-5254008afee6:5-7
            Executed_Gtid_Set: f60cf793-1feb-11eb-af72-5254008afee6:1-7
                Auto_Position: 1
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
       Master_public_key_path:
        Get_master_public_key: 0
            Network_Namespace:

Hãy chú ý đến trạng thái quan trọng sau để xác định xem bản sao có được định cấu hình chính xác hay không và nô lệ đã bắt kịp với bản chính:

  • Slave_IO_Running:Có
  • Slave_SQL_Running:Có
  • Seconds_Behind_Master:0

Nếu tính năng sao chép bán đồng bộ được bật, bạn sẽ nhận được đầu ra sau trên bản chính:

mysql> SHOW STATUS LIKE '%semi%status';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON    |
| Rpl_semi_sync_slave_status  | OFF   |
+-----------------------------+-------+

Khi ở trên nô lệ, trạng thái như sau:

mysql> SHOW STATUS LIKE '%semi%status';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | OFF   |
| Rpl_semi_sync_slave_status  | ON    |
+-----------------------------+-------+

Đối với sao chép không đồng bộ, truy vấn trên sẽ không trả về gì (tập hợp trống), bởi vì các plugin sao chép bán đồng bộ không được bật. Trong một tập hợp nhân bản, có thể có sự kết hợp của nhân bản máy chủ nô lệ với nhân bản không đồng bộ và bán đồng bộ.

Triển khai Máy chủ Percona cho MySQL bằng ClusterControl

Thực tế, thật dễ dàng để triển khai bản sao Máy chủ Percona chủ-nô lệ với ClusterControl và theo mặc định, ClusterControl sẽ định cấu hình việc triển khai bản sao với bản sao không đồng bộ. Đơn giản chỉ cần chuẩn bị các nút mà bạn muốn triển khai và trong ví dụ này, chúng tôi sẽ triển khai Máy chủ Percona ba nút cho MySQL 8.0 với bản sao chủ-nô lệ. Khi ClusterControl đi vào hình ảnh, chúng ta bắt buộc phải có một nút bổ sung cho ClusterControl. Do đó, thiết lập của chúng tôi trông giống như sau:

  • ClusterControl - cc (192.168.0.19)
  • Master - db1 (192.168.0.61)
  • Slave - db2 (192.168.0.62)
  • Slave - db3 (192.168.0.63)

Trên máy chủ ClusterControl, cài đặt ClusterControl bằng tập lệnh trình cài đặt. Với quyền root, hãy chạy như sau:

$ wget http://severalnines.com/downloads/cmon/install-cc
$ chmod 755 install-cc
$ ./install-cc

Làm theo hướng dẫn cài đặt cho đến khi hoàn tất. Sau đó, mở trình duyệt web và truy cập http:// {ClusterControl_IP_address} / clustercontrol và tạo mật khẩu và người dùng quản trị mặc định. Tiếp theo, chúng ta cần thiết lập SSH không mật khẩu từ máy chủ ClusterControl đến tất cả các nút cơ sở dữ liệu. Với tư cách là người dùng root, trước tiên chúng ta cần tạo khóa SSH:

$ whoami
root
$ ssh-keygen -t rsa # press Enter on all prompts

Sau đó, sao chép khóa công khai SSH đã tạo vào tất cả các nút cơ sở dữ liệu:

$ ssh-copy-id -i ~/.ssh/id_rsa [email protected] # db1
$ ssh-copy-id -i ~/.ssh/id_rsa [email protected] # db2
$ ssh-copy-id -i ~/.ssh/id_rsa [email protected] # db3

Bây giờ chúng tôi đã sẵn sàng để bắt đầu triển khai cụm. Đi tới ClusterControl -> Deploy -> MySQL Replication và chỉ định các chi tiết được yêu cầu như bên dưới:

Sau đó, nhấp vào "Tiếp tục" để chuyển sang bước tiếp theo mà chúng tôi định cấu hình đặc điểm kỹ thuật cài đặt MySQL:

Chọn "Percona" cho Nhà cung cấp và 8.0 làm Phiên bản. Giữ phần còn lại làm mặc định và nhập mật khẩu gốc MySQL. Nhấp vào "Tiếp tục" để tiếp tục cấu hình máy chủ và cấu trúc liên kết:

Chỉ định địa chỉ IP hoặc tên máy chủ của cơ sở dữ liệu lưu trữ lần lượt và thực hiện chắc chắn rằng bạn nhận được các biểu tượng đánh dấu màu xanh lá cây sau mỗi lần chèn. Điều này chỉ ra rằng ClusterControl có thể truy cập các máy chủ tương ứng thông qua SSH không cần mật khẩu với người dùng và khóa SSH được cung cấp như được xác định trong bước 1. Nhấp vào nút "Triển khai" để bắt đầu triển khai.

Sau đó, ClusterControl sẽ kích hoạt công việc triển khai nơi bạn có thể theo dõi tiến trình triển khai bằng cách đi tới ClusterControl -> Hoạt động -> Công việc -> Tạo cụm -> Chi tiết công việc đầy đủ, như được hiển thị trong ảnh chụp màn hình sau:

Sau khi quá trình hoàn tất, bạn sẽ thấy cụm được liệt kê trong Trang tổng quan :

Vậy là xong. Việc triển khai hiện đã hoàn tất.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểu dữ liệu ENUM (Enumeration) trong MySQL:12 sự kiện hàng đầu và lời khuyên hữu ích

  2. Trình kích hoạt MySQL không thể cập nhật các hàng trong cùng một bảng mà trình kích hoạt được chỉ định. Cách giải quyết được đề xuất?

  3. Làm thế nào để nhóm theo tuần trong MySQL?

  4. Cho phép tất cả các kết nối từ xa, MySQL

  5. Hàm MySQL - FOUND_ROWS () cho Tổng số hàng bị ảnh hưởng