Docker部署RabbitMQ集群

刺骨的言语ヽ痛彻心扉 2023-03-01 14:57 113阅读 0赞

安装rabbitmq

下载Docker镜像

  1. docker pull rabbitmq:3.7.12-management

安装RabbitMQ

  1. mkdir rabbitmq
  2. # node1 172.17.11.22
  3. cd rabbitmq
  4. vim hosts
  5. #输入
  6. 172.17.11.22 rabbit1 rabbit1
  7. 172.17.11.23 rabbit2 rabbit2
  8. sudo docker run -d \
  9. --name rabbit1 \
  10. -h rabbit1\
  11. --log-opt max-size=10m \
  12. --log-opt max-file=3 \
  13. -v /root/rabbitmq:/var/lib/rabbitmq:z \
  14. -v /root/rabbitmq/hosts:/etc/hosts \
  15. -e RABBITMQ_DEFAULT_USER=rabbitmq \
  16. -e RABBITMQ_DEFAULT_PASS=password \
  17. -e RABBITMQ_ERLANG_COOKIE='cookie' \
  18. -p 5656:5672 \
  19. -p 5657:15672 \
  20. -p 4369:4369 \
  21. -p 25672:25672 \
  22. -p 15671:15671 \
  23. -p 5671:5671 \
  24. rabbitmq:3.7.12-management
  25. # node2 172.17.11.23
  26. cd rabbitmq
  27. vim hosts
  28. #输入
  29. 172.17.11.22 rabbit1 rabbit1
  30. 172.17.11.23 rabbit2 rabbit2
  31. sudo docker run -d \
  32. --name rabbit2 \
  33. -h rabbit2\
  34. --log-opt max-size=10m \
  35. --log-opt max-file=3 \
  36. -v /root/rabbitmq:/var/lib/rabbitmq:z \
  37. -v /root/rabbitmq/hosts:/etc/hosts \
  38. -e RABBITMQ_DEFAULT_USER=rabbitmq \
  39. -e RABBITMQ_DEFAULT_PASS=password \
  40. -e RABBITMQ_ERLANG_COOKIE='cookie' \
  41. -p 5656:5672 \
  42. -p 5657:15672 \
  43. -p 4369:4369 \
  44. -p 25672:25672 \
  45. -p 15671:15671 \
  46. -p 5671:5671 \
  47. rabbitmq:3.7.12-management

加入集群

上述完成2个RabbitMQ节点的启动,后面是要将两个节点做成一个集群,现在讲rabbitmq1作为master,然后rabbitmq2加入到rabbitmq1中

  1. # node2 处理
  2. sudo docker exec -it rabbit2 /bin/bash
  3. # 加入集群
  4. rabbitmqctl stop_app
  5. rabbitmqctl join_cluster rabbit@rabbit1
  6. rabbitmqctl start_app

使用删除方式处理时出现过以下问题

  1. rabbit@localhost:
  2. * connected to epmd (port 4369) on localhost
  3. * epmd reports node 'rabbit' running on port 25672
  4. * TCP connection succeeded but Erlang distribution failed
  5. * Hostname mismatch: node "rabbit@warp10" believes its host is different. Please ensure that hostnames resolve the same way locally and on "rabbit@warp10"
  6. current node details:
  7. - node name: 'rabbitmq-cli-30@warp10'
  8. - home dir: /Users/antares
  9. - cookie hash: Sg08R8+G85EYHZ3H/9NUfg==

官网中有问题显示,但是具体情况很多,经过后续的分析,是因为在docker run时hostname的问题,所以在run时指定容器的hostname。也就是通过-h来指定hostname,根本问题就是HOSTNAME

  1. 解决方法,在Docker创建时,指定了/etc/hosts文件,但是启动docker时,应用里的hostnamehosts中指定的hostname不相同
  2. 1. echo $HOSTNAME 查看下当前的hostname 然后export HOSTNAME=*** 修改为/etc/hosts希望的名字
  3. 2. /etc/hostname中科院设置相应的数据
  4. 使用docker部署rabbitmq集群时,因为hostname不匹配,导致的问题,建议在run时加入参数-h来指定参数,保证hostname的正确性

配置nginx,来保证集群的可用性

配置文件如下:

  1. server {
  2. listen 443;
  3. server_name rabbitmq.example.cn;
  4. ssl on;
  5. ssl_certificate cert/123.pem;
  6. ssl_certificate_key cert/123.key;
  7. ssl_session_timeout 5m;
  8. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
  9. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  10. ssl_prefer_server_ciphers on;
  11. # https 因为安全原因,需要禁用 gzip
  12. # 但是在一些场景下,不需要禁用
  13. # gzip off;
  14. gzip on;
  15. # 设置允许压缩的页面最小字节数
  16. gzip_min_length 1000;
  17. gzip_buffers 4 16k;
  18. gzip_http_version 1.1;
  19. # 1~9,默认为1,数值越大,压缩率越高,CPU占用越多,时间越久
  20. gzip_comp_level 3;
  21. gzip_vary on;
  22. # 禁用对 IE 6 使用 gzip 压缩
  23. gzip_disable "MSIE [1-6]\.";
  24. gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/javascript "application/javascript; charset=utf-8" application/xml application/xml+rss application/json "application/json; charset=utf-8" fo
  25. nt/ttf font/otf image/svg+xml;
  26. # 设置最大允许的POST数据量,如果提交的文件超过这个值,会出现413错误
  27. client_max_body_size 20m;
  28. keepalive_timeout 15;
  29. # 不显示 nginx 的版本号
  30. server_tokens off;
  31. # 设置请求头的长度大小
  32. client_header_buffer_size 32k;
  33. large_client_header_buffers 4 32k;
  34. ## Individual nginx logs
  35. access_log /var/log/nginx/access.log main;
  36. error_log /var/log/nginx/error.log;
  37. # 不保存 access_log
  38. # access_log off;
  39. location ^~ /favicon.ico {
  40. expires 30d;
  41. # add_header Content-Type text/plain;
  42. return 200 "";
  43. }
  44. location ^~ /robots.txt {
  45. expires 30d;
  46. # add_header Content-Type text/plain;
  47. return 200 "User-Agent: *\nDisallow: /";
  48. }
  49. location / {
  50. port_in_redirect on;
  51. proxy_pass http://rabbitManage;
  52. proxy_redirect off;
  53. proxy_set_header Host $host;
  54. proxy_set_header X-Real-IP $remote_addr;
  55. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  56. #index index.html index.htm;
  57. }
  58. # 主页返回 404
  59. # location = / {
  60. # return 404;
  61. # }
  62. }
  63. server {
  64. listen 80;
  65. server_name rabbitmq.example.cn;
  66. #告诉浏览器有效期内只准用 https 访问
  67. add_header Strict-Transport-Security max-age=15768000;
  68. #永久重定向到 https 站点
  69. return 301 https://$server_name$request_uri;
  70. }
  71. #rabbitmq管理界面
  72. upstream rabbitManage {
  73. server 172.17.11.22:5657;
  74. server 172.17.11.23:5657;
  75. }
  76. #!!! stream 要和http一个层级
  77. # rabbitmq Tcp监听
  78. stream{
  79. upstream rabbitTcp{
  80. server 172.17.11.22:5656;
  81. server 172.17.11.23:5656;
  82. }
  83. server {
  84. listen 5656;
  85. proxy_pass rabbitTcp;
  86. }
  87. }

注意:stream要和http一个层级

发表评论

表情:
评论列表 (有 0 条评论,113人围观)

还没有评论,来说两句吧...

相关阅读