````
### https://segmentfault.com/a/1190000010702020
### http://www.cnblogs.com/kevingrace/p/7693042.html
### https://segmentfault.com/a/1190000010702020
### https://cloud.tencent.com/developer/article/1041042
###
````
添加软件源
```
vi /etc/yum.repos.d/rabbitmq.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
[rabbitmq-server]
name=rabbitmq-server
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
```
### 安装软件
```
yum install rabbitmq-server
```
### 更改主机名 永久生效 hostnamectl set-hostname mq1 hostnamectl set-hostname mq2
### 添加 hosts
```
192.168.1.197 mq1
192.168.1.196 mq2
```
### 更改数据目录和日志目录
报错需要创建log日志
### chown -R rabbitmq:rabbitmq /app/rabbitmq/mnesia/
```
vi /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/rabbitmq/mnesia
RABBITMQ_LOG_BASE=/data/rabbitmq/log
```
### 启动服务
两台主机都启动下 rabbitmq-server
```
systemctl start rabbitmq-server
```
### 设置 Erlang Cookie
```
scp /var/lib/rabbitmq/.erlang.cookie mq2:/var/lib/rabbitmq/
```
保证 权限和所属用户/组修改回来 与原来一致
### 注意事项
cookie在所有节点上必须完全一样,同步时一定要注意。
erlang是通过主机名来连接服务,必须保证各个主机名之间可以ping通。可以通过编辑/etc/hosts来手工添加主机名和IP对应关系。如果主机名ping不通,rabbitmq服务启动会失败。
### 组成集群
所有节点重新启动下 rabbitmq-server
```
systemctl restart rabbitmq-server
```
### 防火墙端口需要放行 4369
### systemctl stop firewalld
### 查看错误信息 journalctl -f -u rabbitmq-server
mq2 加入集群
```
mq2 $ rabbitmqctl stop_app # 停止rabbitmq服务
mq2 $ rabbitmqctl join_cluster rabbit@mq1 # mq2和mq1构成集群, mq2必须能通过mq1的主机名ping通
mq2 $ rabbitmqctl start_app # 开启rabbitmq服务
```
### 设置内存节点
其中 –ram 指的是作为内存节点,要是想做为磁盘节点的话,就不用加 –ram 这个参数了
```
mq2 # rabbitmqctl join_cluster --ram rabbit@mq1
```
只要在节点列表里包含了本身,它就成为一个磁盘节点。
在RabbitMQ集群里,必须至少有一个磁盘节点存在。
### 更改节点属性
```
node2 $ rabbitmqctl stop_app # 停止rabbitmq服务
node2 $ rabbitmqctl change_cluster_node_type ram # 更改节点为内存节点
Turning rabbit@node2 into a ram node
node2 $ rabbitmqctl change_cluster_node_type disc # 更改节点为磁盘节点
Turning rabbit@node2 into a disc node
node2 $ rabbitmqctl start_app # 开启rabbitmq服务
```
### 查看集群状态
```
rabbitmqctl cluster_status
```
### 集群用户操作
```
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p "/" admin '.*' '.*' '.*'
```
### 开启监控插件
```
rabbitmq-plugins enable rabbitmq_management
```
### 登录后台
http://192.168.1.197:15672/#/
上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列
### 镜像队列概念
镜像队列可以同步queue和message,当主queue挂掉,从queue中会有一个变为主queue来接替工作。
镜像队列是基于普通的集群模式的,所以你还是得先配置普通集群,然后才能设置镜像队列。
镜像队列设置后,会分一个主节点和多个从节点,如果主节点宕机,从节点会有一个选为主节点,原先的主节点起来后会变为从节点。
queue和message虽然会存在所有镜像队列中,但客户端读取时不论物理面连接的主节点还是从节点,都是从主节点读取数据,然后主节点再将queue和message的状态同步给从节点,因此多个客户端连接不同的镜像队列不会产生同一message被多次接受的情况。
### 设置镜像队列策略
在普通集群的中任意节点启用策略,策略会自动同步到集群节点
命令格式
```
set_policy [-p vhostpath] {name} {pattern} {definition} [priority]
```
在任意一个节点上执行
```
[root@node1 ~]# rabbitmqctl set_policy -p / ha-allqueue "^message" '{"ha-mode":"all"}'
Setting policy "ha-allqueue" for pattern "^message" to "{\"ha-mode\":\"all\"}" with priority "0"
```
注意:"^message" 这个规则要根据自己修改,这个是指同步"message"开头的队列名称,配置时使用的应用于所有队列,所以表达式为"^"
### 集群重启
集群重启时,最后一个挂掉的节点应该第一个重启,如果因特殊原因(比如同时断电),而不知道哪个节点最后一个挂掉。可用以下方法重启:
先在一个节点上执行
```
$ rabbitmqctl force_boot
$ service rabbitmq-server start
```
在其他节点上执行
```
$ service rabbitmq-server start
```
查看cluster状态是否正常(要在所有节点上查询)。
```
$ rabbitmqctl cluster_status
```
### 常用命令备注
```
添加用户
sudo rabbitmqctl add_user admin pwd
设置用户角色
sudo rabbitmqctl set_user_tags admin administrator
tag(administrator,monitoring,policymaker,management)
设置用户权限(接受来自所有Host的所有操作)
sudo rabbitmqctl set_permissions -p "/" admin '.*' '.*' '.*'
查看用户权限
sudo rabbitmqctl list_user_permissions admin
删除用户
sudo rabbitmqctl delete_user <username>
修改用户密码
sudo rabbitmqctl change_password <username> <newpassword>
清除用户密码(该用户将不能使用密码登陆,但是可以通过SASL登陆如果配置了SASL认证)
sudo rabbitmqctl clear_password <username>
设置用户tags(相当于角色,包含administrator,monitoring,policymaker,management)
sudo rabbitmqctl set_user_tags <username> <tag>
列出所有用户
sudo rabbitmqctl list_users
创建一个vhosts
sudo rabbitmqctl add_vhost <vhostpath>
删除一个vhosts
sudo rabbitmqctl delete_vhost <vhostpath>
列出vhosts
sudo rabbitmqctl list_vhosts [<vhostinfoitem> ...]
针对一个vhosts给用户赋予相关权限;
sudo rabbitmqctl set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
清除一个用户对vhosts的权限;
sudo rabbitmqctl clear_permissions [-p <vhostpath>] <username>
列出哪些用户可以访问该vhosts;
sudo rabbitmqctl list_permissions [-p <vhostpath>]
列出用户访问权限;
sudo rabbitmqctl list_user_permissions <username>
```
输出当前目录下各个子目录和文件所使用的空间
````
du -m --max-depth=1
````
- 第一章:Centos快捷操作
- EPEL 存储库
- 第二章:系统命令
- 第三章:Consul搭建配置
- consul-客户端配置win
- 第四章:Mongodb3.20搭建配置
- 1、mongodb-bak
- 第五章:Centos 7搭建Gitlab服务器
- yum-install
- 第六章:Mysql5.6主从搭建
- 第七张:Vmware-exsi6.5
- 第八章:Jumpserver 堡垒机
- 第九章:OCS Inventory NG-CMDB”
- 第十章:zabbix监控部署
- 第十一章:ELK快速搭建
- 第十二章:docker安装
- 第十三章:rabbitmq集群安装
- 第十四章:Nginx相关配置
- 1、Nginx禁止访问某个目录或某个后缀文件
- 2、Nginx-GeoIP部署
- 3、Nginx的lua-nginx-module模块
- 4、lua-resty-redis
- 5、nginx删除不安全的请求头
- 6、Nginx支持HTTPS并且支持反爬虫
- 7、nginx配置location总结及rewrite规则写法
- 7、nginx安装和监控
- 第十五章:racktables资产管理
- 第十六章:缓存服务安装
- memcache
- 第十七章:自动化管理
- ansible-playbook
- ansible-playbook-firewalld
- 第十八章:redis集群部署
- 第十九章:yapi配置ldap
- yapi
- 第二十章:winlogbeat
- win配置winlogbeat
