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 - sudovà 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à - mysqldkhô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_namethành một cái gì đó có ý nghĩa hơn- test_clusterhoặc giữ nguyên nó, nhưng bạn phải cập nhật- wsrep_cluster_addressvớ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_addressphả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 quản lý mảng RAID với mdadm trên Ubuntu 16.042016-08-16
Cách tạo 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 Sphinx trên Ubuntu 16.04
2016-07-22
Cách cài đặt và cấu hình Ansible 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
 

