Đám mây cung cấp các môi trường rất linh hoạt để làm việc. Bạn có thể dễ dàng mở rộng quy mô nó lên và xuống bằng cách thêm hoặc bớt các nút. Nếu có nhu cầu, bạn có thể dễ dàng tạo bản sao môi trường của mình. Điều này có thể được sử dụng cho các quy trình như nâng cấp, kiểm tra tải, khôi phục thảm họa. Vấn đề chính mà bạn phải giải quyết là các ứng dụng phải kết nối với cơ sở dữ liệu theo một cách nào đó và việc thiết lập linh hoạt có thể phức tạp đối với cơ sở dữ liệu - đặc biệt là với thiết lập master-slave. May mắn thay, có một số tùy chọn để làm cho quá trình này dễ dàng hơn.
Một cách là sử dụng proxy cơ sở dữ liệu. Có một số proxy để lựa chọn, nhưng trong bài đăng trên blog này, chúng tôi sẽ sử dụng ProxySQL, một proxy nổi tiếng có sẵn cho MySQL và MariaDB. Chúng tôi sẽ chỉ ra cách bạn có thể sử dụng nó để di chuyển lưu lượng truy cập giữa các nút MySQL một cách hiệu quả mà không có tác động rõ ràng đối với ứng dụng. Chúng tôi cũng sẽ giải thích một số hạn chế và nhược điểm của phương pháp này.
Thiết lập Đám mây Ban đầu
Đầu tiên, hãy thảo luận về cách thiết lập. Chúng tôi sẽ sử dụng các phiên bản AWS EC2 cho môi trường của chúng tôi. Vì chúng tôi chỉ đang thử nghiệm nên chúng tôi không thực sự quan tâm đến tính khả dụng cao ngoài những gì chúng tôi muốn chứng minh là khả thi - các thay đổi tổng thể liền mạch. Do đó, chúng tôi sẽ sử dụng một nút ứng dụng và một nút ProxySQL duy nhất. Theo các phương pháp hay, chúng tôi sẽ sắp xếp ProxySQL trên nút ứng dụng và ứng dụng sẽ được định cấu hình để kết nối với ProxySQL thông qua Unix socket. Điều này sẽ giảm chi phí liên quan đến kết nối TCP và tăng cường bảo mật - lưu lượng từ ứng dụng đến proxy sẽ không rời khỏi phiên bản cục bộ, chỉ để lại kết nối ProxySQL -> MySQL để mã hóa. Một lần nữa, vì đây là một thử nghiệm đơn giản, chúng tôi sẽ không thiết lập SSL. Trong môi trường sản xuất, bạn muốn làm điều đó, ngay cả khi bạn sử dụng VPC.
Môi trường sẽ giống như trong sơ đồ dưới đây:
Là ứng dụng, chúng tôi sẽ sử dụng Sysbench - một chương trình điểm chuẩn tổng hợp cho MySQL . Nó có một tùy chọn để vô hiệu hóa và cho phép sử dụng các giao dịch, mà chúng tôi sẽ sử dụng để chứng minh cách ProxySQL xử lý chúng.
Cài đặt Cụm nhân bản MySQL bằng ClusterControl
Để triển khai nhanh chóng và hiệu quả, chúng tôi sẽ sử dụng ClusterControl để triển khai thiết lập sao chép MySQL cho chúng tôi. Việc cài đặt ClusterControl chỉ cần một vài bước. Chúng tôi sẽ không đi vào chi tiết ở đây nhưng bạn nên mở trang web của chúng tôi, đăng ký và cài đặt ClusterControl sẽ khá đơn giản. Xin lưu ý rằng bạn cần thiết lập SSH không cần mật khẩu giữa phiên bản ClusterControl và tất cả các nút mà chúng tôi sẽ quản lý bằng nó.
Sau khi cài đặt xong ClusterControl, bạn có thể đăng nhập. Bạn sẽ thấy một trình hướng dẫn triển khai:
Vì chúng tôi đã có các phiên bản chạy trên đám mây, do đó chúng tôi sẽ chỉ Tùy chọn "Triển khai". Chúng ta sẽ thấy màn hình sau:
Chúng tôi sẽ chọn MySQL Replication làm loại cụm và chúng tôi cần cung cấp kết nối thông tin chi tiết. Đó có thể là kết nối bằng người dùng root hoặc cũng có thể là người dùng sudo có hoặc không có mật khẩu.
Trong bước tiếp theo, chúng ta phải đưa ra một số quyết định. Chúng tôi sẽ sử dụng Máy chủ Percona cho MySQL trong phiên bản mới nhất của nó. Chúng tôi cũng phải xác định mật khẩu cho người dùng gốc trên các nút mà chúng tôi sẽ triển khai.
Trong bước cuối cùng, chúng ta phải xác định cấu trúc liên kết - chúng ta sẽ làm với những gì chúng tôi đã đề xuất lúc đầu - một chủ nhân và ba nô lệ.
ClusterControl sẽ bắt đầu triển khai - chúng ta có thể theo dõi trong tab Hoạt động, như được hiển thị trên ảnh chụp màn hình ở trên.
Sau khi quá trình triển khai hoàn tất, chúng ta có thể thấy cụm trong danh sách cụm:
Cài đặt ProxySQL 2.0 bằng ClusterControl
Bước tiếp theo sẽ là triển khai ProxySQL. ClusterControl có thể làm điều này cho chúng tôi.
Chúng ta có thể thực hiện việc này trong Quản lý -> Bộ cân bằng tải.
Vì chúng tôi chỉ đang thử nghiệm mọi thứ, chúng tôi sẽ sử dụng lại cá thể ClusterControl cho ProxySQL và Sysbench. Trong cuộc sống thực, bạn có thể muốn sử dụng máy chủ ứng dụng "thực" của mình. Nếu bạn không thể tìm thấy nó trong menu thả xuống, bạn luôn có thể viết địa chỉ máy chủ (IP hoặc tên máy chủ) bằng tay.
Chúng tôi cũng muốn xác định thông tin đăng nhập để giám sát và quản trị người dùng. Chúng tôi cũng đã kiểm tra kỹ rằng ProxySQL 2.0 sẽ được triển khai (bạn luôn có thể thay đổi nó thành 1.4.x nếu cần).
Ở phần dưới cùng của trình hướng dẫn, chúng tôi sẽ xác định người dùng sẽ là được tạo trong cả MySQL và ProxySQL. Nếu bạn có một ứng dụng hiện có, bạn có thể muốn sử dụng một người dùng hiện có. Nếu bạn sử dụng nhiều người dùng cho ứng dụng của mình, bạn luôn có thể nhập phần còn lại của họ sau này, sau khi ProxySQL sẽ được triển khai.
Chúng tôi muốn đảm bảo rằng tất cả các phiên bản MySQL sẽ được định cấu hình trong ProxySQL. Chúng tôi sẽ sử dụng các giao dịch rõ ràng để chúng tôi đặt chuyển đổi cho phù hợp. Đây là tất cả những gì chúng tôi cần làm - phần còn lại là nhấp vào nút “Triển khai ProxySQL” và để ClusterControl thực hiện công việc của nó.
Khi cài đặt xong, ProxySQL sẽ hiển thị trên danh sách các nút trong cụm. Như bạn có thể thấy trên ảnh chụp màn hình ở trên, nó đã phát hiện cấu trúc liên kết và các nút phân tán trên các nhóm máy chủ người đọc và người viết.
Cài đặt Sysbench
Bước cuối cùng sẽ là tạo “ứng dụng” của chúng tôi bằng cách cài đặt Sysbench. Quá trình này khá đơn giản. Đầu tiên, chúng tôi phải cài đặt các điều kiện tiên quyết, thư viện và công cụ cần thiết để biên dịch Sysbench:
[email protected]:~# apt install git automake libtool make libssl-dev pkg-config libmysqlclient-dev
Sau đó, chúng tôi muốn sao chép kho lưu trữ sysbench:
[email protected]:~# git clone https://github.com/akopytov/sysbench.git
Cuối cùng, chúng tôi muốn biên dịch và cài đặt Sysbench:
[email protected]:~# cd sysbench/
[email protected]:~/sysbench# ./autogen.sh && ./configure && make && make install
Đây là nó, Sysbench đã được cài đặt. Bây giờ chúng ta cần tạo một số dữ liệu. Để làm được điều đó, lúc đầu, chúng ta cần tạo một lược đồ. Chúng tôi sẽ kết nối với ProxySQL cục bộ và thông qua đó, chúng tôi sẽ tạo một lược đồ ‘sbtest’ trên bản chính. Xin lưu ý rằng chúng tôi đã sử dụng Unix socket để kết nối với ProxySQL.
[email protected]:~/sysbench# mysql -S /tmp/proxysql.sock -u sbtest -psbtest
mysql> CREATE DATABASE sbtest;
Query OK, 1 row affected (0.01 sec)
Bây giờ chúng ta có thể sử dụng sysbench để điền dữ liệu vào cơ sở dữ liệu. Một lần nữa, chúng tôi sử dụng Unix socket để kết nối với proxy:
[email protected]:~# sysbench /root/sysbench/src/lua/oltp_read_write.lua --threads=4 --events=0 --time=3600 --mysql-socket=/tmp/proxysql.sock --mysql-user=sbtest --mysql-password=sbtest --tables=32 --report-interval=1 --skip-trx=on --table-size=100000 --db-ps-mode=disable prepare
Khi dữ liệu đã sẵn sàng, chúng tôi có thể tiến hành các thử nghiệm của mình.
Kết luận
Trong phần thứ hai của blog này, chúng ta sẽ thảo luận về việc ProxySQL xử lý các kết nối, chuyển đổi dự phòng và các cài đặt của nó có thể giúp chúng ta quản lý master switch theo cách ít xâm phạm ứng dụng nhất.