Cách cấu hình Cụm Galera với MariaDB 10.1 trên server Ubuntu 16.04
Phân cụm bổ sung tính khả dụng cao cho database của bạn bằng cách phân phối các thay đổi cho các server khác nhau. Trong trường hợp một trong các version không thành công, các version khác sẽ nhanh chóng có mặt để tiếp tục phục vụ.Các cụm có hai cấu hình chung, chủ động-bị động và chủ động-tích cực. Trong các cụm chủ động-thụ động, tất cả các quá trình ghi được thực hiện trên một server hoạt động duy nhất và sau đó được sao chép sang một hoặc nhiều server thụ động sẵn sàng tiếp quản chỉ trong trường hợp server hoạt động bị lỗi. Một số cụm chủ động-thụ động cũng cho phép các hoạt động SELECT trên các node thụ động. Trong một cụm đang hoạt động tích cực, mọi nút đều được đọc-ghi và một thay đổi được thực hiện đối với một nút sẽ được sao chép cho tất cả.
Trong hướng dẫn này, ta sẽ cấu hình một cụm MariaDB Galera đang hoạt động. Với mục đích demo , ta sẽ cấu hình và kiểm tra ba nút, cụm có thể cấu hình nhỏ nhất.
Yêu cầu
Để làm theo, bạn cần :
Ba server Ubuntu 16.04 , mỗi server có user không phải root có quyền
sudo
và mạng riêng, nếu nó khả dụng cho bạn.- Để được hỗ trợ cài đặt user với các quyền này, hãy làm theo hướng dẫn Cài đặt Server Ban đầu với Ubuntu 16.04 của ta .
- Để được trợ giúp cài đặt mạng riêng tư, hãy xem Cách cài đặt và sử dụng mạng riêng DigitalOcean .
Khi tất cả các yêu cầu này đã sẵn sàng, ta đã sẵn sàng cài đặt MariaDB.
Bước 1 - Thêm repository MariaDB 10.1 vào tất cả server
MariaDB 10.1 không có trong repository lưu trữ Ubuntu mặc định, vì vậy ta sẽ bắt đầu bằng cách thêm repository Ubuntu bên ngoài được duy trì bởi dự án MariaDB vào cả ba server của ta .
Lưu ý: MariaDB là một nhà cung cấp có uy tín tốt, nhưng không phải tất cả các repository bên ngoài đều tin cậy . Đảm bảo chỉ cài đặt từ các nguồn tin cậy .
Đầu tiên, ta sẽ thêm khóa repository MariaDB bằng apt-key
, lệnh apt sẽ sử dụng để xác minh gói là xác thực.
- sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
Khi ta có khóa tin cậy trong database , ta có thể thêm repository . Ta cần chạy apt-get update
sau đó để bao gồm các file kê khai gói từ repository mới:
- sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu xenial main'
- sudo apt-get update
Lưu ý: Bạn phải chạy update
sau khi thêm repository . Nếu không, bạn sẽ cài đặt version 10.0 từ các gói Ubuntu, không chứa gói Galera.
Khi repository được cập nhật trên cả ba server , ta đã sẵn sàng cài đặt MariaDB. Một điều cần lưu ý về MariaDB là nó có nguồn root như một sự thay thế thả xuống cho MySQL, vì vậy trong nhiều file cấu hình và tập lệnh khởi động, bạn sẽ thấy mysql
thay vì mariadb
. Vì lợi ích của sự nhất quán, ta sử dụng mysql
trong hướng dẫn này ở những nơi có thể hoạt động.
Bước 2 - Cài đặt MariaDB trên tất cả các server
Bắt đầu từ version 10.1, gói Server MariaDB và Server MariaDB Galera được kết hợp, vì vậy việc cài đặt mariadb-server
sẽ tự động cài đặt Galera và một số gói phụ thuộc:
- sudo apt-get install mariadb-server
Trong quá trình cài đặt, bạn cần đặt password cho admin-user MariaDB. Dù bạn chọn gì, password root này sẽ được overrides bằng password từ nút đầu tiên sau khi bắt đầu sao chép.
Ta nên có tất cả các phần cần thiết để bắt đầu cấu hình cụm, nhưng vì ta sẽ dựa vào rsync
trong các bước sau, hãy đảm bảo nó đã được cài đặt.
- sudo apt-get install rsync
Điều này sẽ xác nhận version mới nhất của rsync
đã có sẵn hoặc nhắc bạn nâng cấp hoặc cài đặt nó.
Khi ta đã cài đặt MariaDB trên mỗi server trong ba server , ta có thể bắt đầu cấu hình.
Bước 3 - Cấu hình nút đầu tiên
Mỗi nút trong cụm cần có cấu hình gần giống nhau. Do đó, ta sẽ thực hiện tất cả cấu hình trên máy đầu tiên của bạn , sau đó sao chép nó vào các node khác.
Theo mặc định, MariaDB được cấu hình để kiểm tra folder /etc/mysql/conf.d
để nhận cài đặt cấu hình bổ sung cho từ kết thúc bằng .cnf
. Ta sẽ tạo một file trong folder này với tất cả các lệnh dành riêng cho từng cụm của ta :
- sudo nano /etc/mysql/conf.d/galera.cnf
Copy paste cấu hình sau vào file . Bạn cần thay đổi cài đặt được đánh dấu màu đỏ. Ta sẽ giải thích ý nghĩa của từng phần bên dưới.
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="test_cluster" wsrep_cluster_address="gcomm://first_ip,second_ip,third_ip" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="this_node_ip" wsrep_node_name="this_node_name"
Phần đầu tiên sửa đổi hoặc xác nhận lại cài đặt MariaDB / MySQL sẽ cho phép cụm hoạt động chính xác. Ví dụ: Galera Cluster sẽ không hoạt động với MyISAM hoặc các công cụ lưu trữ không giao dịch tương tự và
mysqld
không được ràng buộc với địa chỉ IP cho localhost. Bạn có thể tìm hiểu chi tiết hơn về các cài đặt trên trang cấu hình hệ thống Galera Cluster.Phần “Cấu hình nhà cung cấp Galera” cấu hình các thành phần MariaDB cung cấp API sao chép WriteSet. Điều này nghĩa là Galera trong trường hợp của ta , vì Galera là một nhà cung cấp wsrep (WriteSet Replication). Ta chỉ định các tham số chung để cấu hình môi trường nhân bản ban đầu. Điều này không yêu cầu bất kỳ tùy chỉnh nào, nhưng bạn có thể tìm hiểu thêm về các tùy chọn cấu hình Galera .
Phần “Cấu hình cụm Galera” xác định cụm, xác định các thành viên cụm theo địa chỉ IP hoặc domain có thể phân giải và tạo tên cho cụm đảm bảo rằng các thành viên tham gia đúng group . Bạn có thể thay đổi
wsrep_cluster_name
thành một cái gì đó có ý nghĩa hơntest_cluster
hoặc giữ nguyên nó, nhưng bạn phải cập nhậtwsrep_cluster_address
với địa chỉ của ba server của bạn. Nếu server của bạn có địa chỉ IP riêng, hãy sử dụng chúng tại đây.Phần “Cấu hình đồng bộ hóa Galera” xác định cách cụm sẽ giao tiếp và đồng bộ hóa dữ liệu giữa các thành viên. Điều này chỉ được sử dụng để chuyển trạng thái xảy ra khi một nút trực tuyến. Đối với cài đặt ban đầu của ta , ta đang sử dụng
rsync
, vì nó thường có sẵn và thực hiện những gì ta cần hiện tại.Phần “Cấu hình nút Galera” làm rõ địa chỉ IP và tên của server hiện tại. Điều này rất hữu ích khi cố gắng chẩn đoán sự cố trong log và tham chiếu đến từng server theo nhiều cách. Địa chỉ
wsrep_node_address
phải trùng với địa chỉ của máy bạn đang sử dụng, nhưng bạn có thể chọn bất kỳ tên nào bạn muốn để giúp bạn xác định nút trong file log .
Khi thấy ổn với file cấu hình cụm của bạn , hãy sao chép nội dung vào clipboard , lưu file .
Bước 4 - Cấu hình các node còn lại
Trên mỗi nút còn lại, hãy mở file cấu hình:
- sudo nano /etc/mysql/conf.d/galera.cnf
Dán cấu hình bạn đã sao chép từ nút đầu tiên, sau đó cập nhật “Cấu hình nút Galera” để sử dụng địa chỉ IP hoặc domain có thể phân giải cho nút cụ thể mà bạn đang cài đặt . Cuối cùng, cập nhật tên của nó, mà bạn có thể đặt thành bất kỳ thứ gì giúp bạn xác định được nút trong file log của bạn :
. . . # Galera Node Configuration wsrep_node_address="this_node_ip" wsrep_node_name="this_node_name" . . .
Lưu và thoát file trên mỗi server . Ta gần như đã sẵn sàng để đưa cụm này lên, nhưng trước khi thực hiện, ta sẽ muốn đảm bảo các cổng thích hợp đang mở.
Bước 5 - Mở firewall trên mọi server
Trên mọi server , hãy kiểm tra trạng thái của firewall :
- sudo ufw status
Trong trường hợp này, chỉ SSH được phép thông qua:
OutputStatus: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6)
Vì chỉ lưu lượng ssh được phép trong trường hợp này, ta cần thêm các luật cho lưu lượng MySQL và Galera. Nếu ta cố gắng khởi động cụm, ta sẽ thất bại vì các luật firewall .
Galera có thể sử dụng bốn cổng:
- 3306 Đối với các kết nối client MySQL và Truyền ảnh chụp trạng thái sử dụng phương thức mysqldump.
- 4567 Đối với lưu lượng sao chép Cụm Galera, sao chép đa hướng sử dụng cả phương tiện truyền tải UDP và TCP trên cổng này.
- 4568 Chuyển trạng thái gia tăng.
- 4444 Đối với tất cả các chuyển Ảnh chụp trạng thái khác.
Trong ví dụ của ta , ta sẽ mở tất cả bốn cổng trong khi ta cài đặt . Khi ta đã xác nhận sao chép đang hoạt động, ta muốn đóng bất kỳ cổng nào mà ta không thực sự sử dụng và hạn chế lưu lượng truy cập chỉ đến các server trong cụm.
Mở các cổng bằng lệnh sau:
- sudo ufw allow 3306,4567,4568,4444/tcp
- sudo ufw allow 4567/udp
Lưu ý: Tùy thuộc vào những gì khác đang chạy trên server của bạn, bạn có thể cần hạn chế quyền truy cập ngay lập tức. Hướng dẫn Cơ bản về UFW: Luật và lệnh firewall chung có thể giúp bạn thực hiện việc này.
Bước 6 - Khởi động cụm
Để bắt đầu, ta cần dừng dịch vụ MariaDB đang chạy để cụm của ta có thể được đưa trực tuyến.
Dừng MariaDB trên cả ba Server :
Sử dụng lệnh bên dưới trên cả ba server để dừng mysql để ta có thể đưa chúng trở lại trong một cụm:
- sudo systemctl stop mysql
systemctl
không hiển thị kết quả của tất cả các lệnh quản lý dịch vụ, vì vậy đảm bảo ta đã thành công, ta sẽ sử dụng lệnh sau:
- sudo systemctl status mysql
Nếu dòng cuối cùng giống như sau, lệnh đã thành công.
Output . . . Aug 19 02:55:15 galera-01 systemd[1]: Stopped MariaDB database server.
Khi ta đã tắt mysql
trên tất cả các server , ta đã sẵn sàng tiếp tục.
Đưa ra Node đầu tiên:
Để hiển thị nút đầu tiên, ta cần sử dụng một tập lệnh khởi động đặc biệt. Theo cách ta đã cấu hình cụm của bạn , mỗi nút trực tuyến sẽ cố gắng kết nối với ít nhất một nút khác được chỉ định trong file galera.cnf
của nó để có được trạng thái ban đầu. Nếu không sử dụng tập lệnh galera_new_cluster
cho phép systemd truyền tham số --wsrep-new-cluster
, một systemctl start mysql
bình thường sẽ không thành công vì không có nút nào đang chạy cho nút đầu tiên kết nối.
- sudo galera_new_cluster
Khi tập lệnh này thành công, nút được đăng ký như một phần của cụm và ta có thể thấy nó bằng lệnh sau:
- mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Output+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
Trên các node còn lại, ta có thể khởi động mysql
bình thường. Họ sẽ tìm kiếm bất kỳ thành viên nào trong danh sách cụm đang trực tuyến, vì vậy khi họ tìm thấy một thành viên, họ sẽ tham gia vào group .
Bật nút thứ hai:
Khởi động mysql
:
- sudo systemctl start mysql
Ta sẽ thấy kích thước cụm của bạn tăng lên khi mỗi nút trực tuyến:
- mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Output+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+
Đưa lên nút thứ ba:
Khởi động mysql
:
- sudo systemctl start mysql
Nếu mọi thứ hoạt động tốt, kích thước cụm nên được đặt thành ba:
- mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Output+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
Đến đây, toàn bộ cụm phải trực tuyến và giao tiếp. Tuy nhiên, trước khi ta thử nghiệm sao chép, có một chi tiết cấu hình nữa cần tham khảo.
Bước 7 - Cấu hình user bảo trì Debian
Hiện tại, server MariaDB của Ubuntu và Debian thực hiện bảo trì định kỳ, chẳng hạn như xoay vòng log với quyền user bảo trì đặc biệt. Khi ta cài đặt MariaDB, thông tin đăng nhập cho user đó được tạo ngẫu nhiên, được lưu trữ trong /etc/mysql/debian.cnf
và được chèn vào database mysql
của MariaDB.
Ngay sau khi ta đưa ra cụm của bạn , password từ nút đầu tiên đã được sao chép sang các node khác, vì vậy giá trị trong debian.cnf
không còn trùng với password trong database . Điều này nghĩa là bất kỳ thứ gì sử dụng account bảo trì sẽ cố gắng kết nối với database bằng password trong file cấu hình và sẽ không thành công trên tất cả trừ nút đầu tiên.
Để sửa lỗi này, ta sẽ sao chép debian.cnf
của nút đầu tiên sang các node còn lại.
Sao chép từ Nút đầu tiên:
Mở file debian.cnf
bằng editor của bạn:
- sudo nano /etc/mysql/debian.cnf
Tệp sẽ trông giống như sau:
[client] host = localhost user = debian-sys-maint password = 03P8rdlknkXr1upf socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = debian-sys-maint password = 03P8rdlknkXr1upf socket = /var/run/mysqld/mysqld.sock basedir = /usr
Sao chép thông tin vào clipboard của bạn.
Cập nhật nút thứ hai:
Trên nút thứ hai của bạn, mở cùng một file :
- sudo nano /etc/mysql/debian.cnf
Bất chấp cảnh báo ở đầu file cho biết "KHÔNG ĐƯỢC CHẠM!" ta cần thực hiện thay đổi để cụm hoạt động. Bạn có thể tự tin xóa thông tin hiện tại và dán nội dung từ cấu hình của nút đầu tiên. Bây giờ chúng phải giống hệt nhau. Lưu và đóng file .
Cập nhật nút thứ ba:
Trên nút thứ ba của bạn, mở cùng một file :
- sudo nano /etc/mysql/debian.cnf
Xóa thông tin hiện tại và dán nội dung từ cấu hình của nút đầu tiên. Lưu và đóng file .
Sự không phù hợp sẽ không ảnh hưởng đến khả năng kiểm tra sao chép của ta , nhưng tốt nhất là bạn nên lưu ý sớm để tránh những thất bại sau này.
Lưu ý: Sau khi hoàn tất, bạn có thể kiểm tra xem account bảo trì có thể kết nối bằng cách cung cấp password từ debian.conf
local như sau:
- sudo cat /etc/mysql/debian.cnf
Sao chép password từ kết quả . Sau đó kết nối với mysql
:
- mysql -u debian-sys-maint -p
Tại dấu nhắc , hãy cung cấp password mà bạn đã sao chép. Nếu bạn có thể kết nối, tất cả đều tốt.
Nếu không, hãy xác minh password trong file giống với nút đầu tiên, sau đó thay thế bên dưới:
- update mysql.user set password=PASSWORD('password_from_debian.cnf') where User='debian-sys-maint';
Lặp lại để kiểm tra các node còn lại.
Bước 8 - Kiểm tra nhân rộng
Ta đã thực hiện các bước cho đến thời điểm này để cụm của ta có thể thực hiện sao chép từ bất kỳ nút nào sang bất kỳ nút nào khác, được gọi là sao chép tích cực hoạt động hoặc nhân bản chính chủ. Hãy thử nghiệm để xem liệu bản sao có hoạt động như mong đợi hay không.
Viết cho nút đầu tiên:
Ta sẽ bắt đầu bằng cách áp dụng các thay đổi database trên nút đầu tiên của ta . Các lệnh sau sẽ tạo một database được gọi là playground
và một bảng bên trong được gọi là equipment
.
- mysql -u root -p -e 'CREATE DATABASE playground;
- CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id));
- INSERT INTO playground.equipment (type, quant, color) VALUES ("slide", 2, "blue");'
Bây giờ ta có một giá trị trong bảng của ta .
Đọc và Viết trên nút thứ hai:
Tiếp theo, ta sẽ xem xét nút thứ hai để xác minh bản sao đang hoạt động:
- mysql -u root -p -e 'SELECT * FROM playground.equipment;'
Nếu bản sao đang hoạt động, dữ liệu ta đã nhập trên nút đầu tiên sẽ hiển thị ở đây vào nút thứ hai:
Output+----+-------+-------+-------+ | id | type | quant | color | +----+-------+-------+-------+ | 1 | slide | 2 | blue | +----+-------+-------+-------+
Từ cùng một nút này, ta có thể ghi dữ liệu vào cụm:
- mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");'
Đọc và Viết trên Nút thứ Ba:
Từ nút thứ ba, ta có thể đọc tất cả dữ liệu này bằng cách truy vấn lại:
- mysql -u root -p -e 'SELECT * FROM playground.equipment;'
Output +----+-------+-------+--------+ | id | type | quant | color | +----+-------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | +----+-------+-------+--------+
, ta có thể thêm một giá trị khác từ nút này:
- mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");'
Đọc trên Nút đầu tiên:
Quay lại nút đầu tiên, ta có thể xác minh dữ liệu của ta có sẵn ở mọi nơi:
- mysql -u root -p -e 'SELECT * FROM playground.equipment;'
Output +----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | | 3 | seesaw | 3 | green | +----+--------+-------+--------+
Ta đã thử nghiệm, ta có thể ghi vào tất cả các node và việc sao chép đang được thực hiện đúng cách.
Kết luận
Đến đây, bạn sẽ có một cụm kiểm tra Galera ba nút đang hoạt động được cấu hình . Nếu bạn dự định sử dụng một cụm Galera trong tình huống production , bạn nên bắt đầu với không ít hơn năm nút.
Trước khi sử dụng production , bạn có thể cần xem xét một số tác nhân truyền ảnh chụp nhanh trạng thái khác (sst) như “xtrabackup” cho phép bạn cài đặt các node mới rất nhanh chóng và không bị gián đoạn lớn đối với các node đang hoạt động của bạn. Điều này không ảnh hưởng thực tế sao chép, nhưng là một mối quan tâm khi các node đang được khởi tạo.
Cuối cùng, nếu các thành viên cụm của bạn không ở trên mạng riêng, bạn cũng cần cài đặt SSL để bảo vệ dữ liệu của bạn khi dữ liệu di chuyển giữa các server .
Các tin liên quan
Cách tạo Mảng RAID với mdadm trên Ubuntu 16.042016-08-16
Cách quản lý mảng RAID với mdadm trên Ubuntu 16.04
2016-08-16
Cách thiết lập NFS Mount trên Ubuntu 16.04
2016-08-04
Cách cài đặt và sử dụng Byobu để quản lý thiết bị đầu cuối trên Ubuntu 16.04
2016-08-04
Cách cài đặt và cấu hình Ansible trên Ubuntu 16.04
2016-07-22
Cách cài đặt và cấu hình Sphinx trên Ubuntu 16.04
2016-07-22
Cách triển khai ứng dụng Node.js và MongoDB với Rancher trên Ubuntu 14.04
2016-07-18
Cách cài đặt và sử dụng BaasBox trên Ubuntu 14.04
2016-07-13
Cách thiết lập notebook Jupyter để chạy IPython trên Ubuntu 16.04
2016-06-15
Cách cài đặt Go 1.6 trên Ubuntu 16.04
2016-05-19