はじめに
このドキュメントはJ-PARC加速器向けにArchiver Appliance (AA)をインストールして立ち上げた際の作業メモなので、適宜読み替えて頂きたい。
- AAのインストールガイドを良く読んでおくこと。
- AAのインストールガイドを良く読んでおくこと。
- QuickstartはあくまでもAAを試食するためのセットアップ方法なので、ここでは見ないでおく。よく読むと「Quickstartの方法では設定が保存されない。AAを再起動したら、アーカイブしたいPVを再度AAに設定しなければならない」旨が書いてある。
- jkjarchiver-ap.mr.jkcontにインストールする
- OS : Alma Linux 9 / x86_64
- epicsアカウントで作業する
- 作業ディレクトリ: /home/epics/archappl
- AAのインストール先: /opt/archappl
- AAのデータ保存先: /localdata/archappl
- 各種設定ファイル・起動スクリプトは(できるだけ)mercurialでバージョン管理している
- インストールの際に、X Window System上での作業が必要
- あらかじめdnfでインストールしておくもの
- gcc
- httpd
- patch
- mariadb-server mariadb
- zenity
- (java-17-openjdk-devel) ※ 後述
- AAインストール後の運用についてはArchiver Appliance 運用メモを参照のこと
ダウンロード
AAに必要なソフトウェアをあらかじめダウンロードしておく。ここでは/home/epics/archappl/downloadにダウンロードする。
Archiver Appliance
githubからダウンロードする。 インストールするのはバイナリの配布物だが、ソースコードに管理用のスクリプトの例が含まれているので一緒にダウンロードしておく。
- バイナリ
% wget https://github.com/archiver-appliance/epicsarchiverap/releases/download/1.1.0/archappl_v1.1.0.tar.gz
- ソースコード
% wget https://github.com/archiver-appliance/epicsarchiverap/archive/refs/tags/1.1.0.tar.gz
Apache Tomcat
AAを走らせるにはApache Tomcat 7.0.61以降が必要。Apache Tomcat配布元から9.0.33のCoreからtar.gzをダウンロードした。
- Tomcat 10系では(まだ)動かない
MySQL
AAはアーカイブするレコードの情報を記録するのにMySQL/MariaDBを利用する。 AlmaLinux9の配布物からmariadb 10.5をdnfでインストールした。
# yum install mariadb mariadb-server
今回は
- AAを実行するマシンでMariaDBサーバも走らせる
- MariadDBのテーブルはNFSサーバ上に置く
という構成にした。MariaDBサーバはAAとは独立したマシンにした方がよかったかもしれない。
MySQL クライアント jar
mysql-connector-javaをMySQL本家のArchiveから、
- Product Version → 8.0.33
- Operating System → Platform Independent
を選んでtarをダウンロードする。 AAのインストール後に、インストール先ディレクトリのapache-tomcat-x.y.z/libに置いてあるjarを差し替えることで、javaクライアントを入れ替えることができる。
JDK 17
制御計算機ではAdoptiumのOpenJDKU-jdk_x64_linux_hotspot_17.0.12_7.tar.gzを用いた。
- Alma Linux 9のjava-17-openjdk-develをdnfで入れてもOK
tar ballの展開
% mkdir -p ~/archappl/workspace % cd ~/archappl/workspace % tar xf ../download/archappl_v1.1.0.tar.gz % tar xf ../download/mysql-connector-j-8.0.33.tar.gz
MySQLのセットアップ
- rootで作業する
dbを置くディレクトリ
AlmaLinux9標準のディレクトリのままにする場合はこの手順は飛ばしてよい。 制御計算機ではdbは/svrdbに置く。NFSサーバがexportしているディレクトリを/svrdbにマウントする。
jkjds01.ccr.jkcont:/svrdb /svrdb nfs bg,intr,soft,timeo=10,retrans=15,nfsvers=3 0 0
/svrdbを掘ってマウントし、パーミッションを設定する。mysqlの起動スクリプトがroot権限でこのディレクトリに書き込もうとするので、NFSサーバも設定しておく。
# mkdir /svrdb # mount /svrdb # mkdir /svrdb/mariadb10.5/jkjarchiver-ap # chown mysql:mysql /svrdb/mariadb10.5/jkjarchiver-ap
MariaDBの設定
- /etc/my.cnf.d/mariadb-server.cnfを書き換える
- MariaDBのテーブルを置くディレクトリ
- MySQL 5.3あたりからutf8mb4 (4-bytes unicode)がデフォルトになった。このままだとインデックスのキー長の上限である767バイトを超えるので、3-bytes unicodeを使う
- いまはutf8はutf8mb3の別名だが、そのうちutf8mb4の別名になる(らしい)
- キー長を768バイト以上にする方法もある(らしい)
... [mysqld] #datadir=/var/lib/mysql datadir=/svrdb/mariadb10.5/jkjarchiver-ap ... # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Use utf8 (3-bytes unicode) to avoid 767-bytes problem. # Column size will exceed 767-bytes when the default charset, utf8mb4 (4-bytes unicode) is used. character-set-server = utf8mb3 collation-server = utf8_general_ci # innodb_flush_log_at_trx_commit = 1
- /etc/my.cnf.d/mysql-clients.cnfも書き換える
... [mysql] default-character-set = utf8 ...
logrotate
/etc/logrotate.d/mariadb に手順が書いてある。後回し。
mysqlサーバ自動起動の設定
MariaDBをインストールしただけでは自動起動しない。自動起動するように設定しておく
# systemctl enable mariadb
MySQLサーバの起動
MariaDBの回起動時に(dbが存在しなければ)dbを作ってくれる
# systemctl start mariadb
/usr/bin/mysql_secure_installation
MySQLの初期設定を行う。質問をよく読む。質問をよく読んでから答える
# /usr/bin/mysql_secure_installation
- Enter current password for root (enter for none): ← ルートのパスワード を入力する
- Switch to unix_socket authentication [Y/n] ← n
- Change the root password? [Y/n] ← n
- Remove anonymous users? [Y/n] ← y
- Disallow root login remotely? [Y/n] ← nが安全だが状況に応じて
- Remove test database and access to it? [Y/n] ← いらないのでy
- Reload privilege tables now? [Y/n] ← y
schemaの作成
DB(archappl), ユーザー(archappl)とパスワード(archappl)を作る
- rootで作業する
% mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 14 Server version: 10.5.22-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation AB and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE DATABASE IF NOT EXISTS archappl; Query OK, 1 row affected (0.001 sec) mysql> GRANT ALL PRIVILEGES ON archappl.* TO 'archappl'@'localhost' IDENTIFIED BY 'archappl'; Query OK, 0 rows affected (0.002 sec)
テーブルの作成
AA用のテーブルはAAのインストールスクリプト(後述)が作ってくれる。
Archiver Applianceのインストール
インストールスクリプトを走せると、
- MariaDBのテーブル
- Tomcatのデプロイ
- アプライアンスの設定ファイルの作成
- 起動スクリプトの作成
をやってくれる
インストール先のディレクトリ
AAをインストールするディレクトリ(/opt/archappl)をあらかじめ掘っておく
- rootで作業する
# mkdir -p /opt/archappl # chown epics:epics /opt/archappl
ポリシーファイル
ポリシーファイルは AAにレコードを登録する際に用いられるファイルで、
- LTS/MTS/STSの設定
- レコードをサンプルする方法(monitor/scan)とサンプリング時間
- 値と一緒に保存するHIGH/HIGH/LOW/LOLO等のフィールド
等をPythonのdictionaryとして記述する。
インストールスクリプトを走らせる前に、ポリシーファイルを用意しておく。雛形が
epicsarchiverap.git/src/sitespecific/tests/classpathfiles/policies.py
に用意されている
- このページのAtachmentsにもある
- インストールスクリプトがポリシーファイルの所在を尋ねてくる。存在しないファイルを指定すると、スクリプトの実行に失敗する
- 中身は後で書き換えるので、ここでは気にしない
- AAのクラスタを組む場合は、各ノードに同じファイルのコピーを置くか、共有ディレクトリに置いておく
制御計算機用のポリシーファイルは
/jk/dev/operation_app/jkControl/ArchiverAppliance/deploy/policies.py
に置いてある
LTS/MTS/STS
- STS ... PARTITION_HOUR
- MTS ... PARTITION_DAY&hold=5&gather=1
- LTS ... PARTITION_MONTH
sampling method/sampling period
- 基本的にはMONITORにする
- 25Hzで更新されるLIのPVはSCAN 1.0secにする
metaFields
HIHI等のメタフィールドは保存しない。pvPolicyDict\["archiveFields"\]は空のarrayにしておく
JAVA_HOME
JAVA_HOMEを設定してく
% export JAVA_HOME=/usr/lib/jvm/java-17
インストールスクリプト
予めインストール先のディレクトリを作っておく。epicsアカウントで書き込めるようにownerを変更しておく:
- rootで作業する
# mkdir -p /opt/archappl # chown epics.epics /opt/archappl
インストールスクリプトが呼び出すdeployMultipleTomcats.pyはpython2向けに書かれているので、python3でも動くようにパッチをあてる
- あるいはパッチ済みのものをこのページのAttachmentsからダウンロードして使う
cd ~epics/archappl/workspace curl https://cerldev.kek.jp/trac/EpicsUsersJP/raw-attachment/wiki/epics/Archiver%20Appliance%20%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%83%A1%E3%83%A2/install_scripts_python3.patch patch -p0 < install_scripts_python3.patch
AAを展開したディレクトリでインストールスクリプトを走らせる。AAを実行するアカウント(ここではepics)で走らせること。 sample_site_specific_contentをディレクトリごとsite_specific_contentにコピーして内容を編集しておくと、管理用ページのhtmlページの文言やヘッダに表示する図を差し替えることができる。
スクリプトを走らせると、ダイアログが開いて
- DEPLOY_DIR (tomcatを展開するディレクトリ) → /opt/archappl
- apache-tomcat-x.y.z.tar.gz の所在
- mysql-connector-java-x.y.z-bin.jar の所在
- 環境変数ARCHAPPL_APPLIANCESが設定されていない場合、先に進むかどうか → Yesを答えると自動的に設定してくれる
- mysqlサーバに接続するためのmysqlコマンドに渡す引き数 → ここでは--user=archappl --password=archappl --database=archappl
- ポリシーファイル(policies.py)の所在
を尋ねてくる。
% cd ~archappl/workspace % install_scripts/single_machine_install.sh This script runs thru a typical install scenario for a single machine You can use this to create a standard multi-instance (one Tomcat for ear WAR) tomcat deployment in a multi machine cluster by setting the ARCHAPPL_APPLIANCES and the ARCHAPPL_MYIDENTITY For installations in a cluster, please do create a valid appliances.xml and export ARCHAPPL_APPLIANCES and ARCHAPPL_MYIDENTITY ... ... Setting TOMCAT_HOME to the mgmt webapp in /opt/archappl/mgmt Setting TOMCAT_HOME to /opt/archappl/apache-tomcat-9.0.33 Calling deploy release with /opt/archappl/deployRelease.sh /home/epics/archappl/workspace Deploying a new release from /home/epics/archappl/workspace onto /opt/archappl /opt/archappl/mgmt/webapps ~/archappl/workspace ~/archappl/workspace /opt/archappl/engine/webapps ~/archappl/workspace ~/archappl/workspace /opt/archappl/etl/webapps ~/archappl/workspace ~/archappl/workspace /opt/archappl/retrieval/webapps ~/archappl/workspace ~/archappl/workspace Done deploying a new release from /home/epics/archappl/workspace onto /opt/archappl Do you have a site specific policies.py file? Where's your site specific policies.py file? Setting ARCHAPPL_POLICIES to /home/epics/archappl/policies.py Done with the installation. Please use /opt/archappl/sampleStartup.sh to start and stop the appliance and /opt/archappl/deployRelease.sh to deploy a new release.
アプライアンスの設定
appliances.xmlでノードのidentityと各webappが使うURLを設定する
- デフォルトでは/opt/archappl/appliances.xmlが使われる
- 起動スクリプトの環境変数でファイル名を指定する
- AAのクラスタを組む場合は、各ノードに同じファイルのコピーを置くか、共有ディレクトリに置いておく
<appliances> <appliance> <identity>appliance0</identity> <cluster_inetport>jkjarchiver-ap.mr.jkcont:16670</cluster_inetport> <mgmt_url>http://jkjarchiver-ap.mr.jkcont:17665/mgmt/bpl</mgmt_url> <engine_url>http://jkjarchiver-ap.mr.jkcont:17666/engine/bpl</engine_url> <etl_url>http://jkjarchiver-ap.mr.jkcont:17667/etl/bpl</etl_url> <retrieval_url>http://localhost:17668/retrieval/bpl</retrieval_url> <data_retrieval_url>http://jkjarchiver-ap.mr.jkcont:17668/retrieval</data_retrieval_url> </appliance> </appliances>
プロパティファイル
archappl.propertiesでAAの動作を設定する。
- デフォルトでは各web appのWEB-INF/classes/archappl.propertiesが使われる
- 例えば: /opt/archappl/engine/webapps/engine/WEB-INF/classes/archappl.properties
- 起動スクリプトの環境変数ARCHAPPL_PROPERTIES_FILENAMEでファイル名を指定する
アーカイブエンジンのバッファがあふれるので、プロパティファイルでマージンを大きめにとることにする:
... # Increase buffer capacity adjustment in order to avoid buffer overflow in J-PARC MR. org.epics.archiverappliance.config.PVTypeInfo.sampleBufferCapacityAdjustment = 5.0 ...
サンプリング間隔の補正は無効にしておく:
... # J-PARC MR org.epics.archiverappliance.engine.epics.scanJitterFactor=1.00 ...
デフォルトでは、AAに追加したPVが24時間経過しても見つからなかったら、諦めてそのPVのアーカイブは取りやめてしまう。無効にする:
# For the moment, don't abort never connected PVs for J-PARC MR org.epics.archiverappliance.mgmt.MgmtRuntimeState.abortArchiveRequestInMins = -1
pbファイルのディレクトリの区切りに使う文字を指定する。とりあえずデフォルトのままにしたが、アンダースコア("_")も含めておいた方がよかったかもしれない。
org.epics.archiverappliance.config.ConvertPVNameToKey.siteNameSpaceSeparators = [\\:\\-]
TOMCATの設定
${TOMCAT_HOME}/conf/server.xml
- mgmt webappが使うポートを、8080(tomcatのデフォルト)からappliances.xmlで指定したポート番号に合わせて17665にする。
... <!-- A "Connector" represents an endpoint by which requests are received and responses are returned. Documentation at : Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) Java AJP Connector: /docs/config/ajp.html APR (HTTP/AJP) Connector: /docs/apr.html Define a non-SSL HTTP/1.1 Connector on port 8080 --> <Connector port="17665" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> ...
- apache httpdとAJPを使った連携をする場合は、AJP Connectorの設定のコメントを外し適切に設定する:
... <!-- <Connector port="8009" protocol="AJP/1.3" ... redirectPort="8443" ... /> --> ...
- SHUTDOWNコマンドの使うポートは8005のままにしておく。
${TOMCAT_HOME}/conf/context.xml にMySQLの設定を追加する
- <context>に'jdbc/archappl'の設定を追加する:
... <Context> ... <!-- Uncomment this to disable session persistence across Tomcat restarts --> <!-- <Manager pathname="" /> --> <Resource name="jdbc/archappl" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" username="archappl" password="archappl" testWhileIdle="true" testOnBorrow="true" testOnReturn="false" validationQuery="SELECT 1" validationInterval="30000" timeBetweenEvictionRunsMillis="30000" maxActive="10" minIdle="2" maxWait="10000" initialSize="2" removeAbandonedTimeout="60" removeAbandoned="true" logAbandoned="true" minEvictableIdleTimeMillis="30000" jmxEnabled="true" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/archappl" /> </Context>
${TOMCAT_HOME}/lib/log4j.properties
- logローテーションを仕掛けたい。が、とりあえずそのままにしておく
# Set root logger level and its only appender to A1. log4j.rootLogger=ERROR, A1 log4j.logger.config.org.epics.archiverappliance=INFO log4j.logger.org.apache.http=ERROR # A1 is set to be a DailyRollingFileAppender log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=arch.log log4j.appender.A1.DatePattern='.'yyyy-MM-dd # A1 uses PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
起動スクリプトの修正
インストールスクリプトがAAの起動スクリプトsampleStartup.shを生成するので、環境に合わせて書き換える。
EPICSの設定
sourceするEPICS用の環境変数を設定するshellスクリプトのパスを適宜書き換える:
source /opt/archappl/setEPICSEnv.sh
export EPICS_CA_ADDR_LIST=... #export EPICS_CA_AUTO_ADDR_LIST=false #export EPICS_CA_SERVER_PORT=5064 #export EPICS_CA_REPEATER_PORT=5065 export EPICS_TS_MIN_WEST=-540 #export EPICS_CA_MAX_ARRAY_BYTES=6000000 export EPICS_CA_MAX_ARRAY_BYTES=65536
JAVA_OPTSを修正する
- -XX:MaxPermSize=128Mを削除する
- -Xmx4Gと-Xms4Gはメモリサイズに合わせて適宜調整する
アプライアンスの設定
appliances.xmlファイルのパスと、appliances.xml内の<identity>で設定した名前を指定する
export ARCHAPPL_APPLIANCES=/opt/archappl/appliances.xml export ARCHAPPL_MYIDENTITY="appliance0"
ポリシーファイルの設定
ポリシーファイルは環境変数で指定する。インストールスクリプトを実行した際に指定したファイルを指しているので、運転用のポリシーファイルを指すように書き換える:
export ARCHAPPL_POLICIES=/opt/archappl/policies.py
プロパティファイルの設定
インストールスクリプトが作るAAの起動スクリプトには何も書かれていないが、プロパティファイルも起動スクリプトから環境変数で指定する:
export ARCHAPPL_PROPERTIES_FILENAME=/opt/archappl/archappl.properties
ストレージの設定
export ARCHAPPL_SHORT_TERM_FOLDER=/localdata/archappl/sts/ArchiverStore export ARCHAPPL_MEDIUM_TERM_FOLDER=/localdata/archappl/mts/ArchiverStore export ARCHAPPL_LONG_TERM_FOLDER=/localdata/archappl/lts/ArchiverStore
データ保存先の作成
起動スクリプトでの設定に合うように、データを保存するディレクトリを作り、epicsアカウントで書き込めるようにownerを変更しておく
- rootで作業する
# mkdir -p /localdata/archappl/lts # mkdir -p /localdata/archappl/mts # mkdir -p /localdata/archappl/sts # chown epics.epics /localdata/archappl # chown epics.epics /localdata/archappl/lts # chown epics.epics /localdata/archappl/mts # chown epics.epics /localdata/archappl/sts
Apache httpdとの連携
AAの各web appにポート80番でアクセスできるようにするため、jkjarchiver-apにリバースプロキシを立ち上げる。ここではAJPを使わずに、naiiveなhttpプロキシにする
- rootで作業する
# yum install httpd httpd-tools
- /etc/httpd/conf/httpd.confには触らないようにする
- Attachmentsにあるファイルを/etc/httpd/conf.dにコピーして適宜書き換える
- 00-default.conf
- 00-proxy.conf
}}}
基本的な設定
- conf.d/00-default.cont
Timeout 600
- conf.d/00-mpm.conf
<IfModule mpm_prefork_module> ... MaxConnecitonPerChild 2000 </ifModule>
リバースプロキシの設定
- conf.d/proxy.conf
ProxyRequests Off ProxyPass /mgmt http://localhost:17665/mgmt ProxyPassReverse /mgmt http://localhost:17665/mgmt ProxyPass /retrieval http://localhost:17668/retrieval ProxyPassReverse /retrieval http://localhost:17668/retrieval <Proxy *> Order deny,allow Allow from all </Proxy>
httpdの自動起動の設定
# systemctl enable httpd # systemctl start httpd
AAの起動と確認
自動起動/自動停止させる
systemdのUnitファイルを用意し、マシンの起動時/停止時にepicsアカウントでAAが自動的に起動/停止するようにする。
- Attatchmentsからダウンロードする
# cp archappl.service /etc/systemd/systemd # systemctlc enable archappl.service
- AAを実行するUser/Groupをepicsにする
手動で起動する
# systemctl start archappl
webブラウザで管理用web appにアクセスする
次のURLにアクセスする:
http://jkjarchiver-ap.mr.jkcont:17665/mgmt
- http://jkjarchiver-ap.mr.jkcont:17665/mgmt/ui/index.html にforwardされる
- 各web appが起動する前にアクセスすると503が返ってきて"数分待て"と表示されるが、数分では起動しない。気長に待て
- 各web appが起動する前にアクセスすると503が返ってきて"数分待て"と表示されるが、数分では起動しない。気長に待て
- Archiver Appliance 運用メモに続く
参考
Attachments (12)
- install_scripts_python3.patch (5.6 KB) - added by shuei 2 months ago.
- policies.py (7.9 KB) - added by shuei 2 months ago.
- archappl.service (637 bytes) - added by shuei 2 months ago.
- deployMultipleTomcats.py (7.9 KB) - added by shuei 2 months ago.
- setEPICSEnv.sh (3.3 KB) - added by shuei 2 months ago.
- sampleStartup.sh (5.1 KB) - added by shuei 2 months ago.
- 00-default.conf (81 bytes) - added by shuei 2 months ago.
- 00-mpm.conf (4.5 KB) - added by shuei 2 months ago.
- proxy.conf (742 bytes) - added by shuei 2 months ago.
- archappl.properties (9.8 KB) - added by shuei 2 months ago.
- mariadb-server.cnf (1.8 KB) - added by shuei 8 weeks ago.
- mysql-clients.cnf (261 bytes) - added by shuei 8 weeks ago.
Download all attachments as: .zip