MariaDB High Availability MariaDB with Galare+ Haproxy+ Pacemaker

diephan

Internship/Fresher
Sep 7, 2020
76
27
18
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ụ.

1.jpg


• 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.

2.jpg

Đ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.

1605234237782.png

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
HAProxy có giao diện người dùng giám sát có thể được sử dụng để xem luồng lưu lượng. Để định cấu hình cổng đến và thông tin đăng nhập tùy chọn.
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

3.jpg


Chuẩn bị :

1605156059905.png


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

4.jpg


- Cài đặt MariaDB Server and MariaDB Client

yum install MariaDB-server MariaDB-client

5.jpg


- 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

6.jpg


- 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


7.jpg


- 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


9.png

- 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%';

10.png


- 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

8.jpg


wget http://cbs.centos.org/kojifiles/packages/haproxy/1.8.1/5.el7/x86_64/haproxy18-1.8.1-5.el7.x86_64.rpm

9.jpg


yum install haproxy18-1.8.1-5.el7.x86_64.rpm -y

11.jpg

- 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

12.jpg


- 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

13.jpg


echo '$UDPServerAddress 127.0.0.1' >> /etc/rsyslog.conf


14.jpg


echo 'local2.* /var/log/haproxy.log' > /etc/rsyslog.d/haproxy.conf

systemctl restart rsyslog


16.jpg


- 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

17.jpg


- 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'@'%';

18.jpg


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;

19.jpg


- 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
21.jpg


- Khi đã kiểm ta xong, tắt dịch vụ haproxy trên mỗi node

systemctl stop haproxy
systemctl disable haproxy


22.jpg


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


23.jpg


systemctl start pcsd
systemctl enable pcsd


24.jpg


- Mở các port cần thiết:
firewall-cmd --permanent --add-service=high-availability

firewall-cmd --add-service=high-availability
firewall-cmd –reload

25.jpg


- Thiết lập mật khẩu user hacluster
passwd hacluster

26.jpg


- Xác thực cluster (chỉ cần thực hiện trên 1 node)
pcs cluster auth node1 node2 node3

28.jpg


- Khởi tạo cấu hình cluster ban đầu
pcs cluster setup --name clusterDB node1 node2 node3

29.jpg


- Khởi động cluster
pcs cluster start –all

- Cho phép cluster khởi động cùng OS
pcs cluster enable –all

30.jpg

- 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"

31.jpg


- 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

32.jpg

- Truy cập haproxy bằng vitual IP

33.jpg


(updating...)
 

Attachments

  • 1.png
    1.png
    32.8 KB · Views: 0
  • 6.jpg
    6.jpg
    38.9 KB · Views: 0
  • 8.png
    8.png
    300.3 KB · Views: 0
  • 8.png
    8.png
    197.7 KB · Views: 0
  • 9.png
    9.png
    286.7 KB · Views: 0
  • 11.png
    11.png
    278.1 KB · Views: 0
  • 14.jpg
    14.jpg
    98.6 KB · Views: 0
  • 22.jpg
    22.jpg
    60.8 KB · Views: 0
Last edited:
1. Data lưu xuống DB cùng lúc 3 con hay 1 node?
2. Khi read data thì read đọc từ node nào?
3. Maximum bao nhiêu node trên cluster?
4. Câu lệnh chỉ định master
5. Câu lệch switch qua lại master giữa các node
6. Dùng interface khác để sync data, và dùng wireshark capture gói sync.
9. Định dạng của 1 database
10. Phân quyền trên DB, tạo 1 user chỉ có quyền đọc
11. Các mô hình HA
12. Pacemaker hoạt động như thế nào?
 
Last edited:

About us

  • Securityzone.vn là một trang web chuyên về an ninh mạng và công nghệ thông tin. Trang web này cung cấp các bài viết, tin tức, video, diễn đàn và các dịch vụ liên quan đến lĩnh vực này. Securityzone.vn là một trong những cộng đồng IT lớn và uy tín tại Việt Nam, thu hút nhiều người quan tâm và tham gia. Securityzone.vn cũng là nơi để các chuyên gia, nhà nghiên cứu, sinh viên và người yêu thích an ninh mạng có thể trao đổi, học hỏi và chia sẻ kiến thức, kinh nghiệm và giải pháp về các vấn đề bảo mật trong thời đại số.

Quick Navigation

User Menu