Cách thiết lập HAProxy làm Bộ cân bằng tải cho MariaDB trên CentOS 7

theanh

Administrator
Nhân viên
Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cài đặt cụm MariaDB Galera trên CentOS 7 có bộ cân bằng tải HAProxy ở phía trước. Thiết lập tổng thể bao gồm 4 máy chủ. Tôi sẽ sử dụng 3 máy chủ CentOS 7 cho các nút cơ sở dữ liệu, 2 nút sẽ hoạt động và 1 nút đóng vai trò là nút sao lưu. Máy chủ thứ tư sẽ được sử dụng cho bộ cân bằng tải HAProxy. Đối với thuật toán cân bằng, chúng tôi sử dụng leastconn (nhưng bạn có thể sử dụng các thuật toán khác).

MariaDB là một trong những máy chủ cơ sở dữ liệu quan hệ phổ biến nhất do nhà phát triển ban đầu của máy chủ Cơ sở dữ liệu MySQL tạo ra. MariaDB là một nhánh của MySQL hỗ trợ công cụ lưu trữ XtraDB, công cụ lưu trữ InnoDB và một công cụ lưu trữ mới có tên là aria.

MariaDB Galera Cluster là một cụm đa chủ đồng bộ cho MariaDB chỉ khả dụng trên các hệ điều hành dựa trên GNU/Linux. Galera Cluster chỉ hỗ trợ các công cụ lưu trữ XtraDB và InnoDB. Nó sử dụng thư viện Galera để sao chép với điều khiển thành viên tự động, tự động tham gia nút và để đọc và ghi vào các nút cụm.



Điều kiện tiên quyết
  • 4 máy chủ CentOS 7 - 64bit:
mariadb1
192.168.1.132

mariadb2
192.168.1.133

mariadb3
192.168.1.134

HAProxy
192.168.1.135
  • Quyền root trên cả bốn máy chủ.

Bước 1 - Cài đặt và cấu hình MariaDB Galera Cluster​

Trong bước này, chúng ta sẽ cài đặt và cấu hình MariaDB Galera Cluster trên 3 máy chủ CentOS. Chúng ta sẽ cài đặt máy chủ MariaDB-Galera, sau đó bật tường lửa và mở một số cổng cho cơ sở dữ liệu và các dịch vụ khác. Sau đó, chúng ta sẽ cài đặt tập lệnh clustercheck trên mỗi máy chủ MariaDB để có thể kiểm tra trạng thái máy chủ từ HAProxy.


A. Cấu hình tên máy chủ và chuẩn bị hệ thống cơ sở​

Đăng nhập vào tất cả các máy chủ cơ sở dữ liệu bằng tài khoản ssh của bạn:
Mã:
ssh [emailprotected]
ssh [emailprotected]
ssh [emailprotected]
Chuyển sang người dùng root bằng lệnh sudo:
Mã:
sudo su
Chỉnh sửa tệp hosts trên mỗi máy chủ MariaDB và thêm tất cả địa chỉ IP máy chủ và tên máy chủ của các nút khác:
Mã:
vi /etc/hosts
Xem cấu hình /etc/hosts của tôi bên dưới:
Mã:
192.168.1.132 mariadb1
192.168.1.133 mariadb2
192.168.1.134 mariadb3
Lưu tệp và thoát.

Tiếp theo, tắt SELinux trên mỗi máy chủ vì nó gây ra sự cố với MariaDB Galera. Vô hiệu hóa SELinux bằng lệnh sed này:
Mã:
sed -i -e 's/SELINUX=permissive/SELINUX=disabled/g' /etc/sysconfig/selinux
sed (trình chỉnh sửa luồng): thay thế "SELINUX=permissive" bằng "SELINUX=disabled" trên tệp /etc/sysconfig/selinux.


B. Cài đặt MariaDB Galera Server​

Trong bước này, chúng ta sẽ cài đặt MariaDB Galera 10.0 có sẵn trong kho lưu trữ MariaDB.

Tạo một tệp .repo mới trong thư mục yum.repos.d bằng lệnh vi:
Mã:
vi /etc/yum.repos.d/mariadb.repo
Dán thông tin chi tiết về kho lưu trữ MariaDB Galera bên dưới và lưu lại:
Mã:
# MariaDB 10.0 CentOS repository list - created 2015-07-09 14:56 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Bây giờ hãy cài đặt MariaDB Galera Server và Client cùng một số gói khác cần thiết cho hướng dẫn này:
Mã:
yum -y install MariaDB-Galera-server MariaDB-client galera rsync xinetd percona-toolkit precona-xtrabackup xinetd wget
Chờ cho đến khi quá trình cài đặt hoàn tất.


C. Cấu hình Firewalld​

Chúng ta sẽ bật tường lửa mặc định của CentOS 7 có tên là Firewalld. Chúng tôi sẽ bật nó lên và mở các cổng TCP được sử dụng bởi các dịch vụ mà chúng tôi sẽ cài đặt.

3306 = Được sử dụng cho các kết nối máy khách MySQL/MariaDB.
4567 = Lưu lượng sao chép cụm Galera.
873 = Cổng Rsync.
4444 = Dành cho tất cả các Chuyển ảnh chụp nhanh trạng thái (SST) khác.
9200 = xinetd - clustercheck.

Bật firewalld bằng lệnh systemctl này:
Mã:
systemctl start firewalld
Bây giờ hãy mở các cổng bằng firewall-cmd:
Mã:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=4567/tcp
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --permanent --add-port=9200/tcp
và tải lại firewalld:
Mã:
tường lửa-cmd --reload



D. Cấu hình MariaDB Galera Cluster​

Vào thư mục /etc/my.cnf.d/ và chỉnh sửa tệp server.conf bằng vi:
Mã:
cd /etc/my.cnf.d/
vi server.conf
Bỏ chú thích và thêm một số dòng cấu hình, bạn có thể xem chi tiết bên dưới:
Mã:
wsrep_provider=/usr/lib64/galera/libgalera_smm.so # Đường dẫn đến thư viện nhà cung cấp wsrep
wsrep_cluster_address="gcomm://192.168.1.132,192.168.1.133,192.168.1.134" # Nhóm nút, thêm tất cả Máy chủ MardiaDB IP
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
 
# Thêm một số cấu hình bên dưới
# Tên cụm
wsrep_cluster_name="mariadb_cluster"
 
# Thêm IP máy chủ - trên mariadb2 = 192.168.1.133 - trên mariadb3 = 192.168.1.134
wsrep_node_address="192.168.1.132"
 
# Nhà cung cấp bản sao với rsync
wsrep_sst_method=rsync
Lưu tệp và thoát.

Trên máy chủ mariadb1, hãy khởi động cụm bằng lệnh bên dưới:
Mã:
/etc/rc.d/init.d/mysql bootstrap
kết quả:
Mã:
Khởi động cụm.. Đang khởi động MySQL.. THÀNH CÔNG!
Trên máy chủ mariadb2 và mariadb3, khởi động MariaDB bình thường:
Mã:
/etc/init.d/mysql start
Đang khởi động mariadb1.



mariadb2 và mariadb3 start.





MariaDB đã được khởi động trên tất cả các nút, bây giờ hãy cấu hình mật khẩu gốc cho MariaDB trên tất cả các máy chủ bằng lệnh bên dưới:
Mã:
/usr/bin/mysql_secure_installation



E. Cấu hình Clustercheck​

Clustercheck là một tập lệnh bash hữu ích để tạo proxy (ví dụ: HAProxy) có khả năng giám sát máy chủ MariaDB.

Đi đến thư mục /tmp và tải xuống tập lệnh bằng wget:
Mã:
cd /tmp
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
Bây giờ hãy thực thi tập lệnh bằng cách thay đổi quyền và di chuyển nó đến thư mục /usr/bin/:
Mã:
chmod +x clustercheck
mv clustercheck /usr/bin/
Tiếp theo, tạo tập lệnh axinetd cho clusterchek bằng lệnh vi trong thư mục "/etc/xinet.d/":
Mã:
vi /etc/xinetd.d/mysqlchk
Dán cấu hình bên dưới:
Mã:
# default: on
# description: mysqlchk
service mysqlchk
{
 disable = no
 flags = REUSE
 socket_type = stream
 port = 9200 # Cổng này được xinetd sử dụng cho clustercheck
 wait = no
 user = nobody
 server = /usr/bin/clustercheck
 log_on_failure += USERID
 only_from = 0.0.0.0/0
 per_source = UNLIMITED
}
Lưu và thoát.

Thêm clustercheck vào danh sách dịch vụ:
Mã:
vi /etc/services
Đi đến dòng 10101, bình luận các dịch vụ sử dụng cổng 9200 và thêm một dòng mới cho mysqlchk/clustercheck.
Mã:
mysqlchk 9200/tcp # mysqlchk
 
#wap-wsp 9200/tcp # Dịch vụ phiên không kết nối WAP
#wap-wsp 9200/udp # Dịch vụ phiên không kết nối WAP
Lưu tệp và thoát.

Sau đó khởi động dịch vụ xinetd:
Mã:
systemctl start xinetd
Để thực hiện clustercheck, bạn phải tạo một người dùng mới trong MySQL. Đăng nhập vào shell MariaDB và tạo một người dùng mới với tên "clustercheckuser" và mật khẩu "clustercheckpassword!".
Mã:
mysql -u root -p
CẤP QUY TRÌNH TRÊN *.* CHO 'clustercheckuser'@'localhost' ĐƯỢC XÁC ĐỊNH BỞI 'clustercheckpassword!' ;
exit;


Ở giai đoạn này, tất cả các dịch vụ MariaDB đều được đồng bộ hóa.

Testingclustercheck:
Mã:
/usr/bin/clustercheck
Đảm bảo mã kết quả là 200.




Bước 2 - Cài đặt và cấu hình HAProxy​

Đăng nhập vào máy chủ HAProxy:
Mã:
ssh [emailprotected]
Trở thành người dùng root và thêm IP máy chủ MariaDB và tên máy chủ vào tệp "/etc/hosts":
Mã:
sudo su
vi /etc/hosts
HAProxy có sẵn trong kho lưu trữ cơ sở CentOS, hãy chạy lệnh yum này để cài đặt:
Mã:
yum -y install haproxy
Sau đó cấu hình nhật ký cho HAProxy bằng cách chỉnh sửa tệp cấu hình thersyslog:
Mã:
vi /etc/rsyslog.conf
Bỏ chú thích cổng theudp:
Mã:
# Cung cấp khả năng tiếp nhận syslog UDP
$ModLoad imudp
$UDPServerRun 51
Lưu tệp và thoát khỏi trình chỉnh sửa.

Thêm cấu hình HAProxy vào thư mục rsyslog.d:
Mã:
vi /etc/rsyslog.d/haproxy.conf
Dán cấu hình bên dưới:
Mã:
local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log
Lưu tệp và khởi động lại rsyslog:
Mã:
systemctl restart rsyslog
Tiếp theo, tạo cấu hình HAProxy mới tập tin.

Đi đến thư mục /etc/haproxy và sao lưu tập tin cấu hình haproxy dafult.
Mã:
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
Tạo tệp cấu hình haproxy mới:
Mã:
vi /etc/haproxy/haproxy.cfg
Và dán cấu hình HAProxy bên dưới:
Mã:
global
 log 127.0.0.1 local2
 maxconn 1024
 user haproxy
 group haproxy
 daemon
 stats socket /var/run/haproxy.sock mode 600 level admin # Tạo tệp sock cho haproxy
 
defaults
 log global
 mode http
 option tcplog
 option dontlognull
 retries 3
 option redispatch
 maxconn 1024
 timeout connect 5000ms
 thời gian chờ máy khách 50000ms
 thời gian chờ máy chủ 50000ms
 
lắng nghe mariadb_cluster 0.0.0.0:3030
## MariaDB cân bằng leastconn - cụm lắng nghe trên cổng 3030.
 chế độ tcp
 cân bằng leastconn
 tùy chọn httpchk
 máy chủ mariadb1 192.168.1.132:3306 kiểm tra cổng 9200
 máy chủ mariadb2 192.168.1.133:3306 kiểm tra cổng 9200
 máy chủ mariadb3 192.168.1.134:3306 kiểm tra cổng 9200 sao lưu # Đặt mariadb3 làm bản sao lưu - dữ liệu sao chép tự động
 
lắng nghe số liệu thống kê 0.0.0.0:9000
## HAProxy stats web gui chạy trên cổng 9000 - tên người dùng và mật khẩu: howtoforge.
 mode http
 stats enable
 stats uri /stats
 stats realm HAProxy\ Statistics
 stats auth howtoforge:howtoforge
 stats admin if TRUE
Cổng 3030 là cổng MariaDB cân bằng tải, chúng ta có thể truy cập cơ sở dữ liệu trên tất cả các máy chủ MariaDB với IP cân bằng tải và cổng đó.

Cổng 9000 là cổng cho web-gui, nó cho phép giám sát HAProxy từ trình duyệt.

Bây giờ hãy khởi động firewalld, mở các cổng 9000 và 3030, sau đó tải lại:
Mã:
systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
firewall-cmd --reload
Khởi động HAProxy bằng lệnh systemctl:
Mã:
systemctl start haproxy

Bước 3 - Kiểm tra HAProxy và MariaDB​

A. Kiểm tra sao chép​

Đăng nhập vào máy chủ MariaDB, truy cập shell MySQL và tạo cơ sở dữ liệu mới từ mariadb1, sau đó từmariadb2 và cuối cùng từ mariadb3.
Mã:
mysql -u root -p
create database this_mariadb1; # Chạy lệnh này trên máy chủ mariadb1
create database this_mariadb2; # Chạy lệnh này trên máy chủ mariadb2
create database this_mariadb3; # Chạy lệnh này trên máy chủ mariadb3
Kiểm tra cơ sở dữ liệu:




B. Truy cập Máy chủ MariaDB qua HAProxy​

Bây giờ chúng ta truy cập cụm máy chủ MariaDB và cơ sở dữ liệu qua IP HAProxy trên cổng 3030.

Trước khi thực hiện thử nghiệm này, hãy bật quyền truy cập từ xa vào máy chủ MariaDB bằng cách tạo người dùng root mới với máy chủ "%".

Đăng nhập vào shell MariaDB và tạo người dùng mới "root" với mật khẩu "aqwe123":
Mã:
mysql -u root -p
CẤP TẤT CẢ CÁC QUYỀN TRÊN *.* CHO root@'%' ĐƯỢC XÁC ĐỊNH BỞI "aqwe123";
Tiếp theo, truy cập bảng cơ sở dữ liệu 'mysql.user' qua máy chủ HAProxy:
Mã:
mysql -u root -p -h 192.168.1.135 -P 3030 -e "select Host, User, Password from mysql.user"


Bạn có thể xem người dùng của máy chủ cơ sở dữ liệu bằng cách truy cập IP của bộ cân bằng tải trên cổng 3030. Bạn có thể truy cập cơ sở dữ liệu trên các nút MySQL bằng cách truy cập IP HAProxy trên cổng 3030.

Một thử nghiệm khác của máy chủ: thuật toán leastconn:




C. Đăng nhập vào HAProxy Web-Gui​

Bạn có thể truy cập máy chủ giám sát HAProxy trên cổng 9000, với tên người dùng và mật khẩu "howtoforge" để hiển thị giao diện người dùng web HAProxy:




HAProxy đã được cài đặt thành công và bạn có thể thấy các máy chủ MariaDB đang được giám sát.


Kết luận​

MariaDB Galera Cluster là cụm đa chủ đồng bộ cung cấp khả năng cân bằng tải cho cơ sở dữ liệu MySQL. Đây là giải pháp tốt để xây dựng hệ thống cơ sở dữ liệu mạnh mẽ cho trang web của bạn. MariaDB Galera Cluster hỗ trợcác công cụ lưu trữ xtradb và innodb, cung cấp khả năng sao chép tự động và cho phép tự động tham gia các nút mới. Chúng ta có thể sử dụng HAProxy trước cụm cơ sở dữ liệu như một bộ cân bằng tải. Bộ cân bằng tải giúp phân phối các yêu cầu đến cho tất cả các cơ sở dữ liệu. Chúng tôi sử dụng cụm lệnh bash clustercheck để thực hiện giám sát cơ sở dữ liệu từ HAProxy. MariaDB Galera Cluster và HAProxy là một trong những giải pháp tốt nhất để xây dựng hệ thống cơ sở dữ liệu có tính khả dụng cao.
 
Back
Bên trên