diephan
Moderator
- Joined
- Sep 7, 2020
- Messages
- 58
- Reaction score
- 19
- Points
- 8
High Availability MariaDB with Galare+ Haproxy+ Pacemaker
1. High-availability cluster
- High-availability (HA) là các nhóm dịch vụ có thể được sử dụng một cách đáng tin cậy với thời gian ngừng hoạt động tối thiểu (hoặc không). Khi không phân cụm, nếu một dịch vụ gặp sự cố hoặc quá tải, người dùng yêu cầu dịch vụ đó sẽ không bao giờ nhận được phản hồi nhanh chóng. HA Clustter được thiết kế để khắc phục tình trạng này bằng cách phát hiện lỗi dịch vụ (sử dụng cơ quan giám sát) và ngay lập tức khởi động lại nó. Trong quá trình hoạt động này, dịch vụ sẽ được cung cấp bởi một phiên bản chuyển đổi dự phòng của cùng một dịch vụ.
- Một cụm có thể được cấu hình như sau:
• Active/Active: Tất cả các nút của cụm hoạt động cùng một lúc. Lưu lượng được phân phối trên tất cả các dịch vụ.
• Active/pasive: Cung cấp một phiên bản dự phòng đầy đủ của mỗi nút, phiên bản này chỉ được đưa trực tuyến khi nút chính liên quan của nó bị lỗi.
Điều này mang lại tính khả dụng tối đa nhưng không sử dụng đầy đủ tất cả các tài nguyên có sẵn vì nhiều khi một phần của chúng sẽ không được sử dụng.
2. MariaDB Galera Cluster
- MariaDB Galera Cluster là một cụm multi-master đồn bộ cho MariaDB. Nó chỉ có sẵn trên Linux và chỉ hỗ trợ các công cụ lưu trữ XtraDB / InnoDB (mặc dù có hỗ trợ thử nghiệm cho MyISAM ).
- Đặc trưng:
• Sao chép hầu như đồng bộ
• Cấu trúc Active-active multi-master
• Đọc và ghi vào bất kỳ nút cụm nào
• Kiểm soát thành viên tự động, các nút không thành công bị rớt khỏi cụm Tham gia nút tự động
• Sao chép song song, ở cấp độ hàng
- Lợi ích:• Không có độ trễ slave
• Không có giao dịch bị mất
• Đọc khả năng mở rộng
• Độ trễ khách hàng nhỏ hơn
- MariaDB Galera Cluster được cung cấp bởi:
• Máy chủ MariaDB.
• Bản vá MySQL-wsrep cho MySQL Server và MariaDB Server do Codership phát triển. Bản vá hiện chỉ hỗ trợ các hệ điều hành giống Unix.
• Thư viện nhà cung cấp wsrep Galera.
- Trong MariaDB 10.1 trở lên, bản vá MySQL-wsrep đã được hợp nhất vào Máy chủ MariaDB. Điều này có nghĩa là bạn có thể nhận được chức năng của MariaDB Galera Cluster bằng cách cài đặt gói Máy chủ MariaDB tiêu chuẩn và gói thư viện nhà cung cấp wsrep của Galera.
- Khi một server mariadb bắt đầu trong một cụm:
- Mỗi server cố gắng thiết lập kết nối mạng với các server khác trong cụm
- Các nhóm server được kết nối tạo thành một thành phần
- Khi server thiết lập kết nối mạng với Thành phần chính, nó sẽ đồng bộ hóa cơ sở dữ liệu cục bộ của nó với cơ sở dữ liệu của cụm
- Là một thành viên của Thành phần chính, Máy chủ sẽ hoạt động - có thể chấp nhận các truy vấn đọc và ghi từ máy khách
- Máy chủ MariaDB kết nối với các Máy chủ khác và sao chép dữ liệu từ cụm thông qua Nhà cung cấp wsrep được gọi là plugin Galera Replicator.
3. Haproxy
- HAProxy (High Availability Proxy) là một bộ cân bằng tải TCP / HTTP và proxy server cho phép máy chủ web truyền tải các yêu cầu đến trên nhiều điểm cuối. Điều này hữu ích trong trường hợp quá nhiều kết nối đồng thời làm bão hòa khả năng của một máy chủ. Thay vì một máy khách kết nối với một máy chủ duy nhất xử lý tất cả các yêu cầu, máy khách sẽ kết nối với một phiên bản HAProxy, phiên bản này sẽ sử dụng proxy ngược để chuyển tiếp yêu cầu đến một trong các điểm cuối có sẵn, dựa trên thuật toán cân bằng tải.
- Lợi ích:
• Tăng khả năng đáp ứng, tránh tình trạng quá tải
• Tăng độ tin cậy và tính dự phòng cao
• Tăng tính bảo mật cho hệ thống
- Thành phần cấu tạo nên file cấu hình Haproxy: cấu hình của Haproxy thường được tạo từ 4 thành phần gồm global (các thiết lập tổng quan), defaults (các thiết lập mặc định), frontend (các thiết lập điều phối các yêu cầu) , backend (định nghĩa các server xử lí yêu cầu), (listen là tổ hợp khai báo của frontend và backend)
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
- maxconn: Chỉ định giới hạn số kết nối mà HAProxy có thể thiết lập. Sử dụng với mục đích bảo vệ load balancer khởi vấn đề tràn ram sử dụng.
- log: Bảo đảm các cảnh báo phát sinh tại HAProxy trong quá trình khởi động, vận hành sẽ được gửi tới syslog
- stats socket: Định nghĩa runtime api, có thể sử dụng để disable server hoặc health checks, thấy đổi load balancing weights của server.
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
- timeout connect chỉ định thời gian HAProxy đợi thiết lập kết nối TCP tới backend server.
- timeout server chỉ định thời gian chờ kết nối tới backend server.
- maxconn: Thiết lập chỉ định số kết nối tối đa, mặc định bằng 2000.
- timeout check: Kiểm tra thời gian đóng kết nối (chỉ khi kết nối đã được thiết lập)
- retries: Số lần thử kết nối lại backend server trước khi HAProxy đánh giá backend server
listen stats
bind :8080
mode http
stats enable
stats uri /stats
stats realm HAProxy\ Statistics
listen Galera
bind 0.0.0.0:3360
balance leastconn
mode tcp
option tcpka
option tcplog
option clitcpka
option srvtcpka
timeout client 28801s
timeout server 28801s
option mysql-check user haproxy
server node1 10.123.20.81:3306 check
server node2 10.123.20.82:3306 check
server node3 10.123.20.83:3306 check
- Các thuật toán cân bằng tải cơ bản
- roundrobin: các request sẽ được chuyển đến server theo lượt. Đây là thuật toán mặc định được sử dụng cho HAProxy
- leastconn: các request sẽ được chuyển đến server nào có ít kết nối đến nó nhất
Tham khảo:
4. Pacemaker
- Pacemaker là một trình quản lý tài nguyên cụm. Nó đạt được tính khả dụng tối đa cho tài nguyên cụm bằng cách phát hiện và phục hồi các lỗi tài nguyên và nút bằng cách sử dụng các khả năng nhắn tin và thành viên được cung cấp bởi cơ sở hạ tầng cụm ưa thích của bạn (Corosync hoặc Heartbeat).
5. Mô hình thực hiện
Chuẩn bị :
Các bước thực hiện:
1. Cài đặt & cấu hình Galera Cluster trên 3 node
- Kiểm tra phiên bản Linux bằng cách sử dụng lệnh dưới đây trước khi tải xuống MariaDB.
cat /etc/redhat-release
- Tạo tệp MariaDB.repo trong /etc/yum.repos.d/
vi /etc/yum.repos.d/MariaDB.repo
Bash:
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
- Cài đặt MariaDB Server and MariaDB Client
yum install MariaDB-server MariaDB-client
- Bắt đầu dịch vụ MariaDB
systemctl start mysql
- Chạy cài đặt an toàn bằng cách sử dụng trạng thái dưới đây để định cấu hình mật khẩu gốc và các tính năng khác
mysql_secure_installation
- Dừng dịch vụ MariaDB
service mysql stop
- Mở các port cần thiết
Code:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --zone=public --add-port=4567/tcp --permanent
firewall-cmd --zone=public --add-port=4568/tcp --permanent
firewall-cmd --zone=public --add-port=4444/tcp --permanent
firewall-cmd –reload
- Tắt SELINUX trên tất cả các nút
sed -i.bak 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
setenforce 0
- Thực hiện thay đổi đối với tệp /etc/my.cnf.d/server.cnf
vi /etc/my.cnf.d/server.cnf
Code:
wsrep_on=ON
wsrep_cluster_address=gcomm://10.123.70.81,10.123.70.82,10.123.70.83
wsrep_node_address=10.123.70.83
wsrep_node_incoming_address=10.123.70.83
# wsrep_sst_donor =
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_buffer_pool_size=122M
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="Galera"
wsrep_slave_threads=1
wsrep_certify_nonPK=1
wsrep_max_ws_rows=0
wsrep_max_ws_size=2147483647
wsrep_debug=0
wsrep_convert_LOCK_to_trx=0
wsrep_retry_autocommit=1
wsrep_auto_increment_control=1
wsrep_drupal_282555_workaround=0
wsrep_causal_reads=0
wsrep_notify_cmd=
bind-address=0.0.0.0
wsrep_slave_threads=1
innodb_flush_log_at_trx_commit=0
• wsrep_cluster_address: Danh sách các node thuộc Cluster, sử dụng địa chỉ IP (IP Replicate: 10.123.70.81,10.123.70.82,10.123.70.83)
• wsrep_cluster_name: Tên của cluster
• wsrep_node_address: Địa chỉ IP của node đang thực hiện
• wsrep_node_incoming_address: Địa chỉ IP của node đang thực hiện
- Bắt đầu dịch vụ trên nút đầu tiên
Để bắt đầu dịch vụ mariadb trên Node đầu tiên, sử dụng lệnh dưới đây. Không sử dụng systemctl start mysql hoặc service mysql start
sudo galera_new_cluster
- Dịch vụ sẽ bắt đầu thành công. Khi dịch vụ mariadb được bắt đầu trên nút đầu tiên, bạn có thể thấy thông tin cụm bằng cách kết nối với mariadb.
Join node thứ 2 & 3
service mysql start
Code:
mysql -uroot -p
MariaDB > show status like '%wsrep_cluster_size%';
- Bật cho phép mariadb khởi động cùng hệ thống
systemctl enable mariadb
2. Cài đặt & cấu hình haproxy
( Thực hiện trên tất cả các node)
- Cài đặt HAProxy:
sudo yum install wget socat -y
wget http://cbs.centos.org/kojifiles/packages/haproxy/1.8.1/5.el7/x86_64/haproxy18-1.8.1-5.el7.x86_64.rpm
yum install haproxy18-1.8.1-5.el7.x86_64.rpm -y
- Chỉnh sửa cấu hình Haproxy:
Code:
echo 'global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen stats
bind :8080
mode http
stats enable
stats uri /stats
stats realm HAProxy\ Statistics
listen Galera
bind 0.0.0.0:3360
balance leastconn
mode tcp
option tcpka
option tcplog
option clitcpka
option srvtcpka
timeout client 28801s
timeout server 28801s
option mysql-check user haproxy
server node1 10.123.20.81:3306 check
server node2 10.123.20.82:3306 check
server node3 10.123.20.83:3306 check' > /etc/haproxy/haproxy.cfg
- Cấu hình Log cho HAProxy
sed -i "s/#\$ModLoad imudp/\$ModLoad imudp/g" /etc/rsyslog.conf
sed -i "s/#\$UDPServerRun 514/\$UDPServerRun 514/g" /etc/rsyslog.conf
echo '$UDPServerAddress 127.0.0.1' >> /etc/rsyslog.conf
echo 'local2.* /var/log/haproxy.log' > /etc/rsyslog.d/haproxy.conf
systemctl restart rsyslog
- Bổ sung cấu hình cho phép kernel có thể binding tới IP VIP
echo 'net.ipv4.ip_nonlocal_bind = 1' >> /etc/sysctl.conf
- Mở port cần thiết
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
- Tạo user haproxy, phục vụ plugin health check của HAProxy (option mysql-check user haproxy)
Code:
mysql -u root -p
CREATE USER 'haproxy'@'node1';
CREATE USER 'haproxy'@'node2';
CREATE USER 'haproxy'@'node3';
CREATE USER 'haproxy'@'%';
Code:
grant all privileges on *.* to 'haproxy'@'node1';
grant all privileges on *.* to 'haproxy'@'node2';
grant all privileges on *.* to 'haproxy'@'node3';
grant all privileges on *.* to 'haproxy'@'%';
flush privileges;
- Kiểm tra dịch vụ haproxy trên mỗi node.
- Khởi động haproxy:
systemctl start haproxy
Truy cập vào http://IP:8080/stats
- Khi đã kiểm ta xong, tắt dịch vụ haproxy trên mỗi node
systemctl stop haproxy
systemctl disable haproxy
3. Cài đặt & cấu hình pacemaker corosync
(Thực hiện trên tất cả các node)
- Cài đặt gói pacemaker pcs
yum -y install pacemaker pcs
systemctl start pcsd
systemctl enable pcsd
- Mở các port cần thiết:
firewall-cmd --permanent --add-service=high-availability
firewall-cmd --add-service=high-availability
firewall-cmd –reload
- Thiết lập mật khẩu user hacluster
passwd hacluster
- Xác thực cluster (chỉ cần thực hiện trên 1 node)
pcs cluster auth node1 node2 node3
- Khởi tạo cấu hình cluster ban đầu
pcs cluster setup --name clusterDB node1 node2 node3
- Khởi động cluster
pcs cluster start –all
- Cho phép cluster khởi động cùng OS
pcs cluster enable –all
- Thiết lập cluster
Bỏ qua cơ chế STONITH
pcs property set stonith-enabled=false
Cho phép Cluster chạy kể cả khi mất quorum
pcs property set no-quorum-policy=ignore
Hạn chế Resource trong cluster chuyển node sau khi Cluster khởi động lại
pcs property set default-resource-stickiness="INFINITY"
- Tạo Resource IP VIP Cluster
pcs resource create Virtual_IP ocf:heartbeat:IPaddr2 ip=10.123.20.80 cidr_netmask=24 op monitor interval=30s
- Tạo Resource quản trị dịch vụ HAProxy
pcs resource create HaProxy systemd:haproxy op monitor timeout="5s" interval="5s"
- Ràng buộc thứ tự khởi động dịch vụ, khởi động dịch vụ Virtual_IP sau đó khởi động dịch vụ HaProxy
pcs constraint order start Virtual_IP then HaProxy kind=Optional
- Ràng buộc resource Virtual_IP phải khởi động cùng node với resource Loadbalancer_HaProxy
pcs constraint colocation add Virtual_IP HaProxy INFINITY
- Truy cập haproxy bằng vitual IP
(updating...)
Attachments
Last edited: