Camunda BPMは、オープンソースのワークフローおよび意思決定自動化プラットフォームです。 Camunda BPMには、ワークフローと意思決定モデルを作成し、本番環境で展開されたモデルを操作し、ユーザーが割り当てられたワークフロータスクを実行できるようにするためのツールが付属しています。
デフォルトでは、CamundaにはH2と呼ばれる組み込みデータベースが付属しています。これは、メモリフットプリントが比較的小さいJava環境内でかなり適切に機能します。ただし、スケーリングと高可用性に関しては、他にも適切なデータベースバックエンドがあります。
このブログ投稿では、データベースの高可用性の実現に焦点を当てて、LinuxにCamunda BPM 7.10CommunityEditionをデプロイします。 Camundaは、JDBCドライバー、つまりOracle、DB2、MySQL、MariaDB、PostgreSQLを介して主要なデータベースをサポートしています。このブログは、MySQLとMariaDB Galera Clusterにのみ焦点を当てており、それぞれに異なる実装があります。1つはデータベースロードバランサーとしてProxySQLを使用し、もう1つはJDBCドライバーを使用して複数のデータベースインスタンスに接続します。この記事では、Camundaアプリケーション自体の高可用性については説明していません。
前提条件
CamundaBPMはJavaで実行されます。 CentOS 7ボックスでは、JDKをインストールする必要があります。最適なオプションは、OracleのJDKを使用し、リポジトリで提供されているOpenJDKパッケージの使用をスキップすることです。 Camundaを実行する必要のあるアプリケーションサーバーで、受け入れCookieを送信してOracleから最新のJava SE Development Kit(JDK)をダウンロードします。
$ wget --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/12+33/312335d836a34c7c8bba9d963e26dc23/jdk-12_linux-x64_bin.rpm
ホストにインストールします:
$ yum localinstall jdk-12_linux-x64_bin.rpm
確認方法:
$ 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)
新しいディレクトリを作成し、公式ダウンロードページからApacheTomcat用のCamundaCommunityをダウンロードします。
$ mkdir ~/camunda
$ cd ~/camunda
$ wget --content-disposition 'https://camunda.org/release/camunda-bpm/tomcat/7.10/camunda-bpm-tomcat-7.10.0.tar.gz'
抽出:
$ tar -xzf camunda-bpm-tomcat-7.10.0.tar.gz
CamundaWebアプリケーションを起動する前に構成する必要のある依存関係がいくつかあります。これは、データストア構成、データベースコネクタ、CLASSPATH環境などの選択したデータベースプラットフォームによって異なります。次のセクションでは、MySQL Galera(Percona XtraDB Clusterを使用)およびMariaDBGaleraClusterに必要な手順について説明します。
このブログに示されている構成は、ApacheTomcat環境に基づいていることに注意してください。 JBOSSまたはWildflyを使用している場合、データストアの設定は少し異なります。詳細については、Camundaのドキュメントを参照してください。
MySQL Galera Cluster(ProxySQLおよびKeepalivedを使用)
ClusterControlを使用して、PerconaXtraDBクラスターでMySQLベースのGaleraクラスターをデプロイします。 Galeraマルチライターの競合処理とInnoDB分離レベルを取り巻くCamundaドキュメントに記載されているGalera関連の制限がいくつかあります。これらの影響を受ける場合、最も安全な方法は、ProxySQLホストグループ構成で実現可能なシングルライターアプローチを使用することです。単一障害点を提供しないために、2つのProxySQLインスタンスをデプロイし、Keepalivedによってそれらを仮想IPアドレスに関連付けます。
次の図は、最終的なアーキテクチャを示しています。
まず、3ノードのPercona XtraDBCluster5.7をデプロイします。 ClusterControlをインストールし、SSHキーを生成し、ClusterControlホストからすべてのノード(ProxySQLを含む)へのパスワードなしのSSHをセットアップします。 ClusterControlノードで、次の手順を実行します。
$ 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
クラスタをデプロイする前に、ClusterControlがMySQLサーバーのインストール時に使用するMySQL構成テンプレートファイルを変更する必要があります。テンプレートファイル名はmy57.cnf.galeraで、ClusterControlホストの/ usr / share / cmon /templates/の下にあります。 [mysqld]セクションの下に次の行が存在することを確認してください:
[mysqld]
...
transaction-isolation=READ-COMMITTED
wsrep_sync_wait=7
...
ファイルを保存すれば、準備は完了です。上記は、特にGaleraでサポートされているトランザクション分離に関して、Camundaのドキュメントに記載されている要件です。変数wsrep_sync_waitは7に設定され、READ(SELECT、SHOW、およびBEGINまたはSTART TRANSACTIONを含む)、UPDATE、DELETE、INSERT、およびREPLACEステートメントのクラスター全体の因果関係チェックを実行し、ステートメントが完全に同期されたノードで実行されるようにします。 0以外の値を指定すると、レイテンシが増加する可能性があることに注意してください。
ClusterControl-> Deploy-> MySQL Galeraに移動します 次の詳細を指定します(記載されていない場合は、デフォルト値を使用します):
- SSHユーザー:root
- SSHキーパス:/root/.ssh/id_rsa
- クラスター名:Percona XtraDB Cluster 5.7
- ベンダー:Percona
- バージョン:5.7
- 管理者/ルートパスワード:{パスワードを指定}
- ノードの追加:192.168.0.21(Enterキーを押す)、192.168.0.22(Enterキーを押す)、192.168.0.23(Enterキーを押す)
ClusterControlがパスワードなしでノードに接続できることを示す、すべての緑色のチェックマークが付いていることを確認してください。 [デプロイ]をクリックしてデプロイを開始します。
データベースノードの1つにデータベース、MySQLユーザー、およびパスワードを作成します。
mysql> CREATE DATABASE camunda;
mysql> CREATE USER [email protected]'%' IDENTIFIED BY 'passw0rd';
mysql> GRANT ALL PRIVILEGES ON camunda.* TO [email protected]'%';
または、ClusterControlインターフェースから、[管理]->[スキーマとユーザー]を使用できます。 代わりに:
クラスタがデプロイされたら、 ClusterControl-> Manage-> Load Balancer-> ProxySQL-> Deploy ProxySQLに移動してProxySQLをインストールします。 次の詳細を入力します:
- サーバーアドレス:192.168.0.11
- 管理パスワード:
- パスワードの監視:
- DBユーザー:camunda
- DBパスワード:passw0rd
- 暗黙のトランザクションを使用していますか?:はい
サーバーアドレスを変更して、2番目のProxySQLインスタンスに対してProxySQLのデプロイ手順を繰り返します。 192.168.0.12への値。 Keepalivedによって提供される仮想IPアドレスには、少なくとも2つのProxySQLインスタンスがデプロイされて実行されている必要があります。最後に、 ClusterControl-> Manage-> Load Balancer-> Keepalived に移動して、仮想IPアドレスをデプロイします。 両方のProxySQLノードを選択し、VIPがリッスンする仮想IPアドレスとネットワークインターフェイスを指定します。
これでデータベースバックエンドが完成しました。次に、作成したMySQLユーザーとしてSQLファイルをGaleraClusterにインポートします。アプリケーションサーバーで、「sql」ディレクトリに移動し、Galeraノードの1つにインポートします(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は、デフォルトのデータベースがH2であるため、Java用のMySQLコネクタを提供していません。アプリケーションサーバーで、MySQLダウンロードページからMySQL Connector / Jをダウンロードし、JARファイルをApacheTomcatbinディレクトリにコピーします。
$ 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/
次に、データベースコネクタを含めるようにCLASSPATH環境変数を設定します。テキストエディタを使用してsetenv.shを開きます:
$ vim ~/camunda/server/apache-tomcat-9.0.12/bin/setenv.sh
そして、次の行を追加します:
export CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/mysql-connector-java-8.0.15.jar
〜/ camunda / server / apache-tomcat-9.0.12 / conf / server.xmlを開き、データストアに関連する行を変更します。 ProxySQLポート6033を使用して、接続文字列でMySQLホストとして仮想IPアドレスを指定します。
<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"
...
/>
最後に、 start-camunda.sh を実行して、Camundaサービスを開始できます。 スクリプト:
$ 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.
出力に表示されるCLASSPATHに、MySQL Connector /JJARファイルへのパスが含まれていることを確認してください。初期化が完了したら、ポート8080の http://192.168.0.8:8080/camunda/でCamundaWebアプリにアクセスできます。 。デフォルトのユーザー名は、パスワード「demo」を使用したデモです:
次に、ノード->ProxySQL->上位クエリからダイジェストされたキャプチャクエリを確認できます。 、アプリケーションがGalera Clusterと正しく対話していることを示します:
ProxySQL用に構成された読み取り/書き込み分割はありません。 Camundaは、すべてのSQLステートメントで「SETautocommit =0」を使用してトランザクションを初期化し、ProxySQLがすべてのクエリをターゲットホストグループの同じバックエンドサーバーに送信することでこれを処理するための最良の方法です。これは、可用性の向上とともに最も安全な方法です。ただし、すべての接続が1つのサーバーに到達する可能性があるため、負荷分散は行われません。
MariaDBガレラ
MariaDB Connector / Jは、フェイルオーバー、シーケンシャル、レプリケーション、オーロラなどのさまざまな接続モードを処理できますが、Camundaはフェイルオーバーとシーケンシャルのみをサポートしています。 MariaDB Connector / Jドキュメントからの抜粋:
モード | 説明 |
---|---|
シーケンシャル (1.3.0以降で利用可能) | このモードは、MariaDBGaleraClusterなどのマルチマスター環境での接続フェイルオーバーをサポートします。このモードは、スレーブでの負荷分散読み取りをサポートしていません。コネクタは、接続URLで宣言された順序でホストに接続しようとするため、最初に使用可能なホストがすべてのクエリに使用されます。たとえば、接続URLが次のようになっているとします。 コネクタが接続しようとすると、常にhost1が最初に試行されます。そのホストが利用できない場合は、host2を試行します。など。ホストに障害が発生すると、コネクタは同じ順序でホストに再接続しようとします。 |
フェイルオーバー (1.2.0以降で使用可能) | このモードは、MariaDBGaleraClusterなどのマルチマスター環境での接続フェイルオーバーをサポートします。このモードは、スレーブでの負荷分散読み取りをサポートしていません。コネクタは、接続ごとに接続URLからホストをランダムに選択することで、すべてのクエリの負荷分散を実行します。そのため、接続がすべてのホストにランダムに分散される結果として、クエリの負荷分散が行われます。 |
「フェイルオーバー」モードを使用すると、書き込みがすべてのバックエンドサーバーにほぼ均等に分散されるため、デッドロックの潜在的なリスクが高くなります。シングルライターアプローチは安全に実行できる方法です。つまり、シーケンシャルモードを使用するとかなりうまくいくはずです。アーキテクチャのロードバランサー層をスキップすることもできます。したがって、MariaDB Javaコネクターを使用すると、以下のように単純なアーキテクチャーをデプロイできます。
クラスターをデプロイする前に、ClusterControlがMariaDBサーバーのインストール時に使用するMariaDB構成テンプレートファイルを変更します。テンプレートファイル名はmy.cnf.galeraで、ClusterControlホストの/ usr / share / cmon /templates/の下にあります。 [mysqld]セクションの下に次の行が存在することを確認してください:
[mysqld]
...
transaction-isolation=READ-COMMITTED
wsrep_sync_wait=7
performance_schema = ON
...
ファイルを保存すれば、準備は完了です。少し説明すると、上記のリストは、特にGaleraでサポートされているトランザクション分離に関して、Camundaのドキュメントに記載されている要件です。変数wsrep_sync_waitは7に設定され、READ(SELECT、SHOW、およびBEGINまたはSTART TRANSACTIONを含む)、UPDATE、DELETE、INSERT、およびREPLACEステートメントのクラスター全体の因果関係チェックを実行し、ステートメントが完全に同期されたノードで実行されるようにします。 0以外の値を指定すると、レイテンシが増加する可能性があることに注意してください。 ClusterControlクエリ監視機能では、パフォーマンススキーマの有効化はオプションです。
これで、クラスターの展開プロセスを開始できます。 ClusterControlをインストールし、SSHキーを生成し、ClusterControlホストからすべてのGaleraノードへのパスワードなしのSSHをセットアップします。 ClusterControlノードで、次の手順を実行します。
$ 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
ClusterControl-> Deploy-> MySQL Galeraに移動します 次の詳細を指定します(記載されていない場合は、デフォルト値を使用します):
- SSHユーザー:root
- SSHキーパス:/root/.ssh/id_rsa
- クラスター名:MariaDB Galera 10.3
- ベンダー:MariaDB
- バージョン:10.3
- 管理者/ルートパスワード:{パスワードを指定}
- ノードの追加:192.168.0.41(Enterキーを押す)、192.168.0.42(Enterキーを押す)、192.168.0.43(Enterキーを押す)
ノードを追加するときにすべての緑色のチェックマークが付いていることを確認してください。これは、ClusterControlがパスワードなしでノードに接続できることを示しています。 [デプロイ]をクリックしてデプロイを開始します。
Galeraノードの1つにデータベース、MariaDBユーザー、およびパスワードを作成します。
mysql> CREATE DATABASE camunda;
mysql> CREATE USER [email protected]'%' IDENTIFIED BY 'passw0rd';
mysql> GRANT ALL PRIVILEGES ON camunda.* TO [email protected]'%';
ClusterControlユーザーの場合、ClusterControl->管理->スキーマとユーザーを使用できます。 代わりに:
これで、データベースクラスターの展開が完了しました。次に、SQLファイルをMariaDBクラスターにインポートします。アプリケーションサーバーで、「sql」ディレクトリに移動し、MariaDBノードの1つにインポートします(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は、デフォルトのデータベースがH2であるため、Java用のMariaDBコネクタを提供していません。アプリケーションサーバーで、MariaDBダウンロードページからMariaDB Connector / Jをダウンロードし、JARファイルをApacheTomcatbinディレクトリにコピーします。
$ 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/
次に、データベースコネクタを含めるようにCLASSPATH環境変数を設定します。テキストエディタでsetenv.shを開きます:
$ vim ~/camunda/server/apache-tomcat-9.0.12/bin/setenv.sh
そして、次の行を追加します:
export CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/mariadb-java-client-2.4.1.jar
〜/ camunda / server / apache-tomcat-9.0.12 / conf / server.xmlを開き、データストアに関連する行を変更します。順次接続プロトコルを使用して、接続文字列内のすべてのガレラノードをコンマで区切ってリストします。
<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"
...
/>
最後に、 start-camunda.sh を実行して、Camundaサービスを開始できます。 スクリプト:
$ 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.
出力に表示されるCLASSPATHに、MariaDBJavaクライアントJARファイルへのパスが含まれていることを確認してください。初期化が完了したら、ポート8080の http://192.168.0.8:8080/camunda/でCamundaWebアプリにアクセスできます。 。デフォルトのユーザー名は、パスワード「demo」を使用したデモです:
ダイジェストされたキャプチャクエリは、 ClusterControl-> Query Monitor-> Top Queriesから確認できます。 、アプリケーションがMariaDBクラスターと正しく対話していることを示します:
MariaDB Connector / Jを使用すると、アーキテクチャ全体を簡素化するロードバランサー層は必要ありません。順次接続モードは、マルチライターのデッドロックを回避するためのトリックを実行する必要があります。これは、Galeraで発生する可能性があります。このセットアップは、MySQLまたはMariaDBノードのクラスターにアクセスするためにJDBCで構成された各Camundaインスタンスで高可用性を提供します。 Galeraは、データベースインスタンス間でデータをリアルタイムで同期します。