著者 | JiekeXu
出典|パブリック アカウント JiekeXu DBA Road (ID: JiekeXu_IT)
転載する必要がある場合は、許可を得るためにご連絡ください | (個人 WeChat ID: JiekeXu_DBA)
みなさん、こんにちは。私は JiekeXu です。またお会いできてとてもうれしいです。今日は、国内データベース | GBase 8c 分散展開について見ていきます。ようこそ、青い文字「JiekeXu DBA Road」をクリックして私の公開番号をフォローしてください、スターまたはトップ、より多くの乾物ができるだけ早く到着します。
目次 はじめに
GBase
8c のインストールとアンインストール インストール
プロセス
その他のインストール チェック項目
ユーザーの作成と sudoer の設定
相互信頼の設定
NTP 時刻同期の設定 インストール デプロイ ダウンロード インストール パッケージ プラン クラスタ トポロジの編集
yml ファイルの編集 データベースの インストール データベースの 接続 データベースのアン インストール データベースの インストールで発生した問題 問題1 問題 質問 2 質問 3 質問 4 参考リンク
序文
NTU General GBase 8c は、 openGauss 3.0 に基づくマルチモードおよびマルチステートの分散データベースであり、行ストレージ、列ストレージ、メモリなどの複数のストレージ モードと、スタンドアロン、アクティブ/スタンバイ、そして配布されました。GBase 8c は、高性能、高可用性、柔軟なスケーリング、高セキュリティの特徴を持ち、物理マシン、仮想マシン、コンテナ、プライベート クラウド、パブリック クラウドに導入でき、主要な業界の基幹システム、インターネット ビジネス システム、政府および企業のビジネス システム、安全、安定、信頼性の高いデータ ストレージおよび管理サービス。
ここでのマルチモードとマルチステートは、 GBase 8c が行ストレージ、列ストレージ、メモリの 3 つのストレージ モードをサポートし、スタンドアロン、アクティブ/スタンバイ、分散の 3 つの展開形式をサポートすることを意味します。 GBase 8c のアーキテクチャ図。
NTU General が現在推進している主要なデータベース製品は 4 つあります。
分散論理データ ウェアハウス GBase 8a
共有ストレージに基づくデータベース クラスター GBase 8s
マルチモードおよびマルチステート分散データベース GBase 8c
クラウドネイティブ データ ウェアハウス GCDW
多くの友人は 8a、8c、および 8s についてあまり知りませんが、混同したり忘れたりしやすいので、ここでは私自身の理解に従って簡単に紹介します。8a または GBase 8a MPP クラスターは、8a または GBase 8a MPP クラスターであり、統合データ処理をサポートする中国 データウェアハウス分析ビジネスに適したリレーショナルデータベースクラスタ製品; 8c openGauss 3.0をベースに開発されたマルチモード、マルチステート分散データベースで、行ストレージ、列ストレージなどの複数のストレージモードをサポート、メモリ、およびスタンドアロン、マスターおよびバックアップ 8s は、初期に Informix ソース コードを購入して独自に開発された共有ストレージに基づく成熟した安定したデータベース クラスターです。GCDW は、NTU GBase Cloud Data の一般的なクラウド データ ウェアハウスですウェアハウス (略して GCDW) 大規模な分散および大規模な並列処理のためのカラム ストレージに基づく自社開発のマルチインスタンスのエラスティック クラウド データ ウェアハウスです。GCDW は、ローカル デプロイメントとクラウド デプロイメントの両方をサポートします。ストレージとコンピューティングの分離アーキテクチャを採用しています。 GBase 8a MPP Cluster との違いがわかりません。
GBase 8c のインストールとアンインストール
インストールする前に、次の図にある GBase 8c 分散アーキテクチャでのいくつかの名詞と機能を確認してから、インストールしてください。
インストールプロセス
次の図は、インストールの全体的なプロセスを示しています。比較的単純に見えます。
インストールに必要な環境構成、必要なrpmパッケージ、ファイアウォールの終了などの準備作業を次の3つの図に示します。
次の 2 つの写真は、3 つの仮想マシンの構成とディスク サイズです。3 つのマシンは CentOS7.6、メモリは 4g 6g 6g、インストールされるファイル システムは /home で、サイズは であることがわかります。約10g。
私の 3 つのホスト IP は次のとおりです。
############## GBase 8c HOST IP ####################
192.168.32.31 JiekeXu
192.168.32.32 test19crac1
192.168.32.33 test19crac2
個人リソースの制限のため、ここでは前回の記事で 19c RAC と GBase 8s をインストールしたマシンを借りて、分散 GBase 8c をインストールします。
上の図に示すように、3 つのホストのメモリが小さいため、8G を超えておらず、Swap も 8G に十分ではありません。ここでは、まず Swap を拡張します。ここでは、各マシンに 5G スワップを追加します。具体的な手順は次のとおりです。
① 创建 5G 的 Swap 文件
# dd if=/dev/zero of=/etc/swapfile bs=10M count=512
② 制作为 Swap 文件
# mkswap /etc/swapfile
③ 令 Swap 文件生效
# swapon /etc/swapfile
④ 查看当前SWAP
# swapon -s
Filename Type Size Used Priority
/dev/dm-1 partition 4063228 1288 -2
/etc/swapfile file 5242876 0 -3
⑤ 自动挂载
编辑/etc/fstab,将以下行追加到文件末尾
/etc/swapfile swap swap defaults 0 0
# vi /etc/fstab
/dev/mapper/centos_opengauss-root / xfs defaults 0 0
/dev/mapper/centos_opengauss-app /app xfs defaults 0 0
UUID=0f53d172-81af-4100-b623-0957ed6ed459 /boot xfs defaults 0 0
/dev/mapper/centos_opengauss-home /home xfs defaults 0 0
/dev/mapper/centos_opengauss-swap swap swap defaults 0 0
/etc/swapfile swap swap defaults 0 0
/dev/cdrom /mnt/contos iso9660 defaults 0 0 0 0
⑥ 查看创建好的 SWAP,已经增长了 5G
[root@JiekeXu ~]# free -m
total used free shared buff/cache available
Mem: 3771 349 2676 20 744 2754
Swap: 9087 0 9087
その他の装着確認項目
1 つずつ確認するには、3 台のマシンで root アカウントを使用する必要があります。
(1)、ファイアウォールとSELINUXの検査
ファイアウォールの状態を確認します: systemctl status firewalld
手動でファイアウォールを閉じる必要があります: systemctl stop firewalld
と自動起動を禁止します: systemctl disable firewalld
SELINUX の状態を確認します: sestatus
• 無効と表示されている場合は、SELINUX が無効になっているため、操作は必要ありません。
(2) 各ホストのホスト名構成 /etc/hosts を確認してください。3 つのホスト名が同じであると、インストールが失敗する可能性があります。
#cat /etc/hosts 如下:
##############GBase 8c IP ##############
192.168.32.31 JiekeXu
192.168.32.32 test19crac1
192.168.32.33 test19crac2
(3) bison、flex、patch、bzip2 の依存関係がインストールされているか確認する
rpm -q bison flex patch bzip2
をすべてのサーバで root ユーザーとして実行します。
• 表示された依存関係のバージョン情報がソフトウェア依存関係の構成要件に含まれている場合、アクションは必要ありません。
[root@JiekeXu ~]# rpm -q bison flex libaio-devel lsb_release patch ncurse-devel bzip2
bison-3.0.4-2.el7.x86_64
flex-2.5.37-6.el7.x86_64
patch-2.7.1-10.el7_5.x86_64
bzip2-1.0.6-13.el7.x86_64
• 依存パッケージがインストールされていない場合は、yum ソースを設定し、yum install -y name コマンドを実行して、対応する依存パッケージをインストールする必要があります。
(4) (仮想マシン環境) rdtscp 命令セットがサポートされているか確認します: cat /proc/cpuinfo | grep rdtscp
• 以下の情報に「rdtscp」が表示されていれば、rdtscp 命令セットはサポートされています。
• サポートされていない場合は、対応する CPU モデルの公式 Web サイトを参照して、rdtscp 命令セットをインストールしてください。
ユーザーを作成して sudoer を設定する
すでにサーバー上に gbase ユーザーが存在する場合は、そのパスワードで正常にログインできるかどうか、また sudo 権限とインストールディレクトリ権限があるかどうかを確認してください。すべて利用可能な場合は、この章の手順は無視してかまいません。そうでない場合は、以下の対応する操作を参照して変更してください。
(1) ユーザーグループとユーザーの作成
すべてのノード サーバー上に gbase ユーザー グループとユーザーを作成します。コマンドは次のとおりです。
# groupadd gbase
# useradd -m -d /home/gbase gbase -g gbase
# passwd gbase #回车并设置密码,输入两次密码,这里演示为 gbase
(2) 一般ユーザーをsudoerリストに追加する
デフォルトでは、通常のユーザーは sudoer リストに含まれていません。一般のユーザーが sudo コマンドを実行できるように、root ユーザーを使用してアカウントを sudoer リストに手動で追加する必要があります。
root は visudo コマンドを実行し、構成ファイルを開き、以下の図の root ALL の下に次の行を追加します。
gbase ALL=(ALL) NOPASSWD:ALL
(3) sudo権限を確認する
sudoer を構成した後、gbase ユーザーに切り替えて、後続の環境設定、インストールおよびデプロイメント操作を実行します。データベースの環境設定操作にはroot権限は必要ありません。たとえば、root ユーザーに切り替えるか、次のようにファイアウォール コマンドを表示すると、root パスワードを入力しなくても構成は成功します。
[gbase@JiekeXu ~]$ sudo su - root
[gbase@JiekeXu ~]$ sudo systemctl status firewalld.service
相互信頼を構成する
3 つのホストの gbase ユーザー ssh 相互信頼を構成する
(1) gbaseユーザーに切り替える
[root@JiekeXu ~]# su - gbase
(2) キーディレクトリと必要な権限を作成する
[gbase@JiekeXu ~]$ mkdir ~/.ssh
[gbase@JiekeXu ~]$ chmod 700 ~/.ssh
(3) キーファイルの生成(Enterキーを押し続ける)
[gbase@JiekeXu ~]$ ssh-keygen -t rsa
(4) 公開鍵ファイルを他ノードにアップロードし、パスワードレスログインを実現
この操作では、yes と gbase ユーザーのパスワードを入力する必要があり、すべてのノードで次の copy コマンドが実行されます。
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
$ ssh-copy-id [email protected]
次に、authorized_keys ファイルをチェックして、ホスト名を含む 3 行を確認します。
[gbase@JiekeXu ~]$ cat ~/.ssh/authorized_keys
(5) ssh コマンドを使用して、相互信頼とパスワードフリーが実現しているかどうかを確認します: ssh gbase@hostip
for h in jiekexu test19crac1 test19crac2;do
ssh -l gbase -o StrictHostKeyChecking=no $h date;
done
パスワードを入力せずにログインできます。これは、相互信頼の構成が成功したことを示します。
CRT 接続を高速化するために ssh サービスを構成する
--配置LoginGraceTime参数为0, 将timeout wait设置为无限制
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_`date +"%Y%m%d_%H%M%S"` && sed -i '/#LoginGraceTime 2m/ s/#LoginGraceTime 2m/LoginGraceTime 0/' /etc/ssh/sshd_config && grep LoginGraceTime /etc/ssh/sshd_config
--加快SSH登陆速度,禁用DNS
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_`date +"%Y%m%d_%H%M%S"` && sed -i '/#UseDNS yes/ s/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config && grep UseDNS /etc/ssh/sshd_config
配置 NTP 时间同步
(1) 全サーバのNTPサービスの状態を確認する
sudo systemctl status ntpd.service
ntp サービスが開始されていない場合は、 sudo systemctl start ntpd.service を開始する必要があります。ただし、ntp サービスがインストールされていない場合は、yum ソースを構成して ntp サービスをインストールする必要があります。
[gbase@JiekeXu etc]$ sudo service ntpd start
Redirecting to /bin/systemctl start ntpd.service
Failed to start ntpd.service: Unit not found.
[root@JiekeXu yum.repos.d]# yum install ntp -y
(2) NTPサービスの設定
cat /etc/hosts
##############GBase 8c IP ##############
192.168.32.31 JiekeXu
192.168.32.32 test19crac1
192.168.32.33 test19crac2
#####################################
クラスター内のすべてのサーバーで gbase ユーザーとして実行します。
NTP マスター ノード (通常は GTM マスター ノード) を人為的に選択します。すべてのノードで構成ファイル (vim /etc/ntp.conf) を編集し、「:wq」を編集して保存して終了します。
NTPマスターノード:127.127.1.0(ローカルクロック)を設定
NTPスレーブノード:マスターノードIPを設定
systemctl enable ntpd ----设置开机自启动
他の 2 つのノードについては、次の内容を記述します。
ノード 2
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 192.168.32.32 nomodify notrap nopeer noquery ##本机 IP
restrict 127.0.0.1
restrict ::1
restrict 192.168.32.255 mask 255.255.255.0 nomodify notrap
server 192.168.32.31
Fudge 192.168.32.31 stratum 10
ノード 3
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 192.168.32.33 nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
restrict 192.168.32.255 mask 255.255.255.0 nomodify notrap
server 192.168.32.31
Fudge 192.168.32.31 stratum 10
ntp.conf ファイルを保存して終了した後、ntp サービスを開始し、自動的に開始するように設定します。
$ sudo service ntpd start # 启动NTP服务
$ sudo chkconfig ntpd on # 设置 NTP 服务开机自启
注:
一部の仮想マシン環境では、起動後に NTP を自動的に開始するように構成できず、再起動するたびに手動で開始する必要があります。
時刻同期はデータベース クラスターの展開と整合性操作に影響するため、有効にするには事前に構成する必要があります。
(3) 設定完了後、各ノードで以下のコマンド ntpstat を実行し、NTP サービスが接続されているか確認します。
NTP マスターは以下を返す必要があります。
[gbase@JiekeXu ~]$ ntpstat
synchronised to local net at stratum 6
time correct to within 12 ms
polling server every 64 s
さらに、ノードは以下を返します。
[gbase@test19crac1 ~]$ ntpstat
synchronised to NTP server (192.168.32.31) at stratum 7
time correct to within 30 ms
polling server every 128 s
ノード 3 は次を返します。
[gbase@test19crac2 ~]$ ntpstat
unsynchronised
time server re-starting
polling server every 8 s
注: NTP サーバーを構成した後、時刻の同期が完了するまで 5 ~ 20 分待つ必要があります。構成後に、
非同期のタイム サーバーが 8 秒ごとにポーリング サーバーを再起動するか、または非同期のポーリング サーバーが 8 秒ごとに再起動するように求められた場合は、正常です。しばらく待ってから再試行してください。ntpstat コマンドを実行して表示します。
インストールと展開
インストールパッケージをダウンロードする
インストール パッケージをダウンロードするには、アカウントを登録するだけで済みます。登録には携帯電話番号を使用するだけです。
https://www.gbase.cn/download/gbase-8c?category=INSTALL_PACKAGE
次に、インストール パッケージ GBase8cV5_S3.0.0_distributed version_x86_64.zip をダウンロードし、xshell の sftp 機能を使用して、インストール パッケージをサーバーの /home/gbase/gbase_package ディレクトリにアップロードします。
次のプロセス操作は、デプロイメント マシン (ノード 1) でのみ実行されます。
デプロイメント マシン上に GBase 8c データベースのインストール ディレクトリを作成します。構成ファイル内の pkg_path パラメータ値は、インストール ディレクトリと一致している必要があります。/home/gbase/gbase_packageに設定することをお勧めします。これは、yml ファイルの pkg_path パラメーターのデフォルト値です (追記: 公式の推奨事項は、デフォルトの gbase ホーム ディレクトリに直接インストールすることですが、/home ディレクトリ別のファイルシステムとして使用されていますが、別のファイルシステムがない場合はまだ過去です ファイルシステムはルートディレクトリに直接インストールするのと同じです ディスク容量がいっぱいの場合、システム全体が使用できなくなります不要なトラブルが発生した場合、ベスト プラクティスとして、/home を別のファイル システムとして使用するか、/data (gbase を別のファイル システムとしてインストールする) を使用することをお勧めします。
たとえば、データベースのインストール ディレクトリが /home/gbase/gbase_package の場合、具体的な操作は次のとおりです。
[gbase@JiekeXu ~]$ mkdir -p /home/gbase/gbase_package
[gbase@JiekeXu gbase_package]$ unzip GBase8cV5_S3.0.0_分布式版_x86_64.zip
Archive: GBase8cV5_S3.0.0_分布式版_x86_64.zip
extracting: GBase8cV5_S3.0.0B78_centos7.8_x86_64.tar.gz
解凍後、必要な解凍パッケージは GBase8cV5_S3.0.0B78_centos7.8_x86_64.tar.gz です。このファイルを再度解凍して、GBase8cV5_S3.0.0B78_CentOS_x86_64_om.tar.gz ファイルを取得します。また、om で終わるファイルも解凍する必要があります。
[gbase@JiekeXu gbase_package]$ tar -zxvf GBase8cV5_S3.0.0B78_centos7.8_x86_64.tar.gz
GBase8cV5_S3.0.0B78_CentOS_x86_64_om.sha256
GBase8cV5_S3.0.0B78_CentOS_x86_64_om.tar.gz
GBase8cV5_S3.0.0B78_CentOS_x86_64_pgpool.tar.gz
GBase8cV5_S3.0.0B78_CentOS_x86_64.sha256
GBase8cV5_S3.0.0B78_CentOS_x86_64.tar.bz2
[gbase@JiekeXu gbase_package]$ ll
total 786076
-rw-rw-r-- 1 gbase gbase 267810471 Mar 6 18:13 GBase8cV5_S3.0.0B78_centos7.8_x86_64.tar.gz
-rw-rw-r-- 1 gbase gbase 65 Mar 6 18:13 GBase8cV5_S3.0.0B78_CentOS_x86_64_om.sha256
-rw-rw-r-- 1 gbase gbase 103810486 Mar 6 18:13 GBase8cV5_S3.0.0B78_CentOS_x86_64_om.tar.gz
-rw-rw-r-- 1 gbase gbase 1035963 Mar 6 18:12 GBase8cV5_S3.0.0B78_CentOS_x86_64_pgpool.tar.gz
-rw-rw-r-- 1 gbase gbase 65 Mar 6 18:12 GBase8cV5_S3.0.0B78_CentOS_x86_64.sha256
-rw-rw-r-- 1 gbase gbase 164458080 Mar 6 18:12 GBase8cV5_S3.0.0B78_CentOS_x86_64.tar.bz2
-rw-r--r-- 1 gbase gbase 267810691 Jun 11 19:05 GBase8cV5_S3.0.0_分布式版_x86_64.zip
[gbase@JiekeXu gbase_package]$ tar -zxvf GBase8cV5_S3.0.0B78_CentOS_x86_64_om.tar.gz
[gbase@JiekeXu gbase_package]$ tar -zxvf GBase8cV5_S3.0.0B78_CentOS_x86_64_om.tar.gz
注: 解凍後、元のインストール パッケージ ファイルと第 1 レベルの解凍ファイルは削除しないでください。また、インストール パッケージ名を自分で変更することはできません。そうしないと、インストール時のファイルやバージョン番号の検証に影響し、インストールの失敗や運用・保守コマンドの喪失などの問題が発生する可能性があります。
インストール プロセス中に理解しておく必要があるファイル:
gbase.yml: データベース名 .yml で終わるインストール構成ファイル テンプレート。
script: gha_ctl、gs_check、gs_backup およびその他のツールを含むツール ライブラリ。
クラスタトポロジの計画
公式ドキュメントのインストール トポロジの提案によると、cn、gtm、および dn にはすべてアクティブ モードとスタンバイ モードがありますが、メモリが 6GB であるか 8GB にアップグレードされている場合、インストールでエラーが報告され、数回試行すると失敗します。 GDCAコースのデモンストレーションでは、ノード数を減らしてインストールします。
クラスター計画トポロジーの導入を簡素化します (個人学習バージョンのみ)。
ymlファイルを編集する
ユーザーは、実際の状況に応じて設定ファイル名とそのノードパラメータ情報を変更する必要があります。使用する必要のないパラメータは、直接削除するか、# 記号を使用してコメントアウトできます。以下は、yml ファイルの構成例の簡単な説明です。
たとえば、インストール ディレクトリは /home/gbase/gbase_package/ で、所有者が gbase ユーザーである /home/gbase ディレクトリにテンプレート ファイルをコピーし、gbase.yml 構成ファイルを編集します。
cp /home/gbase/gbase_package/gbase.yml /home/gbase/
vim gbase.yml
gha_server:
- gha_server1:
host: 192.168.32.31
port: 20001
dcs:
- host: 192.168.32.31
port: 2379
- host: 192.168.32.32
port: 2379
- host: 192.168.32.33
port: 2379
gtm:
- gtm1:
host: 192.168.32.31
agent_host: 192.168.32.31
role: primary
port: 6666
agent_port: 8001
work_dir: /home/gbase/data/gtm/gtm1
coordinator:
- cn1:
host: 192.168.32.31
agent_host: 192.168.32.31
role: primary
port: 5432
agent_port: 8003
work_dir: /home/gbase/data/coord/cn1
datanode:
- dn1:
- dn1_1:
host: 192.168.32.32
agent_host: 192.168.32.32
role: primary
port: 15432
agent_port: 8005
work_dir: /home/gbase/data/dn1/dn1_1
- dn2:
- dn2_1:
host: 192.168.32.33
agent_host: 192.168.32.33
role: primary
port: 20010
agent_port: 8007
work_dir: /home/gbase/data/dn2/dn2_1
# numa:
# cpu_node_bind: 0,1
# mem_node_bind: 0,1
env:
# cluster_type allowed values: multiple-nodes, single-inst, default is multiple-nodes
cluster_type: multiple-nodes
pkg_path: /home/gbase/gbase_package
prefix: /home/gbase/gbase_db
version: V5_S3.0.0B78
user: gbase
port: 22
# constant:
# virtual_ip: 100.0.1.254/24
このうち、必須パラメータは以下のとおりです。
host パラメータ: データ プレーン ノード (gtm、cn、dn) がアクセスするノードの IP アドレスを指定します。
Agent_host パラメータ: このノードがコントロール プレーン ノード (gha_server、dcs) によって接続される IP アドレスを指定します。これは、ホスト パラメーターと同じにすることができ、データ プレーンとコントロール プレーンの両方が同じ IP アドレスを介してこのノードにアクセスし、接続することを示します。
注: ホストにデュアル ネットワーク カードがある場合は、大量のデータ フローが実際のネットワーク カードに影響を与えないように、コントロール プレーンをギガビット ネットワーク カードに設定し、データ プレーンを 10 ギガビット ネットワーク カードに設定することをお勧めします。高可用性メッセージの時間パフォーマンス。
role パラメータ: クラスターノードのロールタイプ。オプションの値はプライマリまたはスタンバイです。これは、gtm、coordinator、および datanode ノード パラメーターの必須フィールドです。
port パラメーター: クラスターノードの接続ポート番号。
Agent_port パラメータ: 高可用性ポート番号。
syncMode パラメータ: CN が読み取り専用 (スタンバイ) の場合のみ、この項目を設定する必要があります。オプションの値は同期、非同期です。このうち、sync(同期)は読み取り専用CNを同期スタンバイ機で読み取ることを意味し、asyncは読み取り専用CNを非同期スタンバイ機で読み取ることを意味します。
work_dir パラメータ: クラスタノードのデータが保存されるディレクトリ。
cluster_type パラメータ: クラスターのタイプを指定します。分散クラスターをデプロイする場合はパラメーターを multi-node として指定し、アクティブ/スタンバイ クラスターをデプロイする場合はパラメーターを single-inst として指定します。
pkg_path パラメータ: データベース インストール パッケージのストレージ パスを指定します。
プレフィックスパラメータ: 実行ディレクトリのパスを指定します。インストール中に、バックグラウンドでディレクトリが既に存在するかどうかが自動的にスキャンされ、ディレクトリが存在しない場合は自動的に作成されます。存在する場合、所有者は gbase ユーザーである必要があることに注意してください。
version パラメータ: インストール パッケージのバージョンを指定します。形式は V5_S3.0.0BXX です。XX は特定のバージョン番号であり、インストール パッケージの名前に従って変更できます。このパラメータが正しく構成されていない場合、インストール パッケージが見つからず、インストールは失敗します。
注: リソース制約などの要因の影響を受ける可能性があるため、同じノードが 1 つの高可用性グループのマスター ノードの役割のみを担うようにするために、同じノードを再利用する必要があります。また、ポートの再利用やエラー報告を避けるために、インストール前にクラスタ トポロジに従ってポートの競合 netstat -antp| grep 5432 を確認することをお勧めします。
データベースをインストールする
文法形式
2 層インストール パッケージを解凍すると、インストール ディレクトリの下にスクリプト サブディレクトリが生成されます。このディレクトリに入り、gha_ctl コマンドを実行して GBase 8c データベースをインストールします。構文形式は次のとおりです。
gha_ctl install <-c cluster> <-p confpath>
パラメータの説明:
-c パラメータ: データベース名を指定します。これはオプションのフィールドです。デフォルトのデフォルトは gbase です。
-p パラメータ: 設定ファイルを保存するパスを指定します。これはオプションのフィールドです。デフォルトのデフォルトは /tmp です。
注: クラスター名は構成ファイル名と一致している必要があります。インストール完了後、gha_ctl コマンドファイルが配置されているスクリプトディレクトリを削除しないでください。削除すると、運用および保守コマンドが失われます。
データベースのインストール時には環境変数が設定されていないため、gha_ctl コマンドを実行するにはスクリプト ディレクトリに入る必要があります。インストールが成功したら、任意のディレクトリで gbase ユーザーとして gha_ctl コマンドを実行できます。
デプロイメント コマンドの例は次のとおりです。
[gbase@JiekeXu gbase_package]$ cd /home/gbase/gbase_package/script/
[gbase@gbase8c script]$ ./gha_ctl install -p /home/gbase/ -c gbase
ここでは公式ドキュメントに記載されているトポロジのインストール例に従ったため、長時間待った結果エラーレポートが表示されましたが、数多くのエラーレポートの中で以下のような情報がありました。
WARNING: Failed to initialize the memory protect for g_instance.attr.attr_storage.cstore_buffers (1024 Mbytes) or shared memory (3556 Mbytes) is larger
FATAL: could not create shared memory segment: Invalid argument
DETAIL: Failed system call was shmget(key=6666001, size=3729021888, 03600).
2023-06-25 23:38:25.922 64985f71.1 [unknown] 140668180328896 [unknown] 0 gtm 42809 0 [BACKEND] HINT: This error usually means that openGauss's request for a shared memory segment exceeded your kernel's SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 3729021888 bytes), reduce openGauss's shared memory usage, perhaps by reducing shared_buffers.If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.The openGauss documentation contains more information about shared memory configuration.
中国語に翻訳すると: このエラーは通常、共有メモリ セグメントに対する openGauss リクエストがカーネルの SHMMAX パラメータを超えていることを意味します。リクエストのサイズを減らすか、より大きな SHMMAX を使用してカーネルを再構成できます。リクエスト サイズ (現在 3729021888 バイト) を減らすには、shared_buffers を減らすことで openGauss の共有メモリ使用量を減らすことができます。リクエスト サイズがすでに小さい場合は、カーネルの SHMMIN パラメータよりも小さい可能性があります。その場合は、リクエスト サイズを増やすか、SHMMIN を再構成する必要があります。opengaus のドキュメントには、共有メモリ構成に関する詳細情報が含まれています。
注: gha_ctl install コマンドを使用して GBase 8c クラスターをインストールする場合、コマンドは実行に失敗します。json 形式で返されるエラー メッセージを確認できます。エラー メッセージが単純で理解しにくい場合は、/tmp/gha_ctl/gha_ctl.log でより詳細なエラー メッセージを確認できます。
FATAL: could not create shared memory segment: Invalid argument
DETAIL: Failed system call was shmget(key=6666001, size=3729021888, 03600).
ログを確認するとインストールは成功していますが、起動処理で失敗しています。システムのカーネルパラメータに問題があるような気がします。セマフォが不足していて初期化できないので、システムのカーネルパラメータを修正します。価値観。
sudo vim /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax = 6068117503
kernel.shmmni = 4096
#kernel.sem = 40960 2048000 40960 20480
kernel.sem = 40960 838860800 40960 20480
ちなみに、ノード 1 のメモリをノード 2 および 3 のサイズと一致するように 6GB に調整した後でも、起動は失敗します。sysctl.conf を見ると、kernel.sem が上でコメントアウトした値に変更されており、このパラメータはインストール時に自動的に設定されるようです。
WARNING: Failed to initialize the memory protect for g_instance.attr.attr_storage.cstore_buffers (1024 Mbytes) or shared memory (4495 Mbytes) is larger.
FATAL: could not create shared memory segment: No space left on device
DETAIL: Failed system call was shmget(key=15432001, size=4713553920, 03600).
HINT: This error does *not* mean that you have run out of disk space. It occurs either if all available shared memory IDs have been taken, in which case you need to raise the SHMMNI parameter in your kernel, or because the system's overall limit for shared memory has been reached. If you cannot increase the shared memory limit, reduce openGauss's shared memory request (currently 4713553920 bytes), perhaps by reducing shared_buffers.
直接启动数据库
./gha_ctl start all -l http://192.168.32.31:2379
然后我便把三台机器的内存又从 6G 加到 8G,但是使用官方推荐的拓扑结构重新安装还是会报错,执行启动命令会显示如下的结果,有的节点是
stopped 状态,两个 CN 节点也是 stopped 的状态,没法直接使用,想查看日志也没有找到 CN 和 DN2 的日志,只有启动了的
GTM 和 DN1 有日志。熬夜整了两晚实在没办法了,可能的原因一是我的文件系统空间不足只有 10G 大小,无法启动多个节点,二是
postgresql.conf 文件中对于 shared_buffers 的配置过大了,但由于 CN、DN、GTM
配置文件下都有,一时间不知道该改哪些配置文件,改为多少,由于时间太晚所以就放弃了。第三晚上又想到了 GDCA
课程中的安装示例,好像集群拓扑有存在单点的架构,故我这里将 gbase.yml 调整为上面一小节中的架构,CN 和 GTM 均为单点,8GB
的内存 10G 大小的磁盘很快就按照成功了。
[gbase@JiekeXu script]$ ./gha_ctl start all -l http://192.168.32.31:2379
{
"ret":80000116,
"msg":"Rpc request failed:Rpc request failed:Start pg failed"
}
[gbase@JiekeXu script]$ ./gha_ctl monitor all -l http://192.168.32.31:2379 -H
+----+-------------+---------------+-------+---------+--------+
| No | name | host | port | state | leader |
+----+-------------+---------------+-------+---------+--------+
| 0 | gha_server1 | 192.168.32.31 | 20001 | running | True |
+----+-------------+---------------+-------+---------+--------+
+----+------+---------------+------+---------------------------+---------+---------+
| No | name | host | port | work_dir | state | role |
+----+------+---------------+------+---------------------------+---------+---------+
| 0 | gtm1 | 192.168.32.31 | 6666 | /home/gbase/data/gtm/gtm1 | running | primary |
| 1 | gtm2 | 192.168.32.32 | 6666 | /home/gbase/data/gtm/gtm2 | running | standby |
+----+------+---------------+------+---------------------------+---------+---------+
+----+------+---------------+------+----------------------------+---------+---------+
| No | name | host | port | work_dir | state | role |
+----+------+---------------+------+----------------------------+---------+---------+
| 0 | cn1 | 192.168.32.32 | 5432 | /home/gbase/data/coord/cn1 | stopped | primary |
| 1 | cn2 | 192.168.32.33 | 5432 | /home/gbase/data/coord/cn2 | stopped | standby |
+----+------+---------------+------+----------------------------+---------+---------+
+----+-------+-------+---------------+-------+----------------------------+---------+---------+
| No | group | name | host | port | work_dir | state | role |
+----+-------+-------+---------------+-------+----------------------------+---------+---------+
| 0 | dn1 | dn1_1 | 192.168.32.32 | 15432 | /home/gbase/data/dn1/dn1_1 | running | primary |
| 1 | dn1 | dn1_2 | 192.168.32.33 | 15433 | /home/gbase/data/dn1/dn1_2 | running | standby |
| 2 | dn1 | dn1_3 | 192.168.32.31 | 15433 | /home/gbase/data/dn1/dn1_3 | running | standby |
| 3 | dn2 | dn2_1 | 192.168.32.33 | 20010 | /home/gbase/data/dn2/dn2_1 | running | primary |
| 4 | dn2 | dn2_2 | 192.168.32.31 | 20010 | /home/gbase/data/dn2/dn2_2 | stopped | standby |
| 5 | dn2 | dn2_3 | 192.168.32.32 | 20010 | /home/gbase/data/dn2/dn2_3 | stopped | standby |
+----+-------+-------+---------------+-------+----------------------------+---------+---------+
+----+---------------------------+--------+---------+----------+
| No | url | name | state | isLeader |
+----+---------------------------+--------+---------+----------+
| 0 | http://192.168.32.33:2379 | node_2 | healthy | True |
| 1 | http://192.168.32.31:2379 | node_0 | healthy | False |
| 2 | http://192.168.32.32:2379 | node_1 | healthy | False |
+----+---------------------------+--------+---------+----------+
[gbase@JiekeXu ~]$ find ./ -name postgresql.conf
./data/gtm/gtm1/postgresql.conf
./data/dn1/dn1_3/postgresql.conf
./data/dn2/dn2_2/postgresql.conf
./data/coord/cn1/postgresql.conf
すぐに成功した展開情報を返します
[gbase@JiekeXu ~]$ cd /home/gbase/gbase_package/script/
[gbase@JiekeXu script]$ ./gha_ctl install -p /home/gbase/ -c gbase
{
"ret":0,
"msg":"Success"
}
[gbase@JiekeXu script]$ ./gha_ctl monitor all -l http://192.168.32.31:2379 -H
[gbase@JiekeXu ~]$ gha_ctl monitor all -l http://192.168.32.31:2379 -H
+----+-------------+---------------+-------+---------+--------+
| No | name | host | port | state | leader |
+----+-------------+---------------+-------+---------+--------+
| 0 | gha_server1 | 192.168.32.31 | 20001 | running | True |
+----+-------------+---------------+-------+---------+--------+
+----+------+---------------+------+---------------------------+---------+---------+
| No | name | host | port | work_dir | state | role |
+----+------+---------------+------+---------------------------+---------+---------+
| 0 | gtm1 | 192.168.32.31 | 6666 | /home/gbase/data/gtm/gtm1 | running | primary |
+----+------+---------------+------+---------------------------+---------+---------+
+----+------+---------------+------+----------------------------+---------+---------+
| No | name | host | port | work_dir | state | role |
+----+------+---------------+------+----------------------------+---------+---------+
| 0 | cn1 | 192.168.32.31 | 5432 | /home/gbase/data/coord/cn1 | running | primary |
+----+------+---------------+------+----------------------------+---------+---------+
+----+-------+-------+---------------+-------+----------------------------+---------+---------+
| No | group | name | host | port | work_dir | state | role |
+----+-------+-------+---------------+-------+----------------------------+---------+---------+
| 0 | dn1 | dn1_1 | 192.168.32.32 | 15432 | /home/gbase/data/dn1/dn1_1 | running | primary |
| 1 | dn2 | dn2_1 | 192.168.32.33 | 20010 | /home/gbase/data/dn2/dn2_1 | running | primary |
+----+-------+-------+---------------+-------+----------------------------+---------+---------+
+----+---------------------------+--------+---------+----------+
| No | url | name | state | isLeader |
+----+---------------------------+--------+---------+----------+
| 0 | http://192.168.32.33:2379 | node_2 | healthy | False |
| 1 | http://192.168.32.31:2379 | node_0 | healthy | False |
| 2 | http://192.168.32.32:2379 | node_1 | healthy | True |
+----+---------------------------+--------+---------+----------+
データベースの listen_addresses 構成を表示する
[gbase@JiekeXu ~]$ gs_guc check -Z gtm -N all -I all -c "listen_addresses"
The gs_guc run with the following arguments: [gs_guc -Z gtm -N all -I all -c listen_addresses check ].
Total GUC values: 1.
The value of parameter listen_addresses is same on all instances.
listen_addresses='localhost,192.168.32.31'
[gbase@JiekeXu ~]$ gs_guc check -Z coordinator -N all -I all -c "listen_addresses"
The gs_guc run with the following arguments: [gs_guc -Z coordinator -N all -I all -c listen_addresses check ].
Total GUC values: 1.
The value of parameter listen_addresses is same on all instances.
listen_addresses='localhost,192.168.32.31'
[gbase@JiekeXu ~]$ gs_guc check -Z datanode -N all -I all -c "listen_addresses"
The gs_guc run with the following arguments: [gs_guc -Z datanode -N all -I all -c listen_addresses check ].
Total GUC values: 2.
The details for listen_addresses:
[test19crac1] listen_addresses='localhost,192.168.32.32' [/home/gbase/data/dn1/dn1_1/postgresql.conf]
[test19crac2] listen_addresses='localhost,192.168.32.33' [/home/gbase/data/dn2/dn2_1/postgresql.conf]
检查监控数据库状态
gha_ctl monitor all -l http://192.168.32.31:2379 -H
停止数据库
gha_ctl stop all -l http://192.168.32.31:2379
启动数据库
gha_ctl すべて開始 -l http://192.168.32.31:2379
データベースに接続する
クライアント ツール gsql を使用して GBase 8c データベースに接続し、分散アーキテクチャの読み取り/書き込み CN ノードにログインすることをお勧めします。これは最初のノード 192.168.32.31 で、形式は次のとおりです。
gsql -d dbname -p port <-U user_name> <-h hostip>
[gbase@JiekeXu ~]$ gsql -d postgres -p 5432
gsql ((multiple_nodes GBase8cV5 3.0.0B78 build f35d85c7) compiled at 2023-03-06 17:14:54 commit 0 last mr 1247 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+---------+-------+-------------------
postgres | gbase | UTF8 | C | C |
template0 | gbase | UTF8 | C | C | =c/gbase +
| | | | | gbase=CTc/gbase
template1 | gbase | UTF8 | C | C | =c/gbase +
| | | | | gbase=CTc/gbase
(3 rows)
postgres=# create user jiekexu sysadmin password jiekexu;
ERROR: Password must be quoted
postgres=# create user jiekexu sysadmin password 'jiekexu';
ERROR: Password must contain at least 8 characters.
postgres=# create user jiekexu sysadmin password 'Jieke_Xu';
CREATE ROLE
postgres=# create database jiekexudb;
CREATE DATABASE
postgres=# \c jiekexudb
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "jiekexudb" as user "gbase".
jiekexudb=# create table jieke(ID int, Name varchar(10));
CREATE TABLE
jiekexudb=# insert into jieke values(1, 'JiekeXu'),(2,'Jieke');
INSERT 0 2
jiekexudb=# select * from jieke;
id | name
----+---------
1 | JiekeXu
2 | Jieke
(2 rows)
リモート接続では、
サーバーとクライアントでそれぞれ次の構成が完了し、クライアントで gsql コマンドが実行されます。
GBase 8c 分散クラスターの場合、サーバーは読み取り/書き込み CN 上で gbase ユーザーとして次のコマンドを実行する必要があります。
gs_guc reload -Z coordinator -N all -I all -h "host all all 0.0.0.0/0 sha256"
gs_guc reload -Z coordinator -N all -I all -c "password_encryption_type=1"
gs_guc reload -Z coordinator -N all -I all -c "listen_addresses = '*'"
重启数据库
停止数据库
gha_ctl stop all -l http://192.168.32.31:2379
启动数据库
gha_ctl start all -l http://192.168.32.31:2379
クライアント接続
このように、ビジュアル クライアント接続を使用することができ、PG をサポートするクライアント ツールがすべて利用可能になります。公式では DBeaver (公式 Web サイトのダウンロード アドレス: https://dbeaver.io/download/) を使用することが推奨されていますが、以下の図に示すようにドライバー パッケージをインポートする必要があります 個人的な感想 あまり便利ではありませんが、幸いなことにオープンソースで無料ですが、有料ではあるもののより便利かもしれないNavicat Premiumを使用することをお勧めします。
オフラインインポート: 「データベース」→「ドライバーマネージャー」をクリックし、ドライバーマネージャーウィンドウでPostgreSQLを検索し、次のように設定します。
データベースをアンマウントする
環境変数はクラスターのアンインストール後に自動的にクリアされるため、スクリプト ディレクトリに入って gha_ctl コマンドを再度実行する必要があります。DCS ツールをアンインストールするための具体的な操作コマンドは次のとおりです。
クラスタアンインストールの具体的な操作コマンドは以下のとおりです。
-c パラメータ: データベース名を指定します。これはオプションのフィールドです。デフォルトのデフォルトは gbase です。
-f パラメータ: インストール ディレクトリをクリーンアップすることを示します。これはオプションのフィールドです。ディレクトリ フォルダーはデフォルトで保持されます。
gha_ctl uninstall -c gbase -l http://192.168.32.31:2379
操作成功メッセージを返します:
cd /home/gbase/gbase_package/script
./gha_ctl destroy dcs -l http://192.168.32.31:2379
インストール中に発生した問題
質問 1
エラー ポート番号が使用されています。gbase.yml ファイルに設定されている IP ポート番号が重複していて競合が発生していないか確認する必要があります。設定ファイルが正しいことを再度確認する必要があります。次に、 netstat コマンドを使用して、サーバー自体のポートが占有されているかどうかを確認します。
sudo netstat -anltp | grep 15433
質問2
以下に示すように、依存パッチのインストールに失敗する旨のメッセージが表示されるため、表示された各ノードのパッチパッケージが正しくインストールされているか、バージョンが正しいか確認する必要があります。# rpm -q patch インストールされていない場合は、yum ソースを構成し、このパッケージを個別にインストールする必要があります。
Yum インストールのデモ:
以下の図に示すように、CD イメージを仮想マシンに挿入し、yum ソースを構成します。
CD イメージを /mnt ディレクトリに一時的にマウントし (再起動は失敗します)、yum ソースを file:///mnt ディレクトリに設定すると、パッチ パッケージを直接インストールできます。
質問3
インストールプロセス中に非常に多くのエラーレポートがあり、しばらくエラーレポートが見つからないため、/tmp/gha_ctl/gha_ctl.log インストールログを確認することをお勧めします。
エラーはしばらく解決されませんでしたが、インストール トポロジが変更されて問題が隠れて解決されました。以下は、メモリパラメータを計算する単純なシェルです。
memTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}')
totalMemory=$((memTotal / 2048))
shmall=$((memTotal / 2))
if [ $shmall -lt 2097152 ]; then
shmall=2097152
fi
shmmax=$((memTotal * 1024 - 1))
if [ "$shmmax" -lt 4294967295 ]; then
shmmax=4294967295
fi
echo $shmall
echo $shmmax
sudo vim /etc/sysctl.conf
kernel.shmall = 2962948
kernel.shmmax = 6068117503
kernel.shmmni = 4096
kernel.sem = 40960 2048000 40960 20480
質問4
インストール プロセス中に、エラー メッセージ 80000301: トランスポート エンドポイントに到達しませんでした
他のノード 2 および 3 の /etc/resolv.conf 設定ファイル (赤枠) の次の内容をコメント アウトし、バックアップ マシンの resolv 設定をキャンセルし、マスター マシンとバックアップ マシン間の遅延を復元して、再度インストール。
参考文献
https://www.gbase.cn/download/gbase-8c?category=DOCUMENT
《GBase 8c V5_3.0.0_安装部署手册_分布式_V2.5_20230210.pdf》
《GBase 8c V5_ 3.0.0_错误码手册_V1.0_20220621.pdf》
《GBase 8c V5_3.0.0_技术白皮书_V3.1_20221108.pdf》
【GBase 学堂】GDCA 课程第一、二、三节
全文が完成しました。読んでいる皆さんのお役に立てれば幸いです。この記事が役立つと思われる場合は、友人、同僚、気になる人にシェアしてください。一緒に学び、進歩しましょう~~~
私の公式アカウント [JiekeXu DBA Road] をフォローして、できるだけ早く一緒に新しい知識を学んでください。
———————————————————————————————
公開アカウント: JiekeXu DBA Road
CSDN: https://blog.csdn.net/ JiekeXu
Motian Wheel: https://www.modb.pro/u/4347
Tencent クラウド: https://cloud.tencent.com/developer/user/5645107
——————————————— ——— ———————————
複数のデータベース バックアップ スクリプトを共有する
Oracle テーブルの断片化チェックと最適化スキーム
OGG|Oracle GoldenGate 基础2022 年公众号历史文章合集整理
Oracle 19c RAC で発生するいくつかの問題
OGG|Oracle 数据迁移后比对一致性
OGG|Oracle GoldenGate マイクロサービス アーキテクチャ
Oracle クエリテーブルスペースの使用量が非常に遅い
国内データベース|TiDB 5.4 スタンドアロン クイック インストールのファースト エクスペリエンス
Oracle ADGスタンバイ・データベースのシャットダウン・メンテナンス・プロセスと増分リカバリ
MySQL8.0.28マスタ・スレーブ同期環境を構築するためのLinux環境