Cách cài đặt Percona XtraDB Cluster cho MySQL trên Debian 8

theanh

Administrator
Nhân viên
Trong bài viết này, tôi sẽ chỉ cho bạn cách cấu hình cụm cơ sở dữ liệu MySQL với ba nút trong bản sao đa chủ. Bản sao đa chủ cho phép ghi các bản ghi trong mỗi nút, vì vậy nếu một nút bị lỗi, chúng ta có thể làm việc trên nút còn lại như thể không có gì xảy ra.

Bạn có thể tìm thấy tài liệu chính thức của Percona trên trang web chính thứchttps://www.percona.com/https://www.percona.com/?utm_source=diendancongnghe.com

Trước hết, tại sao chúng ta chọn ba nút chứ không chỉ hai nút? Trong bất kỳ cụm nào, số lượng nút phải là số lẻ, vì vậy trong trường hợp ngắt kết nối cực dương, chúng ta cho rằng nhóm máy chủ cao nhất có dữ liệu mới và phải được sao chép sang nút bị ngắt để tránh mất dữ liệu. Điều này chỉ liên quan đến việc giải quyết xung đột trong quá trình sao chép dữ liệu, chúng ta sẽ không mất dữ liệu chỉ được ghi vào nút bị ngắt kết nối.

Điều này được sử dụng để tránh một trường hợp được gọi là split brain, trong đó chúng ta không thể tự động chọn nút nào có dữ liệu chính xác. Hãy nghĩ ví dụ về cụm 2 nút trong đó cả hai nút đều bị ngắt kết nối với nhau và cùng một bản ghi được ghi vào cả hai nút: nút nào thắng khi chúng trực tuyến trở lại? Chúng ta không biết, vì vậy split brain xảy ra và chúng ta phải tự quyết định bản ghi nào là đúng.

Số lượng nút cần thiết để xác định phần nào của cụm có dữ liệu đúng được gọi là QUORUM, trong trường hợp của chúng ta, số lượng sẽ là 2. Vì vậy, chúng ta cần 2 máy chủ luôn được kết nối với nhau. Trong trường hợp cả ba nút đều ngừng hoạt động, chúng ta có bộ não asplit và chúng ta phải quyết định máy chủ nào sẽ chuyển sang chế độ khởi động theo cách thủ công, đây là quy trình để xác định máy chủ nào sẽ là máy chủ chính để tiếp tục từ bộ não split.

Cấu hình Percona XtraDB Cluster trên Debian 8​

Hướng dẫn này mô tả cách cài đặt và cấu hình ba nút Percona XtraDB Cluster trên máy chủ Debian 8, chúng ta sẽ sử dụng các gói từ kho lưu trữ Percona.
  • máy chủ 1
    Tên máy chủ: mysql1.local.vm
  • Địa chỉ IP: 192.168.152.100
[*] Nút 2
  • Tên máy chủ: mysql2.local.vm
  • Địa chỉ IP: 192.168.152.110
[*] Nút 3
  • Tên máy chủ: mysql3.local.vm
  • Địa chỉ IP: 192.168.152.120
Trên mỗi máy chủ, hãy sửa đổi tệp /etc/hosts như sau để đảm bảo DNS hoạt động chính xác.
Mã:
127.0.0.1 localhost
192.168.152.100 mysql1.local.vm mysql1
192.168.152.110 mysql2.local.vm mysql2
192.168.152.120 mysql3.local.vm mysql3

# Các dòng sau đây là mong muốn đối với các máy chủ có khả năng IPv6
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Điều kiện tiên quyết​

Quy trình được mô tả trong hướng dẫn này yêu cầu thiết lập máy chủ tối thiểu sau:
  • Cả ba nút đều có Debian 8, tôi khuyên bạn nên làm theo hướng dẫn nàyhttps://www.howtoforge.com/tutorial/debian-8-jessie-minimal-server/

Bước 1. Cài đặt Percona Xtradb Cluster​

Trên tất cả các nút, hãy thực hiện các lệnh sau với tư cách là root:
Mã:
wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb
apt-get update
apt-get -y install percona-xtradb-cluster-57
Rõ ràng là, hãy nhập mật khẩu mysql mà bạn muốn chọn.

Sau khi các gói đã được cài đặt, mysqld sẽ tự động khởi động. Dừng mysqld trên cả ba nút bằng cách sử dụng /etc/init.d/mysql stop.

Bước 2. Cấu hình nút đầu tiên​

Cần cấu hình từng nút riêng lẻ để có thể khởi động cụm. Để biết thêm thông tin về việc khởi động cụm, hãy xem Khởi động cụm.

  1. Đảm bảo thêm các dòng này vào tệp cấu hình /etc/mysql/my.cnf cho nút đầu tiên (mysql1.local.vm) ở cuối phần [mysqld]:
    Mã:
    [mysqld]
    
    ...# Đường dẫn đến thư viện Galera
    wsrep_provider=/usr/lib/libgalera_smm.so
    
    # URL kết nối cụm chứa IP của nút số 1, nút số 2 và nút số 3
    wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120
    
    # Để Galera hoạt động đúng định dạng binlog phải là ROW
    binlog_format=ROW
    
    # Công cụ lưu trữ MyISAM chỉ hỗ trợ thử nghiệm
    default_storage_engine=InnoDB
    
    # Chế độ khóa tự động tăng dần của InnoDB này là yêu cầu đối với Galera
    innodb_autoinc_lock_mode=2
    
    # Địa chỉ nút #1
    wsrep_node_address=192.168.152.100
    
    # Phương pháp SST
    wsrep_sst_method=xtrabackup-v2
    
    # Tên cụm
    wsrep_cluster_name=my_ubuntu_cluster
    
    # Xác thực cho phương pháp SST
    wsrep_sst_auth="sstuser:PASSW0RD"
    Chú ý đến mật khẩu bạn thiết lập ở đó trong trường hợp của tôi "PASSW0RD".

  2. Khởi động nút đầu tiên bằng lệnh sau:
    Mã:
    root@mysql1:~# /etc/init.d/mysql bootstrap-pxc
    Lệnh này sẽ khởi động nút đầu tiên và khởi động cụm, bạn sẽ thấy nội dung tương tự như thế này nếu mọi thứ ổn:
    Mã:
    root@mysql1:~# /etc/init.d/mysql bootstrap-pxc
    [ ok ] Khởi động máy chủ cơ sở dữ liệu cụm Percona XtraDB: mysqld ..
    root@mysql1:~#

  3. Sau khi nút đầu tiên đã được khởi động, hãy kết nối với mysql bằng lệnh mysql -p cổ điển, sau đó có thể kiểm tra trạng thái cụm bằng cách thực thi lệnh queryshow status như 'wsrep%';như trong ví dụ bên dưới:
  4. Mã:
    mysql> hiển thị trạng thái thích 'wsrep%';+----------------------------+--------------------------------------+| Tên_biến | Giá trị |+----------------------------+--------------------------------------+| wsrep_local_state_uuid | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |...| wsrep_local_state | 4 || wsrep_local_state_comment | Đã đồng bộ |...| wsrep_cluster_size | 1 || wsrep_cluster_status | Chính || wsrep_connected | BẬT |...| wsrep_ready | BẬT | BẬT |+----------------------------+--------------------------------------+59 hàng trong tập hợp (0,00 giây)
Đầu ra này cho thấy cụm đã được khởi động thành công.
Để thực hiện Chuyển ảnh chụp nhanh trạng thái bằng XtraBackup, thiết lập người dùng mới với quyền phù hợp:
Mã:
mysql> TẠO NGƯỜI DÙNG 'sstuser'@'localhost' ĐÃ XÁC ĐỊNH BỞI 'MẬT KHẨU';mysql> CẤP QUY TRÌNH, TẢI LẠI, KHÓA BẢNG, SAO CHÉP CLIENT ON *.* ĐẾN 'sstuser'@'localhost';mysql> FLUSH CÁC QUYỀN;
Lưu ý

Tài khoản root MySQL cũng có thể được sử dụng để thực hiện SST, nhưng sẽ an toàn hơn nếu sử dụng một người dùng khác (không phải root) cho việc này.

Bước 3. Cấu hình nút thứ hai

  1. Thêm các dòng sau vào tệp cấu hình /etc/mysql/my.cnf trên nút thứ hai (mysql2.local.vm), để nó chứa dữ liệu sau:
    Mã:
    [mysqld]
    
    ...# Đường dẫn đến thư viện Galera
    wsrep_provider=/usr/lib/libgalera_smm.so
    
    # URL kết nối cụm chứa IP của nút#1, nút#2 và nút#3
    wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120
    
    # Để Galera hoạt động chính xác, định dạng binlog phải là ROW
    binlog_format=ROW
    
    # Công cụ lưu trữ MyISAM chỉ hỗ trợ thử nghiệm
    default_storage_engine=InnoDB
    
    # Chế độ khóa tự động tăng dần của InnoDB này là yêu cầu đối với Galera
    innodb_autoinc_lock_mode=2
    
    # Địa chỉ nút #2
    wsrep_node_address=192.168.152.110
    
    # Phương pháp SST
    wsrep_sst_method=xtrabackup-v2
    
    # Tên cụm
    wsrep_cluster_name=my_ubuntu_cluster
    
    # Xác thực cho phương pháp SST
    wsrep_sst_auth="sstuser:PASSW0RD"

  2. Khởi động nút thứ hai bằng lệnh sau (lưu ý lần này vì bạn có thể thấy là không có trong boostrap mode!!):
    Mã:
    root@mysql2:~# /etc/init.d/mysql start

  3. Sau khi máy chủ được khởi động, nó sẽ tự động nhận được SST. Trạng thái cụm hiện có thể được kiểm tra trên cả hai nút. Sau đây là một ví dụ về trạng thái từ nút thứ hai (mysql2.local.vm):
  4. Mã:
    mysql> show status like 'wsrep%';+----------------------------+--------------------------------------+| Variable_name | Giá trị |+----------------------------+--------------------------------------+| wsrep_local_state_uuid | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |...| wsrep_local_state | 4 || wsrep_local_state_comment | Đã đồng bộ |...| [I][B]wsrep_cluster_size | 2[/b][/I] || wsrep_cluster_status | Chính || wsrep_connected | BẬT |...| wsrep_ready | BẬT | BẬT |+----------------------------+--------------------------------------+40 hàng trong set (0.01 sec)
    Đầu ra này cho thấy nút mới đã được thêm thành công vào cụm. Lưu ý biến wsrep_cluster_size đã trở thành 2, thay vì một trong những truy vấn đầu tiên chúng ta đã thực hiện.
Bước 4. Cấu hình nút thứ ba​


  1. Thêm các dòng sau vào tệp cấu hình /etc/mysql/my.cnf trên nút thứ hai (mysql3.local.vm), để nó chứa cấu hình sau:
    Mã:
    [mysqld]
    
    ...# Đường dẫn đến thư viện Galera
    wsrep_provider=/usr/lib/libgalera_smm.so
    
    # URL kết nối cụm chứa IP của nút#1, nút#2 và nút#3
    wsrep_cluster_address=gcomm://192.168.152.100,192.168.152.110,192.168.152.120
    
    # Để Galera hoạt động chính xác, định dạng binlog phải là ROW
    binlog_format=ROW
    
    # Công cụ lưu trữ MyISAM chỉ hỗ trợ thử nghiệm
    default_storage_engine=InnoDB
    
    # Chế độ khóa tự động tăng dần của InnoDB này là yêu cầu đối với Galera
    innodb_autoinc_lock_mode=2
    
    # Địa chỉ nút #2
    wsrep_node_address=192.168.152.120
    
    # Phương pháp SST
    wsrep_sst_method=xtrabackup-v2
    
    # Tên cụm
    wsrep_cluster_name=my_ubuntu_cluster
    
    # Xác thực cho phương pháp SST
    wsrep_sst_auth="sstuser:PASSW0RD"

  2. Khởi động nút thứ ba bằng lệnh sau:
    Mã:
    root@mysql3:~# /etc/init.d/mysql start

  3. Sau khi máy chủ được khởi động, nó sẽ tự động nhận được SST. Trạng thái cụm có thể được kiểm tra trên tất cả các nút. Sau đây là một ví dụ về trạng thái từ nút thứ ba (mysql3.local.vm):
    Mã:
    mysql> show status like 'wsrep%';+----------------------------+--------------------------------------+| Variable_name | Giá trị |+----------------------------+--------------------------------------+| wsrep_local_state_uuid | 0251a27c-8a19-11e6-905b-f3f13b0ddc5b |...| wsrep_local_state | 4 || wsrep_local_state_comment | Đã đồng bộ |...| [I][B]wsrep_cluster_size | 3[/b][/I] || wsrep_cluster_status | Chính || wsrep_connected | BẬT |...| wsrep_ready | BẬT | BẬT |+----------------------------+--------------------------------------+40 hàng trong set (0.01 sec)
    Đầu ra này xác nhận rằng nút thứ ba đã tham gia cụm. Một lần nữa hãy xem wsrep_cluster_size hiện đã trở thành 3, thay vì 2.
Nếu bạn gặp một số vấn đề, hãy xem /var/log/syslog để xem mọi thứ có ổn không
Mã:
4 tháng 10 12:16:13 mysql3 mysql[2767]: Đang khởi động máy chủ cơ sở dữ liệu MySQL (Percona XtraDB Cluster): mysqld . . . Đang chuyển trạng thái, thiết lập chế độ ngủ cao hơn: mysqld . ..
4 tháng 10 12:16:13 mysql3 systemd[1]: Đã bắt đầu LSB: Khởi động và dừng daemon mysql (Percona XtraDB Cluster).
4 tháng 10 12:17:01 mysql3 CRON[3731]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Trong ví dụ này, mọi thứ diễn ra tốt đẹp và bạn có thể thấy Chuyển trạng thái đang diễn ra, nghĩa là dữ liệu sẽ được chuyển đến nút.

Kiểm tra sao chép​

Để kiểm tra sao chép, hãy tạo cơ sở dữ liệu mới trên nút thứ hai, tạo bảng cho cơ sở dữ liệu đó trên nút thứ ba và thêm một số bản ghi vào bảng trên nút đầu tiên.

  1. Tạo cơ sở dữ liệu mới trên nút thứ hai:
    Mã:
    mysql@mysql2> CREATE DATABASE percona;Query OK, 1 row affected (0.01 sec)

  2. Tạo bảng trên nút thứ ba nút:
    Mã:
    mysql@mysql3> SỬ DỤNG percona;Cơ sở dữ liệu đã thay đổimysql@pxc3> TẠO BẢNG ví dụ (node_id INT CHÍNH KHÓA, tên_node VARCHAR(30));Truy vấn OK, 0 hàng bị ảnh hưởng (0.05 giây)

  3. Chèn bản ghi vào nút đầu tiên:
    Mã:
    mysql@mysql1> INSERT INTO percona.ví dụ GIÁ TRỊ (1, 'percona1');Truy vấn OK, 1 hàng bị ảnh hưởng (0.02 giây)

  4. Lấy tất cả các hàng từ bảng đó trên nút thứ hai:
    Mã:
    mysql@mysql2> CHỌN * TỪ percona.ví dụ;+---------+-----------+| node_id | node_name |+---------+-----------+| 1 | percona1 |+---------+-----------+1 hàng trong đặt (0.00 giây)
Để đảm bảo ứng dụng của bạn luôn có thể tiếp cận cụm, bạn có thể thêm bộ cân bằng tải trước ba nút.
 
Back
Bên trên