[[PageOutline]]
= はじめに =
このドキュメントはJ-PARC加速器向けに[https://slacmshankar.github.io/epicsarchiver_docs/ Archiver Appliance (AA)]をインストールして立ち上げた際の作業メモなので、適宜読み替えて頂きたい。
* AAの[https://slacmshankar.github.io/epicsarchiver_docs/installguide.html インストールガイド]を良く読んでおくこと。
* AAの[https://slacmshankar.github.io/epicsarchiver_docs/installguide.html インストールガイド]を良く読んでおくこと。
* [https://slacmshankar.github.io/epicsarchiver_docs/quickstart.html Quickstart]はあくまでもAAを試食するためのセットアップ方法。よく読むと「Quickstartの方法では設定が保存されない。AAを再起動したら、アーカイブしたいPVを再度AAに設定しなければならない」旨が書いてある。
* jkjarchiver-ap.mr.jkcontにインストールする
* OS : SL 6.8 / x86_64
* epicsアカウントで作業する
* 作業ディレクトリ: /home/epics/archappl
* AAのインストール先: /opt/archappl
* AAのデータ保存先: /localdata/archappl
* 各種設定ファイル・起動スクリプトは(できるだけ)mercurialでバージョン管理している
* インストールの際に、X Window System上での作業が必要
* AAインストール後の運用については[[wiki:Archiver Appliance 運用メモ|Archiver Appliance 運用メモ]]を参照のこと
= ダウンロード =
AAに必要なソフトウェアをあらかじめダウンロードしておく。ここでは/home/epics/archappl/downloadにダウンロードする。
== Archiver Appliance ==
インストールするのはバイナリの配布物だが、ソースコードに管理用のスクリプトの例が含まれているので一緒にダウンロードしておく。
* バイナリ
{{{
% wget https://github.com/slacmshankar/epicsarchiverap/releases/download/v0.0.1_SNAPSHOT_20-Sept-2016/archappl_v0.0.1_SNAPSHOT_20-September-2016T13-50-17.tar.gz
}}}
* ソースコード
{{{
% git clone https://github.com/slacmshankar/epicsarchiverap epicsarchiverap.git
}}}
== Apache Tomcat ==
AAを走らせるにはApache Tomcat 7.0.61以降が必要。[http://tomcat.apache.org/download-80.cgi Apache Tomcat配布元]から8.5.16をダウンロードした。
== MySQL ==
AAがアーカイブするレコードの情報を記録するのに、MySQL 5.1以降が必要。
SL6の配布物からMySQL 5.1.73をrpmでインストールした。
{{{
# yum install mysql mysql-server mysql-devel
}}}
今回は
* AAを実行するマシンでMySQLサーバも走らせる
* MySQLのテーブルはNFSサーバ上に置く
という構成にしたが、MySQLサーバはAAとは独立したマシンにした方がよかったかもしれない。
== MySQL クライアント jar ==
mysql-connector-javaを[http://dev.mysql.com/downloads/connector/j/ MySQL本家]からダウンロードする。
SL6標準のrpmパッケージは依存するライブラリを多数インストールするのでやめておく。
== JDK 1.8 ==
制御計算機にはすでにインストールしてあるので省略。
== zenity ==
制御計算機にはSL標準のrpmパッケージがインストールしてあるので省略。
== tar ballの展開 ==
{{{
% mkdir -p ~/archappl/workspace
% cd ~/archappl/workspace
% tar xf ../download/archappl_v0.0.1_SNAPSHOT_20-September-2016T13-50-17.tar.gz
% tar xf ../download/mysql-connector-java-5.1.40.tar.gz
}}}
= MySQLのセットアップ =
== uid, gid ==
mysql:mysqlが27:27になっている(mysqlをインストールする際に作られる?)のを、既存のマシンにあわせて38099:38099にする。
mysqlが使うディレクトリのownerも変えておく:
{{{
# chown 38099:38099 /var/lib/mysql
# chown 38099:38099 /var/run/mysql
}}}
== dbを置くディレクトリ ==
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/mysql5.1/jkjarchiver-ap
# chown 38099:38099 /svrdb/mysql5.1/jkjarchiver-ap
}}}
== /etc/my.cnf ==
MySQLの設定ファイルをリポジトリからコピーして使う。
{{{
[mysqld]
#datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
#user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
#symbolic-links=0
#datadir=/localdata/mysql
#socket=/localdata/mysql/mysql.sock
datadir=/svrdb/mysql5.1/jkjarchiver-ap/
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
character-set-server = utf8
innodb_flush_log_at_trx_commit = 1
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
}}}
== logrotate ==
/etc/logrotate.d/mysqld に手順が書いてある。後回し。
== mysqlサーバ自動起動の設定 ==
{{{
# cd /etc/rd.c/ini.d
# /sbin/chkconfig --level 3 mysqld on
# /sbin/chkconfig --level 4 mysqld on
# /sbin/chkconfig --level 5 mysqld on
}}}
== MySQLサーバの起動 ==
dbが存在しない場合は、MySQLサーバの初回起動時に、スクリプトがdbを作ってくれる。
{{{
# /etc/rc.d/init.d/mysqld start
MySQL データベースを初期化中: Installing MySQL system tables...
Filling help tables...
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h jkjarchiver-ap.mr.jkcont password 'new-password'
Alternatively you can run:
/usr/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/bin/mysqlbug script!
[ OK ]
mysqld を起動中: [ OK ]
}}}
== /usr/bin/mysql_secure_installation ==
MySQLの初期設定を行う。質問をよく読む。Yes/Noの質問には全てYで答える。
{{{
# /usr/bin/mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MySQL comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!
}}}
== schemaの作成 ==
DB(archappl), ユーザー(archappl)とパスワード(archappl)を作る。
{{{
% mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
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.00 sec)
mysql> GRANT ALL PRIVILEGES ON archappl.* TO 'archappl'@'localhost' IDENTIFIED BY 'archappl';
Query OK, 0 rows affected (0.00 sec)
}}}
== テーブルの作成 ==
AA用のテーブルはAAのインストールスクリプト(後述)が作ってくれる。
= Archiver Applianceのインストール =
インストールスクリプトを走せると、
1. MySQLのテーブル
1. Tomcatのデプロイ
1. アプライアンスの設定ファイルの作成
1. 起動スクリプトの作成
をやってくれる
== インストール先のディレクトリ ==
AAをインストールするディレクトリ(/opt/archappl)をあらかじめ掘っておく
{{{
# mkdir -p /opt/archappl
}}}
== ポリシーファイル ==
ポリシーファイルは AAにレコードを登録する際に用いられるファイルで、
* LTS/MTS/STSの設定
* レコードをサンプルする方法(monitor/scan)とサンプリング時間
* 値と一緒に保存するHIGH/HIGH/LOW/LOLO等のフィールド
等をPythonのdictionaryとして記述する。
インストールスクリプトを走らせる前に、ポリシーファイルを用意しておく。雛形が
{{{
epicsarchiverap.git/src/sitespecific/tests/classpathfiles/policies.py
}}}
に用意されている。
* インストールスクリプトがポリシーファイルの所在を尋ねてくる。存在しないファイルを指定すると、スクリプトの実行に失敗する
* 中身は後で書き換えるので、ここでは気にしない
* 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にしておく。
== インストールスクリプト ==
予めインストール先のディレクトリを作っておく。epicsアカウントで書き込めるようにownerを変更しておく:
{{{
# mkdir -p /opt/archappl
# chown epics.epics /opt/archappl
}}}
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 の所在
* 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-8.5.16
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のクラスタを組む場合は、各ノードに同じファイルのコピーを置くか、共有ディレクトリに置いておく
{{{
appliance0
jkjarchiver-ap.mr.jkcont:16670
http://jkjarchiver-ap.mr.jkcont:17665/mgmt/bpl
http://jkjarchiver-ap.mr.jkcont:17666/engine/bpl
http://jkjarchiver-ap.mr.jkcont:17667/etl/bpl
http://localhost:17668/retrieval/bpl
http://jkjarchiver-ap.mr.jkcont:17668/retrieval
}}}
== プロパティファイル ==
archappl.propertiesでAAの動作を設定する。
* デフォルトでは各web appのWEB-INF/classes/archappl.propertiesが使われる
* 例えば: /opt/archappl/engine/webapps/engine/WEB-INF/classes/archappl.properties
* 起動スクリプトの環境変数でファイル名を指定する
アーカイブエンジンのバッファがあふれるので、プロパティファイルでマージンを大きめにとることにする:
{{{
...
# 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
...
}}}
pbファイルのディレクトリの区切りに使う文字を指定する。とりあえずデフォルトのままにしたが、アンダースコア("_")も含めておいた方がよかったかもしれない。
{{{
org.epics.archiverappliance.config.ConvertPVNameToKey.siteNameSpaceSeparators = [\\:\\-]
}}}
== TOMCATの設定 ==
=== ${TOMCAT_HOME}/conf/server.xml ===
* mgmt webappが使うポートを、8080(tomcatのデフォルト)からappliances.xmlで指定したポート番号に合わせて17665にする。
{{{
...
...
}}}
* apache httpdとAJPを使った連携をしない場合は、AJP Connectorの設定をコメントアウトしておく:
{{{
...
...
}}}
* SHUTDOWNコマンドの使うポートは8005のままにしておく。
=== ${TOMCAT_HOME}/lib/log4j.properties ===
{{{
# 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
}}}
=== ${TOMCAT_HOME}/conf/context.xml にMySQLの設定を追加する ===
* 'jdbc/archappl'の設定を追加する:
{{{
...
WEB-INF/web.xml
}}}
== 起動スクリプトの修正 ==
インストールスクリプトがAAの起動スクリプトsampleStartup.shを生成するので、環境に合わせて書き換える。
=== アプライアンスの設定 ===
{{{
export ARCHAPPL_APPLIANCES=/jk/dev/operation_app/jkControl/ArchiverAppliance/deploy/appliances.xml
export ARCHAPPL_MYIDENTITY="appliance0"
}}}
=== EPICSの設定 ===
EPICS用の環境変数を設定するshスクリプトをsourceする:
{{{
source /jk/dev/operation_app/jkControl/ArchiverAppliance/deploy/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
}}}
=== ポリシーファイル ===
ポリシーファイルは環境変数で指定する。インストールスクリプトを実行した際に指定したファイルを指しているので、運転用のポリシーファイルを指すように書き換える:
{{{
export ARCHAPPL_POLICIES=/jk/dev/operation_app/jkControl/ArchiverAppliance/deploy/policies.py
}}}
=== プロパティファイル ===
インストールスクリプトが作るAAの起動スクリプトには何も書かれていないが、プロパティファイルも起動スクリプトから環境変数で指定する:
{{{
export ARCHAPPL_PROPERTIES_FILENAME=/jk/dev/operation_app/jkControl/ArchiverAppliance/deploy/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を変更しておく:
{{{
# 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プロキシにする:
{{{
# yum install httpd24-httpd-tools httpd24-httpd
}}}
* /opt/rh/httpd24/root/etc/httpd/conf/httpd.confには触らないようにする
* ドキュメントのディレクトリにあるファイルをconf.dにコピーして適宜書き換える
{{{
# cd /opt/rh/httpd24/root/etc/httpd/conf.d
# cp /opt/rh/httpd24/root/usr/share/doc/httpd24-httpd-2.4.18/httpd-default.conf 00-default.conf
# cp /opt/rh/httpd24/root/usr/share/doc/httpd24-httpd-2.4.18/httpd-mpm.conf 00-mpm.conf
}}}
== 基本的な設定 ==
* conf.d/00-default.cont
{{{
Timeout 600
}}}
* conf.d/00-mpm.conf
{{{
...
MaxConnecitonPerChild 2000
}}}
== リバースプロキシの設定 ==
* 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
Order deny,allow
Allow from all
}}}
== httpd24の自動起動の設定 ==
{{{
# chkconfig --add httpd24-httpd
# chkconfig --level 3 httpd24-httpd on
# chkconfig --level 4 httpd24-httpd on
# chkconfig --level 5 httpd24-httpd on
}}}
= AAの起動と確認 =
== 自動起動/自動停止させる ==
/etc/rc.d/init.dに起動スクリプトを用意し、マシンの起動時/停止時にepicsアカウントでAAが自動的に起動/停止するようにする。
インストールスクリプトが作った起動スクリプトをrcスクリプトに書き換えたものが
{{{
/jk/dev/operation_app/jkControl/ArchiverAppliance/deploy/sampleStartup.sh
}}}
に置いてある。/etc/rc.d/init.dにコピーし、chkconfigを使って適切にsymlinkを張る:
{{{
# cp /jk/dev/operation_app/jkControl/ArchiverAppliance/deploy/sampleStartup.sh /etc/rc.d/init.d/archappl
# /sbin/chkconfig --add archappl
# chkconfig --level 3 archappl on
# chkconfig --level 4 archappl on
# chkconfig --level 5 archappl on
}}}
== 手動で起動する ==
{{{
# /etc/rc.d/init.d/archappl start
}}}
== 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が返ってきて"数分待て"と表示されるが、数分では起動しない。気長に待て
* [[wiki:Archiver Appliance 運用メモ|Archiver Appliance 運用メモ]]に続く
= 参考 =
* [https://slacmshankar.github.io/epicsarchiver_docs/installguide.html Archiver Appliance Install Guide]
* [https://slacmshankar.github.io/epicsarchiver_docs/admin.html Archiver Appliance Administration Guide]
* [https://slacmshankar.github.io/epicsarchiver_docs/api/mgmt_scriptables.html Business Process Logics for scripting]
* [https://github.com/jeonghanlee/epicsarchiverap-sites Site-specific (ESS) EPICS Archiver Appliance Deployment (for CentOS7)]