Percona XtraDB Cluster 8.0 dựa trên Máy chủ Percona dành cho MySQL 8.0 được nhúng với API sao chép Galera writeet và thư viện sao chép Galera, để tạo thành một bản sao nhiều chủ khả dụng cao cho máy chủ cơ sở dữ liệu dựa trên MySQL. Percona XtraDB Cluster đi kèm với công cụ lưu trữ XtraDB (một bản thay thế của InnoDB) và tuân theo rất chặt chẽ các bản phát hành Oracle MySQL ngược dòng (bao gồm tất cả các bản sửa lỗi trong đó), với một số biến bổ sung và trạng thái cụ thể cho bản dựng này.
Trong bài đăng trên blog này, chúng ta sẽ xem xét cách triển khai Percona XtraDB Cluster 8.0 để có tính khả dụng cao bằng cách sử dụng thủ công và tự động.
Tính năng đáng chú ý
Trước khi chúng ta tiến xa hơn với các bước triển khai, cần đề cập đến các tính năng đáng chú ý và những cải tiến đáng kể trong phiên bản chính này dựa trên Percona Server cho MySQL 8.0 (không có plugin Group Replication) và Galera 4:
- Sao chép luồng - Điều này cho phép sao chép tập viết để xử lý các giao dịch dữ liệu lớn trong các phân đoạn nhỏ hơn, dễ quản lý hơn, giảm thiểu xung đột dữ liệu.
- Các hàm MySQL đồng bộ hóa để điều phối hành động (wsrep_last_seen_gtid, wsrep_last_written_gtid, wsrep_sync_wait_upto_gtid).
- Các bảng hệ thống Galera mới, sẽ giúp theo dõi trạng thái của cụm trong lược đồ "mysql" - wsrep_cluster, wsrep_cluster_members và wsrep_streaming_log.
- Mã hóa bộ nhớ cache.
- Cơ sở hạ tầng wsrep của Galera 4 mạnh mẽ hơn so với Galera 3. Nó có khả năng thực thi mã nhanh hơn với khả năng xử lý trạng thái tốt hơn, khả năng dự đoán được cải thiện và xử lý lỗi.
Để có danh sách đầy đủ các thay đổi, hãy xem ghi chú phát hành.
Triển khai thủ công Percona XtraDB Cluster 8.0
Các bước Cài đặt
Đối với Percona XtraDB Cluster, chúng ta cần ít nhất ba nút:
- db1 (192.168.20.61)
- db2 (192.168.20.62)
- db3 (192.168.20.63)
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, db2 và db3) đang chạy trên CentOS 8. Đầu tiên, hãy tắt SELinux (nếu không quá trình IST sẽ không thành công):
$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
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à Percona XtraDB Cluster 8.0, nhưng theo mặc định, gói kho lưu trữ đượ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ữ cụ thể pxc80:
$ percona-release setup pxc80
* Disabling all Percona Repositories
On RedHat 8 systems it is needed to disable dnf mysql module to install Percona-Server
Do you want to disable it? [y/N]
Chọn "y" để tắt mô-đun mysql DNF. Điều này là cần thiết để ưu tiên kho lưu trữ Percona cho các gói liên quan đến MySQL.
Sau đó, cài đặt Percona XtraDB Cluster và Percona Xtrabackup mới nhất:
$ dnf -y install percona-xtradb-cluster percona-xtrabackup-80
Tại thời điểm này, bạn nên cài đặt Percona XtraDB Cluster 8.0.0-11.3. 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ể khởi động dịch vụ MySQL để cấu hình ban đầu:
$ 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 password'
2020-11-27T06:53:05.929661Z 6 [Note] [MY-010454] [Server] A temporary password is generated for [email protected]: <eqo+jXNw2lk
Như bạn có thể thấy, mật khẩu được tạo là "
Mật khẩu gốc đượ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, đặt chính sách xác thực mật khẩu, tắt đăng nhập từ xa cho người dùng 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.
Tệp cấu hình mặc định (/etc/my.cnf) được định cấu hình bằng chuỗi kết nối gcomm:// trống trong biến wsrep_cluster_address, như được hiển thị bên dưới: Dòng trên phải được đặt danh sách địa chỉ IP của tất cả các nút tham gia trong cụm. Nếu bạn bỏ lỡ bước này, một cụm Galera mới sẽ được tạo trên mọi nút (3 cụm 1 nút riêng biệt) sau khi dịch vụ trên mọi nút được bắt đầu. Do đó, các dòng sau nên được sửa đổi cho phù hợp trong phần [mysqld]: Mong rằng wsrep_cluster_address giống hệt nhau trong tất cả các máy chủ cơ sở dữ liệu, trong khi wsrep_node_address và wsrep_node_name phải khác biệt trên mọi máy chủ cơ sở dữ liệu. Dòng cuối cùng pxc-encode-cluster-traffic =OFF có nghĩa là chúng tôi muốn tắt mã hóa cho lưu lượng cụm. Lưu ý rằng điều này là nhằm mục đích đơn giản hóa các bước triển khai của chúng tôi hoặc nếu không, chúng tôi sẽ phải thực hiện các bước quản lý khóa / chứng chỉ. Nếu bạn muốn bật mã hóa, hãy xem bài viết này.
Lặp lại các bước trên cho các nút cơ sở dữ liệu còn lại trước khi tiếp tục khởi động cụm.
Galera yêu cầu bạn bắt đầu một nút trong một cụm làm điểm tham chiếu trước khi các nút còn lại có thể tham gia và tạo thành cụm. Quá trình này được gọi là cluster bootstrap. Bootstrapping là bước đầu tiên để giới thiệu một nút cơ sở dữ liệu làm thành phần chính trước khi những người khác xem nó như một điểm tham chiếu để đồng bộ hóa dữ liệu.
Trong ví dụ này, chúng tôi sẽ sử dụng db1 làm nút tham chiếu và bắt đầu nó bằng lệnh bootstrap (bạn cũng có thể chọn các nút khác vì đây là một cụm mới không có dữ liệu): Sau khi bắt đầu, chúng ta có thể bắt đầu các nút khác (db2 và db3) bằng lệnh bắt đầu chuẩn (mỗi lần một nút): Bạn có thể xác minh bằng dòng sau bên trong /var/log/mysqld.log: Tại thời điểm này, dịch vụ Percona XtraDB Cluster của chúng tôi đã bắt đầu và việc triển khai thủ công hiện đã hoàn tất. Để biết thêm thông tin về quy trình khởi động Percona XtraDB Cluster, hãy xem bài đăng trên blog này Cách khởi động MySQL hoặc MariaDB Galera Cluster.
Có hai cách bạn có thể triển khai Percona XtraDB Cluster 8.0 bằng cách sử dụng ClusterControl. Bạn có thể sử dụng giao diện người dùng ClusterControl (GUI dựa trên web) hoặc ClusterControl CLI được gọi là s9s. Chúng tôi sẽ chỉ cho bạn cả hai cách trong phần này. ClusterControl phải nằm trên một máy chủ riêng biệt, cách xa cụm cơ sở dữ liệu của bạn. Do đó, kiến trúc của chúng ta có thể được minh họa như thế này:
SSH vào máy chủ ClusterControl và cài đặt ClusterControl bằng các lệnh sau: Làm theo trình hướng dẫn cài đặt cho đến khi quá trình cài đặt kết thúc. Sau khi cài đặt xong, mở trình duyệt web và truy cập http://192.168.20.19/clustercontrol. Tạo người dùng quản trị và giấy phép sẽ được cài đặt tự động. Tất cả các bản cài đặt mới đều đi kèm với giấy phép dùng thử cho phiên bản doanh nghiệp trong 30 ngày. Khi giấy phép dùng thử này hết hạn, nó sẽ mặc định trở lại phiên bản cộng đồng, miễn phí vĩnh viễn.
ClusterControl yêu cầu thiết lập SSH không mật khẩu từ máy chủ ClusterControl tới tất cả các nút được quản lý. Để đạt được điều này, trước tiên chúng ta cần tạo khóa SSH trên máy chủ ClusterControl. Người dùng SSH phải có đặc quyền siêu người dùng (sudo hoặc root). Trong trường hợp này, chúng tôi sẽ sử dụng người dùng gốc: Bây giờ tạo khóa SSH cho người dùng root: Tiếp theo, sao chép khóa công khai vào tất cả các nút cơ sở dữ liệu mà chúng ta sẽ triển khai và quản lý. Trong trường hợp này, cả 3 nút Galera: Nhập mật khẩu gốc của các máy chủ tương ứng khi được nhắc.
Hãy kiểm tra bằng lệnh sau và đảm bảo rằng bạn nhận được phản hồi chính xác: Bây giờ chúng tôi đã sẵn sàng triển khai cụm của mình bằng cách sử dụng ClusterControl UI hoặc CLI, như được hiển thị trong các phần tiếp theo.
Thực tế, thật dễ dàng để triển khai một Cụm Percona XtraDB với ClusterControl và theo mặc định, ClusterControl sẽ định cấu hình cụm với mã hóa Galera được bật. Sau khi SSH không có mật khẩu đã được định cấu hình, hãy chuyển đến ClusterControl -> Deploy -> MySQL Galera 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 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. Lần lượt chỉ định địa chỉ IP hoặc tên máy chủ của cơ sở dữ liệu và đảm bảo rằng bạn nhận được các biểu tượng dấu tích 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.
Nếu bạn thích triển khai cụm bằng dòng lệnh, chúng ta có thể chỉ cần sử dụng công cụ máy khách dòng lệnh ClusterControl có tên "s9s". Công cụ này sẽ gửi một công việc triển khai đến bộ điều khiển ClusterControl và nó sẽ thực hiện tất cả các bước cần thiết để triển khai cụm.
Chạy lệnh sau trên máy chủ ClusterControl:
Bạn sẽ thấy các thông báo công việc sẽ xuất hiện và bạn có thể theo dõi tiến độ triển khai ở đó và bạn cũng có thể theo dõi tiến trình công việc từ ClusterControl UI -> Activity -> Jobs . Chờ khoảng 15-20 phút (tùy thuộc vào kết nối Internet) cho đến khi bạn thấy thông báo hoàn thành công việc. Percona XtraDB Cluster 8.0 của chúng tôi hiện đã được triển khai và bạn có thể thấy nó được liệt kê trong giao diện người dùng ClusterControl. $ 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:
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
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!
wsrep_cluster_address=gcomm://
wsrep_cluster_address=gcomm://192.168.20.51,192.168.20.52,192.168.20.53
wsrep_node_address=192.168.20.51 # IP address of this DB host
wsrep_node_name=db1 # any name to identify this DB host
pxc-encrypt-cluster-traffic=OFF
Khởi động theo cụm
$ systemctl stop mysql
$ systemctl start [email protected]
$ systemctl status [email protected]
$ systemctl stop mysql
$ systemctl start mysql
2020-11-27T08:09:01.964152Z 2 [Note] [MY-000000] [WSREP] Synchronized with group, ready for connections
Triển khai Tự động với ClusterControl
Cài đặt ClusterControl
$ wget http://severalnines.com/downloads/cmon/install-cc
$ chmod 744 install-cc
$ ./install-cc
SSH không mật khẩu
$ whoami
root
$ ssh-keygen -t rsa # press Enter on all prompts
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh [email protected] "ls /root"
Triển khai PXC bằng giao diện người dùng ClusterControl
Triển khai PXC bằng ClusterControl CLI
$ s9s cluster --create \
--cluster-type=galera \
--nodes="192.168.20.51;192.168.20.52;192.168.20.53" \
--vendor=percona \
--provider-version=8.0 \
--db-admin-passwd='P4ssw0rdSecr3t' \
--os-user=root \
--os-key-file=/root/.ssh/id_rsa \
--cluster-name='My Percona XtraDB Cluster 8.0' \
--log