弊社製品をLinux上でお使いいただく際のTips その1

by 大川智久 | 2022年03月05日

f:id:ohkawat:20220305034516p:plain

こんにちは、CData Software Japanテクニカルサポートエンジニアの大川です。

本記事では、これまでお問い合わせいただいた内容をもとに、弊社製品をLinux上でお使いいただく際のTipsをいくつかご紹介します。

1. 今回ご紹介するTipsのプロダクト

CData Sync

www.cdata.com

CData API Server

www.cdata.com

2. CData SyncやCData API Serverのサービス化

インストール後、インストールディレクトリ配下のserviceコマンドを実行することで、自動的にサービス実行用のユーザが作成され、systemdのサービスとして登録できます。(デフォルトのインストール先へインストールした場合の例。「%」はプロンプトです、以下同様)

CData Syncの場合

% sudo systemctl /opt/sync/service
JAVA: [/bin/java]
PRODUCT_HOME: [/opt/sync]
Installing CData Sync service into /etc/systemd/system/cdatasync.service
Created symlink from /etc/systemd/system/multi-user.target.wants/cdatasync.service to /etc/systemd/system/cdatasync.service.
Done
% sudo systemctl start cdatasync
% sudo systemctl status cdatasync
● cdatasync.service - CData Sync
   Loaded: loaded (/etc/systemd/system/cdatasync.service; enabled; vendor preset: disabled)
   Active: active (running) since ...

CData API Serverの場合

% sudo /opt/apiserver/service
JAVA: [/bin/java]
PRODUCT_HOME: [/opt/apiserver]
Installing API Server 2021 service into /etc/systemd/system/apiserver.service
Created symlink from /etc/systemd/system/multi-user.target.wants/apiserver.service to /etc/systemd/system/apiserver.service.
% sudo systemctl start apiserver
% sudo systemctl status apiserver
● apiserver.service - API Server 2021
   Loaded: loaded (/etc/systemd/system/apiserver.service; enabled; vendor preset: disabled)
   Active: active (running) since ...

いずれも上記でenabledの状態になりますので、サーバを再起動した場合でも自動起動されるようになります。また、それぞれ自動的にcdatasync, apiserverというユーザが作成され、それらのユーザでサービスが起動されるようになりますので、rootユーザで直接起動するよりセキュリティ的にも好ましい起動方法となります。

JVMオプションの指定

上記で作成したサービスのUnit定義ファイルはそれぞれ /etc/systemd/system/cdatasync.service/etc/systemd/system/apiserver.service になります。この中の[Service]セクションでjavaコマンドが起動されますので、そちらに直接オプションを指定していただいてもよいですし、同じ[Service]セクションにJAVA_TOOL_OPTIONS環境変数を指定する方法でもよいです。

例えばJVMのメモリ監視等を行うためにJMXを使いたい場合、以下のようにEnvironmentオプションで設定できます(以下はあくまで例であり接続認証無しとなりますので、詳しい設定値はJREのマニュアル等を参照してください)。

...
[Service]
Environment="JAVA_TOOL_OPTIONS=-Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.rmi.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=127.0.0.1"
...

Unit定義ファイルを変更したら、systemdへ変更を反映しサービスを再起動することで設定が反映されます(以下はcdatasyncの例)。

% sudo systemctl daemon-reload
% sudo systemctl restart cdatasync

以下のようにVisualVM (https://visualvm.github.io/) でSSHトンネル経由でリモートからJMX接続できました。

f:id:ohkawat:20220305032629p:plain

3. リバースプロキシの利用

API Serverをお使いのお客様で「URL(リソース)ごとにIPアドレスの制限を行いたい」といったご要望や「APIのレスポンス時間を知りたい」といったご要望をいただくことがあります。現状ではAPI Server自体ではそれらをサポートしていませんので、対応案としてApacheなどのリバースプロキシを挟み、リバースプロキシ側で実現する構成があります。もちろん、サーブレットコンテナへ配備してそちらのセキュリティ機能を利用する方法もありますが、ここではApacheをリバースプロキシとして利用する手順の例をご紹介します。

なお、以下はAPI Server向けの手順例ですが、Syncでも同様の手順で構築いただけます。

3.1. Apacheのインストール

まずはhttpd (Debian系ではapache2) パッケージをインストールします。以後、Amazon Linux 2を利用した場合の手順です。OS起動時にApacheも起動するようにしておきます。

% sudo yum install httpd
% sudo systemctl enable httpd

3.2. リバースプロキシの設定

CData API Server用の設定ファイルを作成し、mod_proxyの設定をします。

% sudo vi /etc/httpd/conf.d/apiserver.conf
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
ProxyPreserveHost On

3.3. ログの設定

例としてApacheのログにリクエストが到着してからレスポンスを返し終わるまでの時間を出力するようにしてみます。設定ファイル /etc/httpd/conf/httpd.conf で「combinedio」という文字列を検索すると'LogFormat'の設定がありますので、以下のように「%D」を追加します。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O %D" combinedio

同じ設定ファイルのCustomLog設定の行で、以下のようにフォーマットをcombinedからcombinedioに変更します。

CustomLog "logs/access_log" combinedio

3.4. Apacheの起動

以下のようにApacheを起動します。

% sudo systemctl start httpd

起動したら、http://localhost/でApache経由でAPI Serverにアクセスできることを確認してください。

3.5. その他

URLごとのアクセス制御やHTTPS対応も、Apacheをリバースプロキシとして使うことで可能になります。本記事では詳しい設定方法は省略しますが、ネット上に多くの情報があります。

3.6. 注意点

リバースプロキシを挟むことでレイヤが1つ増えるため、セキュリティについて追加の考慮が必要になることに留意してください。

例えばAPI Serverからは全ての接続元がlocalhostとして認識されるため、API Server上の「信頼されたIP アドレス」の設定は効果がなくなります。そのため、アクセス元のIPアドレスでアクセスを制限したい場合はApache側の設定で行うか、OSのfirewalldで行うか、更に上位のファイアウォールで行うか等の検討が必要です。また、元々のポート(今回の例では8080番)には外部からアクセスされないよう、同じくファイアウォール等で対応する必要がある点も考慮が必要です。

4. 最後に

今後も弊社製品をLinuxでご利用する場合の情報について、Tipsとして紹介していきたいと思います。

関連コンテンツ

トライアル・お問い合わせ

30日間無償トライアルで、CData のリアルタイムデータ連携をフルにお試しいただけます。記事や製品についてのご質問があればお気軽にお問い合わせください。