页面“Nginx on centos7”与“Rabbitmq cluster on docker-compose”之间的差异

来自linux中国网wiki
(页面间的差异)
跳到导航 跳到搜索
 
 
第1行: 第1行:
=base=
+
 
 +
=站内资源=
 +
[[Rabbitmq常用命令]]
 +
 
 +
[https://blog.csdn.net/belonghuang157405/article/details/83540148  docker简易搭建RabbitMQ集群HA-good]
 +
 
 +
=ins rabbitmq=
 +
==info==
 +
  适合于 3.610 and 3.7.5 版本
 +
-p 15672:15672 http访问端口
 +
-p 5672:5672 amqp访问端口
 +
-p 4369 #unable to connect to epmd (port 4369) on rabbitmq01: address (cannot connect to host/port)
 +
 
 +
==mq1==
 +
===Note===
 +
 
 +
有一种是 node1 不加别 , node2  add node1  ; node3  add node1 and node2  但是  rabbitmqctl cluster_status 可能看起来有些node alarms是down的 不过通过浏览器的不会
 
<pre>
 
<pre>
例如我的安装目录是/usr/local/nginx
 
修改配置后重新加载生效
 
/usr/local/nginx/sbin/nginx -s reload
 
重新打开日志文件
 
/usr/local/nginx/sbin/nginx -s reopen
 
测试nginx配置文件是否正确
 
/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
 
启动nginx
 
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
 
快速停止nginx
 
/usr/local/nginx/sbin/nginx -s stop
 
完整有序的停止nginx
 
/usr/local/nginx/sbin/nginx -s quit
 
注:stop和quit的区别在于
 
quit是一个优雅的关闭方式,Nginx在退出前完成已经接受的连接请求
 
Stop 是快速关闭,不管有没有正在处理的请求。
 
  
其他的停止nginx 方式:
+
#记得  extra_hosts 改成你的相关IP
ps -ef | grep nginx
+
mkdir -p /home/data/docker-compose-mqcluster
 +
cd /home/data/docker-compose-mqcluster
 +
##"登录容器请执行:rabbitmq-plugins enable rabbitmq_management 才可>使用WEB管理页面"
 +
vi docker-compose.yml
  
kill -QUIT 主进程号 :从容停止Nginx
+
version: '3.1' 
kill -TERM 主进程号 :快速停止Nginx
+
services:
pkill -9 nginx :强制停止Nginx
+
  rabbitmq:
 +
    image: rabbitmq:3.6.10-management
 +
    ports:
 +
      - "5672:5672"
 +
      - "4369:4369"
 +
      #- "1883:1883"
 +
      - "15672:15672"
 +
      - "25672:25672"
  
平滑重启nginx:
+
    container_name: rabbitmqCluster01
kill -HUP 主进程号
 
  
为了方便,现将nginx服务添加至systemctl
+
    hostname: rabbitmq01
1.修改nginx配置文件,开启pid
+
    extra_hosts:
pid /var/run/nginx.pid;
+
      #- "rabbitmq01:192.168.10.211"#不要加上自己,不然会老是重启的
2.通过上述方式关闭nginx服务
+
      - "rabbitmq02:192.168.10.212"
3.配置服务,在/usr/lib/systemd/system/nginx.service文件,vim编辑如下
+
      - "rabbitmq03:192.168.10.213"
 +
    environment:
  
vi /usr/lib/systemd/system/nginx.service
+
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
[Unit]
+
      RABBITMQ_DEFAULT_VHOST: /
Description=nginx - high performance web server
 
After=network.target remote-fs.target nss-lookup.target
 
  
[Service]
+
      RABBITMQ_DEFAULT_USER: lxtxadmin
Type=forking
 
PIDFile=/var/run/nginx.pid
 
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
 
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
 
ExecReload=/usr/local/nginx/sbin/nginx -s reload
 
ExecStop=/usr/local/nginx/sbin/nginx -s stop
 
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
 
PrivateTmp=true
 
  
[Install]
+
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
WantedBy=multi-user.target
 
  
 +
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
 +
 +
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
 +
 +
    volumes:
 +
      - ./data/rabbitmq:/var/lib/rabbitmq
 +
 +
    restart: always 
 +
# docker-compose  up -d
 +
</pre>
 +
 +
==mq2==
 +
<pre>
 +
mkdir -p /home/data/docker-compose-mqcluster
 +
cd /home/data/docker-compose-mqcluster
  
[Unit]部分主要是对这个服务的说明,内容包括Description和After,Description用于描述服务,After用于描述服务类别
+
vi docker-compose.yml
 +
 +
version: '3.1' 
 +
services:
 +
  rabbitmq:
 +
    image: rabbitmq:3.6.10-management
  
[Service]部分是服务的关键,是服务的一些具体运行参数的设置,这里Type=forking是后台运行的形式,PIDFile为存放PID的文件路径,ExecStart为服务的具体运行命令,ExecReload为重启命令,ExecStop为停止命令,PrivateTmp=True表示给服务分配独立的临时空间,注意:[Service]部分的启动、重启、停止命令全部要求使用绝对路径,使用相对路径则会报错!
+
    ports:
 +
      - "5672:5672"
 +
      - "4369:4369"
 +
      #- "1883:1883"
 +
      - "15672:15672"
 +
      - "25672:25672"
  
[Install]部分是服务安装的相关设置,可设置为多用户的
+
    container_name: rabbitmqCluster02
 +
    hostname: rabbitmq02
 +
    extra_hosts:
 +
      - "rabbitmq01:192.168.10.211"
 +
      #- "rabbitmq02:192.168.10.212" #不要加上自己,不然会老是重启的
 +
      - "rabbitmq03:192.168.10.213"
 +
    environment:
 +
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
 +
      RABBITMQ_DEFAULT_VHOST: /
 +
      RABBITMQ_DEFAULT_USER: lxtxadmin
 +
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
 +
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
 +
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
 +
      CLUSTERED: 'true'
 +
      CLUSTER_WITH: rabbit1
 +
      RAM_NODE: 'true'
  
服务脚本按照上面编写完成后,以754的权限保存在/usr/lib/systemd/system目录下
+
    volumes:
然后执行(修改或新增文件需要执行以下语句才能生效)
+
      - ./data/rabbitmq:/var/lib/rabbitmq
systemctl daemon-reload
+
    restart: always 
这时就可以利用systemctl进行配置了
 
systemctl start/stop/reload/quit nginx.service
 
若发生报错,可通过systemctl status nginx.service查看失败原因
 
systemctl enable nginx.service 开机自启动
 
  
 
</pre>
 
</pre>
=upstream=
+
 
 +
==mq3==
 
<pre>
 
<pre>
  upstream read.zhaitua.com {
+
mkdir -p /home/data/docker-compose-mqcluster
        server 172.18.140.166:1080 weight=5;
+
cd /home/data/docker-compose-mqcluster
#               server  172.18.140.165:1080 weight=1;
+
 
        keepalive       32;
+
vi docker-compose.yml
    
+
 
 +
   
 +
version: '3.1' 
 +
services:
 +
  rabbitmq:
 +
    image: rabbitmq:3.6.10-management
 +
 
 +
    ports:
 +
      - "5672:5672"
 +
      - "4369:4369"
 +
      #- "1883:1883"
 +
      - "15672:15672"
 +
      - "25672:25672"
 +
 
 +
    container_name: rabbitmqCluster03
 +
 
 +
    hostname: rabbitmq03
 +
    extra_hosts:
 +
      - "rabbitmq01:10.3.10.141"
 +
      - "rabbitmq02:10.3.10.142"
 +
    environment:
 +
 
 +
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
 +
      RABBITMQ_DEFAULT_VHOST: /
 +
 
 +
      RABBITMQ_DEFAULT_USER: lxtxadmin
 +
 
 +
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
 +
 
 +
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
 +
 
 +
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
 +
      CLUSTERED: 'true'
 +
      CLUSTER_WITH: rabbit1
 +
       RAM_NODE: 'true'
 +
 
 +
     volumes:
  
 +
      - ./data/rabbitmq:/var/lib/rabbitmq
 +
 +
    restart: always 
 
</pre>
 
</pre>
  
=troubleshooting=
+
=config=
 +
==将节点2,3加入集群==
 +
<pre>
 +
#在rabbit2机器进入容器的命令行
 +
sudo docker exec -it rabbitmqCluster02 /bin/bash
  
原因:
+
#加入集群
502 GAT away
+
rabbitmqctl stop_app  && rabbitmqctl join_cluster rabbit@rabbitmq01  &&rabbitmqctl start_app
Php-cgi进程挂掉或者是没有cgi进程
 
  
504 timeout
+
rabbit3执行相同的命令
Nginx请求不到php-cgi进程,超时
+
docker exec -it rabbitmqCluster03 /bin/bash
 +
rabbitmqctl stop_app && rabbitmqctl join_cluster rabbit@rabbitmq01  &&rabbitmqctl start_app
  
解决方法:
 
思路:
 
  
502错误和php-fpm.conf配置文件有关系,网上很多教程都说了,一般就设置以下几个选项
+
查询集群状态
 +
rabbitmqctl cluster_status
 +
</pre>
  
[https://blog.csdn.net/hsw_linux/article/details/82291010 nginx常见问题处理]
+
== nginx 配置==
 +
<pre>
  
 +
#如果是yum nginx  在放在 conf.d/mq.conf
 +
  server {
 +
        listen      80;
 +
        server_name  mq.com;
 +
  
 +
        location / {
 +
            proxy_pass http://10.3.10.141:15672;
 +
            proxy_set_header X-Real-IP $remote_addr;
 +
            proxy_set_header Host $host;
 +
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +
         
 +
        }
 +
    }
  
[https://blog.csdn.net/u010391029/article/details/46884107 Nginx 502 Bad Gateway 错误的原因及解决方法]
 
  
[https://www.cnblogs.com/pengrj/p/8685551.html nginx故障及处理]
+
NOTE  selinux  记得关掉  不然可能是502哦
 +
#SELinux设置
 +
getenforce  #查看SELINUX工作模式
  
 +
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #禁用SELINUX
 +
setenforce 0 #临时禁用SELINUX,无需重启
 +
 +
 +
SELINUX=enforcing
 +
#此项定义selinux状态。
 +
#enforcing—是强制模式系统受selinux保护。就是你违反了策略,你就无法继续操作下去
 +
#permissive—是提示模式系统不会受到selinux保护,只是收到警告信息。permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来(警告信息)
 +
#disabled—禁用selinux。
  
[https://yq.aliyun.com/articles/80379 Nginx常见故障 400 502  504]
+
</pre>
 +
==镜像模式==
 +
在我的wiki上
 +
[https://wiki.linuxchina.net/index.php/Rabbitmq%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4#.E5.BC.80.E5.90.AF.E9.95.9C.E5.83.8F.E6.A8.A1.E5.BC.8F 开启镜像模式]
  
[https://zhuanlan.zhihu.com/p/32469287 PHP与NGINX 499、502问题处理]
+
=RabbitMQ实现延迟队列(使用delay插件=
 +
<pre>
  
 +
docker cp rabbitmq_delayed_message_exchange-3.6.6.ez  c77afe9fa73f:/plugins
  
[https://www.centos.bz/2015/04/handle-nginx-write-io-problem/ Nginx写IO占用高故障处理]
 
  
=complate=
+
: 进入docker容器内 docker exec  -t rabbit  bash
 +
 
 +
8. 执行命令让插件生效: 启动延时插件:
 +
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
 +
</pre>
 +
 
 +
=troubleshooting =
 
<pre>
 
<pre>
./configure --prefix=/data/apps/nginx --user=www --group=www  --error-log-path=/data/logs/nginx/error.log  --http-log-path=/data/logs/nginx/access.log  --pid-path=/data/apps/nginx/nginx\
+
 
  .pid --lock-path=/data/apps/nginx/nginx.lock      --with-http_stub_status_module  --with-pcre=/root/rpmbuild/SOURCES/pcre-8.21 --with-zlib=/root/rpmbuild/SOURCES/zlib-1.2.3 --with-openss\
+
1.docker-compose.yml文件报错
  l=/root/rpmbuild/SOURCES/openssl-1.0.1p --without-poll_module    --with-http_ssl_module  --with-http_gzip_static_module  --without-poll_module  --without-http_ssi_module --without-http_\
+
ERROR: The Compose file './docker-compose.yml' is invalid because:
  userid_module --without-http_geo_module --without-http_memcached_module --without-http_map_module --with-http_realip_module   --without-mail_pop3_module --without-select_module  --witho\
+
services.rabbitmq.environment.CLUSTERED contains true, which is an invalid type, it should be a string, number, or a null
  ut-mail_imap_module --without-mail_smtp_module  --without-http_scgi_module  --with-cc-opt='-O3' --with-ipv6;
+
 
 +
 
 +
CLUSTERED: true -->CLUSTERED: 'true'
 +
 
 +
 
 +
绑hosts的前进 不要全局FQ SSR常常坑我们
 +
 
 +
 
 +
问题2
 +
15672 端口不通 也就是web界面打不开
 +
 
 +
问题 镜像用了 rabbitmq 而不是rabbitmq-manager
 +
 
 +
发现过程 web打不开   15672 端口不能 ,而 5672是通的 进入容器发现是ubuntu 而我记得以前是debian呀 问了下sy才知道 他换了,没全用我的,晕死 ,坑自己人啊
 +
 
 +
补救办法 开启 rabbitmq-plugins enable rabbitmq_management
 +
 
 +
 
 
</pre>
 
</pre>
  
[https://nginx.org/en/docs/configure.html Building nginx from Sources]
+
https://www.rabbitmq.com/management.html
 +
==RabbitMQ镜像集群脑裂 ==
 +
<pre>
 +
 
 +
现象:
 +
RabbitMQ GUI上显示
 +
 
 +
Network partition detected
 +
Mnesia reports that this RabbitMQ cluster has experienced a network partition. There is a risk of losing data. Please read RabbitMQ documentation about network partitions and the possible solutions.
 +
 
  
[https://docs.nginx.com/nginx/admin-guide/ admin-guide]
+
节点3 是挂,以节点1 为准  在 node2  node3 上 分别执行
 +
rabbitmqctl stop_app
 +
rabbitmqctl start_app
  
[[Nginx优化]]
+
就行
 +
</pre>
  
=yum install=
+
==端口在  进入容器  cannot exec in a stopped state: unknown ==
 +
今天是端口在 docker restart  id 都不行,进程也还在的  重启了 docker 服务才行了
 +
 
 +
==rabbitmq node not running==
 
<pre>
 
<pre>
  
 +
行情 重启了一下 docker  mq集群就好了
 +
 +
试过 telnet  15276 有点不太对 一下就跳出来了 
 +
 +
也登录不了容器  一开始还以为是防火墙 
 +
 +
 +
 +
docker exec  -it af1934d27e21 /bin/bash
 +
root@rabbitmq02:/# rabbitmqctl cluster_status
 +
Cluster status of node rabbit@rabbitmq02
 +
[{nodes,[{disc,[rabbit@rabbitmq01,rabbit@rabbitmq02,rabbit@rabbitmq03]}]},
 +
{alarms,[]}]
 +
 +
 +
 +
再想加入 报错
 +
:/# rabbitmqctl stop_app
 +
Stopping rabbit application on node rabbit@rabbitmq02
 +
 +
root@rabbitmq02:/# rabbitmqctl join_cluster rabbit@rabbitmq01
 +
Clustering node rabbit@rabbitmq02 with rabbit@rabbitmq01
 +
Error: unable to connect to node rabbit@rabbitmq02: nodedown
 +
 +
DIAGNOSTICS
 +
===========
 +
 +
attempted to contact: [rabbit@rabbitmq02]
 +
 +
rabbit@rabbitmq02:
 +
  * connected to epmd (port 4369) on rabbitmq02
 +
  * epmd reports node 'rabbit' running on port 25672
 +
  * TCP connection succeeded but Erlang distribution failed
 +
 +
  * Distribution failed unexpectedly while waiting for challenge: {error,
 +
                                                                  closed}
 +
 +
 +
current node details:
 +
- node name: 'rabbitmq-cli-69@rabbitmq02'
 +
- home dir: /var/lib/rabbitmq
 +
- cookie hash: /HHYeuND8Y2blMJ8WoOg1g==
 +
 +
root@rabbitmq02:/# rabbitmqctl start_app
 +
Starting node rabbit@rabbitmq02
 +
Error: unable to connect to node rabbit@rabbitmq02: nodedown
 +
 +
 +
DIAGNOSTICS
 +
===========
 +
 +
attempted to contact: [rabbit@rabbitmq02]
  
RHEL/CentOS
+
rabbit@rabbitmq02:
 +
current node details:
 +
- node name: 'rabbitmq-cli-69@rabbitmq02'
 +
- home dir: /var/lib/rabbitmq
 +
- cookie hash: /HHYeuND8Y2blMJ8WoOg1g==
  
Install the prerequisites:
+
root@rabbitmq02:/# rabbitmqctl start_app
 +
Starting node rabbit@rabbitmq02
 +
Error: unable to connect to node rabbit@rabbitmq02: nodedown
  
    sudo yum install yum-utils
 
  
To set up the yum repository, create the file named /etc/yum.repos.d/nginx.repo with the following contents:
+
DIAGNOSTICS
 +
===========
  
    [nginx-stable]
+
attempted to contact: [rabbit@rabbitmq02]
    name=nginx stable repo
 
    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
 
    gpgcheck=1
 
    enabled=1
 
    gpgkey=https://nginx.org/keys/nginx_signing.key
 
    module_hotfixes=true
 
  
    [nginx-mainline]
+
rabbit@rabbitmq02:
    name=nginx mainline repo
+
  * connected to epmd (port 4369) on rabbitmq02
    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
+
  * epmd reports node 'rabbit' running on port 25672
    gpgcheck=1
+
  * TCP connection succeeded but Erlang distribution failed
    enabled=0
 
    gpgkey=https://nginx.org/keys/nginx_signing.key
 
    module_hotfixes=true
 
  
By default, the repository for stable nginx packages is used. If you would like to use mainline nginx packages, run the following command:
+
  * TCP connection to remote host has timed out. Is the Erlang distribution using TLS?
  
    sudo yum-config-manager --enable nginx-mainline
 
  
To install nginx, run the following command:
+
current node details:
 +
- node name: 'rabbitmq-cli-97@rabbitmq02'
 +
- home dir: /var/lib/rabbitmq
 +
- cookie hash: /HHYeuND8Y2blMJ8WoOg1g==
  
    sudo yum install nginx
+
重启 docker 服务  再 如上添加 不过提示 The node is already a member of this cluster  所以应该是重启docker 就好了
  
 +
今天是 监听的IP不对 模板的是10 我用的 192.168
 
</pre>
 
</pre>
  
 +
=单机版集群=
 +
<pre>
 +
version: '3.1' 
 +
services:
 +
  rabbitmq01:
 +
    image: rabbitmq:3.6.10-management
 +
    ports:
 +
      - "5672:5672"
 +
        #- "4369:4369"
 +
      - "15672:15672"
 +
        #- "25672:25672"
 +
    container_name: rabbitmqCluster01
 +
    hostname: rabbitmq01
 +
    environment:
 +
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
 +
      RABBITMQ_DEFAULT_VHOST: /
 +
      RABBITMQ_DEFAULT_USER: lxtxadmin
 +
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
 +
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
 +
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
 +
    volumes:
 +
      - ./data/rabbitmq:/var/lib/rabbitmq
 +
    restart: always 
 +
 +
 +
  rabbitmq02:
 +
    image: rabbitmq:3.6.10-management
 +
    ports:
 +
      - "5673:5672"
 +
        #- "4369:4369"
 +
      - "15673:15672"
 +
        #- "25672:25672"
 +
    container_name: rabbitmqCluster02
 +
    hostname: rabbitmq02
 +
    links:
 +
      - rabbitmq01
 +
    environment:
 +
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
 +
      RABBITMQ_DEFAULT_VHOST: /
 +
      RABBITMQ_DEFAULT_USER: lxtxadmin
 +
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
 +
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
 +
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
 +
    volumes:
 +
      - ./data/rabbitmq02:/var/lib/rabbitmq
 +
    restart: always 
 +
 +
 +
  rabbitmq03:
 +
    image: rabbitmq:3.6.10-management
 +
    ports:
 +
      - "5674:5672"
 +
        #- "4369:4369"
 +
      - "15674:15672"
 +
        #- "25672:25672"
 +
    container_name: rabbitmqCluster03
 +
    hostname: rabbitmq03
 +
    links:
 +
      - rabbitmq01
 +
    environment:
 +
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
 +
      RABBITMQ_DEFAULT_VHOST: /
 +
      RABBITMQ_DEFAULT_USER: lxtxadmin
 +
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
 +
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
 +
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
 +
    volumes:
 +
      - ./data/rabbitmq03:/var/lib/rabbitmq
 +
    restart: always 
 +
 +
 +
 +
 +
 +
然后再加入集群 同上
 +
</pre>
 
=see also=
 
=see also=
https://nginx.org/en/linux_packages.html
 
  
[https://www.runoob.com/w3cnote/nginx-proxy-balancing.html Nginx 反向代理与负载均衡详解]
+
https://www.rabbitmq.com/clustering.html#peer-discovery-how-does-it-work
 +
 
 +
[http://josuelima.github.io/docker/rabbitmq/cluster/2017/04/19/setting-up-a-rabbitmq-cluster-on-docker.html Setting up a RabbitMQ Cluster on Docker]
 +
 
 +
[https://blog.csdn.net/qq_32488647/article/details/81941491 Docker分布式部署RabbitMQ集群]
 +
 
 +
[https://www.cnblogs.com/cheyunhua/p/8362200.html 多台机器 值得看 Docker:搭建RabbitMQ集群]
 +
 
 +
[https://michael728.github.io/2019/06/07/docker-rabbitmq-env/ docker-compose 安装搭建 RabbitMQ 集群]
 +
 
 +
[https://blog.csdn.net/belonghuang157405/article/details/83540148 单一台机器母机docker简易搭建RabbitMQ集群]
 +
 
 +
[https://blog.csdn.net/jinyidong/article/details/80003362  RabbitMQ之集群搭建]
 +
 
 +
也是单物理机么 ?
 +
https://www.cnblogs.com/vipstone/p/9362388.html
 +
 
 +
[https://blog.csdn.net/belonghuang157405/article/details/83540148  docker简易搭建RabbitMQ集群]
  
  
[https://www.centos.bz/2017/08/centos-7-0-install-lamp-apache-php-mariadb/ CentOS 7.0 yum安装配置LAMP服务器(Apache+PHP+MariaDB)]
+
[[category:ops]]
[[category:ops]] [[category:nginx]]
 

2020年8月27日 (四) 06:00的版本

站内资源

Rabbitmq常用命令

docker简易搭建RabbitMQ集群HA-good

ins rabbitmq

info

 适合于 3.610 and 3.7.5 版本
-p 15672:15672 http访问端口
-p 5672:5672 amqp访问端口
-p 4369 #unable to connect to epmd (port 4369) on rabbitmq01: address (cannot connect to host/port)

mq1

Note

有一种是 node1 不加别 , node2  add node1  ; node3  add node1 and node2  但是  rabbitmqctl cluster_status 可能看起来有些node alarms是down的 不过通过浏览器的不会 

#记得  extra_hosts 改成你的相关IP
mkdir -p /home/data/docker-compose-mqcluster
cd /home/data/docker-compose-mqcluster
##"登录容器请执行:rabbitmq-plugins enable rabbitmq_management 才可>使用WEB管理页面"
vi docker-compose.yml

version: '3.1'  
services:
  rabbitmq:
    image: rabbitmq:3.6.10-management
    ports:
      - "5672:5672"
      - "4369:4369"
      #- "1883:1883"
      - "15672:15672"
      - "25672:25672"

    container_name: rabbitmqCluster01

    hostname: rabbitmq01
    extra_hosts:
      #- "rabbitmq01:192.168.10.211"#不要加上自己,不然会老是重启的
      - "rabbitmq02:192.168.10.212" 
      - "rabbitmq03:192.168.10.213"
    environment:

      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie'   
      RABBITMQ_DEFAULT_VHOST: /

      RABBITMQ_DEFAULT_USER: lxtxadmin

      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq

      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log

      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log

    volumes:
      - ./data/rabbitmq:/var/lib/rabbitmq

    restart: always  
# docker-compose  up -d 

mq2

mkdir -p /home/data/docker-compose-mqcluster
cd /home/data/docker-compose-mqcluster

vi docker-compose.yml
 
version: '3.1'  
services:
  rabbitmq:
    image: rabbitmq:3.6.10-management

    ports:
      - "5672:5672"
      - "4369:4369"
      #- "1883:1883"
      - "15672:15672"
      - "25672:25672"

    container_name: rabbitmqCluster02
    hostname: rabbitmq02
    extra_hosts:
      - "rabbitmq01:192.168.10.211"
      #- "rabbitmq02:192.168.10.212" #不要加上自己,不然会老是重启的
      - "rabbitmq03:192.168.10.213"
    environment:
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie'   
      RABBITMQ_DEFAULT_VHOST: /
      RABBITMQ_DEFAULT_USER: lxtxadmin
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
      CLUSTERED: 'true'
      CLUSTER_WITH: rabbit1
      RAM_NODE: 'true'

    volumes:
      - ./data/rabbitmq:/var/lib/rabbitmq
    restart: always  

mq3

mkdir -p /home/data/docker-compose-mqcluster
cd /home/data/docker-compose-mqcluster

vi docker-compose.yml

 
version: '3.1'  
services:
  rabbitmq:
    image: rabbitmq:3.6.10-management

    ports:
      - "5672:5672"
      - "4369:4369"
      #- "1883:1883"
      - "15672:15672"
      - "25672:25672"

    container_name: rabbitmqCluster03

    hostname: rabbitmq03
    extra_hosts:
      - "rabbitmq01:10.3.10.141"
      - "rabbitmq02:10.3.10.142"
    environment:

      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie'   
      RABBITMQ_DEFAULT_VHOST: /

      RABBITMQ_DEFAULT_USER: lxtxadmin

      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq

      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log

      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
      CLUSTERED: 'true'
      CLUSTER_WITH: rabbit1
      RAM_NODE: 'true'

    volumes:

      - ./data/rabbitmq:/var/lib/rabbitmq

    restart: always  

config

将节点2,3加入集群

#在rabbit2机器进入容器的命令行
sudo docker exec -it rabbitmqCluster02 /bin/bash

#加入集群
rabbitmqctl stop_app  && rabbitmqctl join_cluster rabbit@rabbitmq01  &&rabbitmqctl start_app

rabbit3执行相同的命令
docker exec -it rabbitmqCluster03 /bin/bash
rabbitmqctl stop_app && rabbitmqctl join_cluster rabbit@rabbitmq01  &&rabbitmqctl start_app


查询集群状态
rabbitmqctl cluster_status

nginx 配置


#如果是yum nginx  在放在 conf.d/mq.conf
   server {
        listen       80;
        server_name  mq.com;
 

        location / {
            proxy_pass http://10.3.10.141:15672;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           
        }
     }


NOTE  selinux  记得关掉  不然可能是502哦 
#SELinux设置
getenforce   #查看SELINUX工作模式

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #禁用SELINUX
 setenforce 0 #临时禁用SELINUX,无需重启
 
 
 SELINUX=enforcing
#此项定义selinux状态。
#enforcing—是强制模式系统受selinux保护。就是你违反了策略,你就无法继续操作下去
#permissive—是提示模式系统不会受到selinux保护,只是收到警告信息。permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来(警告信息)
#disabled—禁用selinux。

镜像模式

在我的wiki上 开启镜像模式

RabbitMQ实现延迟队列(使用delay插件


docker cp rabbitmq_delayed_message_exchange-3.6.6.ez   c77afe9fa73f:/plugins


: 进入docker容器内 docker exec  -t rabbit  bash

8. 执行命令让插件生效: 启动延时插件:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

troubleshooting


1.docker-compose.yml文件报错
ERROR: The Compose file './docker-compose.yml' is invalid because:
services.rabbitmq.environment.CLUSTERED contains true, which is an invalid type, it should be a string, number, or a null


CLUSTERED: true -->CLUSTERED: 'true'


绑hosts的前进 不要全局FQ  SSR常常坑我们 


问题2 
15672 端口不通 也就是web界面打不开 

问题 镜像用了 rabbitmq 而不是rabbitmq-manager

发现过程 web打不开   15672 端口不能 ,而 5672是通的 进入容器发现是ubuntu 而我记得以前是debian呀 问了下sy才知道 他换了,没全用我的,晕死 ,坑自己人啊 

补救办法  开启 rabbitmq-plugins enable rabbitmq_management


https://www.rabbitmq.com/management.html

RabbitMQ镜像集群脑裂


现象:
RabbitMQ GUI上显示

Network partition detected
Mnesia reports that this RabbitMQ cluster has experienced a network partition. There is a risk of losing data. Please read RabbitMQ documentation about network partitions and the possible solutions.


节点3 是挂,以节点1 为准  在 node2  node3 上 分别执行
rabbitmqctl stop_app
rabbitmqctl start_app

就行 

端口在 进入容器 cannot exec in a stopped state: unknown

今天是端口在 docker restart id 都不行,进程也还在的 重启了 docker 服务才行了

rabbitmq node not running


行情 重启了一下 docker  mq集群就好了 

试过 telnet  15276 有点不太对 一下就跳出来了  

也登录不了容器  一开始还以为是防火墙  



 docker exec  -it af1934d27e21 /bin/bash 
root@rabbitmq02:/# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq02
[{nodes,[{disc,[rabbit@rabbitmq01,rabbit@rabbitmq02,rabbit@rabbitmq03]}]},
 {alarms,[]}]



再想加入 报错
:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmq02

root@rabbitmq02:/# rabbitmqctl join_cluster rabbit@rabbitmq01
Clustering node rabbit@rabbitmq02 with rabbit@rabbitmq01
Error: unable to connect to node rabbit@rabbitmq02: nodedown

DIAGNOSTICS
===========

attempted to contact: [rabbit@rabbitmq02]

rabbit@rabbitmq02:
  * connected to epmd (port 4369) on rabbitmq02
  * epmd reports node 'rabbit' running on port 25672
  * TCP connection succeeded but Erlang distribution failed

  * Distribution failed unexpectedly while waiting for challenge: {error,
                                                                   closed}


current node details:
- node name: 'rabbitmq-cli-69@rabbitmq02'
- home dir: /var/lib/rabbitmq
- cookie hash: /HHYeuND8Y2blMJ8WoOg1g==

root@rabbitmq02:/# rabbitmqctl start_app
Starting node rabbit@rabbitmq02
Error: unable to connect to node rabbit@rabbitmq02: nodedown


DIAGNOSTICS
===========

attempted to contact: [rabbit@rabbitmq02]

rabbit@rabbitmq02:
current node details:
- node name: 'rabbitmq-cli-69@rabbitmq02'
- home dir: /var/lib/rabbitmq
- cookie hash: /HHYeuND8Y2blMJ8WoOg1g==

root@rabbitmq02:/# rabbitmqctl start_app
Starting node rabbit@rabbitmq02
Error: unable to connect to node rabbit@rabbitmq02: nodedown


DIAGNOSTICS
===========

attempted to contact: [rabbit@rabbitmq02]

rabbit@rabbitmq02:
  * connected to epmd (port 4369) on rabbitmq02
  * epmd reports node 'rabbit' running on port 25672
  * TCP connection succeeded but Erlang distribution failed

  * TCP connection to remote host has timed out. Is the Erlang distribution using TLS?


current node details:
- node name: 'rabbitmq-cli-97@rabbitmq02'
- home dir: /var/lib/rabbitmq
- cookie hash: /HHYeuND8Y2blMJ8WoOg1g==

重启 docker 服务  再 如上添加 不过提示 The node is already a member of this cluster  所以应该是重启docker 就好了

今天是 监听的IP不对 模板的是10 我用的 192.168

单机版集群

version: '3.1'  
services:
  rabbitmq01:
    image: rabbitmq:3.6.10-management
    ports:
      - "5672:5672"
        #- "4369:4369"
      - "15672:15672"
        #- "25672:25672"
    container_name: rabbitmqCluster01
    hostname: rabbitmq01
    environment:
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie'   
      RABBITMQ_DEFAULT_VHOST: /
      RABBITMQ_DEFAULT_USER: lxtxadmin
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
    volumes:
      - ./data/rabbitmq:/var/lib/rabbitmq
    restart: always  


  rabbitmq02:
    image: rabbitmq:3.6.10-management
    ports:
      - "5673:5672"
        #- "4369:4369"
      - "15673:15672"
        #- "25672:25672"
    container_name: rabbitmqCluster02
    hostname: rabbitmq02
    links:
      - rabbitmq01
    environment:
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie'   
      RABBITMQ_DEFAULT_VHOST: /
      RABBITMQ_DEFAULT_USER: lxtxadmin
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
    volumes:
      - ./data/rabbitmq02:/var/lib/rabbitmq
    restart: always  


  rabbitmq03:
    image: rabbitmq:3.6.10-management
    ports:
      - "5674:5672"
        #- "4369:4369"
      - "15674:15672"
        #- "25672:25672"
    container_name: rabbitmqCluster03
    hostname: rabbitmq03
    links:
      - rabbitmq01
    environment:
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie'   
      RABBITMQ_DEFAULT_VHOST: /
      RABBITMQ_DEFAULT_USER: lxtxadmin
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
    volumes:
      - ./data/rabbitmq03:/var/lib/rabbitmq
    restart: always  





然后再加入集群 同上 

see also

https://www.rabbitmq.com/clustering.html#peer-discovery-how-does-it-work

Setting up a RabbitMQ Cluster on Docker

Docker分布式部署RabbitMQ集群

多台机器 值得看 Docker:搭建RabbitMQ集群

docker-compose 安装搭建 RabbitMQ 集群

单一台机器母机docker简易搭建RabbitMQ集群

RabbitMQ之集群搭建

也是单物理机么 ? https://www.cnblogs.com/vipstone/p/9362388.html

docker简易搭建RabbitMQ集群