页面“Rabbitmq cluster on docker-compose”与“Php-worker重启脚本”之间的差异

来自linux中国网wiki
(页面间的差异)
跳到导航 跳到搜索
 
 
第1行: 第1行:
 
+
=mq_res=
=站内资源=
 
[[Rabbitmq常用命令]]
 
=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>
 
 
 
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
 
</pre>
 
 
 
==mq2==
 
<pre>
 
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 
 
 
 
</pre>
 
 
 
==mq3==
 
<pre>
 
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 
 
</pre>
 
 
 
=config=
 
==将节点2,3加入集群==
 
<pre>
 
#在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
 
</pre>
 
 
 
== nginx 配置==
 
 
<pre>
 
<pre>
 +
#score-addScore-high  队列大于 500 重启phpwork
 +
# php work  and  mq 机器不在同一台上
 +
#有可能的话 另外两个mq 机器也要check 一下
 +
[root@mq01 sh]# cat mq_res.sh
 +
#!/bin/bash
 +
#Author: linuxsa.org
 +
docker ps  | grep  rabbitmqCluster01
 +
#if [ $? -eq 0 ]
 +
if [ $? -ne 0 ]
 +
then
 +
echo  "No rabbitmq was found ,exit now"
 +
exit 1
 +
fi
  
#如果是yum nginx 在放在 conf.d/mq.conf
+
qu=` docker  exec -i rabbitmqCluster01 rabbitmqadmin  --username=admin  --password=886 list queues | grep score-addScore-high |awk '{print $4}'`
  server {
+
#if [ $qu -eq 0 ]
        listen      80;
+
if [ $qu -gt 50 ]
        server_name mq.com;
+
#if [ $qu -gt 500 ]
+
#if  $qu gt 500   
 +
then
 +
echo " qu  is 500,and then restart the  score-high"
 +
echo "*****"
 +
function restartmq
 +
{
 +
  salt 'prod-sns-es'  cmd.run 'docker ps  | grep  php-worker'
 +
    if [ $? -ne 0 ]
 +
    then
 +
    echo  "No phpworker was found ,exit now"
 +
    exit 1
 +
    fi
 +
   
 +
  salt 'prod-sns-es'  cmd.run 'docker exec -i  docker-for-services_php-worker_1  supervisorctl restart production1.rabbitmq.recovery.addScoreHigh:production1.rabbitmq.recovery.addScoreHigh_00'
 +
    salt 'prod-sns-es'  cmd.run 'docker exec  -i  docker-for-services_php-worker_1  supervisorctl restart production1.rabbitmq.recovery.addScoreHigh:production1.rabbitmq.recovery.addScoreHigh_01'
 +
    salt 'prod-sns-es'  cmd.run 'docker exec  -i  docker-for-services_php-worker_1  supervisorctl restart production1.rabbitmq.recovery.addScoreHigh:production1.rabbitmq.recovery.addScoreHigh_02'
 +
    salt 'prod-sns-es'  cmd.run 'docker exec  -i  docker-for-services_php-worker_1  supervisorctl restart production1.rabbitmq.recovery.addScoreHigh:production1.rabbitmq.recovery.addScoreHigh_03'
 +
echo "mq has restart "
 +
DATE_TIME=`date +"%Y-%m-%d %H:%M.%S"`
 +
echo "${DATE_TIME}"  >>/data/logs/timlist
 +
}
 +
restartmq;  
  
        location / {
+
fi
            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。
 
  
 
</pre>
 
</pre>
==镜像模式==
 
[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 开启镜像模式]
 
 
=troubleshooting =
 
<pre>
 
 
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常常坑我们
 
  
 
+
=基础=
</pre>
 
==rabbitmq node not running==
 
 
<pre>
 
<pre>
docker exec  -it af1934d27e21 /bin/bash
+
-eq          //等于
root@rabbitmq02:/# rabbitmqctl cluster_status
 
Cluster status of node rabbit@rabbitmq02
 
[{nodes,[{disc,[rabbit@rabbitmq01,rabbit@rabbitmq02,rabbit@rabbitmq03]}]},
 
{alarms,[]}]
 
  
 +
-ne          //不等于
  
 +
-gt            //大于 (greater )
  
再想加入 报错
+
-lt            //小于  (less)
:/# rabbitmqctl stop_app
 
Stopping rabbit application on node rabbit@rabbitmq02
 
  
root@rabbitmq02:/# rabbitmqctl join_cluster rabbit@rabbitmq01
+
-ge            //大于等于
Clustering node rabbit@rabbitmq02 with rabbit@rabbitmq01
 
Error: unable to connect to node rabbit@rabbitmq02: nodedown
 
  
DIAGNOSTICS
+
-le            //小于等于
===========
 
  
attempted to contact: [rabbit@rabbitmq02]
+
命令的逻辑关系:
  
rabbit@rabbitmq02:
+
在linux 中 命令执行状态:0 为真,其他为假
  * 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 就好了
 
 
</pre>
 
</pre>
 
=see also=
 
 
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
 
 
 
  
  
[[category:ops]]
+
[[category:ops]]

2019年12月24日 (二) 09:43的版本

mq_res

#score-addScore-high  队列大于 500 重启phpwork
# php work   and  mq 机器不在同一台上 
#有可能的话 另外两个mq 机器也要check 一下 
[root@mq01 sh]# cat mq_res.sh
#!/bin/bash
#Author: linuxsa.org
docker ps   | grep  rabbitmqCluster01
#if [ $? -eq 0 ]
if [ $? -ne 0 ]
then
echo  "No rabbitmq was found ,exit now"
exit 1
fi

qu=` docker  exec -i rabbitmqCluster01 rabbitmqadmin  --username=admin   --password=886 list queues | grep score-addScore-high |awk '{print $4}'`
#if [ $qu -eq 0 ]
if [ $qu -gt 50 ]
#if [ $qu -gt 500 ]
#if  $qu gt 500    
then
echo " qu  is 500,and then restart the  score-high"
echo "*****"
function restartmq
{
   salt 'prod-sns-es'  cmd.run 'docker ps   | grep  php-worker' 
    if [ $? -ne 0 ]
    then
    echo  "No phpworker was found ,exit now"
    exit 1
    fi
    
  salt 'prod-sns-es'  cmd.run 'docker exec  -i  docker-for-services_php-worker_1   supervisorctl restart production1.rabbitmq.recovery.addScoreHigh:production1.rabbitmq.recovery.addScoreHigh_00'
    salt 'prod-sns-es'  cmd.run 'docker exec  -i  docker-for-services_php-worker_1   supervisorctl restart production1.rabbitmq.recovery.addScoreHigh:production1.rabbitmq.recovery.addScoreHigh_01'
    salt 'prod-sns-es'  cmd.run 'docker exec  -i  docker-for-services_php-worker_1   supervisorctl restart production1.rabbitmq.recovery.addScoreHigh:production1.rabbitmq.recovery.addScoreHigh_02'
     salt 'prod-sns-es'  cmd.run 'docker exec  -i  docker-for-services_php-worker_1   supervisorctl restart production1.rabbitmq.recovery.addScoreHigh:production1.rabbitmq.recovery.addScoreHigh_03'
echo  "mq has restart "
DATE_TIME=`date +"%Y-%m-%d %H:%M.%S"`
echo "${DATE_TIME}"   >>/data/logs/timlist
}
restartmq; 

fi

基础

-eq           //等于

-ne           //不等于

-gt            //大于 (greater )

-lt            //小于  (less)

-ge            //大于等于

-le            //小于等于

命令的逻辑关系:

在linux 中 命令执行状态:0 为真,其他为假

逻辑与: &&
第一个条件为假时,第二条件不用再判断,最终结果已经有;
第一个条件为真时,第二条件必须得判断;
逻辑或: ||
逻辑非: !