Triển khai một cụm cơ sở dữ liệu không phải là khoa học tên lửa - có rất nhiều cách để làm điều đó. Nhưng làm thế nào để bạn biết những gì bạn vừa triển khai đã sẵn sàng sản xuất? Việc triển khai thủ công cũng có thể tẻ nhạt và lặp đi lặp lại. Tùy thuộc vào số lượng nút trong cụm, các bước triển khai có thể tốn thời gian và dễ xảy ra lỗi. Các công cụ quản lý cấu hình như Puppet, Chef và Ansible phổ biến trong việc triển khai cơ sở hạ tầng, nhưng đối với các cụm cơ sở dữ liệu trạng thái, bạn cần thực hiện tập lệnh quan trọng để xử lý việc triển khai toàn bộ cơ sở dữ liệu HA stack. Hơn nữa, mẫu / mô-đun / sách nấu ăn / vai trò đã chọn phải được kiểm tra tỉ mỉ trước khi bạn có thể tin tưởng nó như một phần của quá trình tự động hóa cơ sở hạ tầng của mình. Các thay đổi về phiên bản yêu cầu các tập lệnh phải được cập nhật và kiểm tra lại.
Tin tốt là ClusterControl tự động triển khai toàn bộ ngăn xếp - và miễn phí! Chúng tôi đã triển khai hàng nghìn cụm sản xuất và thực hiện một số biện pháp phòng ngừa để đảm bảo chúng sẵn sàng sản xuất Các cấu trúc liên kết khác nhau được hỗ trợ, từ sao chép chủ-nô lệ đến cụm Galera, NDB và InnoDB, với các proxy cơ sở dữ liệu khác nhau.
Một ngăn xếp tính sẵn sàng cao, được triển khai thông qua ClusterControl, bao gồm ba lớp:
- Lớp cơ sở dữ liệu (ví dụ:Cụm Galera)
- Lớp proxy ngược (ví dụ:HAProxy hoặc ProxySQL)
- Lớp Keepalived, với việc sử dụng IP ảo, đảm bảo tính khả dụng cao của lớp proxy
Trong blog này, chúng tôi sẽ chỉ cho bạn cách triển khai Cụm Galera cấp sản xuất hoàn chỉnh với các bộ cân bằng tải để thiết lập tính khả dụng cao. Thiết lập hoàn chỉnh bao gồm 6 máy chủ:
- 1 máy chủ - ClusterControl (máy chủ triển khai, giám sát, quản lý)
- 3 máy chủ - MySQL Galera Cluster
- 2 máy chủ - Các proxy ngược hoạt động như bộ cân bằng tải phía trước cụm.
Sơ đồ sau minh họa kết quả cuối cùng của chúng tôi sau khi quá trình triển khai hoàn tất:
Điều kiện tiên quyết
ClusterControl phải nằm trên một nút độc lập không phải là một phần của cụm. Tải xuống ClusterControl và trang sẽ tạo một giấy phép duy nhất cho bạn và hiển thị các bước để cài đặt ClusterControl:
$ wget -O install-cc https://severalnines.com/scripts/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user
Làm theo hướng dẫn mà bạn sẽ được hướng dẫn cách thiết lập máy chủ MySQL, mật khẩu gốc MySQL trên nút ClusterControl, mật khẩu cmon để sử dụng ClusterControl, v.v. Bạn sẽ nhận được dòng sau khi quá trình cài đặt hoàn tất:
Determining network interfaces. This may take a couple of minutes. Do NOT press any key.
Public/external IP => http://{public_IP}/clustercontrol
Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.
Sau đó, trên máy chủ ClusterControl, tạo khóa SSH mà chúng tôi sẽ sử dụng để thiết lập SSH không mật khẩu sau này. Bạn có thể sử dụng bất kỳ người dùng nào trong hệ thống nhưng nó phải có khả năng thực hiện các thao tác siêu người dùng (sudoer). Trong ví dụ này, chúng tôi đã chọn người dùng gốc:
$ whoami
root
$ ssh-keygen -t rsa
Thiết lập SSH không cần mật khẩu cho tất cả các nút mà bạn muốn giám sát / quản lý thông qua ClusterControl. Trong trường hợp này, chúng tôi sẽ thiết lập điều này trên tất cả các nút trong ngăn xếp (bao gồm cả chính nút ClusterControl). Trên nút ClusterControl, hãy chạy các lệnh sau và chỉ định mật khẩu gốc khi được nhắc:
$ ssh-copy-id [email protected] # clustercontrol
$ ssh-copy-id [email protected] # galera1
$ ssh-copy-id [email protected] # galera2
$ ssh-copy-id [email protected] # galera3
$ ssh-copy-id [email protected] # proxy1
$ ssh-copy-id [email protected] # proxy2
Sau đó, bạn có thể xác minh xem nó có hoạt động hay không bằng cách chạy lệnh sau trên nút ClusterControl:
$ ssh [email protected] "ls /root"
Đảm bảo rằng bạn có thể xem kết quả của lệnh trên mà không cần nhập mật khẩu.
Triển khai cụm
ClusterControl hỗ trợ tất cả các nhà cung cấp cho Galera Cluster (Codership, Percona và MariaDB). Có một số khác biệt nhỏ có thể ảnh hưởng đến quyết định chọn nhà cung cấp của bạn. Nếu bạn muốn tìm hiểu về sự khác biệt giữa chúng, hãy xem bài đăng trên blog trước của chúng tôi - So sánh cụm Galera - Codership so với Percona và MariaDB.
Để triển khai sản xuất, Cụm Galera ba nút là điều tối thiểu bạn nên có. Bạn luôn có thể mở rộng quy mô sau khi cụm được triển khai, theo cách thủ công hoặc thông qua ClusterControl. Chúng tôi sẽ mở giao diện người dùng ClusterControl tại https://192.168.55.160/clustercontrol và tạo người dùng quản trị đầu tiên. Sau đó, chuyển đến menu trên cùng và nhấp vào Triển khai -> MySQL Galera và bạn sẽ thấy hộp thoại sau:
Có hai bước, bước đầu tiên là "Cài đặt chung &SSH". Ở đây chúng ta cần định cấu hình người dùng SSH mà ClusterControl nên sử dụng để kết nối với các nút cơ sở dữ liệu, cùng với đường dẫn đến khóa SSH (như được tạo trong phần Điều kiện tiên quyết) cũng như cổng SSH của các nút cơ sở dữ liệu. ClusterControl giả định tất cả các nút cơ sở dữ liệu được cấu hình với cùng một người dùng SSH, khóa và cổng. Tiếp theo, đặt tên cho cụm, trong trường hợp này chúng ta sẽ sử dụng "MySQL Galera Cluster 5.7". Giá trị này có thể được thay đổi sau này. Sau đó, chọn các tùy chọn để hướng dẫn ClusterControl cài đặt phần mềm cần thiết, vô hiệu hóa tường lửa và cũng vô hiệu hóa mô-đun tăng cường bảo mật trên bản phân phối Linux cụ thể. Tất cả những điều này đều được khuyến nghị bật để tối đa hóa tiềm năng triển khai thành công.
Nhấp vào Tiếp tục và bạn sẽ thấy hộp thoại sau:
Trong bước tiếp theo, chúng ta cần phải định cấu hình các máy chủ cơ sở dữ liệu - nhà cung cấp, phiên bản, datadir, cổng, v.v. - khá dễ hiểu. "Mẫu cấu hình" là tên tệp mẫu trong / usr / share / cmon / các mẫu của nút ClusterControl. "Kho lưu trữ" là cách ClusterControl nên cấu hình kho lưu trữ trên nút cơ sở dữ liệu. Theo mặc định, nó sẽ sử dụng kho của nhà cung cấp và cài đặt phiên bản mới nhất do kho cung cấp. Tuy nhiên, trong một số trường hợp, người dùng có thể có một kho lưu trữ sẵn có được sao chép từ kho lưu trữ ban đầu do hạn chế về chính sách bảo mật. Tuy nhiên, ClusterControl hỗ trợ hầu hết chúng, như được mô tả trong hướng dẫn sử dụng, trong Kho lưu trữ.
Cuối cùng, thêm địa chỉ IP hoặc tên máy chủ (phải là FQDN hợp lệ) của các nút cơ sở dữ liệu. Bạn sẽ thấy biểu tượng dấu tích màu xanh lục ở bên trái của nút, cho biết ClusterControl đã có thể kết nối với nút thông qua SSH không cần mật khẩu. Bây giờ bạn đã tốt để đi. Nhấp vào Triển khai để bắt đầu triển khai. Quá trình này có thể mất từ 15 đến 20 phút để hoàn thành. Bạn có thể theo dõi tiến trình triển khai trong Hoạt động (menu trên cùng) -> Công việc -> Tạo cụm :
Khi việc triển khai hoàn tất, tại thời điểm này, kiến trúc của chúng tôi có thể được minh họa như sau:
Triển khai Bộ cân bằng tải
Trong Galera Cluster, tất cả các nút đều bình đẳng - mỗi nút giữ vai trò giống nhau và cùng một tập dữ liệu. Do đó, không có chuyển đổi dự phòng trong cụm nếu một nút bị lỗi. Chỉ có phía ứng dụng yêu cầu chuyển đổi dự phòng, để bỏ qua các nút không hoạt động trong khi cụm được phân vùng. Do đó, chúng tôi khuyên bạn nên đặt các bộ cân bằng tải trên đầu một Cụm Galera để:
- Hợp nhất nhiều điểm cuối cơ sở dữ liệu với một điểm cuối duy nhất (máy chủ cân bằng tải hoặc địa chỉ IP ảo làm điểm cuối).
- Cân bằng các kết nối cơ sở dữ liệu giữa các máy chủ cơ sở dữ liệu phụ trợ.
- Thực hiện kiểm tra tình trạng và chỉ chuyển tiếp các kết nối cơ sở dữ liệu đến các nút khỏe mạnh.
- Chuyển hướng / viết lại / chặn các truy vấn vi phạm (viết xấu) trước khi chúng truy cập vào máy chủ cơ sở dữ liệu.
Có ba lựa chọn chính về proxy ngược cho Galera Cluster - HAProxy, MariaDB MaxScale hoặc ProxySQL - tất cả đều có thể được cài đặt và cấu hình tự động bởi ClusterControl. Trong lần triển khai này, chúng tôi chọn ProxySQL vì nó kiểm tra tất cả những điều trên cộng với nó hiểu giao thức MySQL của các máy chủ phụ trợ.
Trong kiến trúc này, chúng tôi muốn sử dụng hai máy chủ ProxySQL để loại bỏ mọi điểm lỗi (SPOF) đối với tầng cơ sở dữ liệu, tầng này sẽ được gắn với nhau bằng cách sử dụng địa chỉ IP ảo nổi. Chúng tôi sẽ giải thích điều này trong phần tiếp theo. Một nút sẽ hoạt động như proxy hoạt động và nút còn lại ở chế độ chờ nóng. Nút nào giữ địa chỉ IP ảo tại một thời điểm nhất định là nút đang hoạt động.
Để triển khai máy chủ ProxySQL đầu tiên, chỉ cần đi tới trình đơn hành động cụm (bên phải của thanh tóm tắt) và nhấp vào Thêm Cân bằng tải -> ProxySQL -> Triển khai ProxySQL và bạn sẽ thấy như sau:
Một lần nữa, hầu hết các trường đều tự giải thích. Trong phần "Người dùng cơ sở dữ liệu", ProxySQL hoạt động như một cổng thông qua đó ứng dụng của bạn kết nối với cơ sở dữ liệu. Ứng dụng xác thực dựa trên ProxySQL, do đó bạn phải thêm tất cả người dùng từ tất cả các nút MySQL phụ trợ, cùng với mật khẩu của họ vào ProxySQL. Từ ClusterControl, bạn có thể tạo một người dùng mới để ứng dụng sử dụng - bạn có thể quyết định tên, mật khẩu, quyền truy cập vào cơ sở dữ liệu nào được cấp và người dùng đó sẽ có những đặc quyền MySQL nào. Người dùng như vậy sẽ được tạo trên cả phía MySQL và ProxySQL. Tùy chọn thứ hai, phù hợp hơn với các cơ sở hạ tầng hiện có, là sử dụng những người dùng cơ sở dữ liệu hiện có. Bạn cần chuyển tên người dùng và mật khẩu và người dùng đó sẽ chỉ được tạo trên ProxySQL.
Phần cuối cùng, "Giao dịch ngầm định", ClusterControl sẽ cấu hình ProxySQL để gửi tất cả lưu lượng đến thiết bị chính nếu chúng ta bắt đầu giao dịch với SET autocommit =0. Ngược lại, nếu bạn sử dụng BEGIN hoặc BẮT ĐẦU GIAO DỊCH để tạo giao dịch, ClusterControl sẽ cấu hình phân tách đọc / ghi trong các quy tắc truy vấn. Điều này là để đảm bảo ProxySQL sẽ xử lý các giao dịch một cách chính xác. Nếu bạn không biết ứng dụng của mình thực hiện điều này như thế nào, bạn có thể chọn cái sau.
Lặp lại cấu hình tương tự cho nút ProxySQL thứ hai, ngoại trừ giá trị "Địa chỉ máy chủ" là 192.168.55.182. Sau khi hoàn tất, cả hai nút sẽ được liệt kê trong tab "Nút" -> ProxySQL nơi bạn có thể theo dõi và quản lý chúng trực tiếp từ giao diện người dùng:
Tại thời điểm này, kiến trúc của chúng tôi hiện đang trông như thế này:
Nếu bạn muốn tìm hiểu thêm về ProxySQL, hãy xem hướng dẫn này - Cân bằng tải cơ sở dữ liệu cho MySQL và MariaDB với ProxySQL - Hướng dẫn.
Triển khai địa chỉ IP ảo
Phần cuối cùng là địa chỉ IP ảo. Nếu không có nó, các bộ cân bằng tải của chúng tôi (proxy ngược) sẽ là liên kết yếu vì chúng sẽ là một điểm lỗi duy nhất - trừ khi ứng dụng có khả năng tự động chuyển hướng các kết nối cơ sở dữ liệu bị lỗi sang một bộ cân bằng tải khác. Tuy nhiên, cách tốt là hợp nhất chúng bằng cách sử dụng địa chỉ IP ảo và đơn giản hóa điểm cuối kết nối với lớp cơ sở dữ liệu.
Từ ClusterControl UI -> Thêm Load Balancer -> Keepalived -> Triển khai Keepalived và chọn hai máy chủ ProxySQL mà chúng tôi đã triển khai:
Ngoài ra, chỉ định địa chỉ IP ảo và giao diện mạng để ràng buộc địa chỉ IP. Giao diện mạng phải tồn tại trên cả hai nút ProxySQL. Sau khi triển khai, bạn sẽ thấy các dấu kiểm màu xanh lục sau đây trong thanh tóm tắt của cụm:
Tại thời điểm này, kiến trúc của chúng tôi có thể được minh họa như sau:
Cụm cơ sở dữ liệu của chúng tôi hiện đã sẵn sàng để sử dụng trong sản xuất. Bạn có thể nhập cơ sở dữ liệu hiện có của mình vào đó hoặc tạo một cơ sở dữ liệu mới. Bạn có thể sử dụng tính năng Quản lý người dùng và lược đồ nếu giấy phép dùng thử chưa hết hạn.
Để hiểu cách ClusterControl định cấu hình Keepalived, hãy xem bài đăng trên blog này, Cách ClusterControl định cấu hình IP ảo và Điều gì sẽ xảy ra trong quá trình chuyển đổi dự phòng.
Kết nối với Cụm cơ sở dữ liệu
Từ quan điểm ứng dụng và ứng dụng khách, họ cần kết nối với 192.168.55.180 trên cổng 6033, đây là địa chỉ IP ảo nổi trên đầu của các bộ cân bằng tải. Ví dụ, cấu hình cơ sở dữ liệu Wordpress sẽ như thế này:
/** The name of the database for WordPress */
define( 'DB_NAME', 'wp_myblog' );
/** MySQL database username */
define( 'DB_USER', 'wp_myblog' );
/** MySQL database password */
define( 'DB_PASSWORD', 'mysecr3t' );
/** MySQL hostname - virtual IP address with ProxySQL load-balanced port*/
define( 'DB_HOST', '192.168.55.180:6033' );
Nếu bạn muốn truy cập trực tiếp vào cụm cơ sở dữ liệu, bỏ qua trình cân bằng tải, bạn chỉ có thể kết nối với cổng 3306 của máy chủ cơ sở dữ liệu. Điều này thường được yêu cầu bởi nhân viên DBA để quản trị, quản lý và khắc phục sự cố. Với ClusterControl, hầu hết các hoạt động này có thể được thực hiện trực tiếp từ giao diện người dùng.
Lời kết
Như đã trình bày ở trên, việc triển khai một cụm cơ sở dữ liệu không còn là một nhiệm vụ khó khăn nữa. Sau khi được triển khai, có một bộ đầy đủ các tính năng giám sát miễn phí cũng như các tính năng thương mại để quản lý sao lưu, chuyển đổi dự phòng / phục hồi và các tính năng khác. Việc triển khai nhanh chóng các loại cấu trúc liên kết cụm / sao chép khác nhau có thể hữu ích khi đánh giá các giải pháp cơ sở dữ liệu có tính khả dụng cao và cách chúng phù hợp với môi trường cụ thể của bạn.