8.RabbitMQがクラスターの高可用性を実現

RabbitMQがクラスターの高可用性を実現

序文

rabbitmqクラスターを構築する理由

rabbitmqクラスターのモードは何ですか?

Rabbitmqクラスターをセットアップする方法

rabbitmqミラーリングの高可用性戦略とは何ですか?

RabbitMQ製品自体には多くの利点があります。最も楽観的なのは、システムのアンチピーク機能を改善するための非同期化であり、システムと機能構造の分離です。非常に重要であるため、高可用性を考慮する必要があります。

rabbitmqには3つのモードがあります

  • シングルモード:つまり、単一のマシンをクラスターとして使用しない場合は、rabbitmqを単独で実行します。これは、本番環境では絶対に利用できません。

  • 通常モード:通常のクラスターは、複数のマシンで複数のインスタンスを起動することです。各キューはインスタンスの1つにのみ存在し、すべてのインスタンスがこれらのキューのメタデータを同期します。コンシューマーが消費しているときに、接続されたインスタンスがたまたまキューが配置されているインスタンスでない場合、データは、キューのメタデータに従ってキューが配置されているインスタンスからプルされます。

    クラスターモードが分散されていないことがわかります。キューが配置されているインスタンスがダウンすると、他のインスタンスがそのインスタンスからメッセージをプルできなくなるため、クラスターは主にスループットを向上させます

  • ミラーモード:必要なキューがミラーキューになり、RabbitMQのHAスキームに属する複数のノードがあります**このモードは通常モードの問題を解決します。クライアントのデータをフェッチするときにメッセージエンティティが一時的にプルするのではなく、メッセージエンティティがミラーノード間でアクティブに同期するという点で、通常モードとは異なります。このモードの副作用も明らかです。システムパフォーマンスの低下に加えて、ミラーキューが多すぎて大量のメッセージが入ると、クラスター内のネットワーク帯域幅がこの同期通信によって大幅に消費されます。したがって、高い信頼性が要求される状況に適しています。

リファレンス:https://www.rabbitmq.com/ha.html

RabbitMQをインストールするためのクラスター環境を準備する

  1. 2つのCentos7マシン、ホスト名はA、B

  2. IPアドレスは、A:10.0.0.22、B:10.0.0.33です。

  3. hostsファイルを次のように変更します。以下はマシンAのhostsファイルの内容であり、Bにも次の構成が必要です。

    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    
    
    10.0.0.22 A
    10.0.0.33 B
    
    
  4. 両方のマシンが互いにpingできることを確認します

    ping A 保证ping通
    ping B 保证ping通
    
  5. rabbitmqを2台のマシンに個別にインストールします

rabbitmqの一般モードクラスターを構築する

上記の2台のマシンにrabbitmqをインストールすると、マシンに次のファイルが表示されます。パスはHOMEまたは/ var / lib / rabbitmqにあり、ファイル名は.erlang.cookieです。これは隠しファイルです。鉱山はHOMEまたは/ var / lib / rabbitmqにあり、ファイル名は.erlang.cookieで、隠しファイルです。鉱山はH O M E またはによって/ V A R&LT / L I B / R&LT A B B I T M Q 紙の要素と呼ばE R&LT L A N- G C O O K I E 彼はあるGeの隠された隠されたテキスト部分 / rootである HOMEのにあります。

RabbitMQクラスターはerlangクラスターに依存しており、erlangクラスターはこのCookieを通信認証に使用するため、クラスター構築の最初のステップはCookieを乾燥させることです。

  1. クラスター内の2つのマシン、つまりAとBの.erlang.cookieファイル内のcookie値は同じである必要があり、所有者はアクセス許可を読み取り専用にする必要があります。

    chmod 600 .erlang.cookie #修改权限,只有自己读写
    scp /root/.erlang.cookie 10.0.0.33:/root #保证两台服务器cookie一样
    
  2. MQサービスを停止します

    rabbitmqctl stop
    
  3. クラスターを構成し、起動コマンドを実行してから、このコマンドを使用してクラスターを起動します

    rabbitmq-server -detached
    
  4. スレーブがクラスター操作に参加します(クラスターに再参加する場合も同じで、最初のマスターノードが参加ノードになります)

    Aはマスターノードなので、気にしません。
    ノードB:

    rabbitmqctl stop_app #停止当前节点
    #成功之后出现Clustering node rabbit@B with rabbit@A
    rabbitmqctl join_cluster --ram rabbit@A #加入集群 --ram内存存储,默认不加的话就是磁盘存储
    rabbitmqctl start_app #再次重启当前节点
    #。。。。。如果还有多个节点一次重复上面这个步骤就可以了
    
  5. その他のコマンド

    #默认为第一个node名称(在任意节点修改都可以)
    rabbitmqctl set_cluster_name rabbitmq_cluster1
    #在另外其他节点上操作要移除的集群节点
    rabbitmqctl forget_cluster_node rabbit@B
    

コンソールを開くと、概要の下のノードにすでに2つのノードがあることがわかりますこれで、テストを実行して、対象の通常モードを確認できます。

rabbitmqミラーリングされた高可用性モードクラスターを構築する

まず、ミラーモードはポリシーモジュールに依存します。このモジュールは何に使用されますか?

中国語では、ポリシーはポリシー、つまりポリシーの意味です。つまり、これらのExchangeまたはキューデータを複製、同期する必要があります。複製と同期の方法は?それはそれがすることです。

PS:ミラーキュー戦略を設定する(任意のノードで実行)

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

PS:すべてのキューをミラーキューに設定します。つまり、キューは各ノードにレプリケートされ、各ノードのステータスは一貫しています。RabbitMQ高可用性クラスターがセットアップされました。サービスを再起動して、キューがノードから同期されているかどうかを確認できます。

パラメータの意味は次のとおりです。

ha-all:ポリシーの名前です。

:一致文字です。1つだけがすべて一致することを意味し、^ abcは名前がabcである交換またはキューに一致することです。

ha-mode:これは一致するタイプであり、3つのモードに分けられます:all-all(すべてのキュー)、exctly-part(ha-paramsパラメーターを構成する必要があります。このパラメーターは、3などのintタイプで、多くのクラスターではランダム3です。 Machine)、nodes-specify(ha-paramsパラメーターを構成する必要があります。このパラメーターは、["3rabbit @ F"、 "rabbit @ G"]などの配列タイプで、2つのマシンFとGとして指定されます)。

詳細については、http://www.rabbitmq.com/ha.htmlを参照してください。

springboot2.xテストクラスター

配置:

spring:
  application:
    name: zoo-plus-cluster
  rabbitmq:
    virtual-host: /
    username: xiefei
    password: xiefei
    addresses: 10.0.0.22:5672,10.0.0.33:5672
    connection-timeout: 15000

キューを追加します。

/**
 * @author: 谢飞
 */
@Configuration
public class RabbitConfig {
    
    

    @Bean
    public Queue helloQueue() {
    
    
        return QueueBuilder.durable("hello-queue").build();
    }
}

消費者:

/**
 * @author: 谢飞
 */
@Slf4j
@Component
public class Consumer {
    
    

    @RabbitListener(queues = {
    
    "hello-queue"})
    public void helloQueue(Message message, Channel channel) {
    
    
        log.info("-----------------hello-queue消费:" + new String(message.getBody()));
    }

}

テスト:

/**
 * @author: 谢飞
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestRabbitMQ {
    
    

    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 发送到集群队列
     */
    @Test
    public void sendHelloQueue() {
    
    
        rabbitTemplate.convertAndSend( "hello-queue", "这是发送到集群队列的消息");
    }

}

ソースアドレス:https://gitee.com/zoo-plus/springboot-learn/tree/2.x/springboot-middleware/rabbitmq-cluster

PS:Ha-Proxy(負荷分散)+ Keepalived(単一障害点)を使用して、高可用性を実現できます。

HAProxy:

これは、高可用性、負荷分散、TCPおよびHTTPベースのアプリケーションを提供するプロキシソフトウェアです。HAProxyは完全に無料です。HAProxyの助けを借りて、TCPおよびHTTPアプリケーションに基づくプロキシソリューションを迅速かつ確実に提供できます。

HAProxyは、通常セッションの保持または7層の処理を必要とする大きな負荷のあるWebサイトに適しています。

HAProxyは数万の同時接続をサポートでき、HAProxyの動作モードにより、Webサーバーがネットワークに公開されないように保護しながら、アーキテクチャへの統合が簡単かつ安全になります。

キープアライブ:

これは、高性能サーバーの高可用性またはホットスタンバイソリューションです。Keepalivedは、主にサーバーのシングルポイント障害の発生を防ぐために使用されます。NginxやHaproxyなどのリバースプロキシロードバランシングサーバーと共に使用して、Webサーバーの高可用性を実現できます。KeepalivedはVRRPプロトコルに基づいており、VRRPプロトコルを使用して高可用性(HA)を実現します。VRRP(仮想ルーター冗長プロトコル)プロトコルはルーターの冗長性を実装するために使用されるプロトコルです。VRRPプロトコルは2つ以上のルーターデバイスを1つに仮想化しますデバイスは、外部に仮想ルーターIP(1つ以上)を提供します。

おすすめ

転載: blog.csdn.net/qq_36850813/article/details/104294794
おすすめ