页面“Rabbitmq cluster on docker-compose”与“Mysqld multi:管理多个MySQL服务器的程序-mysql多实例”之间的差异

来自linux中国网wiki
(页面间的差异)
跳到导航 跳到搜索
→‎Note
 
 
第1行: 第1行:
  
=进阶=
+
mysqld_multi:管理多个MySQL服务器的程序
[https://zhuanlan.zhihu.com/p/63700605 透彻rabbitmq]
 
  
[https://www.zhihu.com/question/34243607/answer/1369889869 消息队列的使用场景是怎样的]
+
 
  
=站内资源=
+
mysqld_multi可以管理多个监听不同Unix套接字文件和TCP/IP端口的连接的mysqld 进程。它可以启动或停止服务器,或报告它们的当前状态。
[[Rabbitmq常用命令]]
 
  
[https://blog.csdn.net/belonghuang157405/article/details/83540148  docker简易搭建RabbitMQ集群HA-good]
+
程序寻找my.cnf中的[mysqldN]组(或--config-file选项指定的文件)。N 可以为任何正整数。在下面的讨论中该数字指选项组号,或GNR。组号区别各选项组,并用作mysqld_multi的参数来指定想要启动、停止哪个服务器或获取哪个服务器的状态报告。这些组中的选项与将用来启动mysqld的[mysqld]组中的相同。(例如,参见2.9.2.2节,“自动启动和停止MySQL”)。但是,当使用多个服务器时,需要每个服务器使用自己的选项值,例如Unix套接字文件和TCP/IP端口号。关于在多服务器环境中,每个服务器对应唯一选项的详细信息,参见5.12节,“在同一台机器上运行多个MySQL服务器”。
  
=ins rabbitmq=
+
要想调用mysqld_multi,使用下面的语法:
==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==
+
shell> mysqld_multi [''options''] {start|stop|report} [''GNR''[,''GNR''] ...]<br/> start、stop和report表示你想要执行的操作。你可以在单个服务器或多个服务器上执行指定的操作,取决于选项名后面的GNR 列。如果没有该列,mysqld_multi为选项文件中的所有服务器执行该操作。
===Note===
 
<pre>
 
  如果是 alpine  rabbitmq:3.6.10-management  换成  其它基础不用变,除了进入容器变成 sh
 
  sed  -i 's!rabbitmq:3.6.10-management!rabbitmq:3.7.26-management-alpine!' docker-compose.yml
 
  
有一种是 node1 不加别 , node2  add node1  ; node3  add node1 and node2  但是  rabbitmqctl cluster_status 可能看起来有些node alarms是down的 不过通过浏览器的不会  </pre>
+
每个GNR值代表一个选项组号或组号范围。GNR值应为选项文件中组名末尾的号。例如,组[mysqld17]的GNR为17。要想指定组号的范围,用破折号间隔开第1个和最后1个号。GNR值10-13代表组[mysqld10]到[mysqld13]。可以在命令行中指定多个组或组范围,用逗号间隔开。GNR列不能有空格字符(空格或tab);空格字符后面的内容将被忽略掉。
<pre>
 
  
#记得  extra_hosts 改成你的相关IP
+
该命令使用选项组[mysqld17]启动单个服务器:
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' 
+
shell> mysqld_multi start 17<br/> 该命令停止多个服务器,使用选项组[mysql8]和[mysqld10]至[mysqld13]:
services:
 
  rabbitmq:
 
    image: rabbitmq:3.6.10-management
 
    ports:
 
      - "5672:5672"
 
      - "4369:4369"
 
      #- "1883:1883"
 
      - "15672:15672"
 
      - "25672:25672"
 
  
    container_name: rabbitmqCluster01
+
shell> mysqld_multi stop 8,10-13<br/> 使用该命令列出设置选项文件的示例:
  
    hostname: rabbitmq01
+
shell> mysqld_multi --example<br/> mysqld_multi支持下面的选项:
    extra_hosts:
 
      #- "rabbitmq01:192.168.10.211"#不要加上自己,不然会老是重启的
 
      - "rabbitmq02:192.168.10.212"
 
      - "rabbitmq03:192.168.10.213"
 
    environment:
 
  
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
+
· --config-file=name
      RABBITMQ_DEFAULT_VHOST: /
 
  
      RABBITMQ_DEFAULT_USER: lxtxadmin
+
指定选项文件名。这关系到mysqld_multi从哪里寻找[mysqldN]选项组。没有该选项,从通用my.cnf文件读所有选项。选项不影响 mysqld_multi从哪里读取自己的选项,总是从通用my.cnf文件的[mysqld_multi]组读取。
  
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
+
· --example
  
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
+
显示示例选项文件。
  
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
+
· --help
  
    volumes:
+
显示帮助消息并退出。
      - ./data/rabbitmq:/var/lib/rabbitmq
 
  
    restart: always 
+
· --log=name
# docker-compose  up -d
 
</pre>
 
  
==mq2==
+
指定日志文件名。如果该文件存在,后面为日志输出。
<pre>
 
mkdir -p /home/data/docker-compose-mqcluster
 
cd /home/data/docker-compose-mqcluster
 
  
vi docker-compose.yml
+
· --mysqladmin=prog_name
 
version: '3.1' 
 
services:
 
  rabbitmq:
 
    image: rabbitmq:3.6.10-management
 
  
    ports:
+
用来停止服务器的mysqladmin二进制。
      - "5672:5672"
 
      - "4369:4369"
 
      #- "1883:1883"
 
      - "15672:15672"
 
      - "25672:25672"
 
  
    container_name: rabbitmqCluster02
+
· --mysqld=prog_name
    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:
+
可用的mysqld二进制。请注意你还可以将该选项的值指定为mysqld_safe。选项被传递给 mysqld。确保在PATH环境变量设定值或mysqld_safe中有mysqld所在目录。
      - ./data/rabbitmq:/var/lib/rabbitmq
 
    restart: always 
 
  
</pre>
+
· --no-log
  
==mq3==
+
按照标准输出打印日志信息,不要写入日志文件。默认情况下,输出写入日志文件。
<pre>
 
mkdir -p /home/data/docker-compose-mqcluster
 
cd /home/data/docker-compose-mqcluster
 
  
vi docker-compose.yml
+
· --password=password
  
+
调用mysqladmin时使用的MySQL账户的密码。请注意该密码值不是可选项,不象其它MySQL程序。
version: '3.1' 
 
services:
 
  rabbitmq:
 
    image: rabbitmq:3.6.10-management
 
  
    ports:
+
· --silent
      - "5672:5672"
 
      - "4369:4369"
 
      #- "1883:1883"
 
      - "15672:15672"
 
      - "25672:25672"
 
  
    container_name: rabbitmqCluster03
+
禁用警告。
  
    hostname: rabbitmq03
+
· --tcp-ip #这个我就用昨比较 多了
    extra_hosts:
 
      - "rabbitmq01:10.3.10.141"
 
      - "rabbitmq02:10.3.10.142"
 
    environment:
 
  
      RABBITMQ_ERLANG_COOKIE: 'rabbitmqCookie' 
+
通过TCP/IP端口而不是Unix套接字文件来连接每个MySQL服务器。(如果找不到套接字文件, 服务器仍然可以运行,但只能通过 TCP/IP端口访问)。默认情况下,使用Unix套接字文件进行连接。该选项影响stop和report操作。
      RABBITMQ_DEFAULT_VHOST: /
 
  
      RABBITMQ_DEFAULT_USER: lxtxadmin
+
· --user=user_name
  
      RABBITMQ_DEFAULT_PASS: tSNTTo886Gq
+
调用mysqladmin时使用的MySQL账户的用户名。
  
      RABBITMQ_LOGS: /var/lib/rabbitmq/rabbitmq.log
+
· --verbose
  
      RABBITMQ_SASL_LOGS: /var/lib/rabbitmq/rabbitmq-sasl.log
+
更详细。
      CLUSTERED: 'true'
 
      CLUSTER_WITH: rabbit1
 
      RAM_NODE: 'true'
 
  
    volumes:
+
· --version
  
      - ./data/rabbitmq:/var/lib/rabbitmq
+
显示版本信息并退出。
  
    restart: always 
+
关于mysqld_multi的一些注解:
</pre>
 
  
=config=
+
· 确保停止mysqld服务器(用mysqladmin程序)的MySQL账户在各个服务器中的用户名和密码相同。并且应确保账户具有SHUTDOWN权限。如果你想要管理的服务器的管理账户有许多不同的用户名或密码,你需要在每个服务器上创建一个账户,并具有相同的用户名和密码。例如,你可以执行下面的命令为每个服务器设置一个普通multi_admin账户:
==将节点2,3加入集群==
 
<pre>
 
#在rabbit2机器进入容器的命令行
 
sudo docker exec -it rabbitmqCluster02 /bin/bash
 
  
#加入集群
+
· shell> mysql -u root -S /tmp/mysql.sock -p''root_password''<br/> · mysql> GRANT SHUTDOWN ON *.*<br/> · -> TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';<br/> 参见5.7.2节,“权限系统工作原理”。你必须为每个mysqld服务器执行该操作。当连接时适当更改连接参数。请注意账户名的主机部分必须允许你用multi_admin从你想要运行mysqld_multi的主机进行连接。
rabbitmqctl stop_app  && rabbitmqctl join_cluster rabbit@rabbitmq01  &&rabbitmqctl start_app
 
  
rabbit3执行相同的命令
+
· 如果你使用mysqld_safe来启动mysqld(例如,--mysqld=mysqld_safe),--pid-file选项很重要。每个mysqld应有自己的进程ID文件。使用mysqld_safe而不使用mysqld的好处是mysqld_safe“守护”其mysqld进程,如果用kill –9发送的信号或由于其它原因(例如分段故障)进程终止,则重启进程。请注意mysqld_safe脚本需要你从某个位置启动它。这说明运行mysqld_multi前你必须进入某个目录。如果启动时有问题,请参见mysqld_safe脚本。特别是要检查下列行:
docker exec -it rabbitmqCluster03 /bin/bash
 
rabbitmqctl stop_app && rabbitmqctl join_cluster rabbit@rabbitmq01  &&rabbitmqctl start_app
 
  
 +
· ----------------------------------------------------------------<br/> · MY_PWD=`pwd`<br/> · # Check if we are starting this relative (for the binary release)<br/> · if test -d $MY_PWD/data/mysql -a -f ./share/mysql/english/errmsg.sys -a \<br/> · -x ./bin/mysqld<br/> · ----------------------------------------------------------------<br/> 参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”。上述行执行的测试应成功,否则你可能遇到了问题。
  
查询集群状态
+
· 每个mysqld的Unix套接字文件和TCP/IP端口号必须不同。
rabbitmqctl cluster_status
 
</pre>
 
  
== nginx 配置==
+
· 你可能想要为mysqld使用--user选项,但为此你需要用Unix root用户运行mysqld_multi脚本。选项文件中有选项不要紧;如果你不是超级用户,并且你用自己的Unix账户重启mysqld进程,你只会得到警告。
<pre>
 
  
#如果是yum nginx  在放在 conf.d/mq.conf
+
· 重要:确保mysqld进程启动所用Unix账户可以完全访问数据目录。不要使用Unix root账户,除非你知道你在做什么。
  server {
 
        listen      80;
 
        server_name  mq.com;
 
 
  
        location / {
+
· 非常重要:使用mysqld_multi前,确保理解传递给mysqld服务器的选项的含义以及你为什么想要独立的mysqld进程。应清楚 在相同的数据目录下使用多个mysqld服务器的危险。使用单独的数据目录,除非你知道你在做什么。在线程系统中,在相同的数据目录下启动多个服务器不会得到超性能。参见5.12节,“在同一台机器上运行多个MySQL服务器”。
            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;
 
         
 
        }
 
    }
 
  
 +
下面的示例显示了你如何设置选项文件来使用mysqld_multi。专门省去第1个和第5个[mysqldN]组来说明你的选项文件可以稍有不同。这样给你更大的灵活性。mysqld程序重启或停止的顺序由它们在选项文件中的顺序决定。
  
NOTE  selinux  记得关掉  不然可能是502哦
+
#This file should probably be in your home dir (~/.my.cnf)<br/> # or /etc/my.cnf<br/> # Version 2.1 by Jani Tolonen
#SELinux设置
 
getenforce  #查看SELINUX工作模式
 
  
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #禁用SELINUX
+
[mysqld_multi]<br/> mysqld = /usr/local/bin/mysqld_safe<br/> mysqladmin = /usr/local/bin/mysqladmin<br/> user = multi_admin<br/> password = multipass
setenforce 0 #临时禁用SELINUX,无需重启
 
 
 
SELINUX=enforcing
 
#此项定义selinux状态。
 
#enforcing—是强制模式系统受selinux保护。就是你违反了策略,你就无法继续操作下去
 
#permissive—是提示模式系统不会受到selinux保护,只是收到警告信息。permissive就是Selinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来(警告信息)
 
#disabled—禁用selinux。
 
  
</pre>
+
[mysqld2]<br/> socket = /tmp/mysql.sock2<br/> port = 3307<br/> pid-file = /usr/local/mysql/var2/hostname.pid2<br/> datadir = /usr/local/mysql/var2<br/> language = /usr/local/share/mysql/english<br/> user = john
==镜像模式==
 
在我的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 开启镜像模式]
 
  
=RabbitMQ实现延迟队列(使用delay插件=
+
[mysqld3]<br/> socket = /tmp/mysql.sock3<br/> port = 3308<br/> pid-file = /usr/local/mysql/var3/hostname.pid3<br/> datadir = /usr/local/mysql/var3<br/> language = /usr/local/share/mysql/swedish<br/> user = monty
<pre>
 
  
docker cp rabbitmq_delayed_message_exchange-3.6.6.ez  c77afe9fa73f:/plugins
+
[mysqld4]<br/> socket = /tmp/mysql.sock4<br/> port = 3309<br/> pid-file = /usr/local/mysql/var4/hostname.pid4<br/> datadir = /usr/local/mysql/var4<br/> language = /usr/local/share/mysql/estonia<br/> user = tonu
  
 +
[mysqld6]<br/> socket = /tmp/mysql.sock6<br/> port = 3311<br/> pid-file = /usr/local/mysql/var6/hostname.pid6<br/> datadir = /usr/local/mysql/var6<br/> language = /usr/local/share/mysql/japanese<br/> user = jani
  
: 进入docker容器内 docker exec  -t rabbit  bash
+
<br/> http://www.iteedu.com/database/mysql/mysqlmanualcn/database-administration/mysqld-multi.php
  
8. 执行命令让插件生效: 启动延时插件:
+
= 星期四 05 1月 2017 =
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
 
</pre>
 
https://www.jianshu.com/p/197715cea172
 
  
=troubleshooting =
+
&nbsp;
<pre>
 
  
1.docker-compose.yml文件报错
+
[[Category:Mysql]]
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
 
 
 
 
 
</pre>
 
 
 
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.
 
 
 
 
 
节点3 是挂,以节点1 为准  在 node2  node3 上 分别执行
 
rabbitmqctl stop_app
 
rabbitmqctl start_app
 
 
 
就行
 
</pre>
 
 
 
==端口在  进入容器  cannot exec in a stopped state: unknown ==
 
今天是端口在 docker restart  id 都不行,进程也还在的  重启了 docker 服务才行了
 
 
 
==rabbitmq node not running==
 
<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]
 
 
 
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
 
</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=
 
 
 
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集群]
 
 
 
 
 
[[category:ops]]
 

2020年10月14日 (三) 03:42的版本

mysqld_multi:管理多个MySQL服务器的程序

 

mysqld_multi可以管理多个监听不同Unix套接字文件和TCP/IP端口的连接的mysqld 进程。它可以启动或停止服务器,或报告它们的当前状态。

程序寻找my.cnf中的[mysqldN]组(或--config-file选项指定的文件)。N 可以为任何正整数。在下面的讨论中该数字指选项组号,或GNR。组号区别各选项组,并用作mysqld_multi的参数来指定想要启动、停止哪个服务器或获取哪个服务器的状态报告。这些组中的选项与将用来启动mysqld的[mysqld]组中的相同。(例如,参见2.9.2.2节,“自动启动和停止MySQL”)。但是,当使用多个服务器时,需要每个服务器使用自己的选项值,例如Unix套接字文件和TCP/IP端口号。关于在多服务器环境中,每个服务器对应唯一选项的详细信息,参见5.12节,“在同一台机器上运行多个MySQL服务器”。

要想调用mysqld_multi,使用下面的语法:

shell> mysqld_multi [options] {start|stop|report} [GNR[,GNR] ...]
start、stop和report表示你想要执行的操作。你可以在单个服务器或多个服务器上执行指定的操作,取决于选项名后面的GNR 列。如果没有该列,mysqld_multi为选项文件中的所有服务器执行该操作。

每个GNR值代表一个选项组号或组号范围。GNR值应为选项文件中组名末尾的号。例如,组[mysqld17]的GNR为17。要想指定组号的范围,用破折号间隔开第1个和最后1个号。GNR值10-13代表组[mysqld10]到[mysqld13]。可以在命令行中指定多个组或组范围,用逗号间隔开。GNR列不能有空格字符(空格或tab);空格字符后面的内容将被忽略掉。

该命令使用选项组[mysqld17]启动单个服务器:

shell> mysqld_multi start 17
该命令停止多个服务器,使用选项组[mysql8]和[mysqld10]至[mysqld13]:

shell> mysqld_multi stop 8,10-13
使用该命令列出设置选项文件的示例:

shell> mysqld_multi --example
mysqld_multi支持下面的选项:

· --config-file=name

指定选项文件名。这关系到mysqld_multi从哪里寻找[mysqldN]选项组。没有该选项,从通用my.cnf文件读所有选项。选项不影响 mysqld_multi从哪里读取自己的选项,总是从通用my.cnf文件的[mysqld_multi]组读取。

· --example

显示示例选项文件。

· --help

显示帮助消息并退出。

· --log=name

指定日志文件名。如果该文件存在,后面为日志输出。

· --mysqladmin=prog_name

用来停止服务器的mysqladmin二进制。

· --mysqld=prog_name

可用的mysqld二进制。请注意你还可以将该选项的值指定为mysqld_safe。选项被传递给 mysqld。确保在PATH环境变量设定值或mysqld_safe中有mysqld所在目录。

· --no-log

按照标准输出打印日志信息,不要写入日志文件。默认情况下,输出写入日志文件。

· --password=password

调用mysqladmin时使用的MySQL账户的密码。请注意该密码值不是可选项,不象其它MySQL程序。

· --silent

禁用警告。

· --tcp-ip #这个我就用昨比较 多了

通过TCP/IP端口而不是Unix套接字文件来连接每个MySQL服务器。(如果找不到套接字文件, 服务器仍然可以运行,但只能通过 TCP/IP端口访问)。默认情况下,使用Unix套接字文件进行连接。该选项影响stop和report操作。

· --user=user_name

调用mysqladmin时使用的MySQL账户的用户名。

· --verbose

更详细。

· --version

显示版本信息并退出。

关于mysqld_multi的一些注解:

· 确保停止mysqld服务器(用mysqladmin程序)的MySQL账户在各个服务器中的用户名和密码相同。并且应确保账户具有SHUTDOWN权限。如果你想要管理的服务器的管理账户有许多不同的用户名或密码,你需要在每个服务器上创建一个账户,并具有相同的用户名和密码。例如,你可以执行下面的命令为每个服务器设置一个普通multi_admin账户:

· shell> mysql -u root -S /tmp/mysql.sock -proot_password
· mysql> GRANT SHUTDOWN ON *.*
· -> TO 'multi_admin'@'localhost' IDENTIFIED BY 'multipass';
参见5.7.2节,“权限系统工作原理”。你必须为每个mysqld服务器执行该操作。当连接时适当更改连接参数。请注意账户名的主机部分必须允许你用multi_admin从你想要运行mysqld_multi的主机进行连接。

· 如果你使用mysqld_safe来启动mysqld(例如,--mysqld=mysqld_safe),--pid-file选项很重要。每个mysqld应有自己的进程ID文件。使用mysqld_safe而不使用mysqld的好处是mysqld_safe“守护”其mysqld进程,如果用kill –9发送的信号或由于其它原因(例如分段故障)进程终止,则重启进程。请注意mysqld_safe脚本需要你从某个位置启动它。这说明运行mysqld_multi前你必须进入某个目录。如果启动时有问题,请参见mysqld_safe脚本。特别是要检查下列行:

· ----------------------------------------------------------------
· MY_PWD=`pwd`
· # Check if we are starting this relative (for the binary release)
· if test -d $MY_PWD/data/mysql -a -f ./share/mysql/english/errmsg.sys -a \
· -x ./bin/mysqld
· ----------------------------------------------------------------
参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”。上述行执行的测试应成功,否则你可能遇到了问题。

· 每个mysqld的Unix套接字文件和TCP/IP端口号必须不同。

· 你可能想要为mysqld使用--user选项,但为此你需要用Unix root用户运行mysqld_multi脚本。选项文件中有选项不要紧;如果你不是超级用户,并且你用自己的Unix账户重启mysqld进程,你只会得到警告。

· 重要:确保mysqld进程启动所用Unix账户可以完全访问数据目录。不要使用Unix root账户,除非你知道你在做什么。

· 非常重要:使用mysqld_multi前,确保理解传递给mysqld服务器的选项的含义以及你为什么想要独立的mysqld进程。应清楚 在相同的数据目录下使用多个mysqld服务器的危险。使用单独的数据目录,除非你知道你在做什么。在线程系统中,在相同的数据目录下启动多个服务器不会得到超性能。参见5.12节,“在同一台机器上运行多个MySQL服务器”。

下面的示例显示了你如何设置选项文件来使用mysqld_multi。专门省去第1个和第5个[mysqldN]组来说明你的选项文件可以稍有不同。这样给你更大的灵活性。mysqld程序重启或停止的顺序由它们在选项文件中的顺序决定。

  1. This file should probably be in your home dir (~/.my.cnf)
    # or /etc/my.cnf
    # Version 2.1 by Jani Tolonen

[mysqld_multi]
mysqld = /usr/local/bin/mysqld_safe
mysqladmin = /usr/local/bin/mysqladmin
user = multi_admin
password = multipass

[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/var2/hostname.pid2
datadir = /usr/local/mysql/var2
language = /usr/local/share/mysql/english
user = john

[mysqld3]
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/var3/hostname.pid3
datadir = /usr/local/mysql/var3
language = /usr/local/share/mysql/swedish
user = monty

[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/var4/hostname.pid4
datadir = /usr/local/mysql/var4
language = /usr/local/share/mysql/estonia
user = tonu

[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/var6/hostname.pid6
datadir = /usr/local/mysql/var6
language = /usr/local/share/mysql/japanese
user = jani


http://www.iteedu.com/database/mysql/mysqlmanualcn/database-administration/mysqld-multi.php

星期四 05 1月 2017