1. はじめに この記事では、Docker Swarm を使用して Nebula Graph クラスターをデプロイする方法について説明します。 2. 星雲団の構築 2.1 環境整備 機械の準備
インストールする前に、すべてのマシンに Docker がインストールされていることを確認してください。 2.2 スウォームクラスターの初期化 192.168.1.166マシンで実行 $ docker swarm init --advertise-addr 192.168.1.166 Swarm が初期化されました: 現在のノード (dxn1zf6l61qsb1josjja83ngz) がマネージャーになりました。 この Swarm にワーカーを追加するには、次のコマンドを実行します。 docker swarm 参加 \ --トークン SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.1.166:2377 この Swarm にマネージャーを追加するには、「docker swarm join-token manager」を実行し、指示に従います。 2.3 ワーカーノードへの参加 init コマンド プロンプトに従って、Swarm ワーカー ノードに参加し、それぞれ 192.168.1.167 と 192.168.1.168 で実行します。 docker swarm 参加 \ --トークン SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ 192.168.1.166:2377 2.4 クラスターの検証 ドッカーノードls ID ホスト名 ステータス 可用性 マネージャ ステータス エンジン バージョン h0az2wzqetpwhl9ybu76yxaen * KF2-DATA-166 準備完了 アクティブ 到達可能 18.06.1-ce q6jripaolxsl7xqv3cmv5pxji KF2-DATA-167 レディアクティブリーダー 18.06.1-ce h1iql1uvm7123h3gon9so69dy KF2-DATA-168 準備完了 アクティブ 18.06.1-ce 2.5 Dockerスタックを構成する docker-stack.yml を vi する 以下を設定します バージョン: '3.6' サービス: メタ0: 画像: vesoft/nebula-metad:nightly 環境変数: - ./nebula.env 指示: - --meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500 - --local_ip=192.168.1.166 - --ws_ip=192.168.1.166 - --port=45500 - --data_path=/data/meta - --log_dir=/logs - --v=0 - --minloglevel=2 展開する: レプリカ: 1 再起動ポリシー: 条件: 失敗時 配置: 制約: - ノード.ホスト名 == KF2-DATA-166 ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://192.168.1.166:11000/status"] 間隔: 30秒 タイムアウト: 10秒 再試行: 3 開始期間: 20秒 ポート: - 目標: 11000 公開数: 11000 プロトコル: tcp モード: ホスト - ターゲット: 11002 公開: 11002 プロトコル: tcp モード: ホスト - 目標: 45500 公開数: 45500 プロトコル: tcp モード: ホスト ボリューム: - データ-metad0:/data/meta - ログ-metad0:/logs ネットワーク: - 星雲ネット メタ1: 画像: vesoft/nebula-metad:nightly 環境変数: - ./nebula.env 指示: - --meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500 - --local_ip=192.168.1.167 - --ws_ip=192.168.1.167 - --port=45500 - --data_path=/data/meta - --log_dir=/logs - --v=0 - --minloglevel=2 展開する: レプリカ: 1 再起動ポリシー: 条件: 失敗時 配置: 制約: - ノード.ホスト名 == KF2-DATA-167 ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://192.168.1.167:11000/status"] 間隔: 30秒 タイムアウト: 10秒 再試行: 3 開始期間: 20秒 ポート: - 目標: 11000 公開数: 11000 プロトコル: tcp モード: ホスト - ターゲット: 11002 公開: 11002 プロトコル: tcp モード: ホスト - 目標: 45500 公開数: 45500 プロトコル: tcp モード: ホスト ボリューム: - データメタ1:/data/meta - ログ-metad1:/logs ネットワーク: - 星雲ネット メタ2: 画像: vesoft/nebula-metad:nightly 環境変数: - ./nebula.env 指示: - --meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500 - --local_ip=192.168.1.168 - --ws_ip=192.168.1.168 - --port=45500 - --data_path=/data/meta - --log_dir=/logs - --v=0 - --minloglevel=2 展開する: レプリカ: 1 再起動ポリシー: 条件: 失敗時 配置: 制約: - ノード.ホスト名 == KF2-DATA-168 ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://192.168.1.168:11000/status"] 間隔: 30秒 タイムアウト: 10秒 再試行: 3 開始期間: 20秒 ポート: - 目標: 11000 公開数: 11000 プロトコル: tcp モード: ホスト - ターゲット: 11002 公開: 11002 プロトコル: tcp モード: ホスト - 目標: 45500 公開数: 45500 プロトコル: tcp モード: ホスト ボリューム: - データメタ2:/data/meta - ログ-metad2:/logs ネットワーク: - 星雲ネット ストレージd0: 画像: vesoft/nebula-storaged:nightly 環境変数: - ./nebula.env 指示: - --meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500 - --local_ip=192.168.1.166 - --ws_ip=192.168.1.166 - --port=44500 - --data_path=/data/ストレージ - --log_dir=/logs - --v=0 - --minloglevel=2 展開する: レプリカ: 1 再起動ポリシー: 条件: 失敗時 配置: 制約: - ノード.ホスト名 == KF2-DATA-166 依存: -メタ0 -メタ1 -メタ2 ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://192.168.1.166:12000/status"] 間隔: 30秒 タイムアウト: 10秒 再試行: 3 開始期間: 20秒 ポート: - 目標: 12000 出版数: 12000 プロトコル: tcp モード: ホスト - ターゲット: 12002 出版年: 12002 プロトコル: tcp モード: ホスト ボリューム: - データストレージ0:/data/storage - ログ保存先0:/logs ネットワーク: - 星雲ネット ストレージd1: 画像: vesoft/nebula-storaged:nightly 環境変数: - ./nebula.env 指示: - --meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500 - --local_ip=192.168.1.167 - --ws_ip=192.168.1.167 - --port=44500 - --data_path=/data/storage - --log_dir=/logs - --v=0 - --minloglevel=2 展開する: レプリカ: 1 再起動ポリシー: 条件: 失敗時 配置: 制約: - ノード.ホスト名 == KF2-DATA-167 依存: -メタ0 -メタ1 -メタ2 ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://192.168.1.167:12000/status"] 間隔: 30秒 タイムアウト: 10秒 再試行: 3 開始期間: 20秒 ポート: - 目標: 12000 出版数: 12000 プロトコル: tcp モード: ホスト - ターゲット: 12002 出版年: 12004 プロトコル: tcp モード: ホスト ボリューム: - データストレージ1:/data/storage - ログ保存先1:/logs ネットワーク: - 星雲ネット ストレージ2: 画像: vesoft/nebula-storaged:nightly 環境変数: - ./nebula.env 指示: - --meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500 - --local_ip=192.168.1.168 - --ws_ip=192.168.1.168 - --port=44500 - --data_path=/data/storage - --log_dir=/logs - --v=0 - --minloglevel=2 展開する: レプリカ: 1 再起動ポリシー: 条件: 失敗時 配置: 制約: - ノード.ホスト名 == KF2-DATA-168 依存: -メタ0 -メタ1 -メタ2 ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://192.168.1.168:12000/status"] 間隔: 30秒 タイムアウト: 10秒 再試行: 3 開始期間: 20秒 ポート: - 目標: 12000 出版数: 12000 プロトコル: tcp モード: ホスト - ターゲット: 12002 出版年: 12006 プロトコル: tcp モード: ホスト ボリューム: - データストレージ2:/data/storage - ログ保存2:/logs ネットワーク: - 星雲ネット グラフd1: 画像: vesoft/nebula-graphd:nightly 環境変数: - ./nebula.env 指示: - --meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500 - --port=3699 - --ws_ip=192.168.1.166 - --log_dir=/logs - --v=0 - --minloglevel=2 展開する: レプリカ: 1 再起動ポリシー: 条件: 失敗時 配置: 制約: - ノード.ホスト名 == KF2-DATA-166 依存: -メタ0 -メタ1 -メタ2 ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://192.168.1.166:13000/status"] 間隔: 30秒 タイムアウト: 10秒 再試行: 3 開始期間: 20秒 ポート: - 目標: 3699 公開: 3699 プロトコル: tcp モード: ホスト - 目標: 13000 出版数: 13000 プロトコル: tcp # モード: ホスト - ターゲット: 13002 公開: 13002 プロトコル: tcp モード: ホスト ボリューム: - ログ-graphd:/logs ネットワーク: - 星雲ネット グラフd2: 画像: vesoft/nebula-graphd:nightly 環境変数: - ./nebula.env 指示: - --meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500 - --port=3699 - --ws_ip=192.168.1.167 - --log_dir=/logs - --v=2 - --minloglevel=2 展開する: レプリカ: 1 再起動ポリシー: 条件: 失敗時 配置: 制約: - ノード.ホスト名 == KF2-DATA-167 依存: -メタ0 -メタ1 -メタ2 ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://192.168.1.167:13001/status"] 間隔: 30秒 タイムアウト: 10秒 再試行: 3 開始期間: 20秒 ポート: - 目標: 3699 公開: 3640 プロトコル: tcp モード: ホスト - 目標: 13000 公開: 13001 プロトコル: tcp モード: ホスト - ターゲット: 13002 公開: 13003 プロトコル: tcp # モード: ホスト ボリューム: - ログ-graphd2:/logs ネットワーク: - 星雲ネット グラフd3: 画像: vesoft/nebula-graphd:nightly 環境変数: - ./nebula.env 指示: - --meta_server_addrs=192.168.1.166:45500,192.168.1.167:45500,192.168.1.168:45500 - --port=3699 - --ws_ip=192.168.1.168 - --log_dir=/logs - --v=0 - --minloglevel=2 展開する: レプリカ: 1 再起動ポリシー: 条件: 失敗時 配置: 制約: - ノード.ホスト名 == KF2-DATA-168 依存: -メタ0 -メタ1 -メタ2 ヘルスチェック: テスト: ["CMD", "curl", "-f", "http://192.168.1.168:13002/status"] 間隔: 30秒 タイムアウト: 10秒 再試行: 3 開始期間: 20秒 ポート: - 目標: 3699 公開: 3641 プロトコル: tcp モード: ホスト - 目標: 13000 公開: 13002 プロトコル: tcp # モード: ホスト - ターゲット: 13002 公開: 13004 プロトコル: tcp モード: ホスト ボリューム: - ログ-graphd3:/logs ネットワーク: - 星雲ネット ネットワーク: 星雲ネット: 外部: 真 取り付け可能: true 名前: ホスト ボリューム: データメタ0: ログ-metad0: データメタ1: ログメタ1: データメタ2: ログメタ2: データ保存0: ログ保存0: データ保存1: ログ保存1: データ保存2: ログ保存2: ロググラフ: ログ-graphd2: ログ-graphd3: docker-stack.yml
次のコンテンツを追加します TZ=UTC ユーザー=ルート 星雲.env 2.6 星雲クラスターを起動する docker スタックデプロイ nebula -c docker-stack.yml 3. クラスタ負荷分散と高可用性構成 現在 (1.X) の Nebula Graph クライアントは負荷分散機能を提供しておらず、接続する graphd をランダムに選択するだけです。そのため、本番環境で使用する場合は、負荷分散と高可用性を自分で行う必要があります。 図3.1 展開アーキテクチャ全体は、データ サービス層、負荷分散層、高可用性層の 3 つの層に分かれています。図3.1に示すように 負荷分散層: クライアント要求を負荷分散し、下位のデータサービス層に分配します。 高可用性レイヤー: このレイヤーは、haproxy の高可用性を実装し、負荷分散レイヤーのサービスを確保して、クラスター全体の正常なサービスを保証します。 3.1 負荷分散構成 haproxy は docker-compose を使用して設定されます。次の3つのファイルを個別に編集します Dockerfileは次の内容を追加します haproxy:1.7より haproxy.cfg をコピー /usr/local/etc/haproxy/haproxy.cfg エクスポーズ3640 Dockerファイル docker-compose.ymlに以下を追加します。 バージョン: "3.2" サービス: ハプロキシ: コンテナ名: haproxy 建てる: 。 ボリューム: - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg ポート: -3640:3640 再起動: 常に ネットワーク: - アプリネット ネットワーク: アプリネット: 外部: 真 ドッカーの作成 haproxy.cfgに以下を追加します グローバル デーモン マックスコン 30000 ログ 127.0.0.1 local0 情報 ログ 127.0.0.1 local1 警告 デフォルト ログ形式 %hr\ %ST\ %B\ %Ts ロググローバル モード http オプション http-keep-alive タイムアウト接続 5000ms タイムアウトクライアント 10000ms タイムアウトサーバー 50000ms タイムアウト http-request 20000ms # 独自のフロントエンドとバックエンドをカスタマイズし、conf を listen する #カスタム graphd-clusterを聞く バインド *:3640 モード TCP マックスコン 300 バランスラウンドロビン サーバー server1 192.168.1.166:3699 maxconn 300 チェック サーバー server2 192.168.1.167:3699 maxconn 300 チェック サーバー server3 192.168.1.168:3699 maxconn 300 チェック 統計を聞く バインド *:1080 統計情報の更新 30秒 統計 uri /stats 3.2 haproxyを起動する docker-compose を起動 -d 3.2 高可用性構成 注意: キープアライブを設定するには、事前に VIP (仮想 IP) を用意する必要があります。以下の設定では、192.168.1.99 が仮想 IP です。 192.168.1.166、192.168.1.167、192.168.1.168で次の設定を行います。 keepalivedをインストールする apt-get update && apt-get upgrade && apt-get install keepalived -y keepalived 設定ファイル /etc/keepalived/keepalived.conf を変更します (3 台のマシンで次の設定を行い、優先度を決定するために優先度を異なる値に設定する必要があります) 192.168.1.166 マシン構成 グローバル定義 { router_id lb01 #識別情報、名前のみ。 } vrrp_script chk_haproxy { スクリプト「killall -0 haproxy」間隔 2 } vrrp_インスタンス VI_1 { 状態マスター インターフェースens160 仮想ルータID 52 優先度999 # MASTERとBACKUPロードバランサー間の同期チェックの時間間隔を秒単位で設定します。advert_int 1 # 認証タイプとパスワード認証を設定する { # 認証タイプを設定します。主なタイプは PASS と AH の 2 つです。auth_type PASS # 認証パスワードを設定します。同じ vrrp_instance では、MASTER と BACKUP は正常に通信するために同じパスワードを使用する必要があります。auth_pass amber1 } 仮想IPアドレス{ # 仮想 IP は 192.168.1.99/24、バインドされたインターフェースは ens160、エイリアスは ens169:1、プライマリおよびバックアップ インターフェースは同じです 192.168.1.99/24 dev ens160 label ens160:1 } トラックスクリプト { chk_haproxy } } 167 マシン構成 グローバル定義 { router_id lb01 #識別情報、名前のみ。 } vrrp_script chk_haproxy { スクリプト「killall -0 haproxy」間隔 2 } vrrp_インスタンス VI_1 { 状態 バックアップ インターフェースens160 仮想ルータID 52 優先度888 # MASTERとBACKUPロードバランサー間の同期チェックの時間間隔を秒単位で設定します。advert_int 1 # 認証タイプとパスワード認証を設定する { # 認証タイプを設定します。主なタイプは PASS と AH の 2 つです。auth_type PASS # 認証パスワードを設定します。同じ vrrp_instance では、MASTER と BACKUP は正常に通信するために同じパスワードを使用する必要があります。auth_pass amber1 } 仮想IPアドレス{ # 仮想 IP は 192.168.1.99/24、バインドされたインターフェースは ens160、エイリアスは ens160:1、プライマリおよびバックアップ インターフェースは同じです 192.168.1.99/24 dev ens160 label ens160:1 } トラックスクリプト { chk_haproxy } } 168 マシン構成 グローバル定義 { router_id lb01 #識別情報、名前のみ。 } vrrp_script chk_haproxy { スクリプト「killall -0 haproxy」間隔 2 } vrrp_インスタンス VI_1 { 状態 バックアップ インターフェースens160 仮想ルータID 52 優先度777 # MASTERとBACKUPロードバランサー間の同期チェックの時間間隔を秒単位で設定します。advert_int 1 # 認証タイプとパスワード認証を設定する { # 認証タイプを設定します。主なタイプは PASS と AH の 2 つです。auth_type PASS # 認証パスワードを設定します。同じ vrrp_instance では、MASTER と BACKUP は正常に通信するために同じパスワードを使用する必要があります。auth_pass amber1 } 仮想IPアドレス{ # 仮想 IP は 192.168.1.99/24、バインドされたインターフェースは ens160、エイリアスは ens160:1、プライマリおよびバックアップ インターフェースは同じです 192.168.1.99/24 dev ens160 label ens160:1 } トラックスクリプト { chk_haproxy } } keepalived関連コマンド # キープアライブを開始する systemctl 開始キープアライブ # 起動時にkeepalivedが自動的に起動するようにする systemctl enable keeplived # keepalivedを再起動する systemctl を再起動する keepalived IV. その他 オフラインで展開するにはどうすればいいですか?画像をプライベート画像ライブラリに変更するだけです。ご不明な点がございましたら、お気軽にお問い合わせください。 これで、Docker swarm を使用して Nebula Graph クラスターをすばやくデプロイする方法についての記事は終了です。Docker を使用して Nebula Graph クラスターをデプロイする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySql のグループ化と各グループからランダムに 1 つのデータを取得する
>>: シンプルなドラッグ効果を実現するJavaScript
当銀行のMGRは年末に開始されます。公式文書を読んだり、毎日テストを受けたりしなければなりません。毎...
この記事では主に、リクエストを転送したり、静的リソース ファイルにアクセスしたりする nginx の...
ルートを追加するコマンド: 1.ルート追加route add -net 192.56.76.0 ne...
1. プロジェクトwarが保存されているディレクトリを入力しますDockerfileを編集する vi...
以下では、よく使われるヘッド構造と、各タグや要素の意味や使用シーンを紹介します(この記事は、Yisi...
現在の需要:グループとファクターの 2 つのテーブルがあります。1 つのグループは複数のファクターに...
パラメータを渡すために href が必要で、パラメータが中国語の場合、文字化けした文字が表示されます...
私たちの生活、仕事、勉強において、ソーシャル ネットワークは徐々に将来のインターネット発展のトレンド...
目次コンセプト配列の分割値を個別に宣言して割り当てるデフォルト値の構造化解除変数値の交換関数によって...
この記事では、例を使用して、MySQL で更新可能なビューを作成する方法について説明します。ご参考ま...
覚えて: IDE ディスク: 最初のディスクは hda、2 番目のディスクは hdb...最初のディ...
1 ダウンロードアドレスは https://dev.mysql.com/downloads/mysq...
MongoDB のインストール プロセスと問題記録1. MongoDBのインストールMongoDBを...
目次1. 背景2. 操作手順3. Dockerをインストールする4. 主なサービス構成5. サービス...
目次1. Jenkinsの紹介2. Jenkinsをインストールしてデプロイする1. 環境情報2. ...