vanturman 2019-12-14
现在有两台服务器:192.168.10.100,192.168.10.101
//进入到100服务器中 //查看hostname,或者使用hostname node1修改主机名 hostname //配置hosts vi /etc/hosts //修改如下 192.168.10.100 homename1 192.168.10.101 homename2 //在101服务器中同样配置就OK了 //注意:homename1是当前主机名哦!
如果不设置主机名,那么就查看主机名是什么,在hosts里面配置上就OK了。
RabbitMQ 基于Erlang实现的,所以在安装rabbitmq之前需要先安装erlang,安装的时候需要注意erlang的版本号与rabbitmq的版本号。
安装注意:erlang版本号需要兼顾rabbitmq版本。版本不对,是无法启动rabbitmq的。
官网版本对应表:http://www.rabbitmq.com/which-erlang.html
//先安装erlang,如果不先安装erlang是无法安装rabbitmq的 [ ~]# yum install http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el6.x86_64.rpm //安装rabbitmq [ ~]# yum install http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.12/rabbitmq-server-3.6.12-1.el6.noarch.rpm
通过rpm文件安装的文件,直接就可以运行了, 无需配置环境变量之类的。如果是下载源码安装需要手动配置。
//后台启动,如果不加-detached为直接启动,加了等于后台启动 rabbitmq-server -detached //查看状态。 rabbitmqctl status
通过yum直接安装后,刚开始找不到安装的文件,以及配置文件,怎么办?
上面不是启动了吗,然后根据启动的进程来看ps -ef|grep rabbit 就能看到安装目录,以及配置文件的目录了。
//启用插件 [ ~]# rabbitmq-plugins enable plugins_name //停用插件 [ ~]# rabbitmq-plugins disable plugins_name //查看插件列表 [ ~]# rabbitmq-plugins list
管理监控插件
[ ~]# rabbitmq-plugins enable rabbitmq_management
开始访问你的rabbitmq了。http://localhost:15672
5672是rabbitmq的默认端口,15672是后台管理的端口。
连接mq是使用IP 端口为5672.
一般配置文件在/usr/local/etc/rabbitmq/rabbitmq-env.conf或者/etc/rabbitmq/rabbitmq-env.conf
实在找不到,那就自己搜索呗。
在配置文件里面可以修改端口各种参数之类的。
//修改端口 RABBITMQ_NODE_PORT=5672
RABBITMQ_LOG_BASE
默认指向 /var/log/rabbitmq ,server 产生的 log 文件将存放于该目录。
RABBITMQ_NODENAME
默认指向 rabbit,当你打算在单台物理机上运行多于 1 个 node 时该环境变量有用 - RABBITMQ_NODENAME 在每一个 erlang-node-and-machine 搭配中应该是唯一的。 参见 clustering on a single machine 中的具体说明。
RABBITMQ_NODE_IP_ADDRESS
默认情况 RabbitMQ 将绑定到全部 interface (IPv4 和 IPv6,如果存在的话) 上。通过设置该环境变量可以让您只绑定到一个网络 interface 或者 address family 上。
RABBITMQ_NODE_PORT
默认为 5672。
建议查看官网配置http://www.rabbitmq.com/configure.html
注意mq有两个配置文件一个rabbitmq.conf参数变量配置 ,rabbitmq-env.conf全局环境变量配置。具体没怎么用过,我就用的后面这个配置一下端口啊,日志输出路径啊,rabbitmq的名称之类的。
由于mq为了安全起见,guest只能在本地登录,是无法远程登录的。不过可以在配置文件里面修改,自己网上找。
最好的方法是添加一个新用户,这样是最安全,最保险的,看下面的用户管理。
//添加用户 rabbitmqctl add_user userName Password //给用户添加权限:userName为用户名, Tag为角色名(对应于administrator,monitoring,policymaker,management,或其他自定义名称)。 rabbitmqctl set_user_tags userName tags //设置用户的接管队列的权限,这一步可以登陆后台管理页面Admin-Users-点击用户名,然后设置。 //如果不设置这一步,是无法看到队列的,因为创建的队列默认在guest名下。 rabbitmqctl set_permissions -p "/" userName ".*" ".*" ".*"
关于角色的描述:
用户角色可分为五类,超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
//修改用户密码 rabbitmqctl change_password username newpassword 列出所有用户 rabbitmqctl list_users
1.创建虚拟主机 rabbitmqctl add_vhost vhostpath 2.删除虚拟主机 rabbitmqctl delete_vhost vhostpath 3.列出所有虚拟主机 rabbitmqctl list_vhosts 4.设置用户权限 rabbitmqctl set_permissions [-p vhostpath] username regexp regexp regexp 5.清除用户权限 rabbitmqctl clear_permissions [-p vhostpath] username 6.列出虚拟主机上的所有权限 rabbitmqctl list_permissions [-p vhostpath] 7.列出用户权限 rabbitmqctl list_user_permissions username
第一步:pc:192.168.10.100 节点一,直接启动rabbitmq-server -detached 就完了,其他不用操作什么。
第二步:pc:192.168.10.101 节点二,暂时不用启动,配置步骤如下:
1.找到.erlang.cookie的目录
Erlang Cookie是保证不同节点可以相互通信的密钥,要保证集群中的不同节点相互通信必须共享相同的Erlang Cookie
//官网中有说明,要么在用户根目录下: /Users/xiaobao/.erlang.cookie //或者在/var/lib/rabbitmq目录下 /var/lib/rabbitmq/.erlang.cookie
2.在节点2中修改.erlang.cookie的权限:
// chmod 777 /var/lib/rabbitmq/.erlang.cookie //将节点1中的.erlang.cookie这个里面的值拷贝到节点2里面来,直接替换节点2里面的值就可以了。为了节点1,2的cooki保持一致。 vi /var/lib/rabbitmq/.erlang.cookie //修改完成后,还原权限,默认是400,如果不还原,启动mq时会报错,直接启动不起来。 chmod 400 /var/lib/rabbitmq/.erlang.cookie
3.启动节点二rabbitmq-server -detached。
4.以节点一作为主节点,节点二中配置如下:
//这里stop_app停止应用,而不是停止服务。 [ ~]# rabbitmqctl stop_app //重置rabbitmq [ ~]# rabbitmqctl reset //将服务器加入到集群中 [ ~]# rabbitmqctl join_cluster //或者这样配置 //[ ~]# rabbitmqctl join_cluster -arm //这种就是告诉,他使用内存模式。默认是磁盘模式 //重启应用 [ ~]# rabbitmqctl start_app //查看集群状态 [ ~]# rabbitmqctl cluster_status
现在到控制台查看会看到有2个节点哦。
rabbitmq存储消息有两种模式,一种是磁盘模式,一种是内存模式。听名字就知道,磁盘模式就是把消息存储到磁盘中,可以达到持久化的目标;内存模式就是把消息存储到内存中,读存速度上要快很多,但是一旦服务器重启就会有可能导致没有消费的消息丢失。
了解了两种模式后,我们知道,单机的情况基本使用的是磁盘模式,这样安全性更高。当两台做集群时,就可以一台磁盘模式,一台内存模式了。这样既可以做到保存消息持久化,另外一台速度也有保障。
[ ~]# rabbitmqctl join_cluster -arm
在搭建集群时在后面加入-arm模式,即为内存模式,如果不加,默认为磁盘模式。
由于rabbitMq是服务,而不是容器,所以在同一台服务上启动多个时,不需要像tomcat一样,需要拷贝多个tomcat安装文件出来。对于服务来说,我们只需要改变端口就可以启动多个服务。
所以单机集群就很简单了,只需要改变端口就好了。
//启动两个服务 [ ~]# RABBITMQ_NODE_PORT=5672 rabbitmq-server -detached [ ~]# RABBITMQ_NODE_PORT=5673 rabbitmq-server -detached //与rabbit1为主节点,在rabbit2中配置如下: [ ~]# rabbitmqctl -n rabbit2 stop_app [ ~]# rabbitmqctl -n rabbit2 join_cluster [ ~]# rabbitmqctl -n rabbit2 start_app
这样就配置完成了。
如果你开启了rabbitMQ后台管理,可以需要修改一下端口。如下
//bww为我的主机名 //启动rabbit1节点 [ ~]# RABBITMQ_NODE_PORT=5672 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" rabbitmq-server –detached //启动rabbit2节点 [ ~]# RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" rabbitmq-server -detached [ ~]# rabbitmqctl -n rabbit2 stop_app [ ~]# rabbitmqctl -n rabbit2 join_cluster [ ~]# rabbitmqctl -n rabbit2 start_app
启动报错,但是不知道错在哪里的时候,直接使用rabbitmq-server启动即可,不要使用rabbitmq-server -detached。
有时候插件比较多,插件监听的端口也会导致冲突,怎么解决呢,要么先关闭插件,或者找到插件监听的端口,单独设置。
如:
[ ~]# RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}] -rabbitmq_stomp tcp_listeners [61614] -rabbitmq_mqtt tcp_listeners [1884]" rabbitmq-server -detached
在mq有一个配置文件在/usr/local/etc/rabbitmq/rabbitmq-env.conf
在配置文件里面我配置了如下:
CONFIG_FILE=/usr/local/etc/rabbitmq/rabbitmq NODE_IP_ADDRESS=127.0.0.1 RABBITMQ_NODE_PORT=5672 RABBITMQ_DIST_PORT=25673
这里单机没问题,但是单机集群就把我坑死了,因为在上面启动中,这个属于环境变量配置文件,里面的参数会覆盖我们上面写的RABBITMQ_NODE_PORT=5673,所以导致在启动时RABBITMQ_NODE_PORT=5673这里配置了一直不起作用,提示我端口冲突,端口冲突,差一点崩溃了。
单机集群要需要配置hosts
vi /etc/hosts 127.0.0.1 bww //自己的主机名
上面搭建起来了,集群已经好了,但是,,但是,不是完整的集群模式。它只是rabbitmq的普通模式
RabbitMQ的Cluster集群模式一般分为两种,普通模式和镜像模式。
镜像模式配置非常简单,首先镜像模式是基于普通集群模式的,所以前面搭建的集群就是普通模式集群了。在搭建好的集群模式下,进入任意一台mq管理后台。
http://ip:15672.点击Admin–> policies 选线,然后添加prolicy就可以了。
添加prolicy参数说明如下:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority] -p Vhost: 可选参数,针对指定vhost下的queue进行设置 Name: policy的名字,随便自定义。 Pattern: queue的匹配模式(正则表达式) Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes all:表示在集群中所有的节点上进行镜像 exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定 nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定 ha-params:ha-mode模式需要用到的参数 ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual priority:可选参数,policy的优先级,值越大,优先级越高 特别说明:如果ha-mode指定为exactly,exactly个数,将在ha-params中设置。如果ha-mode指定为all,则ha-params不需要填写。
例如:rabbitmqctl set_policy -p vhostName allName “^message” ‘{“ha-mode”:”all”}’ 10
http://www.rabbitmq.com/clustering.html 官网集群搭建地址
https://www.linuxidc.com/Linux/2016-12/137812.htm
https://www.linuxidc.com/Linux/2017-09/147030.htm
https://blog.csdn.net/woogeyu/article/details/51119101
https://blog.csdn.net/zhu_tianwei/article/details/40936723
https://blog.csdn.net/u013256816/article/details/71097186 镜像模式的原理说明
————————————————
版权声明:本文为CSDN博主「piaoslowly」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/piaoslowly/article/details/81625335