MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Database Ketersediaan Tinggi untuk Camunda BPM menggunakan MySQL atau MariaDB Galera Cluster

Camunda BPM adalah alur kerja sumber terbuka dan platform otomatisasi keputusan. Camunda BPM dilengkapi dengan alat untuk membuat alur kerja dan model keputusan, mengoperasikan model yang diterapkan dalam produksi, dan memungkinkan pengguna untuk menjalankan tugas alur kerja yang diberikan kepada mereka.

Secara default, Camunda hadir dengan database tertanam yang disebut H2, yang bekerja cukup baik dalam lingkungan Java dengan jejak memori yang relatif kecil. Namun, dalam hal penskalaan dan ketersediaan tinggi, ada backend database lain yang mungkin lebih sesuai.

Dalam posting blog ini, kita akan menggunakan Camunda BPM 7.10 Community Edition di Linux, dengan fokus pada pencapaian ketersediaan database yang tinggi. Camunda mendukung database utama melalui driver JDBC, yaitu Oracle, DB2, MySQL, MariaDB dan PostgreSQL. Blog ini hanya berfokus pada MySQL dan MariaDB Galera Cluster, dengan implementasi yang berbeda pada masing-masing - satu dengan ProxySQL sebagai penyeimbang beban basis data, dan yang lainnya menggunakan driver JDBC untuk terhubung ke beberapa instance basis data. Perhatikan bahwa artikel ini tidak membahas ketersediaan tinggi untuk aplikasi Camunda itu sendiri.

Prasyarat

Camunda BPM berjalan di Jawa. Di kotak CentOS 7 kami, kami harus menginstal JDK dan opsi terbaik adalah menggunakan yang dari Oracle, dan lewati menggunakan paket OpenJDK yang disediakan di repositori. Di server aplikasi tempat Camunda harus dijalankan, unduh Java SE Development Kit (JDK) terbaru dari Oracle dengan mengirimkan cookie penerimaan:

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

Instal di host:

$ yum localinstall jdk-12_linux-x64_bin.rpm

Verifikasi dengan:

$ 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)

Buat direktori baru dan unduh Komunitas Camunda untuk Apache Tomcat dari halaman unduhan resmi:

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

Ekstrak:

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

Ada sejumlah dependensi yang harus kita konfigurasikan sebelum memulai aplikasi web Camunda. Ini tergantung pada platform database yang dipilih seperti konfigurasi datastore, konektor database dan lingkungan CLASSPATH. Bagian selanjutnya menjelaskan langkah-langkah yang diperlukan untuk MySQL Galera (menggunakan Percona XtraDB Cluster) dan MariaDB Galera Cluster.

Perhatikan bahwa konfigurasi yang ditampilkan di blog ini didasarkan pada lingkungan Apache Tomcat. Jika Anda menggunakan JBOSS atau Wildfly, konfigurasi datastore akan sedikit berbeda. Lihat dokumentasi Camunda untuk detailnya.

MySQL Galera Cluster (dengan ProxySQL dan Keepalive)

Kami akan menggunakan ClusterControl untuk menyebarkan cluster Galera berbasis MySQL dengan Percona XtraDB Cluster. Ada beberapa batasan terkait Galera yang disebutkan dalam dokumen Camunda seputar penanganan konflik multi-penulis Galera dan tingkat isolasi InnoDB. Jika Anda terpengaruh oleh ini, cara teraman adalah menggunakan pendekatan penulis tunggal, yang dapat dicapai dengan konfigurasi grup host ProxySQL. Untuk tidak memberikan satu titik kegagalan, kami akan menerapkan dua instance ProxySQL dan mengikatnya dengan alamat IP virtual oleh Keepalive.

Diagram berikut mengilustrasikan arsitektur akhir kami:

Pertama, terapkan Percona XtraDB Cluster 5.7 tiga node. Instal ClusterControl, buat kunci SSH dan atur SSH tanpa kata sandi dari host ClusterControl ke semua node (termasuk ProxySQL). Pada simpul ClusterControl, lakukan:

$ 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

Sebelum kita men-deploy cluster kita, kita harus memodifikasi file template konfigurasi MySQL yang akan digunakan ClusterControl saat menginstal server MySQL. Nama file template adalah my57.cnf.galera dan terletak di bawah /usr/share/cmon/templates/ pada host ClusterControl. Pastikan baris berikut ada di bawah bagian [mysqld]:

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

Simpan file dan kami siap untuk pergi. Di atas adalah persyaratan sebagaimana tercantum dalam dokumen Camunda, terutama pada isolasi transaksi yang didukung untuk Galera. Variabel wsrep_sync_wait diatur ke 7 untuk melakukan pemeriksaan kausalitas seluruh cluster untuk READ (termasuk SELECT, SHOW, dan BEGIN atau START TRANSACTION), UPDATE, DELETE, INSERT, dan pernyataan REPLACE, memastikan bahwa pernyataan dijalankan pada node yang disinkronkan sepenuhnya. Perlu diingat bahwa nilai selain 0 dapat mengakibatkan peningkatan latensi.

Buka ClusterControl -> Deploy -> MySQL Galera dan tentukan detail berikut (jika tidak disebutkan, gunakan nilai default):

  • Pengguna SSH:root
  • Jalur Kunci SSH:/root/.ssh/id_rsa
  • Nama Cluster:Cluster Percona XtraDB 5.7
  • Penjual:Percona
  • Versi:5.7
  • Kata Sandi Admin/Root:{tentukan kata sandi}
  • Tambahkan Node:192.168.0.21 (tekan Enter), 192.168.0.22 (tekan Enter), 192.168.0.23 (tekan Enter)

Pastikan Anda mendapatkan semua centang hijau, yang menunjukkan ClusterControl dapat terhubung ke node tanpa kata sandi. Klik "Terapkan" untuk memulai penerapan.

Buat database, pengguna MySQL dan kata sandi di salah satu node database:

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

Atau dari antarmuka ClusterControl, Anda dapat menggunakan Kelola -> Skema dan Pengguna sebagai gantinya:

Setelah cluster di-deploy, instal ProxySQL dengan membuka ClusterControl -> Manage -> Load Balancer -> ProxySQL -> Deploy ProxySQL dan masukkan detail berikut:

  • Alamat Server:192.168.0.11
  • Kata Sandi Administrasi:
  • Pantau Kata Sandi:
  • Pengguna DB:camunda
  • Kata Sandi DB:kata sandi
  • Apakah Anda menggunakan transaksi implisit?:Ya

Ulangi langkah penerapan ProxySQL untuk instans ProxySQL kedua, dengan mengubah Alamat Server nilainya menjadi 192.168.0.12. Alamat IP virtual yang disediakan oleh Keepalive membutuhkan setidaknya dua instans ProxySQL yang diterapkan dan dijalankan. Terakhir, terapkan alamat IP virtual dengan membuka ClusterControl -> Manage -> Load Balancer -> Keepalive dan pilih kedua node ProxySQL dan tentukan alamat IP virtual dan antarmuka jaringan untuk didengarkan oleh VIP:

Backend database kami sekarang sudah selesai. Selanjutnya, impor file SQL ke Galera Cluster sebagai pengguna MySQL yang dibuat. Di server aplikasi, buka direktori "sql" dan impor ke salah satu node Galera (kami memilih 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 tidak menyediakan konektor MySQL untuk Java karena database default-nya adalah H2. Di server aplikasi, unduh MySQL Connector/J dari halaman unduh MySQL dan salin file JAR ke direktori 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/

Kemudian, atur variabel lingkungan CLASSPATH untuk menyertakan konektor database. Buka setenv.sh menggunakan editor teks:

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

Dan tambahkan baris berikut:

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

Buka ~/camunda/server/Apache-Tomcat-9.0.12/conf/server.xml dan ubah baris yang terkait dengan datastore. Tentukan alamat IP virtual sebagai host MySQL dalam string koneksi, dengan port 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"
              ...
/>

Terakhir, kita dapat memulai layanan Camunda dengan menjalankan start-camunda.sh naskah:

$ 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.

Pastikan CLASSPATH yang ditampilkan dalam output menyertakan path ke file MySQL Connector/J JAR. Setelah inisialisasi selesai, Anda dapat mengakses aplikasi web Camunda pada port 8080 di http://192.168.0.8:8080/camunda/ . Nama pengguna default adalah demo dengan kata sandi 'demo':

Anda kemudian dapat melihat kueri tangkapan yang dicerna dari Node -> ProxySQL -> Kueri Teratas , menunjukkan aplikasi berinteraksi dengan benar dengan Galera Cluster:

Tidak ada pemisahan baca-tulis yang dikonfigurasi untuk ProxySQL. Camunda menggunakan "SET autocommit=0" pada setiap pernyataan SQL untuk menginisialisasi transaksi dan cara terbaik bagi ProxySQL untuk menangani ini dengan mengirimkan semua kueri ke server backend yang sama dari grup host target. Ini adalah metode teraman di samping ketersediaan yang lebih baik. Namun, semua koneksi mungkin akhirnya mencapai satu server, jadi tidak ada penyeimbangan beban.

MariaDB Galera

MariaDB Connector/J mampu menangani berbagai mode koneksi - failover, sekuensial, replikasi dan aurora - tetapi Camunda hanya mendukung failover dan sekuensial. Diambil dari dokumentasi MariaDB Connector/J:

Mode Deskripsi
berurutan
(tersedia sejak 1.3.0)
Mode ini mendukung failover koneksi di lingkungan multi-master, seperti MariaDB Galera Cluster. Mode ini tidak mendukung pembacaan load-balancing pada slave. Konektor akan mencoba menyambung ke host sesuai urutan yang dideklarasikan di URL koneksi, jadi host pertama yang tersedia digunakan untuk semua kueri. Sebagai contoh, katakanlah URL koneksi adalah sebagai berikut:
jdbc:mariadb:sequential:host1,host2,host3/testdb
Ketika konektor mencoba untuk terhubung, itu akan selalu mencoba host1 terlebih dahulu. Jika Host itu tidak tersedia, maka ia akan mencoba Host2. dll. Ketika sebuah host gagal, konektor akan mencoba menyambung kembali ke host dalam urutan yang sama.
failover
(tersedia sejak 1.2.0)
Mode ini mendukung failover koneksi di lingkungan multi-master, seperti MariaDB Galera Cluster. Mode ini tidak mendukung pembacaan load-balancing pada slave. Konektor melakukan penyeimbangan beban untuk semua kueri dengan memilih host secara acak dari URL koneksi untuk setiap koneksi, sehingga kueri akan diseimbangkan beban karena koneksi didistribusikan secara acak ke semua host.

Menggunakan mode "failover" menimbulkan potensi risiko kebuntuan yang lebih tinggi, karena penulisan akan didistribusikan ke semua server backend hampir secara merata. Pendekatan penulis tunggal adalah cara yang aman untuk dijalankan, yang berarti menggunakan mode sekuensial akan melakukan pekerjaan dengan cukup baik. Anda juga dapat melewati tingkat penyeimbang beban dalam arsitektur. Oleh karena itu dengan konektor MariaDB Java, kita dapat menerapkan arsitektur kita sesederhana di bawah ini:

Sebelum kita men-deploy cluster kita, modifikasi file template konfigurasi MariaDB yang akan digunakan ClusterControl saat menginstal server MariaDB. Nama file template adalah my.cnf.galera dan terletak di bawah /usr/share/cmon/templates/ pada host ClusterControl. Pastikan baris berikut ada di bawah bagian [mysqld]:

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

Simpan file dan kami siap untuk pergi. Sedikit penjelasan, daftar di atas adalah persyaratan sebagaimana tercantum dalam dokumen Camunda, terutama pada isolasi transaksi yang didukung untuk Galera. Variabel wsrep_sync_wait diatur ke 7 untuk melakukan pemeriksaan kausalitas seluruh cluster untuk READ (termasuk SELECT, SHOW, dan BEGIN atau START TRANSACTION), UPDATE, DELETE, INSERT, dan pernyataan REPLACE, memastikan bahwa pernyataan dijalankan pada node yang disinkronkan sepenuhnya. Perlu diingat bahwa nilai selain 0 dapat mengakibatkan peningkatan latensi. Mengaktifkan Skema Kinerja adalah opsional untuk fitur pemantauan kueri ClusterControl.

Sekarang kita bisa memulai proses penyebaran cluster. Instal ClusterControl, buat kunci SSH, dan atur SSH tanpa kata sandi dari host ClusterControl ke semua node Galera. Pada simpul ClusterControl, lakukan:

$ 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

Buka ClusterControl -> Deploy -> MySQL Galera dan tentukan detail berikut (jika tidak disebutkan, gunakan nilai default):

  • Pengguna SSH:root
  • Jalur Kunci SSH:/root/.ssh/id_rsa
  • Nama Cluster:MariaDB Galera 10.3
  • Penjual:MariaDB
  • Versi:10.3
  • Kata Sandi Admin/Root:{tentukan kata sandi}
  • Tambahkan Node:192.168.0.41 (tekan Enter), 192.168.0.42 (tekan Enter), 192.168.0.43 (tekan Enter)

Pastikan Anda mendapatkan semua centang hijau saat menambahkan node, yang menunjukkan ClusterControl dapat terhubung ke node tanpa kata sandi. Klik "Terapkan" untuk memulai penerapan.

Buat database, pengguna MariaDB, dan kata sandi di salah satu node Galera:

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

Untuk pengguna ClusterControl, Anda dapat menggunakan ClusterControl -> Manage -> Schema and Users sebagai gantinya:

Penyebaran cluster database kami sekarang selesai. Selanjutnya, impor file SQL ke dalam cluster MariaDB. Di server aplikasi, buka direktori "sql" dan impor ke salah satu node MariaDB (kami memilih 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 tidak menyediakan konektor MariaDB untuk Java karena database default-nya adalah H2. Di server aplikasi, unduh MariaDB Connector/J dari halaman unduh MariaDB dan salin file JAR ke direktori 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/

Kemudian, atur variabel lingkungan CLASSPATH untuk menyertakan konektor database. Buka setenv.sh melalui editor teks:

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

Dan tambahkan baris berikut:

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

Buka ~/camunda/server/Apache-Tomcat-9.0.12/conf/server.xml dan ubah baris yang terkait dengan datastore. Gunakan protokol koneksi sekuensial dan buat daftar semua node Galera yang dipisahkan dengan koma dalam string koneksi:

<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"
              ...
/>

Terakhir, kita dapat memulai layanan Camunda dengan menjalankan start-camunda.sh naskah:

$ 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.

Pastikan CLASSPATH yang ditampilkan dalam output menyertakan jalur ke file JAR klien Java MariaDB. Setelah inisialisasi selesai, Anda dapat mengakses aplikasi web Camunda pada port 8080 di http://192.168.0.8:8080/camunda/ . Nama pengguna default adalah demo dengan kata sandi 'demo':

Anda dapat melihat kueri tangkapan yang dicerna dari ClusterControl -> Monitor Kueri -> Kueri Teratas , menunjukkan aplikasi berinteraksi dengan benar dengan Cluster MariaDB:

Dengan MariaDB Connector/J, kita tidak memerlukan tingkat penyeimbang beban yang menyederhanakan keseluruhan arsitektur kita. Mode koneksi sekuensial harus melakukan trik untuk menghindari kebuntuan multi-penulis - yang dapat terjadi di Galera. Pengaturan ini menyediakan ketersediaan tinggi dengan setiap instans Camunda yang dikonfigurasi dengan JDBC untuk mengakses cluster node MySQL atau MariaDB. Galera menangani sinkronisasi data antara instance database secara real time.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membandingkan Penawaran Cloud Cluster Galera:Bagian Kedua Google Cloud Platform (GCP)

  2. Cara mengkonfigurasi AppArmor untuk sistem berbasis MySQL (Replikasi MySQL/MariaDB + Galera)

  3. MariaDB LAST_INSERT_ID() Dijelaskan

  4. Bagaimana MINUTE() Bekerja di MariaDB

  5. Bagaimana TIMESTAMPDIFF() Bekerja di MariaDB