(四)RabbitMQ集群(Ⅱ)
RabbitMQ集群(Ⅱ)
RabbitMQ集群(Ⅰ)//blog.csdn.net/YCJ_xiyang/article/details/79956516
RabbitMQ管理//blog.csdn.net/YCJ_xiyang/article/details/79991699
升级集群
升级Erlang或RabbitMQ版本,必须停止集群,因为集群中不能容忍不同版本协同工作
在集群升级之前最好确认哪一个Node是第一个升级的,这个node必须是最后一个关闭,然后第一个启动。否者这个node和实际最后一个关闭的node之前的配置变更都会丢失。
在集群中,要使用DISC node来主导升级,而不能使用RAM node,会报错,从安全层面也可以理解这样做的用意。
单机集群
在同一个OS中运行多个RabbitMQ node 主要满足以下两个条件:
①:每一个node使用的名字不能重复
②:每一个node使用的port/IP不能重复
使用不同名字,不同端口,分别从后台启动两个服务进程
RABBITMQ\_NODE\_PORT=5672 RABBITMQ\_NODENAME=rabbit rabbitmq-server -detached
[root@h101 ~]# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
[root@h101 ~]# ps faux | grep mq
root 3054 0.0 0.0 103252 828 pts/0 S+ 14:21 0:00 \_ grep mq
rabbitmq 2888 0.0 0.0 10828 468 ? S 14:14 0:00 /usr/lib64/erlang/erts-5.8.5/bin/epmd -daemon
rabbitmq 2975 22.7 0.8 1088040 33292 ? Sl 14:21 0:02 /usr/lib64/erlang/erts-5.8.5/bin/beam.smp -W w -A 64 -P 1048576 -K erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.5.6/sbin/../ebin -noshell -noinput -st -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -rabbit tcp_listeners [{"auto",5672}] -sasl errlog_type errr false -rabbit error_logger {file,"/var/log/rabbitmq/rabbit.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit-sasl.lons_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/lib/rabbitmq_server-3.5.6/sbin/../plugins" -rabbit plb/rabbitmq/mnesia/rabbit-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia esia/rabbit" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672 -noshell -noinput
rabbitmq 3050 0.0 0.0 10792 508 ? Ss 14:21 0:00 \_ inet_gethost 4
rabbitmq 3051 0.0 0.0 12896 648 ? S 14:21 0:00 \_ inet_gethost 4
RABBITMQ\_NODE\_PORT=5673 RABBITMQ\_NODENAME=hare rabbitmq-server -detached
[root@h101 ~]# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=hare rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
[root@h101 ~]# ps faux | grep mq
root 3196 0.0 0.0 103252 824 pts/0 S+ 14:22 0:00 \_ grep mq
rabbitmq 2888 0.0 0.0 10828 468 ? S 14:14 0:00 /usr/lib64/erlang/erts-5.8.5/bin/epmd -daemon
rabbitmq 2975 8.6 0.8 1088040 33292 ? Sl 14:21 0:02 /usr/lib64/erlang/erts-5.8.5/bin/beam.smp -W w -A 64 -P 1048576 -K erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.5.6/sbin/../ebin -noshell -noinput -st -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -rabbit tcp_listeners [{"auto",5672}] -sasl errlog_type errr false -rabbit error_logger {file,"/var/log/rabbitmq/rabbit.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit-sasl.lons_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/lib/rabbitmq_server-3.5.6/sbin/../plugins" -rabbit plb/rabbitmq/mnesia/rabbit-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia esia/rabbit" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672 -noshell -noinput
rabbitmq 3050 0.0 0.0 10792 508 ? Ss 14:21 0:00 \_ inet_gethost 4
rabbitmq 3051 0.0 0.0 12896 648 ? S 14:21 0:00 \_ inet_gethost 4
rabbitmq 3116 29.8 0.8 1087524 33684 ? Sl 14:21 0:01 /usr/lib64/erlang/erts-5.8.5/bin/beam.smp -W w -A 64 -P 1048576 -K erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.5.6/sbin/../ebin -noshell -noinput -s-boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -rabbit tcp_listeners [{"auto",5673}] -sasl errlog_type errorfalse -rabbit error_logger {file,"/var/log/rabbitmq/hare.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/hare-sasl.log"} -re "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/lib/rabbitmq_server-3.5.6/sbin/../plugins" -rabbit plugins_itmq/mnesia/hare-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/vae" -kernel inet_dist_listen_min 25673 -kernel inet_dist_listen_max 25673 -noshell -noinput
rabbitmq 3191 0.0 0.0 10792 508 ? Ss 14:21 0:00 \_ inet_gethost 4
rabbitmq 3192 0.0 0.0 12896 648 ? S 14:21 0:00 \_ inet_gethost 4
[root@h101 ~]#
查看node状态
rabbitmqctl -n 节点名 status
查看集群的状态
rabbitmqctl -n 节点名 cluster\_status
创建集群
rabbitmqctl -n 节点名 jion\_cluster 另一个节点全称
防火墙问题
集群中的node之间可能会有防火墙阻隔,为了确保集群正常工作,node之间必须开放一些端口用于互相通信,打开4369和25672
集群中Erlang的版本
集群中所有node的Erlang版本必须一致
客户端的连接
集群中没有主备概念,每一个node都是对等的,所以客户端可以连入任意一个node进行操作,如果一个node出现故障,客户端会返回错误,直接连接另一个node就可以继续进行操作
可以使用第三方工具确保连接的高可用(如 Keepalived)
内存节点集群
内存(RAM)node是将所有元数据保存在内存中的node,是以一定安全风险为代价交换性能的选择,由于不能保存数据到硬盘,所以断电或重启后数据将会丢失,也正因为不必与硬盘打交道,所以速度会非常快
一般使用它来动态地扩展集群性能(只使用RAM node的集群是脆弱的)
创建内存node
rabbitmqctl -n 节点名 join\_cluster --ram hare@h101
[root@h101 ~]# rabbitmqctl -n rabbit stop_app
Stopping node rabbit@h101 ...
[root@h101 ~]# rabbitmqctl -n rabbit join_cluster --ram hare@h101
Clustering node rabbit@h101 with hare@h101 ...
[root@h101 ~]# rabbitmqctl -n rabbit start_app
Starting node rabbit@h101 ...
[root@h101 ~]# rabbitmqctl -n rabbit cluster_status
Cluster status of node rabbit@h101 ...
[{nodes,[{disc,[hare@h101]},{ram,[rabbit@h101]}]},
{running_nodes,[hare@h101,rabbit@h101]},
{cluster_name,<<"hare@h101.temp">>},
{partitions,[]}]
[root@h101 ~]#
修改node类型
一个集群中运行着的node,可以动态地切换类型(需要关闭应用)
rabbitmqctl -n 节点名 change\_cluster\_node\_type 类型
注意:一个node停止应用后,会对集群中剩余node的负载产生一定的影响,所以最好是在业务低峰进行以上操作
还没有评论,来说两句吧...