Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sử dụng tự động hóa để tăng tốc độ kiểm tra phát hành trên Galera Cluster With ClusterControl

Kiểm tra bản phát hành thường là một trong những bước trong toàn bộ quá trình triển khai. Bạn viết mã, sau đó bạn xác minh xem nó hoạt động như thế nào trên môi trường dàn dựng và sau đó, cuối cùng, bạn triển khai mã mới trên phiên bản sản xuất. Cơ sở dữ liệu là nội bộ của bất kỳ loại ứng dụng nào và do đó, điều quan trọng là phải xác minh các thay đổi liên quan đến cơ sở dữ liệu thay đổi ứng dụng như thế nào. Có thể xác minh nó bằng một số cách; một trong số chúng sẽ là sử dụng một bản sao chuyên dụng. Hãy xem cách nó có thể được thực hiện.

Rõ ràng, bạn không muốn quy trình này là thủ công - nó phải là một phần của quy trình CI / CD của công ty bạn. Tùy thuộc vào ứng dụng, môi trường và quy trình chính xác mà bạn có, bạn có thể sử dụng các bản sao được tạo đặc biệt hoặc các bản sao luôn là một phần của môi trường cơ sở dữ liệu.

Cách Galera Cluster hoạt động là nó xử lý các thay đổi lược đồ theo một cách cụ thể. Có thể thực hiện một thay đổi lược đồ trên một nút duy nhất trong cụm nhưng nó rất phức tạp, vì nó không hỗ trợ tất cả các thay đổi lược đồ có thể có và nó sẽ ảnh hưởng đến quá trình sản xuất nếu có sự cố. Một nút như vậy sẽ phải được xây dựng lại hoàn toàn bằng cách sử dụng SST, có nghĩa là một trong các nút Galera còn lại sẽ phải hoạt động như một nhà tài trợ và chuyển tất cả dữ liệu của nó qua mạng.

Một giải pháp thay thế sẽ là sử dụng một bản sao hoặc thậm chí toàn bộ Cụm Galera bổ sung hoạt động như một bản sao. Rõ ràng, quá trình này phải được tự động hóa để có thể đưa nó vào quá trình phát triển. Có nhiều cách để làm điều này:tập lệnh hoặc nhiều công cụ điều phối cơ sở hạ tầng như Ansible, Chef, Puppet hoặc Salt stack. Chúng tôi sẽ không mô tả chi tiết về chúng, nhưng chúng tôi muốn bạn chỉ ra các bước cần thiết để toàn bộ quy trình hoạt động bình thường và chúng tôi sẽ để việc triển khai thành một trong những công cụ cho bạn.

Tự động kiểm tra bản phát hành

Trước hết, chúng tôi muốn có thể triển khai một cơ sở dữ liệu mới một cách dễ dàng. Nó phải được cung cấp cùng với dữ liệu gần đây và điều này có thể được thực hiện theo nhiều cách - bạn có thể sao chép dữ liệu từ cơ sở dữ liệu sản xuất vào máy chủ thử nghiệm; đó là điều đơn giản nhất để làm. Ngoài ra, bạn có thể sử dụng bản sao lưu gần đây nhất - cách tiếp cận như vậy có thêm lợi ích khi thử nghiệm khôi phục bản sao lưu. Xác minh sao lưu là điều bắt buộc phải có trong bất kỳ loại triển khai nghiêm túc nào và việc xây dựng lại thiết lập thử nghiệm là một cách tuyệt vời để kiểm tra lại hoạt động của quá trình khôi phục của bạn. Nó cũng giúp bạn định thời gian cho quá trình khôi phục - biết mất bao lâu để khôi phục bản sao lưu của bạn giúp đánh giá chính xác tình huống trong một tình huống khôi phục sau thảm họa.

Sau khi dữ liệu được cung cấp trong cơ sở dữ liệu, bạn có thể muốn thiết lập nút đó như một bản sao của cụm chính của mình. Nó có ưu và nhược điểm của nó. Nếu bạn có thể thực thi lại tất cả lưu lượng truy cập của mình đến nút độc lập, điều đó sẽ hoàn hảo - trong trường hợp đó, không cần thiết lập bản sao. Một số trình cân bằng tải, như ProxySQL, cho phép bạn phản chiếu lưu lượng và gửi bản sao của nó đến một vị trí khác. Mặt khác, nhân rộng là điều tốt nhất tiếp theo. Có, bạn không thể thực hiện ghi trực tiếp trên nút đó, điều này buộc bạn phải lập kế hoạch cách bạn sẽ thực hiện lại các truy vấn vì cách tiếp cận đơn giản nhất là chỉ trả lời nó sẽ không hoạt động. Mặt khác, tất cả các lần ghi cuối cùng sẽ được thực thi thông qua chuỗi SQL, vì vậy bạn chỉ phải lập kế hoạch xử lý các truy vấn SELECT.

Tùy thuộc vào sự thay đổi chính xác, bạn có thể muốn kiểm tra quá trình thay đổi giản đồ. Các thay đổi lược đồ khá phổ biến được thực hiện và chúng thậm chí có thể có tác động nghiêm trọng đến hiệu suất trên cơ sở dữ liệu. Vì vậy, điều quan trọng là phải xác minh chúng trước khi áp dụng chúng vào sản xuất. Chúng tôi muốn xem xét thời gian cần thiết để thực hiện thay đổi và xác minh xem thay đổi có thể được áp dụng trên các nút riêng biệt hay được yêu cầu thực hiện thay đổi trên toàn bộ cấu trúc liên kết cùng một lúc. Điều này sẽ cho chúng tôi biết quy trình mà chúng tôi nên sử dụng cho một thay đổi giản đồ nhất định.

Sử dụng ClusterControl để cải thiện quá trình tự động hóa các bài kiểm tra phát hành

ClusterControl đi kèm với một tập hợp các tính năng có thể được sử dụng để giúp bạn tự động hóa các thử nghiệm phát hành. Hãy xem những gì nó cung cấp. Để làm rõ hơn, các tính năng chúng tôi sắp trình bày có sẵn theo một số cách. Cách đơn giản nhất là sử dụng giao diện người dùng, nhưng điều bạn muốn làm là không cần thiết nếu bạn có tự động hóa trong đầu. Có hai cách khác để thực hiện:Giao diện dòng lệnh với ClusterControl và API RPC. Trong cả hai trường hợp, công việc có thể được kích hoạt từ các tập lệnh bên ngoài, cho phép bạn cắm chúng vào các quy trình CI / CD hiện có của mình. Nó cũng sẽ giúp bạn tiết kiệm nhiều thời gian, vì việc triển khai cụm có thể chỉ là vấn đề thực hiện một lệnh thay vì thiết lập nó theo cách thủ công.

Triển khai cụm kiểm tra

Trước hết, ClusterControl đi kèm với một tùy chọn để triển khai một cụm mới và cung cấp cho nó dữ liệu từ cơ sở dữ liệu hiện có. Chỉ riêng tính năng này đã cho phép bạn dễ dàng triển khai cấp phép máy chủ dàn.

Như bạn có thể thấy, miễn là bạn đã tạo bản sao lưu, bạn có thể tạo một cụm mới và cung cấp cho nó bằng cách sử dụng dữ liệu từ bản sao lưu:

Như chúng ta có thể thấy, có một bản tóm tắt nhanh về những gì sẽ xảy ra. Nếu bạn nhấp vào Tiếp tục, bạn sẽ tiếp tục xa hơn.

Bước tiếp theo, bạn nên xác định kết nối SSH - kết nối này phải có trước khi ClusterControl có thể triển khai các nút.

Cuối cùng, bạn phải chọn (trong số những người khác) nhà cung cấp, phiên bản và tên máy chủ của các nút mà bạn muốn sử dụng trong cụm. Chỉ vậy thôi.

Lệnh CLI sẽ thực hiện điều tương tự sẽ giống như sau:

s9s cluster --create --cluster-type=galera --nodes="10.0.0.156;10.0.0.157;10.0.0.158" --vendor=percona --cluster-name=PXC --provider-version=8.0 --os-user=root --os-key-file=/root/.ssh/id_rsa --backup-id=6

Định cấu hình ProxySQL để phản chiếu lưu lượng truy cập

Nếu chúng tôi đã triển khai một cụm, chúng tôi có thể muốn gửi lưu lượng sản xuất đến nó để xác minh cách lược đồ mới xử lý lưu lượng hiện có. Một cách để làm điều này là sử dụng ProxySQL.

Quá trình này rất dễ dàng. Đầu tiên, bạn nên thêm các nút vào ProxySQL. Chúng phải thuộc về một nhóm máy chủ riêng biệt chưa được sử dụng. Đảm bảo rằng người dùng giám sát ProxySQL sẽ có thể truy cập chúng.

Sau khi hoàn tất và bạn đã định cấu hình tất cả (hoặc một số) nút của mình trong nhóm máy chủ, bạn có thể chỉnh sửa quy tắc truy vấn và xác định Nhóm máy chủ nhân bản (nó có sẵn trong các tùy chọn nâng cao). Nếu bạn muốn làm điều đó cho tất cả lưu lượng truy cập, bạn có thể muốn chỉnh sửa tất cả các quy tắc truy vấn của mình theo cách này. Nếu bạn chỉ muốn phản chiếu các truy vấn CHỌN, bạn nên chỉnh sửa các quy tắc truy vấn thích hợp. Sau khi hoàn tất, cụm dàn của bạn sẽ bắt đầu nhận được lưu lượng truy cập sản xuất.

Triển khai cụm làm nô lệ

Như chúng ta đã thảo luận trước đó, một giải pháp thay thế sẽ là tạo một cụm mới sẽ hoạt động như một bản sao của thiết lập hiện có. Với cách tiếp cận như vậy, chúng ta có thể kiểm tra tất cả các lần ghi tự động bằng cách sử dụng bản sao. SELECT có thể được kiểm tra bằng cách sử dụng phương pháp mà chúng tôi đã mô tả ở trên - sao chép thông qua ProxySQL.

Việc triển khai cụm nô lệ khá đơn giản.

Chọn công việc Tạo Cụm nô lệ.

Bạn phải quyết định cách bạn muốn có bộ sao chép. Bạn có thể chuyển tất cả dữ liệu từ nút chính sang các nút mới.

Thay vào đó, bạn có thể sử dụng bản sao lưu hiện có để cung cấp cụm mới. Điều này sẽ giúp giảm khối lượng công việc trên nút chính - thay vì chuyển tất cả dữ liệu, chỉ các giao dịch được thực hiện giữa thời gian sao lưu đã được tạo và thời điểm bản sao đã được thiết lập sẽ phải được chuyển.

Việc còn lại là làm theo trình hướng dẫn triển khai tiêu chuẩn, xác định kết nối SSH, phiên bản, nhà cung cấp, máy chủ lưu trữ, v.v. Khi nó được triển khai, bạn sẽ thấy cụm trên danh sách.

Giải pháp thay thế cho giao diện người dùng là thực hiện điều này thông qua RPC.

{
  "command": "create_cluster",
  "job_data": {
    "cluster_name": "",
    "cluster_type": "galera",
    "company_id": null,
    "config_template": "my.cnf.80-pxc",
    "data_center": 0,
    "datadir": "/var/lib/mysql",
    "db_password": "pass",
    "db_user": "root",
    "disable_firewall": true,
    "disable_selinux": true,
    "enable_mysql_uninstall": true,
    "generate_token": true,
    "install_software": true,
    "port": "3306",
    "remote_cluster_id": 6,
    "software_package": "",
    "ssh_keyfile": "/root/.ssh/id_rsa",
    "ssh_port": "22",
    "ssh_user": "root",
    "sudo_password": "",
    "type": "mysql",
    "user_id": 5,
    "vendor": "percona",
    "version": "8.0",
    "nodes": [
      {
        "hostname": "10.0.0.155",
        "hostname_data": "10.0.0.155",
        "hostname_internal": "",
        "port": "3306"
      },
      {
        "hostname": "10.0.0.159",
        "hostname_data": "10.0.0.159",
        "hostname_internal": "",
        "port": "3306"
      },
      {
        "hostname": "10.0.0.160",
        "hostname_data": "10.0.0.160",
        "hostname_internal": "",
        "port": "3306"
      }
    ],
    "with_tags": []
  }
}

Tiến lên

Nếu bạn muốn tìm hiểu thêm về các cách bạn có thể tích hợp các quy trình của mình với ClusterControl, chúng tôi muốn hướng dẫn bạn đến tài liệu, nơi chúng tôi có toàn bộ phần về phát triển các giải pháp trong đó ClusterControl đóng vai trò vai trò quan trọng:

https://docs.severalnines.com/docs/clustercontrol/developer-guide/cmon-rpc/

https://docs.severalnines.com/docs/clustercontrol/user-guide-cli/

Chúng tôi hy vọng bạn thấy blog ngắn này có nhiều thông tin và hữu ích. Nếu bạn có bất kỳ câu hỏi nào liên quan đến việc tích hợp ClusterControl vào môi trường của mình, vui lòng liên hệ với chúng tôi và chúng tôi sẽ cố gắng hết sức để giúp bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Hàm ELT () và FILED () để trích xuất vị trí chỉ mục từ danh sách

  2. JSON_PRETTY () - Định dạng tài liệu JSON để dễ đọc hơn trong MySQL

  3. giao dịch mysql - quay trở lại bất kỳ ngoại lệ nào

  4. Làm cách nào để thay đổi thời gian chờ kết nối Mysql mặc định khi kết nối qua python?

  5. Cách chuyển đổi cơ sở dữ liệu MySQL sang mã hóa UTF-8