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

Tính khả dụng cao của cơ sở dữ liệu cho Camunda BPM sử dụng MySQL hoặc MariaDB Galera Cluster

Camunda BPM là một nền tảng tự động hóa quy trình làm việc và quyết định mã nguồn mở. Camunda BPM cung cấp các công cụ để tạo các mô hình quy trình và quyết định, vận hành các mô hình đã triển khai trong quá trình sản xuất và cho phép người dùng thực hiện các nhiệm vụ quy trình công việc được giao cho họ.

Theo mặc định, Camunda đi kèm với một cơ sở dữ liệu nhúng có tên là H2, hoạt động khá hiệu quả trong môi trường Java với bộ nhớ tương đối nhỏ. Tuy nhiên, khi nói đến khả năng mở rộng và tính khả dụng cao, có những phần mềm hỗ trợ cơ sở dữ liệu khác có thể phù hợp hơn.

Trong bài đăng trên blog này, chúng tôi sẽ triển khai Camunda BPM 7.10 Community Edition trên Linux, tập trung vào việc đạt được tính khả dụng cao của cơ sở dữ liệu. Camunda hỗ trợ các cơ sở dữ liệu chính thông qua trình điều khiển JDBC, cụ thể là Oracle, DB2, MySQL, MariaDB và PostgreSQL. Blog này chỉ tập trung vào MySQL và MariaDB Galera Cluster, với các cách triển khai khác nhau - một cái với ProxySQL làm bộ cân bằng tải cơ sở dữ liệu và cái kia sử dụng trình điều khiển JDBC để kết nối với nhiều phiên bản cơ sở dữ liệu. Lưu ý rằng bài viết này không đề cập đến tính khả dụng cao cho chính ứng dụng Camunda.

Điều kiện tiên quyết

Camunda BPM chạy trên Java. Trong hộp CentOS 7 của chúng tôi, chúng tôi phải cài đặt JDK và tùy chọn tốt nhất là sử dụng cái từ Oracle và bỏ qua việc sử dụng các gói OpenJDK được cung cấp trong kho lưu trữ. Trên máy chủ ứng dụng nơi Camunda sẽ chạy, tải xuống Bộ phát triển Java SE (JDK) mới nhất từ ​​Oracle bằng cách gửi cookie chấp nhận:

$ wget --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/12+33/312335d836a34c7c8bba9d963e26dc23/jdk-12_linux-x64_bin.rpm

Cài đặt nó trên máy chủ:

$ yum localinstall jdk-12_linux-x64_bin.rpm

Xác minh bằng:

$ java --version
java 12 2019-03-19
Java(TM) SE Runtime Environment (build 12+33)
Java HotSpot(TM) 64-Bit Server VM (build 12+33, mixed mode, sharing)

Tạo một thư mục mới và tải xuống Camunda Community cho Apache Tomcat từ trang tải xuống chính thức:

$ mkdir ~/camunda
$ cd ~/camunda
$ wget --content-disposition 'https://camunda.org/release/camunda-bpm/tomcat/7.10/camunda-bpm-tomcat-7.10.0.tar.gz'

Giải nén nó:

$ tar -xzf camunda-bpm-tomcat-7.10.0.tar.gz

Có một số phụ thuộc mà chúng tôi phải định cấu hình trước khi khởi động ứng dụng web Camunda. Điều này phụ thuộc vào nền tảng cơ sở dữ liệu đã chọn như cấu hình kho dữ liệu, trình kết nối cơ sở dữ liệu và môi trường CLASSPATH. Các phần tiếp theo giải thích các bước cần thiết cho MySQL Galera (sử dụng Percona XtraDB Cluster) và MariaDB Galera Cluster.

Lưu ý rằng các cấu hình hiển thị trong blog này dựa trên môi trường Apache Tomcat. Nếu bạn đang sử dụng JBOSS hoặc Wildfly, cấu hình kho dữ liệu sẽ khác một chút. Tham khảo tài liệu của Camunda để biết thêm chi tiết.

MySQL Galera Cluster (với ProxySQL và Keepalived)

Chúng tôi sẽ sử dụng ClusterControl để triển khai cụm Galera dựa trên MySQL với Percona XtraDB Cluster. Có một số hạn chế liên quan đến Galera được đề cập trong tài liệu Camunda xung quanh việc xử lý xung đột nhiều người viết của Galera và mức độ cô lập của InnoDB. Trong trường hợp bạn bị ảnh hưởng bởi những điều này, cách an toàn nhất là sử dụng cách tiếp cận một người viết, có thể đạt được với cấu hình nhóm máy chủ ProxySQL. Để không xảy ra lỗi duy nhất, chúng tôi sẽ triển khai hai phiên bản ProxySQL và gắn chúng với một địa chỉ IP ảo bởi Keepalived.

Sơ đồ sau minh họa kiến ​​trúc cuối cùng của chúng tôi:

Đầu tiên, triển khai Percona XtraDB Cluster 5.7 ba nút. Cài đặt ClusterControl, tạo khóa SSH và thiết lập SSH không mật khẩu từ máy chủ ClusterControl cho tất cả các nút (bao gồm cả ProxySQL). Trên nút ClusterControl, hãy thực hiện:

$ whoami
root
$ ssh-keygen -t rsa
$ for i in 192.168.0.21 192.168.0.22 192.168.0.23 192.168.0.11 192.168.0.12; do ssh-copy-id $i; done

Trước khi chúng tôi triển khai cụm của mình, chúng tôi phải sửa đổi tệp mẫu cấu hình MySQL mà ClusterControl sẽ sử dụng khi cài đặt máy chủ MySQL. Tên tệp mẫu là my57.cnf.galera và nằm dưới / usr / share / cmon / templates / trên máy chủ ClusterControl. Đảm bảo các dòng sau tồn tại trong phần [mysqld]:

[mysqld]
...
transaction-isolation=READ-COMMITTED
wsrep_sync_wait=7
...

Lưu tệp và chúng tôi sẵn sàng tiếp tục. Trên đây là các yêu cầu như đã nêu trong tài liệu của Camunda, đặc biệt là về cách ly giao dịch được hỗ trợ cho Galera. Biến wsrep_sync_wait được đặt thành 7 để thực hiện kiểm tra nhân quả trên toàn cụm cho ĐỌC (bao gồm CHỌN, HIỂN THỊ và BẮT ĐẦU hoặc BẮT ĐẦU GIAO DỊCH), CẬP NHẬT, XÓA, CHÈN và THAY THẾ các câu lệnh, đảm bảo rằng câu lệnh được thực thi trên một nút được đồng bộ hóa hoàn toàn. Hãy nhớ rằng giá trị khác 0 có thể làm tăng độ trễ.

Đi tới ClusterControl -> Deploy -> MySQL Galera và chỉ định các chi tiết sau (nếu không được đề cập, hãy sử dụng giá trị mặc định):

  • Người dùng SSH:root
  • Đường dẫn khóa SSH:/root/.ssh/id_rsa
  • Tên cụm:Percona XtraDB Cluster 5.7
  • Nhà cung cấp:Percona
  • Phiên bản:5.7
  • Mật khẩu quản trị / gốc:{chỉ định mật khẩu}
  • Thêm nút:192.168.0.21 (nhấn Enter), 192.168.0.22 (nhấn Enter), 192.168.0.23 (nhấn Enter)

Đảm bảo rằng bạn có tất cả các dấu tích màu xanh lá cây, cho biết ClusterControl có thể kết nối với nút mà không cần mật khẩu. Nhấp vào "Triển khai" để bắt đầu triển khai.

Tạo cơ sở dữ liệu, người dùng MySQL và mật khẩu trên một trong các nút cơ sở dữ liệu:

mysql> CREATE DATABASE camunda;
mysql> CREATE USER [email protected]'%' IDENTIFIED BY 'passw0rd';
mysql> GRANT ALL PRIVILEGES ON camunda.* TO [email protected]'%';

Hoặc từ giao diện ClusterControl, bạn có thể sử dụng Quản lý -> Lược đồ và Người dùng thay vào đó:

Sau khi cụm được triển khai, hãy cài đặt ProxySQL bằng cách đi tới ClusterControl -> Manage -> Load Balancer -> ProxySQL -> Deploy ProxySQL và nhập các chi tiết sau:

  • Địa chỉ máy chủ:192.168.0.11
  • Mật khẩu Quản trị:
  • Mật khẩu giám sát:
  • Người dùng DB:camunda
  • Mật khẩu DB:passw0rd
  • Bạn có đang sử dụng các giao dịch ngầm không?:Có

Lặp lại bước triển khai ProxySQL cho phiên bản ProxySQL thứ hai, bằng cách thay đổi Địa chỉ máy chủ giá trị thành 192.168.0.12. Địa chỉ IP ảo do Keepalived cung cấp yêu cầu ít nhất hai phiên bản ProxySQL được triển khai và chạy. Cuối cùng, triển khai địa chỉ IP ảo bằng cách đi tới ClusterControl -> Manage -> Load Balancer -> Keepalived và chọn cả hai nút ProxySQL và chỉ định địa chỉ IP ảo và giao diện mạng cho VIP nghe:

Phần phụ trợ cơ sở dữ liệu của chúng tôi hiện đã hoàn tất. Tiếp theo, nhập các tệp SQL vào Cụm Galera với tư cách là người dùng MySQL đã tạo. Trên máy chủ ứng dụng, đi tới thư mục "sql" và nhập chúng vào một trong các nút Galera (chúng tôi chọn 192.168.0.21):

$ cd ~/camunda/sql/create
$ yum install mysql #install mysql client
$ mysql -ucamunda -p -h192.168.0.21 camunda < mysql_engine_7.10.0.sql
$ mysql -ucamunda -p -h192.168.0.21 camunda < mysql_identity_7.10.0.sql

Camunda không cung cấp trình kết nối MySQL cho Java vì cơ sở dữ liệu mặc định của nó là H2. Trên máy chủ ứng dụng, tải xuống MySQL Connector / J từ trang tải xuống MySQL và sao chép tệp JAR vào thư mục bin Apache Tomcat:

$ wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.15.tar.gz
$ tar -xzf mysql-connector-java-8.0.15.tar.gz
$ cd mysql-connector-java-8.0.15
$ cp mysql-connector-java-8.0.15.jar ~/camunda/server/apache-tomcat-9.0.12/bin/

Sau đó, đặt biến môi trường CLASSPATH để bao gồm trình kết nối cơ sở dữ liệu. Mở setenv.sh bằng trình soạn thảo văn bản:

$ vim ~/camunda/server/apache-tomcat-9.0.12/bin/setenv.sh

Và thêm dòng sau:

export CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/mysql-connector-java-8.0.15.jar

Mở ~ / camunda / server / apache-tomcat-9.0.12 / conf / server.xml và thay đổi các dòng liên quan đến kho dữ liệu. Chỉ định địa chỉ IP ảo làm máy chủ MySQL trong chuỗi kết nối, với cổng ProxySQL 6033:

<Resource name="jdbc/ProcessEngine"
              ...
              driverClassName="com.mysql.jdbc.Driver" 
              defaultTransactionIsolation="READ_COMMITTED"
              url="jdbc:mysql://192.168.0.10:6033/camunda"
              username="camunda"  
              password="passw0rd"
              ...
/>

Cuối cùng, chúng tôi có thể bắt đầu dịch vụ Camunda bằng cách thực thi start-camunda.sh script:

$ cd ~/camunda
$ ./start-camunda.sh
starting camunda BPM platform on Tomcat Application Server
Using CATALINA_BASE:   ./server/apache-tomcat-9.0.12
Using CATALINA_HOME:   ./server/apache-tomcat-9.0.12
Using CATALINA_TMPDIR: ./server/apache-tomcat-9.0.12/temp
Using JRE_HOME:        /
Using CLASSPATH:       :./server/apache-tomcat-9.0.12/bin/mysql-connector-java-8.0.15.jar:./server/apache-tomcat-9.0.12/bin/bootstrap.jar:./server/apache-tomcat-9.0.12/bin/tomcat-juli.jar
Tomcat started.

Đảm bảo CLASSPATH hiển thị trong đầu ra bao gồm đường dẫn đến tệp MySQL Connector / J JAR. Sau khi quá trình khởi tạo hoàn tất, bạn có thể truy cập các ứng dụng web Camunda trên cổng 8080 tại http://192.168.0.8:8080/camunda/ . Tên người dùng mặc định là bản demo với mật khẩu 'demo':

Sau đó, bạn có thể xem các truy vấn nắm bắt được tiêu hóa từ Nodes -> ProxySQL -> Truy vấn hàng đầu , cho biết ứng dụng đang tương tác chính xác với Cụm Galera:

Không có phân tách đọc-ghi nào được định cấu hình cho ProxySQL. Camunda sử dụng "SET autocommit =0" trên mọi câu lệnh SQL để khởi tạo giao dịch và cách tốt nhất để ProxySQL xử lý điều này bằng cách gửi tất cả các truy vấn đến cùng một máy chủ phụ trợ của nhóm máy chủ đích. Đây là phương pháp an toàn nhất cùng với tính khả dụng tốt hơn. Tuy nhiên, tất cả các kết nối có thể kết thúc với một máy chủ duy nhất, vì vậy không có cân bằng tải.

MariaDB Galera

MariaDB Connector / J có thể xử lý nhiều chế độ kết nối - chuyển đổi dự phòng, tuần tự, sao chép và cực quang - nhưng Camunda chỉ hỗ trợ chuyển đổi dự phòng và tuần tự. Lấy từ tài liệu MariaDB Connector / J:

Chế độ Mô tả

tuần tự (khả dụng từ 1.3.0)
Chế độ này hỗ trợ chuyển đổi dự phòng kết nối trong môi trường đa chủ, chẳng hạn như MariaDB Galera Cluster. Chế độ này không hỗ trợ đọc cân bằng tải trên nô lệ. Trình kết nối sẽ cố gắng kết nối với các máy chủ theo thứ tự mà chúng được khai báo trong URL kết nối, vì vậy máy chủ khả dụng đầu tiên được sử dụng cho tất cả các truy vấn. Ví dụ:giả sử rằng URL kết nối như sau:
jdbc:mariadb:sequential:host1,host2,host3/testdb
Khi trình kết nối cố gắng kết nối, nó sẽ luôn thử host1 trước. Nếu máy chủ lưu trữ đó không khả dụng, thì nó sẽ thử máy chủ lưu trữ2. v.v ... Khi máy chủ bị lỗi, trình kết nối sẽ cố gắng kết nối lại với máy chủ theo thứ tự.
chuyển đổi dự phòng
(khả dụng từ 1.2.0)
Chế độ này hỗ trợ chuyển đổi dự phòng kết nối trong môi trường đa chủ, chẳng hạn như MariaDB Galera Cluster. Chế độ này không hỗ trợ đọc cân bằng tải trên nô lệ. Trình kết nối thực hiện cân bằng tải cho tất cả các truy vấn bằng cách chọn ngẫu nhiên một máy chủ từ URL kết nối cho mỗi kết nối, do đó, các truy vấn sẽ được cân bằng tải do kết quả được phân phối ngẫu nhiên trên tất cả các máy chủ.

Sử dụng chế độ "chuyển đổi dự phòng" tiềm ẩn nguy cơ bế tắc cao hơn, vì các bản ghi sẽ được phân phối cho tất cả các máy chủ phụ trợ gần như như nhau. Phương pháp tiếp cận một người viết là một cách an toàn để chạy, có nghĩa là sử dụng chế độ tuần tự sẽ thực hiện công việc khá tốt. Bạn cũng có thể bỏ qua tầng cân bằng tải trong kiến ​​trúc. Do đó với trình kết nối MariaDB Java, chúng ta có thể triển khai kiến ​​trúc của mình đơn giản như sau:

Trước khi chúng tôi triển khai cụm của mình, hãy sửa đổi tệp mẫu cấu hình MariaDB mà ClusterControl sẽ sử dụng khi cài đặt máy chủ MariaDB. Tên tệp mẫu là my.cnf.galera và nằm dưới / usr / share / cmon / templates / trên máy chủ ClusterControl. Đảm bảo các dòng sau tồn tại trong phần [mysqld]:

[mysqld]
...
transaction-isolation=READ-COMMITTED
wsrep_sync_wait=7
performance_schema = ON
...

Lưu tệp và chúng tôi sẵn sàng tiếp tục. Giải thích một chút, danh sách trên là các yêu cầu được nêu trong tài liệu của Camunda, đặc biệt là về cách ly giao dịch được hỗ trợ cho Galera. Biến wsrep_sync_wait được đặt thành 7 để thực hiện kiểm tra nhân quả trên toàn cụm cho ĐỌC (bao gồm CHỌN, HIỂN THỊ và BẮT ĐẦU hoặc BẮT ĐẦU GIAO DỊCH), CẬP NHẬT, XÓA, CHÈN và THAY THẾ các câu lệnh, đảm bảo rằng câu lệnh được thực thi trên một nút được đồng bộ hóa hoàn toàn. Hãy nhớ rằng giá trị khác 0 có thể làm tăng độ trễ. Bật giản đồ hiệu suất là tùy chọn cho tính năng giám sát truy vấn ClusterControl.

Bây giờ chúng ta có thể bắt đầu quá trình triển khai cụm. Cài đặt ClusterControl, tạo khóa SSH và thiết lập SSH không cần mật khẩu từ máy chủ ClusterControl cho tất cả các nút Galera. Trên nút ClusterControl, hãy thực hiện:

$ whoami
root
$ ssh-keygen -t rsa
$ for i in 192.168.0.41 192.168.0.42 192.168.0.43; do ssh-copy-id $i; done

Đi tới ClusterControl -> Deploy -> MySQL Galera và chỉ định các chi tiết sau (nếu không được đề cập, hãy sử dụng giá trị mặc định):

  • Người dùng SSH:root
  • Đường dẫn khóa SSH:/root/.ssh/id_rsa
  • Tên cụm:MariaDB Galera 10.3
  • Nhà cung cấp:MariaDB
  • Phiên bản:10.3
  • Mật khẩu quản trị / gốc:{chỉ định mật khẩu}
  • Thêm nút:192.168.0.41 (nhấn Enter), 192.168.0.42 (nhấn Enter), 192.168.0.43 (nhấn Enter)

Đảm bảo rằng bạn có tất cả các dấu tích màu xanh lá cây khi thêm các nút, cho biết ClusterControl có thể kết nối với nút mà không cần mật khẩu. Nhấp vào "Triển khai" để bắt đầu triển khai.

Tạo cơ sở dữ liệu, người dùng MariaDB và mật khẩu trên một trong các nút Galera:

mysql> CREATE DATABASE camunda;
mysql> CREATE USER [email protected]'%' IDENTIFIED BY 'passw0rd';
mysql> GRANT ALL PRIVILEGES ON camunda.* TO [email protected]'%';

Đối với người dùng ClusterControl, bạn có thể sử dụng ClusterControl -> Manage -> Schema and Users thay vào đó:

Triển khai cụm cơ sở dữ liệu của chúng tôi hiện đã hoàn tất. Tiếp theo, nhập các tệp SQL vào cụm MariaDB. Trên máy chủ ứng dụng, hãy chuyển đến thư mục "sql" và nhập chúng vào một trong các nút MariaDB (chúng tôi đã chọn 192.168.0.41):

$ cd ~/camunda/sql/create
$ yum install mysql #install mariadb client
$ mysql -ucamunda -p -h192.168.0.41 camunda < mariadb_engine_7.10.0.sql
$ mysql -ucamunda -p -h192.168.0.41 camunda < mariadb_identity_7.10.0.sql

Camunda không cung cấp trình kết nối MariaDB cho Java vì cơ sở dữ liệu mặc định của nó là H2. Trên máy chủ ứng dụng, tải xuống MariaDB Connector / J từ trang tải xuống MariaDB và sao chép tệp JAR vào thư mục bin Apache Tomcat:

$ wget https://downloads.mariadb.com/Connectors/java/connector-java-2.4.1/mariadb-java-client-2.4.1.jar
$ cp mariadb-java-client-2.4.1.jar ~/camunda/server/apache-tomcat-9.0.12/bin/

Sau đó, đặt biến môi trường CLASSPATH để bao gồm trình kết nối cơ sở dữ liệu. Mở setenv.sh qua trình soạn thảo văn bản:

$ vim ~/camunda/server/apache-tomcat-9.0.12/bin/setenv.sh

Và thêm dòng sau:

export CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/mariadb-java-client-2.4.1.jar

Mở ~ / camunda / server / apache-tomcat-9.0.12 / conf / server.xml và thay đổi các dòng liên quan đến kho dữ liệu. Sử dụng giao thức kết nối tuần tự và liệt kê tất cả các nút Galera được phân tách bằng dấu phẩy trong chuỗi kết nối:

<Resource name="jdbc/ProcessEngine"
              ...
              driverClassName="org.mariadb.jdbc.Driver" 
              defaultTransactionIsolation="READ_COMMITTED"
              url="jdbc:mariadb:sequential://192.168.0.41:3306,192.168.0.42:3306,192.168.0.43:3306/camunda"
              username="camunda"  
              password="passw0rd"
              ...
/>

Cuối cùng, chúng tôi có thể bắt đầu dịch vụ Camunda bằng cách thực thi start-camunda.sh script:

$ cd ~/camunda
$ ./start-camunda.sh
starting camunda BPM platform on Tomcat Application Server
Using CATALINA_BASE:   ./server/apache-tomcat-9.0.12
Using CATALINA_HOME:   ./server/apache-tomcat-9.0.12
Using CATALINA_TMPDIR: ./server/apache-tomcat-9.0.12/temp
Using JRE_HOME:        /
Using CLASSPATH:       :./server/apache-tomcat-9.0.12/bin/mariadb-java-client-2.4.1.jar:./server/apache-tomcat-9.0.12/bin/bootstrap.jar:./server/apache-tomcat-9.0.12/bin/tomcat-juli.jar
Tomcat started.

Đảm bảo CLASSPATH hiển thị trong đầu ra bao gồm đường dẫn đến tệp JAR ứng dụng khách Java của MariaDB. Sau khi quá trình khởi tạo hoàn tất, bạn có thể truy cập các ứng dụng web Camunda trên cổng 8080 tại http://192.168.0.8:8080/camunda/ . Tên người dùng mặc định là bản demo với mật khẩu 'demo':

Bạn có thể xem các truy vấn nắm bắt được tiêu hóa từ ClusterControl -> Query Monitor -> Top Queries , cho biết ứng dụng đang tương tác chính xác với Cụm MariaDB:

Với MariaDB Connector / J, chúng tôi không cần tầng cân bằng tải, giúp đơn giản hóa kiến ​​trúc tổng thể của chúng tôi. Chế độ kết nối tuần tự nên thực hiện thủ thuật để tránh các bế tắc nhiều người viết - điều này có thể xảy ra trong Galera. Thiết lập này cung cấp tính khả dụng cao với mỗi phiên bản Camunda được cấu hình với JDBC để truy cập vào cụm nút MySQL hoặc MariaDB. Galera đảm nhận việc đồng bộ hóa dữ liệu giữa các phiên bản cơ sở dữ liệu trong thời gian thực.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thiết lập một cụm cơ sở dữ liệu phân tán theo địa lý bằng cách sử dụng MySQL Replication

  2. DBaaS, định tuyến truy vấn đám mây và trong suốt

  3. Cách cài đặt và bảo mật MariaDB 10 trong CentOS 6

  4. Làm cho các thành phần cơ sở dữ liệu của bạn khả dụng cao (HA) thông qua bộ cân bằng tải

  5. Các tùy chọn chuyển đổi dự phòng cho cụm cơ sở dữ liệu đầy đủ đa đám mây cho cụm MariaDB