Trong bài đăng trên blog này, chúng ta sẽ xem xét cách triển khai thiết lập sao chép MariaDB trong môi trường đa đám mây. Giả sử ứng dụng chính của chúng tôi được đặt tại AWS, thì tốt nhất bạn nên thiết lập AWS làm trung tâm dữ liệu chính lưu trữ MariaDB master. Nô lệ MariaDB sẽ được lưu trữ trên GCP và ClusterControl được đặt bên trong cơ sở hạ tầng đám mây riêng của công ty trong văn phòng. Tất cả chúng đều được kết nối qua đường hầm VPN đơn giản và an toàn WireGuard trong dải IP 192.168.50.0/24. ClusterControl sẽ sử dụng giao diện VPN này để thực hiện triển khai, quản lý và giám sát từ xa tất cả các nút cơ sở dữ liệu.
Đây là máy chủ của chúng tôi:
- Amazon Web Service (AWS):
- Người dẫn chương trình:MariaDB master
- IP công cộng:54.151.183.93
- IP riêng:10.15.3.170/24 (VPC)
- IP VPN:192.168.50.101
- Hệ điều hành:Ubuntu 18.04.4 LTS (Bionic)
- Thông số:t2.medium (2 vCPU, bộ nhớ 4 GB)
- Google Cloud Platform (GCP):
- Máy chủ:MariaDB nô lệ
- IP công cộng:35.247.147.95
- IP riêng:10.148.0.9/32
- IP VPN:192.168.50.102
- Hệ điều hành:Ubuntu 18.04.4 LTS (Bionic)
- Thông số:n1-standard-1 (1 vCPU, bộ nhớ 3,75 GB)
- VMware Private Cloud (Office):
- Máy chủ:ClusterControl
- IP công cộng:3.25.96.229
- IP riêng:192.168.55.138/24
- IP VPN:192.168.50.100
- Hệ điều hành:Ubuntu 18.04.4 LTS (Bionic)
- Thông số:Đám mây riêng VMWare (2 CPU, 2 GB RAM)
Kiến trúc cuối cùng của chúng tôi sẽ trông giống như sau:
Ánh xạ máy chủ lưu trữ trong / etc / hosts trên tất cả các nút là:
3.25.96.229 cc clustercontrol office.mydomain.com
54.151.183.93 aws1 db1 mariadb1 db1.mydomain.com
35.247.147.95 gcp2 db2 mariadb2 db2.mydomain.com
Thiết lập ánh xạ máy chủ sẽ đơn giản hóa việc quản lý phân giải tên giữa các máy chủ, trong đó chúng tôi sẽ sử dụng tên máy chủ thay vì địa chỉ IP khi định cấu hình các đồng nghiệp Wireguard.
Cài đặt WireGuard cho VPN
Vì tất cả các máy chủ đều ở ba nơi khác nhau, chỉ được kết nối qua mạng công cộng, chúng tôi sẽ thiết lập đường hầm VPN giữa tất cả các nút bằng Wireguard. Chúng tôi sẽ thêm một giao diện mạng mới trên mỗi nút cho giao tiếp này với cấu hình IP nội bộ sau:
- 192.168.50.100 - ClusterControl (Office đám mây riêng)
- 192.168.50.101 - MariaDB master (AWS)
- 192.168.50.102 - MariaDB nô lệ (GCP)
Cài đặt Wireguard như được hiển thị trong trang này trên cả ba nút:
$ sudo add-apt-repository ppa:wireguard/wireguard
$ sudo apt-get upgrade
$ sudo apt-get install wireguard
Đối với máy chủ Ubuntu, chỉ cần chấp nhận giá trị mặc định nếu được nhắc trong quá trình cài đặt wireguard. Lưu ý rằng điều rất quan trọng là phải nâng cấp hệ điều hành lên phiên bản mới nhất để wireguard hoạt động.
Khởi động lại máy chủ để tải mô-đun nhân Wireguard:
$ reboot
Sau khi thiết lập, hãy định cấu hình ánh xạ máy chủ của chúng tôi bên trong / etc / hosts trên tất cả các nút thành một thứ như sau:
$ cat /etc/hosts
3.25.96.229 cc clustercontrol office.mydomain.com
54.151.183.93 aws1 db1 mariadb1 db1.mydomain.com
35.247.147.95 gcp2 db2 mariadb2 db2.mydomain.com
127.0.0.1 localhost
Thiết lập Wireguard
** Tất cả các bước trong phần này phải được thực hiện trên tất cả các nút, trừ khi được chỉ định khác.
1) Trên tất cả các nút với tư cách là người dùng root, hãy tạo khóa riêng tư và gán quyền bảo mật
$ umask 077
$ wg genkey > /root/private
2) Sau đó, thêm giao diện mới có tên wg0:
$ ip link add wg0 type wireguard
3) Thêm địa chỉ IP tương ứng vào giao diện wg0:
Đối với máy chủ "cc":
$ ip addr add 192.168.50.100/32 dev wg0
Đối với máy chủ "aws1":
$ ip addr add 192.168.50.101/32 dev wg0
Đối với máy chủ "gcp2":
$ ip addr add 192.168.50.102/32 dev wg0
4) Đặt cổng nghe thành 55555 và gán khóa cá nhân đã tạo cho giao diện Wireguard:
$ wg set wg0 listen-port 55555 private-key /root/private
5) Hiển thị giao diện mạng:
$ ip link set wg0 up
6) Sau khi giao diện hoạt động, hãy xác minh bằng lệnh "wg":
(cc1)$ wg
interface: wg0
public key: sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4=
private key: (hidden)
listening port: 55555
(aws1) $ wg
interface: wg0
public key: ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw=
private key: (hidden)
listening port: 55555
(gcp2) $wg
interface: wg0
public key: M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY=
private key: (hidden)
listening port: 55555
Bây giờ chúng tôi đã sẵn sàng để kết nối tất cả chúng.
Kết nối Máy chủ qua Giao diện Wireguard
Bây giờ chúng ta sẽ thêm tất cả các nút làm nút ngang hàng và cho phép chúng giao tiếp với nhau. Lệnh yêu cầu 4 tham số quan trọng:
- peer :Khóa công khai cho máy chủ đích.
- allow-ips :Địa chỉ IP của máy chủ được phép giao tiếp.
- endpoint :Máy chủ và Wireguard và cổng lắng nghe (ở đây chúng tôi định cấu hình tất cả các nút để sử dụng cổng 55555).
- dai dẳng-keepalive :Bởi vì NAT và tường lửa trạng thái theo dõi "kết nối", nếu một đồng đẳng đằng sau NAT hoặc tường lửa muốn nhận các gói đến, nó phải giữ cho ánh xạ NAT / tường lửa hợp lệ, bằng cách gửi các gói lưu giữ định kỳ. Giá trị mặc định là 0 (tắt).
Do đó, trên cc máy chủ, chúng ta cần thêm "aws1" và "gcp2":
$ wg set wg0 peer ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw= allowed-ips 192.168.50.101/32 endpoint aws1:55555 persistent-keepalive 25
$ wg set wg0 peer M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY= allowed-ips 192.168.50.102/32 endpoint gcp2:55555 persistent-keepalive 25
Trên máy chủ "aws1", chúng ta cần thêm cc và gcp2:
$ wg set wg0 peer sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4= allowed-ips 192.168.50.100/32 endpoint cc:55555 persistent-keepalive 25
$ wg set wg0 peer M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY= allowed-ips 192.168.50.102/32 endpoint gcp2:55555 persistent-keepalive 25
Trên máy chủ "gcp2", chúng ta cần thêm cc và aws1:
$ wg set wg0 peer sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4= allowed-ips 192.168.50.100/32 endpoint gcp2:55555 persistent-keepalive 25
$ wg set wg0 peer ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw= allowed-ips 192.168.50.101/32 endpoint aws1:55555 persistent-keepalive 25
Từ mọi máy chủ, hãy thử ping lẫn nhau và đảm bảo rằng bạn nhận được một số câu trả lời:
(cc)$ ping 192.168.50.101 # aws1
(cc)$ ping 192.168.50.102 # gcp2
(aws1)$ ping 192.168.50.101 # cc
(aws1)$ ping 192.168.50.102 # gcp2
(gcp2)$ ping 192.168.50.100 # cc
(gcp2)$ ping 192.168.50.101 # aws1
Kiểm tra đầu ra "wg" để xác minh trạng thái hiện tại. Đây là kết quả của từ điểm xem cc của máy chủ:
interface: wg0
public key: sC91qhb5QI4FjBZPlwsTLNIlvuQqsALYt5LZomUFEh4=
private key: (hidden)
listening port: 55555
peer: M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY=
endpoint: 35.247.147.95:55555
allowed ips: 192.168.50.102/32
latest handshake: 34 seconds ago
transfer: 4.70 KiB received, 6.62 KiB sent
persistent keepalive: every 25 seconds
peer: ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw=
endpoint: 54.151.183.93:55555
allowed ips: 192.168.50.101/32
latest handshake: 34 seconds ago
transfer: 3.12 KiB received, 9.05 KiB sent
persistent keepalive: every 25 seconds
Tất cả các trạng thái có vẻ tốt. Chúng ta có thể thấy các điểm cuối, trạng thái bắt tay và trạng thái băng thông giữa các nút. Đã đến lúc biến cấu hình này thành một tệp cấu hình để có thể tải lên WireGuard một cách dễ dàng. Chúng tôi sẽ lưu trữ nó vào một tệp có địa chỉ tại /etc/wireguard/wg0.conf. Đầu tiên, hãy tạo tệp:
$ touch /etc/wireguard/wg0.conf
Sau đó, xuất cấu hình thời gian chạy cho giao diện wg0 và lưu vào wg0.conf bằng lệnh "wg-quick":
$ wg-quick save wg0
Xác minh nội dung của tệp cấu hình (ví dụ cho máy chủ lưu trữ "cc"):
(cc)$ cat /etc/wireguard/wg0.conf
[Interface]
Address = 192.168.50.100/24
ListenPort = 55555
PrivateKey = UHIkdA0ExCEpCOL/iD0AFaACE/9NdHYig6CyKb3i1Xo=
[Peer]
PublicKey = ZLdvYjJlaS56jhEBxWGFFGprvZhtgJKwsLVj3zGonXw=
AllowedIPs = 192.168.50.101/32
Endpoint = 54.151.183.93:55555
PersistentKeepalive = 25
[Peer]
PublicKey = M6A18XobRFn7y7u6cg8XlEKy5Nf0ZWqNMOw/vVONhUY=
AllowedIPs = 192.168.50.102/32
Endpoint = 35.247.147.95:55555
PersistentKeepalive = 25
Command wg-quick cung cấp một số phím tắt thú vị để quản lý và định cấu hình các giao diện WireGuard. Sử dụng công cụ này để nâng hoặc hạ giao diện mạng:
(cc)$ wg-quick down wg0
[#] ip link delete dev wg0
(cc)$ wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.50.100/24 dev wg0
[#] ip link set mtu 8921 up dev wg0
Cuối cùng, chúng tôi hướng dẫn systemd tải giao diện này ngay trong khi khởi động:
$ systemctl enable [email protected]
Created symlink /etc/systemd/system/multi-user.target.wants/[email protected] → /lib/systemd/system/[email protected]
Tại thời điểm này, cấu hình VPN của chúng tôi đã hoàn tất và bây giờ chúng tôi có thể bắt đầu triển khai.
Triển khai Bản sao MariaDB
Khi mọi nút trong kiến trúc có thể nói chuyện với nhau, đã đến lúc chuyển sang bước cuối cùng để triển khai Bản sao MariaDB của chúng tôi bằng cách sử dụng ClusterControl.
Cài đặt ClusterControl trên cc:
(cc)$ wget https://severalnines.com/downloads/cmon/install-cc
(cc)$ chmod 755 install-cc
(cc)$ ./install-cc
Làm theo hướng dẫn cho đến khi quá trình cài đặt hoàn tất. Tiếp theo, chúng ta cần thiết lập một SSH không cần mật khẩu từ máy chủ lưu trữ ClusterControl cho cả hai nút MariaDB. Đầu tiên, tạo khóa SSH cho người dùng root:
(cc)$ whoami
root
(cc)$ ssh-keygen -t rsa # press Enter for all prompts
Sao chép nội dung khóa công khai tại /root/.ssh/id_rsa.pub vào các nút MariaDB trong /root/.ssh/authorized_keys. Điều này giả định rằng root được phép SSH cho máy chủ. Nếu không, hãy cấu hình daemon SSH để cho phép điều này tương ứng. Xác minh rằng SSH không mật khẩu được thiết lập chính xác. Trên nút ClusterControl, thực hiện lệnh SSH từ xa và đảm bảo rằng bạn sẽ nhận được câu trả lời chính xác mà không cần bất kỳ lời nhắc mật khẩu nào:
(cc)$ ssh 192.168.50.101 "hostname"
aws1
(cc)$ ssh 192.168.50.102 "hostname"
gcp2
Bây giờ chúng ta có thể triển khai bản sao MariaDB của mình. Mở trình duyệt web và truy cập giao diện người dùng ClusterControl tại http:// public_ip_of_CC / clustercontrol, tạo thông tin đăng nhập người dùng quản trị cấp cao. Đi tới Triển khai -> Nhân rộng MySQL và chỉ định như sau:
Sau đó, chọn "MariaDB" làm nhà cung cấp có phiên bản 10.4. Chỉ định cả mật khẩu gốc MariaDB. Trong phần "Xác định cấu trúc liên kết", chỉ định địa chỉ IP Wireguard (wg0) của các nút MariaDB, tương tự như ảnh chụp màn hình sau:
Nhấp vào Triển khai và đợi cho đến khi việc triển khai hoàn tất. Sau khi hoàn tất, bạn sẽ thấy như sau:
Thiết lập sao chép MariaDB của chúng tôi hiện đang chạy trên ba địa điểm khác nhau (văn phòng, AWS và GCP), được kết nối với đường hầm VPN an toàn giữa các nút.