ProxySQL là trình cân bằng tải dành riêng cho MySQL đi kèm với nhiều tính năng bao gồm, nhưng không giới hạn ở chuyển hướng truy vấn, bộ nhớ đệm truy vấn hoặc định hình lưu lượng. Nó có thể được sử dụng để dễ dàng thiết lập truy vấn phân chia đọc-ghi và chuyển hướng đến các nút phụ trợ riêng biệt. Kết quả là, nó cung cấp nhiều lý do thuyết phục để sử dụng. Mặt khác, HAProxy là một công cụ cân bằng tải tuyệt vời nhưng nó không dành riêng cho cơ sở dữ liệu và trong khi nó có thể được sử dụng, nó không thể thực sự so sánh về mặt tính năng với ProxySQL. Đây có thể là lý do cho các môi trường vẫn dựa vào HAProxy cố gắng chuyển sang ProxySQL.
Trong bài đăng blog ngắn này, chúng tôi sẽ chia sẻ một số đề xuất về quá trình di chuyển.
Lập kế hoạch nâng cấp của bạn
Điều này khá rõ ràng và không nên nghi ngờ gì, nhưng chúng tôi vẫn muốn có nó bằng văn bản. Lập kế hoạch nâng cấp của bạn. Đảm bảo rằng bạn đã quen thuộc với quy trình, rằng bạn đã thử nghiệm mọi thứ một cách rộng rãi. Thiết lập môi trường thử nghiệm trong đó bạn có thể xác minh các phương pháp nâng cấp khác nhau và quyết định phương pháp nào phù hợp nhất với bạn.
Kiểm tra Đọc / Ghi Tách trong ProxySQL nếu bạn cân nhắc sử dụng nó
Tùy thuộc vào yêu cầu của bạn, bạn có thể muốn xem xét sử dụng phân chia đọc / ghi trong ProxySQL. Đây có lẽ là một trong những lý do thuyết phục nhất để nâng cấp. Thay vì triển khai nó ở phía ứng dụng (hoặc không thực hiện nó nếu bạn không thể thực hiện nó trong ứng dụng), bạn có thể dựa vào ProxySQL để thực hiện phân chia đọc / ghi cho bạn. Việc thiết lập rất dễ dàng, đặc biệt nếu bạn triển khai ProxySQL bằng ClusterControl - nó diễn ra khá tự động.
![](http://www.sqldat.com/article/uploadfiles/202205/2022051214314114.png)
Miễn là bạn không sử dụng các giao dịch ngầm định, ClusterControl sẽ thiết lập phân tách đọc / ghi cho bạn bằng cách sử dụng một bộ quy tắc truy vấn:
![](http://www.sqldat.com/article/uploadfiles/202205/2022051214314331.png)
Mặc dù việc thực hiện phân tách đọc / ghi rất đơn giản, bạn nên hãy thận trọng khi bạn định làm như vậy. Các ứng dụng có thể dựa vào một số chức năng không thực sự hoạt động hiệu quả trong ProxySQL. Trong hầu hết các trường hợp, cấu hình bổ sung sẽ cho phép bạn hưởng lợi từ tính năng này nhưng điều rất quan trọng trong giai đoạn thử nghiệm là xác định xem ứng dụng của bạn có hoạt động hay không hay bạn cần thêm một số cấu hình tùy chỉnh. Đặc biệt, các phần phức tạp là vấn đề đọc-sau-ghi - trong trường hợp đó, bạn có thể phải định cấu hình lại ProxySQL để vô hiệu hóa ghép kênh kết nối cho một số truy vấn.
Quên về Tệp Cấu hình trong ProxySQL
Đây là một trong những điều gây ngạc nhiên cho những người mới sử dụng ProxySQL. Nó không thực sự sử dụng các tệp cấu hình. Có một, có, nhưng nó hoạt động như một cách để khởi động ProxySQL trong lần khởi động đầu tiên. ProxySQL sử dụng cơ sở dữ liệu SQLite có chứa cấu hình của nó và cách thích hợp để thực hiện bất kỳ thay đổi cấu hình nào là thông qua máy khách MySQL được kết nối với cổng quản trị của ProxySQL. Từ đó, bạn có thể thực hiện các thay đổi cấu hình trong thời gian chạy mà không cần khởi động lại ProxySQL.
Tất nhiên, giao diện người dùng ClusterControl cũng cho phép bạn định cấu hình lại ProxySQL:
![](http://www.sqldat.com/article/uploadfiles/202205/2022051214314393.png)
![](http://www.sqldat.com/article/uploadfiles/202205/2022051214314436.png)
Mẫu Triển khai ProxySQL
Có hai cách chính mà bạn muốn triển khai ProxySQL. Bạn có thể sử dụng một máy chủ chuyên dụng để triển khai ProxySQL trên:
![](http://www.sqldat.com/article/uploadfiles/202205/2022051214314508.png)
Hoặc bạn có thể kết hợp ProxySQL với các máy chủ ứng dụng:
![](http://www.sqldat.com/article/uploadfiles/202205/2022051214314672.png)
Điều này cho phép ứng dụng của bạn kết nối với phiên bản ProxySQL cục bộ bằng Unix socket, hiệu suất tốt hơn so với sử dụng kết nối TCP từ xa. Nó cũng đơn giản hóa việc thiết lập - không cần phải triển khai Keepalived hoặc một số nhà cung cấp IP ảo khác để cân bằng tải trên các phiên bản ProxySQL. Ứng dụng chỉ kết nối với ProxySQL cục bộ và đó là khá nhiều.
Sử dụng Cụm ProxySQL để Triển khai Lớn hơn
Đảm bảo các phiên bản ProxySQL của bạn luôn chứa cùng một cấu hình có thể là một thách thức, đặc biệt nếu số lượng của chúng lớn. Có rất nhiều cách để đối phó với những thách thức như vậy - Ansible / Chef / Puppet, shell script, v.v. Chúng tôi khuyên bạn nên dựa vào giải pháp tích hợp sẵn - Cụm ProxySQL. Chỉ với một vài thay đổi cấu hình, bạn có thể định cấu hình các nút ProxySQL để tạo thành một cụm trong đó thay đổi cấu hình trên một trong các nút sẽ được phổ biến trên tất cả các thành viên của cụm.
Tinker Với SO_REUSEPORT để Chuyển đổi Bộ cân bằng Tải Duyên dáng
Một trong những phần thách thức hơn có thể là đảm bảo rằng bạn sẽ chuyển lưu lượng từ HAProxy sang ProxySQL theo cách giảm thiểu tác động đến ứng dụng. Thông thường, bạn sẽ phải thay đổi ít nhất một cài đặt - tên máy chủ hoặc cổng mà ứng dụng sẽ kết nối. Tùy thuộc vào môi trường của bạn, điều này có thể không lý tưởng, đặc biệt nếu cấu hình kết nối cơ sở dữ liệu được tích hợp sẵn trong ứng dụng. Rất nhiều, nó sẽ yêu cầu thực hiện một sự thay đổi trong cơ sở mã và đưa một mã mới vào quá trình sản xuất. Không phải là giao dịch lớn nhất nhưng bạn có thể làm tốt hơn thế.
Phần thú vị là cả ProxySQL và các phiên bản HAProxy gần đây (bắt đầu từ 1.8) đều có thể sử dụng SO_REUSEPORT. Tùy chọn socket này có sẵn trong Linux bắt đầu từ hạt nhân 3.9 và nó cho phép nhiều tiến trình chia sẻ cùng một cổng. ProxySQL có thể sử dụng nó để nâng cấp duyên dáng giữa các phiên bản ProxySQL, HAProxy sử dụng nó để tải lại cấu hình mà không có bất kỳ tác động nào đến ứng dụng. Điều thú vị là có thể định cấu hình ProxySQL để chia sẻ cổng với HAProxy để di chuyển liền mạch giữa hai bộ cân bằng tải đó.
Có một số điều bạn phải cân nhắc khi cố gắng thực hiện việc này - trước tiên, ProxySQL không sử dụng tùy chọn này theo mặc định, bạn phải thêm cờ -r vào ProxySQL khi khởi động. Bạn có thể làm điều đó bằng cách chỉnh sửa tệp đơn vị hệ thống ProxySQL:
[email protected]:~# systemctl edit proxysql --full
và thay đổi chỉ thị ExecStart thành:
ExecStart=/usr/bin/proxysql -c /etc/proxysql.cnf -r
Một hạn chế khác mà bạn nên biết trong Linux là chỉ các quy trình được khởi động bởi cùng một ID người dùng mới có thể chia sẻ cổng. Điều này có nghĩa là bạn sẽ phải cấu hình lại ProxySQL để được thực thi với tư cách là người dùng “haproxy”.
Như thường lệ, bạn có thể muốn chạy thử nghiệm trước khi cố gắng thực hiện thao tác này trong môi trường sản xuất. Bạn hoàn toàn có thể đạt được thành tích này nhưng bạn nên thận trọng và kiểm tra kỹ để đảm bảo rằng điều đó sẽ không ảnh hưởng đến quá trình sản xuất của bạn do một số loại cấu hình không chuẩn liên quan đến môi trường của bạn.
Chúng tôi hy vọng blog ngắn này sẽ cung cấp cho bạn một số thông tin chi tiết về quá trình di chuyển từ HAProxy sang ProxySQL. Đối với phần phụ trợ cơ sở dữ liệu, thay đổi này sẽ rất có lợi, ngay cả khi phần chuẩn bị có thể tốn nhiều thời gian. Nếu bạn trải qua quá trình kiểm tra thích hợp, quá trình di chuyển cuối cùng sẽ khá đơn giản và an toàn.