(四)RabbitMQ集群(Ⅱ)

RabbitMQ集群(Ⅱ)

RabbitMQ集群(Ⅰ):https://blog.csdn.net/YCJ_xiyang/article/details/79956516

RabbitMQ管理:https://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,<<"[email protected]">>},
 {partitions,[]}]
[root@h101 ~]# 

修改node类型

    一个集群中运行着的node,可以动态地切换类型(需要关闭应用)

    rabbitmqctl -n 节点名 change_cluster_node_type 类型

注意:一个node停止应用后,会对集群中剩余node的负载产生一定的影响,所以最好是在业务低峰进行以上操作


猜你喜欢

转载自blog.csdn.net/YCJ_xiyang/article/details/79958507