Nginx のストリーム モジュールを使用して MySQL リバース プロキシと RabbitMQ ロード バランシングを実装する
なぜストリームモジュールを使用するのでしょうか?
- TCP レベルのプロキシ: MySQL と RabbitMQ はどちらも HTTP ではなく TCP ベースのプロトコルです。
stream
このモジュールにより、Nginx が TCP レベルでプロキシできるようになり、非 HTTP トラフィックを処理できるようになります。 - プロトコルの透明性:モジュールを使用すると
stream
、Nginx は MySQL または AMQP プロトコルを解析しません。つまり、プロトコルの整合性を維持しながら、データをシームレスに受け渡すことができます。 - パフォーマンスと高可用性:
stream
モジュールは複数のバックエンド サーバーに接続を分散することで負荷分散を可能にし、パフォーマンスと高可用性を向上させます。 - 柔軟性:モジュールを使用すると
stream
、ほぼすべての TCP または UDP ベースのサービスをプロキシできるため、Nginx は強力なネットワーク プロキシ ツールになります。
nginxにストリームモジュールを導入するにはどうすればよいですか?
./configure 中にモジュールを追加します
--with-stream
./configure --prefix=/usr/local/nginx --with-stream
nginx 構成ファイルに MySQL リバース プロキシを実装する
以下はリバース プロキシの実装です、3306 から 10002
stream {
server {
listen 10002;
proxy_connect_timeout 5s;
proxy_timeout 300s;
proxy_pass 127.0.0.1:3306;
}
}
http { # ...其他HTTP配置... }
nginx 設定ファイルでの RabbitMQ ロード バランシングの実装
stream {
upstream rabbitmq_nodes {
server 127.0.0.1:5672 max_fails=3 fail_timeout=30s; # 第一个节点
server 127.0.0.1:5673 max_fails=3 fail_timeout=30s; # 第二个节点
server 127.0.0.1:5674 max_fails=3 fail_timeout=30s; # 第三个节点
# 健康检查
}
server {
listen 5675;
proxy_pass rabbitmq_nodes;
}
}