Exadata Patch Manager (patchmgr) (定期的な更新で Exadata を更新するためのツール) は、データベース サーバーを更新するときにソースとして dnf (旧称 yum) リポジトリを使用できることをご存知ですか?

Exadata の月次アップデートが Unbreakable Linux Network (ULN) のチャネルとして利用できることもご存知ですか?

これらの質問の両方に「はい」と答えていただければ幸いです。しかし、このことがあまり知られていないことを示す Slack メッセージや電子メール メッセージを多数受け取ったため、このブログを書く必要に迫られました。

それでは、最初から始めましょう。上で述べたように、KVM Host、KVM Guest、DomU、または Dom0 (Exadata X5〜X8) を更新する場合、適用したい更新の URL の場所を patchmgr に与えることができ、patchmgr はこれを使用してパッケージを更新することが可能です。 patchmgr の構文を見ると、precheck および upgrade コマンドで使用できる –yum_repo オプションがあることがわかります。 

 

./patchmgr --dbnodes database_node_file
  { --backup [--rolling] [--unkey] |
  --precheck { --yum_repo base_URL | --iso_repo zipped_iso_file } [ --target_version version ] [--unkey] |
  --upgrade { --yum_repo base_URL | --iso_repo zipped_iso_file } [ --target_version version ] [--rolling] [--unkey] | 
  --complete [ --target_version version ] [--unkey] |
  --rollback [--rolling] [--unkey] |
  --cleanup  [--unkey] }
  [ --log_dir { log_directory | auto } ]

通常のExadata System Software のアップグレードでは、My Oracle Support から patchmgr を実行するサーバーに iso ファイルをダウンロードすることで更新を実行できますが、非常に大規模な Exadata フリート (単純に多数の VM クラスタがあることを含む) の場合や、広範囲にわたるターゲット バージョンがある場合や、これらすべての資産に対する更新を管理および適用する管理者が多数いる場合でしたらはどうなるでしょうか?パッチソース管理を一元化すると良いかもしれません。

パッケージの広範な配布を容易にし、Exadataデータベース・サーバー・リソース用に標準化するために、データベース・サーバーの更新をULN内のチャネルとしてパッケージ化しました。

 

ノート- ストレージ サーバーは非アクティブなシステム パーティションに更新されるため、リポジトリは必要ありません。 RoCE および管理スイッチの更新はスイッチ固有の方法で配信されるため、パッケージ リポジトリも必要ありません。 
 

ULN を簡単に見てみましょう。 https://linux.oracle.com で ULN にログインし 、「Channels」タブをクリックすると、次のような内容が表示されるはずです。

uln channel

他のすべてのOracle Linux 8リポジトリを参照して下部を見ると、「Exadataリリース23.1.5.0.0 db server installation packages (x86_64)」およびExadataリリース23.1.9.0.0 db server installation packages (x86_64)いう名前のチャネルが表示されます。これらは実際のリポジトリ名 (先ほど使用した例では「exadata_dbserver_23.1.5.0.0_x86_64_base」および「exadata_dbserver_23.1.9.0.0_x86_64_base」) に対応しており、それぞれに約 1,060 個ほどのパッケージがあります。

ess 23 channel

これらのアップデートは、「latest」リポジトリを使用するのではなく、完全なインストールとして提供されることにも注意してください。 Exadata ハードウェアおよびソフトウェア スタック全体にわたって、各リリースのパッケージを厳選、テスト、認定しています。

ULN ではチャネルが表示されますが、どのように使用するのでしょうか?

質問してよかったです。設計上、patchmgr は ULN と直接通信しません。 patchmgr がこれらのチャネルを使用できるようにするには、データベース サーバーと patchmgr を実行しているシステムがアクセスできる内部サーバーにチャネルをミラーリングする必要があります。

DNFミラーに入る!!! 

dnf (または yum) ミラーは、ULN に登録され、特定のチャネルをダウンロード (ミラーリング) し、HTTP 経由で使用できるように構成された Linux サーバーです。 

それでは、クラックしてみましょう。ここでいくつかの仮定を立てます。

  1. Oracle Linux 8 を実行している VM またはサーバーがあり、dnf ミラーサーバーとして使用できること (以下の例では、私のサーバーは「yumrepo」と呼ばれています)。
  2. dnf ミラーサーバーへの root アクセス権があること
  3. dnf ミラー サーバーは、更新するすべての Exadata データベース サーバー (KVM HOST、KVM Guest、Dom0、および DomU) にアクセス可能なこと
  4. ULN でアクティブな CSI があること

これから説明する中心的な手順は次のとおりです。

  1. dnfミラーサーバーをULNに登録する
  2. サーバーを1つ以上のExadata channles にサブスクライブします
  3. 上記のチャネルをサーバーにミラーリングします
  4. ミラーリングされたチャネルを提供するように Apache HTTP を構成する

dnfミラーサーバーをULNに登録する

この手順は簡単です。各 OL8 インストールには、dnf ミラー サーバーを ULN に「接続」し、ミラーリングするチャネルの情報をサーバーに提供するための uln-register と呼ばれる単純なユーティリティが含まれています。

dnf ミラーサーバー上の root ユーザーとして、uln-register ユーティリティを実行します。

 

[root@yumrepo ~]# uln-register

 

その後の手順は非常に簡単で、ここに詳しく文書化されています –  https://docs.oracle.com/en/operating-systems/oracle-linux/software-management/sfw-mgmt-ConfigureaSystemtoUseULN.html#register-with-uln

また、このサーバーが「Yumサーバー」であることをULNに伝える必要があります。これを行う良い方法は、uln-channel コマンドを使用することです。

 

 

[root@yumrepo ~]# uln-channel --enable-yum-server

 

プロンプトが表示されたら、適切な ULN ユーザー名とパスワードを指定します。

Exadata Channles の追加

これで、dnf ミラーサーバーが ULN に登録されたので、関連する Exadata チャネルにサブスクライブできるようになります。これを行うには、登録したばかりの dnf ミラー サーバーの linux.oracle.com の「System Details」ページに移動します。次のようになります。

exadata channel

「Manage Subscriptions 」ボタンに気づきましたか?それをクリックすると、適切な Exadata リリース チャネルを追加できるシャトル メニューが表示されます。以下に示すように、Exadata System Software 23.1.9、23.1.8、 23.1.7 のチャネルを追加しました。 

ess 23 channel

[Save Subscriptions] をクリックすると、次回サーバー上で dnf 更新を行うときに、これらのリポジトリが使用できるようになります (さらに重要なことに、ミラーリングに使用できるようになります)。 

次に進む前に、時間をかけて利用可能なチャネルを調べてください。利用可能な Exadata リリースが多数あることに気づくでしょう。したがって、単一の dnf ミラー・サーバーを使用して、Exadata System Software 22.1 (Oracle Linux 7 ベース)、23.1 (Oracle Linux 8 ベース)、および将来のリリースをホストできます。すべては 1 つのmirrorから!

DNF ミラーにチャネルを追加するもう 1 つの方法は、uln-channel を使用することです。ヘルプを見てみます。

[root@yumrepo ~]# uln-channel --help
Usage: uln-channel [options]

Options:
-c CHANNELS, --channel=CHANNELS
                        name of channel you want to (un)subscribe
-a, --add             subscribe to channel
-r, --remove          unsubscribe from channel
-l, --list            list channels
-b, --base            show base channel of a system
-L, --available-channels
                        list all available child channels
-v, --verbose         verbose output
-u USER, --user=USER  your user name
-p PASSWORD, --password=PASSWORD
                        your password
--enable-yum-server   set yum server
--disable-yum-server  set yum server
-h, --help            show this help message and exit

 

したがって、コマンドラインから 1 つ以上のチャネルを追加するには、次のようにすることができます。

uln-channel -a -c channel [-c channel …]

 

チャネルを確認するには、uln-channel –list にサブスクライブした dnf ミラー サーバーが使用されます。 

[root@yumrepo ~]# uln-channel --list
ol8_x86_64_UEKR7
ol8_x86_64_baseos_latest
ol8_x86_64_appstream
ol8_x86_64_ksplice
exadata_dbserver_23.1.9.0.0_x86_64_base
exadata_dbserver_23.1.8.0.0_x86_64_base
exadata_dbserver_23.1.7.0.0_x86_64_base

 

これらのいずれかをミラーリングする前に、それらについて少し情報を取得しましょう。具体的には、ミラーリング時にそれぞれが使用するスペースのサイズです。 

[root@yumrepo ~]# dnf repoinfo exadata*

This system is receiving updates from Unbreakable Linux Network or Spacewalk.
Exadata release 23.1.7.0.0 db server installation packages (x86_64)                               491 kB/s | 1.4 MB     00:02
Exadata release 23.1.8.0.0 db server installation packages (x86_64)                               3.3 kB/s | 3.0 kB     00:00
Exadata release 23.1.9.0.0 db server installation packages (x86_64)                               3.3 kB/s | 3.0 kB     00:00
Repo-id            : exadata_dbserver_23.1.7.0.0_x86_64_base
Repo-name          : Exadata release 23.1.7.0.0 db server installation packages (x86_64)
Repo-status        : enabled
Repo-revision      : 1698083972
Repo-updated       : Mon 23 Oct 2023 05:59:32 PM GMT
Repo-pkgs          : 1,069
Repo-available-pkgs: 1,029
Repo-size          : 1.3 G
Repo-baseurl       : https://linux-update.oracle.com/XMLRPC/GET-REQ/exadata_dbserver_23.1.7.0.0_x86_64_base
Repo-expire        : 1 second(s) (last: Mon 22 Jan 2024 03:50:32 AM GMT)

Repo-id            : exadata_dbserver_23.1.8.0.0_x86_64_base
Repo-name          : Exadata release 23.1.8.0.0 db server installation packages (x86_64)
Repo-status        : enabled
Repo-revision      : 1700242893
Repo-updated       : Fri 17 Nov 2023 05:41:33 PM GMT
Repo-pkgs          : 1,070
Repo-available-pkgs: 1,030
Repo-size          : 1.4 G
Repo-baseurl       : https://linux-update.oracle.com/XMLRPC/GET-REQ/exadata_dbserver_23.1.8.0.0_x86_64_base
Repo-expire        : 1 second(s) (last: Mon 22 Jan 2024 12:45:36 AM GMT)

Repo-id            : exadata_dbserver_23.1.9.0.0_x86_64_base
Repo-name          : Exadata release 23.1.9.0.0 db server installation packages (x86_64)
Repo-status        : enabled
Repo-revision      : 1703126080
Repo-updated       : Thu 21 Dec 2023 02:34:40 AM GMT
Repo-pkgs          : 1,070
Repo-available-pkgs: 1,030
Repo-size          : 1.5 G
Repo-baseurl       : https://linux-update.oracle.com/XMLRPC/GET-REQ/exadata_dbserver_23.1.9.0.0_x86_64_base
Repo-expire        : 1 second(s) (last: Mon 22 Jan 2024 12:45:37 AM GMT)
Total packages: 3,209

 

各チャネルのサイズは約 1.5 GB で、それぞれに約 1,050 個のパッケージが含まれていることがわかります。 Exadataのリリースには、Oracle DatabaseとExadata System Softwareを実行するために必要なパッケージのみが含まれているため、パッケージのリストは、1,700以上のパッケージが含まれるベースのLinux 8リポジトリと比較するとはるかに小さいことに注意してください。

ミラーディレクトリを準備する

次に、チャネルをミラーリングする場所を準備する必要があります。 

/u01/yum をベースとして使用しましょう。

[root@yumrepo ~]# mkdir -p /u01/yum

 

Apache HTTP サーバーと dnf-utils をインストールする

チャネルをローカルにミラーリングするには、yum-utils がサーバーにインストールされていることを確認する必要があります。 

[root@yumrepo ~]# rpm -qa | grep -i yum-utils yum-utils-4.0.21-23.0.1.el8.noarch

 

上記のコマンドでエントリが返されない場合は、パッケージをインストールする必要があります。

[root@yumrepo ~]# dnf install -y yum-utils

 

ミラーリングされたチャネルを提供するには HTTP サーバーが必要なので、Apache HTTP サーバーもインストールする必要があります。

[root@yumrepo ~]# dnf install -y httpd

 

Apache HTTP サーバーの構成

Apache がインストールされ、チャネルをミラーリングする場所ができたので、いくつかの構成手順を実行してみましょう。

先ほどのベースの場所を/var/www/html/yumにリンクします。

[root@yumrepo ~]# ln -s /u01/yum /var/www/html/yum

 

Oracle Linux サーバーで SELinux がenforcingモードで有効になっている場合は、ミラー ディレクトリに正しいコンテキストを設定する必要があります。

[root@yumrepo ~]# semanage fcontext -a -t httpd_sys_content_t "/u01/yum(/.*)?"
[root@yumrepo ~]# restorecon -RFv /u01/yum

これで、Apache httpd.conf ファイルを編集できるようになりました。

 

[root@yumrepo ~]# sed -i "/^#ServerName www.example.com:80/a ServerName $(hostname -i):80" /etc/httpd/conf/httpd.conf

そして、FollowSymLinks オプションがアクティブであることを確認します。 <Directory “/var/www/html”> 見出しの下で、FollowSymLinks がオプション行に含まれていることを確認します。

[root@yumrepo ~]# cat /etc/httpd/conf/httpd.conf | grep "/var/www/html" -A20
DocumentRoot "/var/www/html"
    
#
# Relax access to content within /var/www.
#

  
    AllowOverride None
    # Allow open access:
    Require all granted

 
    
# Further relax access to the default document root:

  
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important.  Please see
    # http://httpd.apache.org/docs/2.4/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks

    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride None

 

次に、Web サーバーを起動してステータスを確認してみましょう。

[root@yumrepo ~]# systemctl enable --now httpd
[root@yumrepo ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2024-01-19 03:17:36 GMT; 3 days ago
    Docs: man:httpd.service(8)
Process: 230188 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
Main PID: 155561 (httpd)
Status: "Running, listening on: port 80"
    Tasks: 213 (limit: 5408)
Memory: 11.2M
CGroup: /system.slice/httpd.service
        ├─155561 /usr/sbin/httpd -DFOREGROUND
        ├─230194 /usr/sbin/httpd -DFOREGROUND
        ├─230195 /usr/sbin/httpd -DFOREGROUND
        ├─230196 /usr/sbin/httpd -DFOREGROUND
        └─230197 /usr/sbin/httpd -DFOREGROUND

Jan 21 03:09:02 yumrepo systemd[1]: Reloading The Apache HTTP Server.
Jan 21 03:09:02 yumrepo systemd[1]: Reloaded The Apache HTTP Server.
Jan 21 03:09:02 yumrepo httpd[155561]: Server configured, listening on: port 80
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

 

最後に、ポート 80 への受信トラフィックがサーバーに到達できることを確認しましょう。

[root@yumrepo ~]# firewall-cmd --permanent --add-service=http
[root@yumrepo ~]# firewall-cmd --reload

 

リポジトリをローカル Yum ミラーに同期する

Exadata チャネルをミラーリングできるようになりました。これは、次のように dnf reposync コマンドを使用して行われます。ここでは、複数の –repoid オプションを使用して、1 つのコマンドで 3 つのチャネルをミラーリングしていることに注意してください。ネットワーク接続とミラーリングしているチャネルの数によっては、これには時間がかかる場合があります。

[root@yumrepo ~]# dnf reposync --delete --download-metadata -p /u01/yum --repoid exadata_dbserver_23.1.7.0.0_x86_64_base --repoid exadata_dbserver_23.1.8.0.0_x86_64_base --repoid exadata_dbserver_23.1.9.0.0_x86_64_base

 

これにより、サブスクライブした 3 つのチャネルのすべてのパッケージが /u01/yum にダウンロードされ、Apache はこれらを http://yumrepo/yum/exadata_dbserver_xxx_x86_64_base の形式ですぐに提供します。xxx はリリース番号 (リリース 23.1.7.0 など) です。 0 はhttp://yumrepo/yum/exadata_dbserver_23.1.7.0.0_x86_64_baseになります 。

 

patchmgr の接続

Exadata の patchmgr ユーティリティで yum ミラーを使用するのは、非常に簡単です。事前チェックとアップグレードの両方の手順には、入力として –yum-repo を提供するオプションがあります。 

patchmgr --dbnodes database_node_file --precheck --yum_repo base_URL --target_version version
patchmgr --dbnodes database_node_file --upgrade --yum_repo base_URL --target_version version --rolling

 

これをより具体的な例として、一連の Exadata データベース サーバーを 23.1.9.0.0 リリースに更新すると仮定します。

patchmgr --dbnodes database_node_file --precheck --yum_repo http://yumrepo/yum/exadata_dbserver_23.1.9.0.0_x86_64_base --target_version 23.1.9.0.0
patchmgr --dbnodes database_node_file --upgrade --yum_repo http://yumrepo/yum/exadata_dbserver_23.1.9.0.0_x86_64_base --target_version 23.1.9.0.0 --rolling

上記では、patchmgr の使用方法を完全に説明しているわけではなく、作成したミラーを使用する方法だけを説明しているだけであることに注意してください。サーバーを更新する前に、必ずサーバーのバックアップを作成する必要があります。 Exadataのドキュメントは、 patchmgr の使用法とその正しい実行順序を始めるのに最適です。 

最終的な考え

これで、Exadata ソフトウェア チャネルの yum ミラーの作成と patchmgr による使用が完了しました。これらのミラーはデータベース サーバーの更新専用であることに注意してください。 

ご覧のとおり、ミラー サーバーの設定は特に難しいものではなく、長期的には Exadata データベース サーバーを保守する際の作業が楽になります。前に述べたように、Exadata チャネルは完全リリースであるため、毎月最新のチャネルをサブスクライブし、dnf reposync を使用してそれをミラーリングする必要があります。

Exadata ソフトウェアを一元管理する目的で HTTP サーバーが実行されているため、これをストレージ サーバーの自動更新元の場所として使用することもできます。 詳細については、こちらをご覧ください

リソース

Oracle Linuxドキュメント – Oracle Linuxでのソフトウェアの管理

ローカルULNミラーのセットアップ

Oracle Exadataデータベース・サーバーの更新