ADWにgoogle colaboratoryから接続する (JPOUG Advent Calendar2021 & Oracle Cloud Infrastructure Advent Calendar 2021 3日目)

この記事は

JPOUG Advent Calendar 2021

Oracle Cloud Infrastructure Advent Calendar 2021

の3日目の記事です。

 

JPOUG Advent Calendar 2021 の2日目の記事はwrcsus4さんの PDBのUnPlugとPlug でした。

Oracle Cloud Infrastructure Advent Calendar 2021 の2日目の記事はwrcsus4さんのitokazuさんのOracle Cloud で OS のログ監視を実装する  でした。

 

最近、機械学習(とpython)のお勉強でGoogle colaboratoryを使用しているのですが、データの処理※1や保存※2をDBで行いたいと思うケースが多々あり、Google colaboratoryからADWに接続する方法を調べてみました。

 

結論としては、以下のURLで手順が公開されていますので、手っ取り早く試したい方は以下をどうぞ。

Connection to Oracle Cloud from Google Colab Notebook

 

使う分には上記の手順で全く問題ないのですが、以下が気になりました。

oracle instant client導入に関して、非rpm系のライブラリが用意されているのに、無理やりalienコマンドでrpmパッケージを入れている。(google Colab はubuntu)

 

というわけでrpmパッケージを使用しない方法を試してみました。

解凍して配置&ldconfigを使用する以外、ほとんど元の記事と違いはないのですが、

ldconfigでかなりハマりました。通常、導入したライブラリ(xx.so)は環境変数LD_LIBRARY_PATHで認識してくれるはずなのですが、認識してくれず、ldconfigで対応しています。(colabはコンテナ(docker?)で実行されているようなので、そこが関係しているのか、、、、調べきれず)今回は動かしておしまいです。

 

※1 pandasで処理自体はできるのですが、SQLで処理したらもっと早く処理できるよね。と思うことがしばしば。あとは、pandas慣れしてないので、ちょっとした処理でも小一時間かかる。。。(SQLの集計処理とかPL/SQLならすぐわかるのに。。。とか)

 

※2 google driveと連携すれば、処理結果を保存できます。

LINSTORのビルド(Oracle Linux 8.3)

LINSTOR SDSを検証したくて、ビルドを試みるもかなりハマったので、メモ。

2021/4/29時点の情報です。RHEL8.3、CentOS8、AlmaLinuxも同じ手順で行けると思います。

 

#環境

Oracle Linux8.3

 

#必要なパッケージのインストール

sudo dnf install -y zip unzip make git rpm-build wget java-1.8.0-openjdk-devel python2 python3

 

##linstor-serverのrpm作成

#gradle(javaのビルドツール)のインストール

#gradleは6.7でないと、linstor-serverビルドに失敗。
wget https://services.gradle.org/distributions/gradle-6.7-bin.zip
sudo mkdir /opt/gradle
sudo unzip -d /opt/gradle gradle-6.7-bin.zip
export PATH=$PATH:/opt/gradle/gradle-6.7/bin

 

#linstorのソースダウンロード

wget http://www.linbit.com/downloads/linstor/linstor-server-1.12.0.tar.gz
mkdir -p ~/rpmbuild/SOURCES
cp linstor-server-*.tar.gz ~/rpmbuild/SOURCES
tar xvzf linstor-server-1.12.0.tar.gz
cd linstor-server-1.12.0
rpmbuild -bb linstor.spec

 

#ビルドされたrpmの確認

ls ~/rpmbuild/RPMS/noarch/
linstor-common-1.12.0-1.el8.noarch.rpm
linstor-controller-1.12.0-1.el8.noarch.rpm
linstor-satellite-1.12.0-1.el8.noarch.rpm

 

#python-linstorのビルド

wget http://www.linbit.com/downloads/linstor/python-linstor-1.7.0.tar.gz
tar xvf python-linstor-1.7.0.tar.gz
cd python-linstor-1.7.0
make rpm

ls dist
python-linstor-1.7.0-1.noarch.rpm python-linstor-1.7.0.tar.gz
python-linstor-1.7.0-1.src.rpm

 

 

##python-linstorのビルドのビルド
wget http://www.linbit.com/downloads/linstor/linstor-client-1.7.1.tar.gz
tar xvf linstor-client-1.7.1.tar.gz
cd linstor-client-1.7.1/
ls dist
linstor-client-1.7.1-1.noarch.rpm linstor-client-1.7.1.tar.gz
linstor-client-1.7.1-1.src.rpm

 

参考

https://abelog.tech/archives/94

 

日本語環境でroot.sh時に CRS-4003: Resource 'ora.crsd' is registered.

現象

1ノード目のroot.shで以下エラー

PRCT-1011 : Failed to run "crsctl". Detailed error: CRS-4003: Resource 'ora.crsd' is registered.
/bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)

 

 

環境
Oracle RAC 19.7(19.3+p30899722_190000_Linux-x86-64.zip)
RHEL 8.3

 

 

原因
OSインストール時に日本語でインストールすると、locale en_US.UTF-8がインストールされていないため。
locale -a でen_US.UTF-8 が無ければ、インストールする必要がある。

 

 

対処方法
dns install glibc-langpack-en

Oracle RAC on Azure(2020版)

 この記事は、JPOUG Advent Calendar 2020 / Azure Advent Calendar 2020 の2日目の記事です。

JPOUG Advent Calendar 2020 の1日目は @wrcsus4さんの記事でした。
Azure Advent Calendar 2020 の1日目は @jkudoさんの記事でした。


<前提>
2020年12月時点の情報です。

OS:OracleLinux 8.2
Oracle Database: 19.7
Oracle Grid Infrastructure: 19.7

 

<Azure固有>
・共有ディスク
以前は、iSCSINFSサーバをインスタンス上で構成する必要がありましたが、
Azure マネージドディスクで共有ディスクのサポートが始まりました。
Azure Ultra Disksを使用して、maxSharesを設定します。

・名前解決
以前はプライベート(内部)のDNSは解決できなかったのですが、
現在はAzure DNS Private Zonesがありますので、
VIPやSCANの名前解決はAzure DNS Private Zonesで解決します。


<他のクラウドでも共通>
・ネットワーク(マルチキャスト対応含む)
クラウド環境やコンテナ環境ではネットワークが一本しかない、
固定IPを指定できない、マルチキャスト対応してない など様々な制約があります 。
Azureもマルチキャストに対応していません。
これらの制約に対応する為、仮想ネットワーク(vxlan)を使います。vxlanはユニキャストモード使用します。
vxlanはNetworkManager Dispatcherスクリプトを作成して構成します。


インスタンスメタデータ
169.254.169.254への通信が可能だとOracle Grid Infrastructureのインストール(root.sh)に失敗します。
firewalldで169.254.169.254への通信をrejectします。


・自動化
何度も作って壊すのとクラウド間での構築手順を最大限共通化するために、以下のようなフレームワークを作っています。

マネージドサービス、インスタンス構築・・・・terraform
OS起動後の設定、インストール・・・・ansible
terraform⇒ansinbleの仲介・・・各CLIを用いたシェル


スクリーンショット

※ansibleの実行結果を張り付けた関係上、少々見づらいです。
f:id:KNOPP:20201130215909j:image


f:id:KNOPP:20201130215926j:image


f:id:KNOPP:20201130215943j:image

Oracle Linux 8でServer With GUIをインストールする

Oracle Linux 8.1(GUIなし)に"Server With GUI”をインストールしようとしたときに、

以下のようなエラーがでます。

 

sudo dnf -y group install "Server With GUI"

~略

'dnf clean packages' を実行することでキャッシュパッケージを削除できます。
エラー: トランザクションの確認時にエラー:
ファイル /usr/share/doc/libstoragemgmt/NEWS は libstoragemgmt-1.8.1-2.el8.i686 と libstoragemgmt-1.8.3-1.el8.x86_64 のインストールで競合しています。
ファイル /usr/share/man/man1/lsmcli.1.gz は libstoragemgmt-1.8.1-2.el8.i686 と libstoragemgmt-1.8.3-1.el8.x86_64 のインストールで競合しています。
ファイル /usr/share/man/man1/lsmd.1.gz は libstoragemgmt-1.8.1-2.el8.i686 と libstoragemgmt-1.8.3-1.el8.x86_64 のインストールで競合しています。
ファイル /usr/share/man/man1/simc_lsmplugin.1.gz は libstoragemgmt-1.8.1-2.el8.i686 と libstoragemgmt-1.8.3-1.el8.x86_64 のインストールで競合しています。
ファイル /usr/share/man/man5/lsmd.conf.5.gz は libstoragemgmt-1.8.1-2.el8.i686 と libstoragemgmt-1.8.3-1.el8.x86_64 のインストールで競合しています。 

 

ググってしらべたところ、以下に該当しそうです。

https://bugzilla.redhat.com/show_bug.cgi?id=178289

bugzilla.redhat.com

 

上記のwork aroundに従い、

sudo dnf -y group install "Server With GUI" --nobest

sudo dnf -y group upgrade "Server With GUI"

 

でインストールできました。

 RHEL8/CentOS8も該当すると思います。

advent calendar振り返り

Oracle Cloud always free Advent Calendar 2019の25日目です。


本日はOracle Cloud always free Advent Calendar 2019の最終日ですので、Oracle Cloudを使ってみた感想を書きたいと思います。


・always freeは太っ腹

22日目の記事で分かるように、かなり太っ腹です。CPUがちょっと弱い気もしますが、ちょっとしたVPSであれば、置き換え可能だと思います。転送量月10TBまで無料というのもかなり魅力的です。

また、automonous databaseが使用可能というのも画期的です。

 

・always freeの枯渇

11月は問題なくalways freeのcomputeインスタンスが作成できたのですが、12月に入ってからは、out of host capacityというエラーで作成できなくなりました。2インスタンスなんて太っ腹なことやらず1インスタンスにしておけば、、、と思いつつ、早急な拡充を祈るばかりです。

 

・ポリシーが分かりづらい

ポリシーの考え方がAWSGoogle Cloudに比べてかなり独特で分かりづらいです。また、簡単ポリシー割り当てウィザードみたいなものがないので、そのあたりもつらいです。今後の改善を期待したいところです。

 

Oracle Cloudはまだまだ黎明期

こう書くと怒られる気もしますが、Oracle Cloudはまだまだ黎明期だなーと感じます。理由としては、
 ・Web記事が少ない       

          メジャーな機能については日本語の記事も増えてきましたが、 マイナーな機能や使い方については、英語も含めて記事が少ない(もしくはまったくない)ことがあります。 REST APIJDBC接続(JKS)は手探りで記事を書きました。  

  ・Web記事のほとんどがコンソールベース

           Web記事ではCLIでの手順がほとんどなく、初期のAWSを思い出します。今後、UIの変更が度々走ると、UIの変更に耐えられなくなって、CLIベースの手順が増えるとは思いますが。

 

・automonous databaseへの接続はTNSがカギ

オンプレのOracle Databaseでwalletを使用していないと、接続方法に戸惑います。 基本的にTNSでwalletの位置などを指定することになるので、TNS周りが理解できてないとかなり厳しいと思います。 今回のOracle Cloud always free Advent Calendar 2019では、様々なツールから負荷をかけていますが、 sqlplusの接続から順を追って確認したおかげで、TNSまわりの理解ができ、接続まわりでハマることはありませんでした。

 

Oracle Machine Learningの学習コスト
ノートブックでの言語がPL/SQLのみとなっているため、機械学習の知識+PL/SQLのコーディング力となってしまうため、学習コストがかかります。titanicの予測あたりをやってみたかったのですが、PL/SQLでやるのがしんどくてあきらめてしまいました。
RかPythonサポートしてくれませんかねぇ。。。


以上、取り止めない感じですが、Oracle Cloud always free Advent Calendar 2019の最終日としたいと思います。

oracle notifications を使ってWeb監視結果を通知する

Oracle Cloud always free Advent Calendar 2019の24日目です。

今日は少し趣向を変えてoracle notifications を使ってみようかと思います。

 

oracle notificationsでは、以下のような流れになります。
トピックの作成
サブスクリプションの作成
トピックにメッセージを送信


今回は、トピックにメッセージを送信できる状態になった後、
Web監視の結果、異常があれば、メッセージ送信できるようにします。


トピックの作成
oci ons topic create --name web_monitor
{
・・・・・・
"topic-id": "ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtXXXXXXXXXXXXXX"
},
"etag": "9374236b"
}

 

サブスクリプションの作成
oci ons subscription create --protocol email \
--subscription-endpoint xxxxx@xxx.com \
--topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtXXXXXXXXXX

以下のようなメールが届くので、メール本文のリンクを押下する。
タイトル:Oracle Cloud Infrastructure Notifications Service Subscription Confirmation
本文:You have chosen to subscribe to the topic: web_monitor (Topic OCID: ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtezXXXXXXXX).
To confirm this subscription, click or visit the link below. If this was in error, you can ignore this message.

 

リンクを押下すると、「Subscription confirmed」と表示される。

 

 

#メッセージの送信
oci ons message publish \
--topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtez7XXXXXXXXXX \
--body "test message send"

 

Oracle Cloud Notification Message」というタイトルのメールが届くはずです。

 

#web監視用のシェル作成
cat << 'EOF' > web_monitor.sh
#!/bin/bash

target_url="http://yahoo.co.jp/"

## target_url へのアクセスを試みる
message=`curl -o /dev/null -s -w %{http_code} $target_url`

## curl 結果 http_code が 200/3xx だったらスクリプト終了
if [[ "$message" =~ 200 || "$message" =~ 3[0-9]{2} ]]; then
exit 0
fi

echo $message

oci ons message publish \
--topic-id ocid1.onstopic.oc1.ap-tokyo-1.aaaaaaaawjyrl2nuhtw3bawt7u7vrasgwwtez77chv4sii2y5XXXXXXX \
--body "target url $target_url is down"
EOF

 

#シェルへ実行権限付与

chmod +x web_monitor.sh

 

#シェルの実行
./web_monitor.sh

 

監視対象のWebホストにアクセスできなければ、メールが届きます。

 

このweb_moniter.shをcronか何かで登録すれば簡易Web監視ができます。

 

<参考>

www.s-style.co.jp

qiita.com