Cloud-Nacos のインストール、登録、構成センター

この記事から Spring Cloud の旅が始まります。実際、Spring Cloud は複雑ではありません。さまざまなコンポーネントで構成されています。さまざまなコンポーネントを統合しているとも言えます。zk、eureka、consul、nacos など、同じ種類のコンポーネントを使用することもできます。クラウドシステムの登録センターコンポーネントですが、さまざまな理由や技術選択の排除により、各企業で使用するソリューションも異なり、一部の大企業では自社開発したソリューションを使用しています。クラウド統合使用。

現在、最も一般的に使用されているのは、Ali が提供するコンポーネント ソリューションのセットです。マイクロサービス ゲートウェイ - getway、サービス コール - openFeign、登録および構成センター - nacos、電流制限とダウングレード - センチネル、分散トランザクション管理 - seata、これら 5 つの主要なソリューションです。コンポーネント 分散マイクロサービス システムが構築されます。もちろん、完全なプロジェクトには、リンク追跡のための Skywalking、キャッシュのための Redis、プラットフォーム タスク スケジューリングのための xxl-job など、これら以外の他のミドルウェアが必要です。

nacosのインストールと使用

上記の紹介では、クラウド システムの登録および構成センターには多くのオプションがあると述べましたが、現在市場で最も一般的に使用されているのは nacos であるか、または nacos の上に自社開発のミドルウェアを重ねることができます。

nacos 自体について言えば、nacos は非常に習得しやすいと言えます。理由は非常に単純です。Ali に属しています。つまり、ドキュメントやコミュニティで共有されているコンテンツは基本的に中国語です。docker、cloud などがあります。 、ブートなど、公式ドキュメントに記載されており、さまざまな面での併用方法が説明されており、ビジュアルビュー自体も優れており、使いやすく、操作も簡単です。

ここで一言、クラウド プロジェクトは全体であるため、単一のコンポーネントを学習する場合、必然的に他のコンポーネントが関与することになりますが、他のコンポーネントの使用にあまり巻き込まれず、現在の単一のコンポーネントの内容に集中してください。成分。

ナコスの概要

正式スタート前に、やはり公式サイトの概要や基本的な考え方を簡単に書き写す必要があります。

nacos は、クラウド ネイティブ アプリケーションの構築を容易にする動的なサービス ディスカバリ、構成管理、およびサービス管理プラットフォームであり、動的なサービス ディスカバリ、サービス構成、サービス メタデータ、そして交通管理。

nacos には多くの概念があります。興味のある方は公式 Web サイトにアクセスして詳細をご覧ください。ただし、理解する必要がある基本概念がいくつかあります。

  1. 名前空間: これが重要なポイントであり、名前空間はテナントの詳細な構成の分離に使用されるコマンド スペースでもあります。設定がない場合、nacos は public という名前のコマンド スペースのみを提供します。異なる環境の設定を区別して分離したい場合は、自分で設定する必要があります。
  2. サービス レジストリ: サービス インスタンスとサービス負荷分散ポリシーを保存するデータベース。
  3. 構成管理: システム構成の編集、保管、配布、変更管理、履歴バージョン管理、変更監査などのすべての構成関連アクティビティ。
  4. インスタンス: 1 つ以上のサービスを提供する、アクセス可能なネットワーク アドレス (IP:ポート) を持つプロセス。
  5. 重み: インスタンス レベルの構成。ウェイトはフロートです。重みが大きいほど、インスタンスに割り当てられるトラフィックも大きくなります。
  6. ヘルスチェック: 登録サービスの実行時のステータスをチェックするために nacos によって提供されます。

多くの概念の中で、最も重要なものは上記の最初の 3 つです。名前空間コマンド スペースはすべての基礎です。nacos 自体も基本的なパブリック コマンド スペースを提供しており、このコマンド スペースは削除できません。サービス登録センター、サービス登録と検出同様に、構成管理はプロジェクトの構成センターであり、このモジュールには登録されているすべての構成情報が保存されます。

nacos には、プロジェクトの分離管理などに使用できるロールや権限などのいくつかの構成もあります。これについては、後ほど少しずつ説明します。

nacos の docker インストールプロセス

docker自体が構成管理や権限管理を行う必要があるため、データの永続化が必要となるため、データベースを利用する必要があります。一般的に、nacosを使用する場合、データ永続化のためのプラグインとしてmysqlを選択しますが、これもまた、直接インストールするのは面倒だし、メモリも食うし、起動があまり便利ではありません。docker と組み合わせてインストールして使用することもできますが、個人学習の場合は大きな k8 をインストールする必要はなく、docker-compose を使用して配置するだけで済みます。

docker と docker-compose のインストールと使用方法についてはここでは説明しません。当面この種の知識に触れたことがない場合は、最初に docker に関する以前の記事を読むか、このインストール内容をスキップしてください。結合プロジェクトに直接移動し、コンテンツを使用します。

docker と docker-compose をインストールした後、nacos の公式 Web サイトから対応するバージョンの tar.gz パッケージをダウンロードできます。私はバージョン 2.2.1をダウンロードしました。下部にあるアクセス リンクをプルダウンすると表示されます。

画像-20230413175724959

ダウンロード後、解凍すると nacos-docker 版のファイルが得られます サンプルフォルダ内に、nacos シングルポイント起動とクラスタ起動に関する docker-compose ファイルが入っていますので、mysql と組み合わせたシングルポイント起動ファイルを探して解析してみましょう。

以下は、standalone-mysql-8.yaml ファイルです。

version: "3.8"
services:
  nacos:
    image: nacos/nacos-server:${
    
    NACOS_VERSION}
    container_name: nacos-standalone-mysql
    env_file:
      - ../env/nacos-standlone-mysql.env
    volumes:
      - ./standalone-logs/:/home/nacos/logs
    ports:
      - "8848:8848"
      - "9848:9848"
    depends_on:
      mysql:
        condition: service_healthy
    restart: always
  mysql:
    container_name: mysql
    build:
      context: .
      dockerfile: ./image/mysql/8/Dockerfile
    image: example/mysql:8.0.30
    env_file:
      - ../env/mysql.env
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3306:3306"
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
      interval: 5s
      timeout: 10s

解析:

  1. バージョン: docker-compose バージョン 3.8。
  2. services: 階層の下にある 2 つのサービス、nacos と mysql。
  3. 画像: インポートされた画像。
  4. コンテナ名: サービス名。
  5. build: イメージをビルドします。 context: 現在のディレクトリにイメージをビルドします。 dockerfile: Dockerfile の場所。
  6. env_file: 構成情報のファイルの場所。
  7. ボリューム: バインド マウント ファイルの場所。
  8. ports: 公開ポートのセット 2.0 以降の nacos バージョンの gRpc リクエストはポートをオフセットするため、nacos はコンテナの 9848 を公開する必要があることに注意してください。
  9. healthcheck: スクリプト設定。
  10. 再起動: ポリシーを開始します。
  11. depend_on: これは、前の docker 記事で欠落していた内容であり、対応するサービスが最初に開始するのを待つことを意味します。たとえば、ここでは、最初に mysql を開始し、ヘルスチェックに合格した後に nacos を開始します。条件は、バージョン 3.2 以降が使用可能であることを規定しており、
    service_started: 依存サービスが開始された後にサービスが開始
    されたことを示し、service_healthy: 依存サービスがヘルスチェックに合格した後にサービスが開始されたことを示し、
    service_completed_Continuouslyの 3 つの属性があります。 : 依存するサービスが正常に実行されるまでサービスが開始されないことを示します。

上記の docker-compose の内容はまだ比較的複雑であり、指定されたディレクトリで使用する必要があります。ここではバージョンを変更して、どのディレクトリでも使用できますが、前提として、私のパスに従って nacos を配置します。上記で解凍された -docker ファイル。

version: "3.8"
services:
  nacos:
    image: nacos/nacos-server:v2.2.0
    container_name: nacos
    env_file:
      - /app/nacos/nacos-docker/env/nacos-standlone-mysql.env
    volumes:
      - /app/nacos/log/:/home/nacos/logs
    ports:
      - "8848:8848"
      - "9848:9848"
    networks:
     - liwq-tm
    depends_on:
      mysql:
        condition: service_healthy
    restart: always
  mysql:
    container_name: mysql
    image: liwqtm/mysql:8.0.0
    env_file:
      - /app/nacos/nacos-docker/env/mysql.env
    volumes:
      - /app/mysql:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - liwq-tm
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
      interval: 5s
      timeout: 10s
      retries: 10
networks:
  liwq-tm:
    external: true

docker network create liwq-tm上記と比較すると、ネットワークブリッジを追加したため、コマンドを先に実行する必要があり、起動時にmysqlをビルドせずに先にビルドしました。nacosに対応するmysqlデータベースでは、最初にいくつかの準備作業を行う必要があるためです. 対応するデータベースとテーブルを作成し、テーブルデータを追加するので、別々に操作した方が良いでしょう。

まず、mysql のミラー イメージを構築する手順に従います。対応するディレクトリを入力します: cd /app/nacos/nacos-docker/example/image/mysql/、execute: docker build -t liwqtm/mysql:8.0.0 .、execute: docker-compose -f 全路径/standalone-mysql-8.yaml up -d、起動が成功したら、docker exec -t mysql shコマンドを使用してコンテナに入り、nacos_devtest データベースがあるかどうかを確認するか、ビデオ ソフトウェアを使用してデータベースを理解することができます。

これがデータベースの場合は、nacos によって提供される公式アドレスで対応する SQL を表示し、手動で実行できます。

すでにデータベースがあり、それを関連付ける必要がある場合は、/app/mysqlマウント時に上記の mysql ファイルを独自の mysql データ ストレージ アドレスに変更してから、mysql 構成ファイルを入力して/app/nacos/nacos-docker/env/mysql.envユーザー名とユーザー パスワードを独自のものに変更する必要があります。次に、 nacos の構成ファイルを入力し/app/nacos/nacos-docker/env/nacos-standlone-mysql.env、ユーザー名、ユーザーパスワード、データベース名を変更します。mysql ポートによって公開されているホストポートが 3306 でない場合は、それも変更する必要があります。

その後再起動すると実行も可能になりdocker-compose -f 全路径/standalone-mysql-8.yaml down、成功したら上で実行したup文を実行します。

このようにして、nacos と対応する mysql が正常にインストールされました。http://00.00.00.00:8848/nacos、ユーザー名: nacos、ユーザー パスワード: nacos に直接アクセスできます。

画像-20230414153509452

アクセスに失敗した場合は、nacos がマウントしたログを参照し、ログディレクトリに入った後、実行してtail -1000f nacos.log具体的な原因を特定し、解決してください。

ここでは、私が遭遇した最悪の例外の 1 つである NACOS_AUTH_IDENTITY_KEY について説明します。この問題が発生した当初は、対応するデータベースとテーブルが構成されていないことが原因であると考えました。実際には構成しませんでしたが、後で構成すると、依然としてこの問題が発生します。インターネットでずっと探していたところ、nacos 2.2.1 以降のバージョンを使用するには 3 つの属性を設定する必要があることがわかり、ざっと見たところ、秘密鍵が大量にありました。スポット。

上記のコンテンツでは nacos は正常に開始されましたが、構成が成功したとは見なされません。前に述べたように、Namespace 名前空間がすべてを開始するための基礎だからです。構成されていない場合は、提供されているデフォルトのパブリック スペースが使用されます。 by nacos. 通常の状況では、すべて事前に設定する必要があります。

ネームスペースの設定も非常に簡単で、nacosのviewページからコマンドスペースを直接見つけて作成ボタンをクリックするだけで、特に注意する点はほとんどなく、アホな操作です。

mysql データの永続化に関する注意事項

この内容は後から追加しました。その理由は、ある朝目覚めると、mysql の nacos データベースがハッキングされ、すべての設定とユーザー データが失われ、脅迫されたからです。

ユーザーを作成して権限を変更する mysql コマンドは次のとおりで、主に root アカウントのパスワードを変更します。コンテナーに入ってコマンドを直接変更し、root アカウントの下に nacos データベースを作成し、 nacos ユーザーに対するデータベース内のテーブルの CRUD 権限。

状況が許せば、プロジェクトの開始時に nacos サービスをパブリック ネットワークに公開せず、docker ブリッジ名を直接使用し、プライベート サーバーを開いて nacos 構成センターを個別に起動することが最善です。これは、マウントされた mysql が同じであるためです。 , そのため、データが同期していないことを心配する必要はありません。

mysql 作成ユーザー:

CREATE USER '用户名' @'%' IDENTIFIED BY '密码';

mysql データベースはユーザーに次の権限を付与します。

GRANT SELECT, INSERT, UPDATE, DELETE ON nacos_config.* TO 'nacos' @'%';

プロジェクトでの nacos の構成管理の使用

まず、pom.xml ファイルの構成を変更します。ここで使用するバージョンは 2.2.7 です。さまざまなプロジェクトでは、Spring クラウドのバージョンに注意する必要があります。ここでのクラウドのバージョンは Hoxton.SR12 です。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>

Maven が更新された後、Spring Boot の自動ロードでは後者が前者よりも先にロードされるため、application.yml を bootstrap.yml に変更できますが、これは依然としてクラウド版の問題であることに注意してください。 2022.* は無効になっています bootstrap.yml は読み書きされるため、Spring Boot ブートストラップ読み書きスターターを導入する必要があります。

終了後、設定情報を yml に書き込むことができますが、nacos のスターターが正常にインポートされた場合はプロンプトが表示され、そうでない場合はスターターがインポートされていないことを意味するため、コピーしないように注意する必要があります。正常にインポートされました。

spring:
  profiles:
    active: dev #版本名称
  application:
    name: driver # 项目名称
  cloud:
    nacos:
      config:
        server-addr: IP:8848 # nacos 的地址和端口
        namespace: d2f4c55b-815c-4efa-86b2-b1ebb21b6663 # 命令空间的ID
        file-extension: yaml # 配置中心对应的配置文件类型

プロジェクトのこの設定は以上です。yml 設定には他にも多くのオプション設定がありますが、どれも必須ではありません。拡張設定、パブリック設定など、nacos の機能拡張とみなすことができます。nacos は、アカウントとパスワードはデフォルトで nacos であるとも述べているため、アカウントとパスワードを変更する場合は、ユーザー名とパスワードを設定するのが最善です。

nacos 構成のバージョンを分離する場合は、spring.profiles.active対応するバージョンを構成できますが、application.namenacos 構成ファイルの名前付けを含む構成が必要です。

その後、nacos コントロール パネルで設定ファイルを設定できます。nacosの構成管理では、構成作成ボタンまたは+ボタンから構成を作成できます。ただし、名前空間 namespace の選択には注意してください。名前空間はプロジェクトと一致している必要があります。

画像-20230425175142391

ここでの設定情報は、以下のスクリーンショットの情報に従って入力できますので、入力後、必ず公開ボタンをクリックしてください。

画像-20230425175810586

非常にシンプルな構成と言えますが、公開後に編集して再度公開する場合、nacos は Spring Multicaster にイベントを公開し、対応する応答ロジックによって対応する構成情報を変更することで動的な構成を実現します。

同時に編集している場合は、ベータ版のリリースも確認できるため、正式版の前にグレースケール版をリリースするなど、一部の環境のみを更新することができます。

画像-20230426162539141

以上で基本的に Spring Cloud プロジェクトにおける nacos 設定ファイルの管理は終了です。もう一つのポイントは、nacos自体はクラスタで公開できますが、アクセスするデータベースは同じか高パフォーマンスなクラスタデータベース、つまりデータの整合性が常に保たれており、プロジェクトにとっては違いはありません。 nacos アドレスの設定 複数の Nginx を設定するか、1 つの Nginx を設定するだけで、Nginx は対応する nacos にルーティングされます。

追加点: nacos 構成センターのバージョン管理については、上記が dev であるため、プロジェクト内で dev として直接構成されます。spring.profiles.active別のバージョンであり、bootstrap.yml を変更しない場合は、実行時に実行できます-Dspring.profiles.active=版本号。例: - Dspring.profiles.active=test、idea で起動した場合は直接編集でき、docker の場合は docker イメージの作成時に直接挿入できます。

画像-20230426164341052

以下は docker の設定です。このプロジェクトでは docker を使用しなかったため、当面は設定はありません。興味のある方は私の docker の記事を参照して詳細を確認してください。

画像-20230426165013661

プロジェクト内の nacos のサービス検出では、

構成管理と同様に、最初に nacos サービス検出に対応するスターターをインポートします。これも pom.xml ファイル内にあります。ここではバージョンに注意してください。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>

次に、yml の設定ですが、上記のファイルを設定したときと同じです。nacos スターターが正常にインポートされているかどうかに注意してください。ユーザー名とパスワードが管理されている場合は、それを設定するのが最善です。

spring:
  profiles:
    active: dev #版本名称
  application:
    name: driver # 项目名称
  cloud:
    nacos:
      discovery:
        server-addr: IP:8848 # nacos 的地址和端口
        namespace: d2f4c55b-815c-4efa-86b2-b1ebb21b6663 # 命令空间的ID

最後に、Spring Boot のスタートアップ クラス構成。これは @SpringBootApplication アノテーションによって変更されたクラスと、サービスの検出と登録のための @EnableDiscoveryClient アノテーションが追加されています。

@SpringBootApplication
@EnableDiscoveryClient
public class DriverApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(DriverApplication.class,args);
    }
}

このようにして、すべての設定が完了します。nacos は事前に namespace 名前空間を設定しているため、nacos の内容を設定する必要はなく、プロジェクトを直接開始するだけです。

ここでは、getway サービスと 2 つのドライバー サービスを構成しました。これにより、両方が nacos に挿入され、ドライバー サービスも 2 つの登録について監視されていることがわかります。

画像-20230426173828660

要約する

クラウドプロジェクトにおけるnacosのコンフィグレーションセンターの利用とサービスディスカバリは基本的に上記の内容ですが、nacosのクラスタデプロイメントに関しては、ここでは複数のサーバーを持っていないため、デモンストレーションは省略します。同サービスのnacosの公式圧縮パッケージに含まれており、シングルノード展開とあまり変わりません。最後に、フォローアップ ソース コード プロセスと、Getway と openfeign 間の共同呼び出し完了プロセスについては、フォローアップ ソース コード分析で説明します。
できる。

ここでは、getway サービスと 2 つのドライバー サービスを構成しました。これにより、両方が nacos に挿入され、ドライバー サービスも 2 つの登録について監視されていることがわかります。

おすすめ

転載: blog.csdn.net/qq_39339965/article/details/130400350