RabbitMQ集群搭建

注意:集群控制台页面管理中,

 

千!万!不!要!随便点击任何一个点的reset和集群reset!!

 

这样在生产环境有一段时间内断开原有连接,无法连接丢失大量数据的危险!!

 

注意:目前还没有做集群的镜像队列和负载均衡无镜像下队列、消息等只保存在集群单点,容易丢失数据!!

掌握技术,考虑问题,要足够深入,细致,全面!!

 

注意:目前单机版集群,重启机器后需要按下面的操作重新建立集群,且集群没有布置成服务,开机启动等。

参考:

单机集群:

首先参考朱忠华的书里面,带插件的单机集群搭建、配置!!然后参照下面实际操作!!

 

安装Java进行程序测试注意:在一个控制台Shell配置好java,source /etc/profile之后,再打开另一个控制台Shell,可能这个Shell还沿用旧的PATH路径配置,造成版本是java1.7,与程序版本不兼容。需要在这个Shell中再source /etc/profile一下!!

注意安装配置Java时,Java路径要配在PATH所有路径的前面:export PATH=$JAVA_HOME/bin:$PATH,否则可能先找到其他路径下的Java,造成版本错误!! 

 

下面链接的文章仅供参考,并没有按他的做法搭建成功(端口冲突启动失败了!!

https://blog.csdn.net/Java_HuiLong/article/details/73718714

需要注意的是Web管理插件端口及其他端口冲突问题!!

https://blog.csdn.net/u013256816/article/details/53264715

多机集群:https://blog.csdn.net/u013256816/article/details/53524766

 

更改主机名:(需要修改完后重启Linux)

https://blog.csdn.net/qi49125/article/details/77539913

这样主机名确实永久改变了,然而rabbitmq识别的主机名仍然是localhost!所以下面的Clustering配置,

@主机名,仍然要写localhost才能创建集群成功!!

 

单机集群注意要点:

1.rabbitmq识别的主机名仍然是localhost,所以要@localhost,如上所述

2.配置完集群后,启动各节点的rabbitmq_management插件(前提是集群配置时该插件端口设置不冲突!),需要加上-n rabbit1@localhost这样的参数,并且需要在各自节点的sbin目录

也就是节点目录要和-n rabbit1@localhost参数匹配,不能在这个节点目录配置启动另一个节点的插件!!而查看集群状态时则在任何一个节点的目录都行。

3.集群创建用户,也要像2中一样,指定-n rabbit1@localhost这样的参数,才能创建成功。并且在一个节点上创建的用户,在其他节点上也有,无需挨个创建,这在各节点的控制台可以看到

这里在任何一个节点目录创建均可,并且-n rabbit1@localhost参数不需要和节点目录对应,比如可以在节点3目录创建节点1的用户并赋予权限,3个节点均可共享,vhost配置可以在控制台直接设定

发现集群控制台是单点登录的,一个节点的一个账号退出,其他节点同一个账号登录的均退出,都需要重新登录。

实际操作:

[root@node1 sbin]# pwd
/usr/local/rabbitmq/sbin
[root@node1 sbin]# RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15672}]" ./rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
[root@node1 sbin]# cd /usr/local/rabbitmq2/sbin
[root@node1 sbin]# RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit2 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" ./rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
[root@node1 sbin]# cd /usr/local/rabbitmq3/sbin
[root@node1 sbin]# RABBITMQ_NODE_PORT=5674 RABBITMQ_NODENAME=rabbit3 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" ./rabbitmq-server -detached
Warning: PID file not written; -detached was passed.
[root@node1 sbin]# cd /usr/local/rabbitmq2/sbin
[root@node1 sbin]# ./rabbitmqctl -n rabbit2@node1 stop_app
Stopping rabbit application on node rabbit2@node1
Error: unable to connect to node rabbit2@node1: nodedown

DIAGNOSTICS
===========

attempted to contact: [rabbit2@node1]

rabbit2@node1:
* connected to epmd (port 4369) on node1
* epmd reports node 'rabbit2' running on port 25673
* TCP connection succeeded but Erlang distribution failed

* Hostname mismatch: node "rabbit2@localhost" believes its host is different. Please ensure that hostnames resolve the same way locally and on "rabbit2@localhost"


current node details:
- node name: 'rabbitmq-cli-81@localhost'
- home dir: /root
- cookie hash: ct+K59z4oWF/n8u2DG4BFA==

[root@node1 sbin]# ./rabbitmqctl -n rabbit2@localhost stop_app
Stopping rabbit application on node rabbit2@localhost
[root@node1 sbin]# hostname
node1
[root@node1 sbin]# ./rabbitmqctl -n rabbit2@localhost reset
Resetting node rabbit2@localhost
[root@node1 sbin]# ./rabbitmqctl -n rabbit2@localhost join_cluster rabbit1@localhost
Clustering node rabbit2@localhost with rabbit1@localhost
[root@node1 sbin]# ./rabbitmqctl -n rabbit2@localhost start_app
Starting node rabbit2@localhost
[root@node1 sbin]# cd /usr/local/rabbitmq3/sbin
[root@node1 sbin]# ./rabbitmqctl -n rabbit3@localhost stop_app
Stopping rabbit application on node rabbit3@localhost
[root@node1 sbin]# ./rabbitmqctl -n rabbit3@localhost reset
Resetting node rabbit3@localhost
[root@node1 sbin]# ./rabbitmqctl -n rabbit3@localhost join_cluster rabbit1@localhost
Clustering node rabbit3@localhost with rabbit1@localhost
[root@node1 sbin]# ./rabbitmqctl -n rabbit3@localhost start_app
Starting node rabbit3@localhost
[root@node1 sbin]# cd /usr/local/rabbitmq/sbin
[root@node1 sbin]# ./rabbitmqctl -n rabbit1@localhost cluster_status
Cluster status of node rabbit1@localhost
[{nodes,[{disc,[rabbit1@localhost,rabbit2@localhost,rabbit3@localhost]}]},
{running_nodes,[rabbit3@localhost,rabbit2@localhost,rabbit1@localhost]},
{cluster_name,<<"rabbit1@localhost">>},
{partitions,[]},
{alarms,[{rabbit3@localhost,[]},
{rabbit2@localhost,[]},
{rabbit1@localhost,[]}]}]
[root@node1 sbin]# cd /usr/local/rabbitmq2/sbin
[root@node1 sbin]# ./rabbitmqctl -n rabbit2@localhost cluster_status
Cluster status of node rabbit2@localhost
[{nodes,[{disc,[rabbit1@localhost,rabbit2@localhost,rabbit3@localhost]}]},
{running_nodes,[rabbit3@localhost,rabbit1@localhost,rabbit2@localhost]},
{cluster_name,<<"rabbit1@localhost">>},
{partitions,[]},
{alarms,[{rabbit3@localhost,[]},
{rabbit1@localhost,[]},
{rabbit2@localhost,[]}]}]
[root@node1 sbin]# ./rabbitmqctl -n rabbit3@localhost cluster_status
Cluster status of node rabbit3@localhost
[{nodes,[{disc,[rabbit1@localhost,rabbit2@localhost,rabbit3@localhost]}]},
{running_nodes,[rabbit1@localhost,rabbit2@localhost,rabbit3@localhost]},
{cluster_name,<<"rabbit1@localhost">>},
{partitions,[]},
{alarms,[{rabbit1@localhost,[]},
{rabbit2@localhost,[]},
{rabbit3@localhost,[]}]}]
[root@node1 sbin]# ps aux|grep rabbit
root 62732 0.7 1.7 3885124 67080 ? Sl 09:31 0:05 /usr/local/lib/erlang/erts-8.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -root /usr/local/lib/erlang -progname erl -- -home /root -- -pa /usr/local/rabbitmq/ebin -noshell -noinput -s rabbit boot -sname rabbit1 -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -rabbit tcp_listeners [{"auto",5672}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/usr/local/rabbitmq/var/log/rabbitmq/rabbit1.log"} -rabbit sasl_error_logger {file,"/usr/local/rabbitmq/var/log/rabbitmq/rabbit1-sasl.log"} -rabbit enabled_plugins_file "/usr/local/rabbitmq/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/local/rabbitmq/plugins" -rabbit plugins_expand_dir "/usr/local/rabbitmq/var/lib/rabbitmq/mnesia/rabbit1-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/usr/local/rabbitmq/var/lib/rabbitmq/mnesia/rabbit1" -rabbitmq_management listener [{port,15672}] -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672 -noshell -noinput
root 62982 1.0 1.7 3889912 67172 ? Sl 09:32 0:06 /usr/local/lib/erlang/erts-8.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -root /usr/local/lib/erlang -progname erl -- -home /root -- -pa /usr/local/rabbitmq2/ebin -noshell -noinput -s rabbit boot -sname rabbit2 -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -rabbit tcp_listeners [{"auto",5673}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/usr/local/rabbitmq2/var/log/rabbitmq/rabbit2.log"} -rabbit sasl_error_logger {file,"/usr/local/rabbitmq2/var/log/rabbitmq/rabbit2-sasl.log"} -rabbit enabled_plugins_file "/usr/local/rabbitmq2/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/local/rabbitmq2/plugins" -rabbit plugins_expand_dir "/usr/local/rabbitmq2/var/lib/rabbitmq/mnesia/rabbit2-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/usr/local/rabbitmq2/var/lib/rabbitmq/mnesia/rabbit2" -rabbitmq_management listener [{port,15673}] -kernel inet_dist_listen_min 25673 -kernel inet_dist_listen_max 25673 -noshell -noinput
root 63229 1.1 1.6 3887096 64512 ? Sl 09:33 0:06 /usr/local/lib/erlang/erts-8.3/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 128000 -K true -- -root /usr/local/lib/erlang -progname erl -- -home /root -- -pa /usr/local/rabbitmq3/ebin -noshell -noinput -s rabbit boot -sname rabbit3 -boot start_sasl -kernel inet_default_connect_options [{nodelay,true}] -rabbit tcp_listeners [{"auto",5674}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/usr/local/rabbitmq3/var/log/rabbitmq/rabbit3.log"} -rabbit sasl_error_logger {file,"/usr/local/rabbitmq3/var/log/rabbitmq/rabbit3-sasl.log"} -rabbit enabled_plugins_file "/usr/local/rabbitmq3/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/local/rabbitmq3/plugins" -rabbit plugins_expand_dir "/usr/local/rabbitmq3/var/lib/rabbitmq/mnesia/rabbit3-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/usr/local/rabbitmq3/var/lib/rabbitmq/mnesia/rabbit3" -rabbitmq_management listener [{port,15674}] -kernel inet_dist_listen_min 25674 -kernel inet_dist_listen_max 25674 -noshell -noinput
root 65322 0.0 0.0 112648 980 pts/0 S+ 09:42 0:00 grep --color=auto rabbit
[root@node1 sbin]# pwd
/usr/local/rabbitmq2/sbin
[root@node1 sbin]# ./rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management

Applying plugin configuration to rabbit@node1... failed.
* Could not contact node rabbit@node1.
Changes will take effect at broker restart.
* Options: --online - fail if broker cannot be contacted.
--offline - do not try to contact broker.
[root@node1 sbin]# ./rabbitmq-plugins -n rabbit1@localhost enable rabbitmq_management
Plugin configuration unchanged.

Applying plugin configuration to rabbit1@localhost... failed.
Error: {enabled_plugins_mismatch,"/usr/local/rabbitmq2/etc/rabbitmq/enabled_plugins",
"/usr/local/rabbitmq/etc/rabbitmq/enabled_plugins"}
[root@node1 sbin]# ./rabbitmq-plugins -n rabbit2@localhost enable rabbitmq_management
Plugin configuration unchanged.

Applying plugin configuration to rabbit2@localhost... started 6 plugins.
[root@node1 sbin]# pwd
/usr/local/rabbitmq2/sbin
[root@node1 sbin]# cd /usr/local/rabbitmq/sbin
[root@node1 sbin]# ./rabbitmq-plugins -n rabbit1@localhost enable rabbitmq_management
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management

Applying plugin configuration to rabbit1@localhost... started 6 plugins.
[root@node1 sbin]# cd /usr/local/rabbitmq3/sbin
[root@node1 sbin]# ./rabbitmq-plugins -n rabbit3@localhost enable rabbitmq_management
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management

Applying plugin configuration to rabbit3@localhost... started 6 plugins.

[root@node1 sbin]# pwd
/usr/local/rabbitmq3/sbin
[root@node1 sbin]# ./rabbitmqctl add_user admin admin
Error: unable to connect to node rabbit@node1: nodedown

DIAGNOSTICS
===========

attempted to contact: [rabbit@node1]

rabbit@node1:
* connected to epmd (port 4369) on node1
* epmd reports: node 'rabbit' not running at all
other nodes on node1: [rabbit1,rabbit2,rabbit3,
'rabbitmq-cli-82']
* suggestion: start the node

current node details:
- node name: 'rabbitmq-cli-82@localhost'
- home dir: /root
- cookie hash: ct+K59z4oWF/n8u2DG4BFA==

[root@node1 sbin]# ./rabbitmqctl -n rabbit1@localhost add_user admin admin
Creating user "admin"
[root@node1 sbin]# ./rabbitmqctl -n rabbit1@localhost set_user_tags admin administrator
Setting tags for user "admin" to [administrator]

 

设置镜像队列

注意:1.需要指定集群节点进行设置: -n rabbit2@localhost

2.发现同一个镜像策略,在任何节点设置一次或多次都同步到所有节点

3.高可用同步方式选择manual,不让新加入slave自动同步已有镜像,避免影响性能(同步时队列阻塞,且RabbitMQ集群并不能热扩展,新加入slave基本也是停机加入)

4.镜像队列模式选择了在集群所有节点进行镜像

5.正则匹配镜像所有队列--实际生产环境需要根据性能和业务重要性酌情选择!!

 

实际操作:

[root@node1 sbin]# pwd
/usr/local/rabbitmq/sbin
[root@node1 sbin]# ./rabbitmqctl set_policy --priority 0 --apply-to queues mirror_queue "[\s\S]*" '{"ha-mode":"all","ha-sync-mode":"manual"}'
Error: unable to connect to node rabbit@node1: nodedown

DIAGNOSTICS
===========

attempted to contact: [rabbit@node1]

rabbit@node1:
* connected to epmd (port 4369) on node1
* epmd reports: node 'rabbit' not running at all
other nodes on node1: [rabbit1,rabbit2,rabbit3,
'rabbitmq-cli-71']
* suggestion: start the node

current node details:
- node name: 'rabbitmq-cli-71@localhost'
- home dir: /root
- cookie hash: ct+K59z4oWF/n8u2DG4BFA==

[root@node1 sbin]# ./rabbitmqctl -n rabbit2@localhost set_policy --priority 0 --apply-to queues mirror_queue "[\s\S]*" '{"ha-mode":"all","ha-sync-mode":"manual"}'
Setting policy "mirror_queue" for pattern "[\\s\\S]*" to "{\"ha-mode\":\"all\",\"ha-sync-mode\":\"manual\"}" with priority "0"
[root@node1 sbin]# ./rabbitmqctl -n rabbit1@localhost set_policy --priority 0 --apply-to queues mirror_queue "[\s\S]*" '{"ha-mode":"all","ha-sync-mode":"manual"}'
Setting policy "mirror_queue" for pattern "[\\s\\S]*" to "{\"ha-mode\":\"all\",\"ha-sync-mode\":\"manual\"}" with priority "0"
[root@node1 sbin]# ./rabbitmqctl -n rabbit1@localhost set_policy --priority 0 --apply-to queues mirror_queue "[\s\S]*" '{"ha-mode":"all","ha-sync-mode":"manual"}'
Setting policy "mirror_queue" for pattern "[\\s\\S]*" to "{\"ha-mode\":\"all\",\"ha-sync-mode\":\"manual\"}" with priority "0"
[root@node1 sbin]# ./rabbitmqctl -n rabbit3@localhost set_policy --priority 0 --apply-to queues mirror_queue "[\s\S]*" '{"ha-mode":"all","ha-sync-mode":"manual"}'
Setting policy "mirror_queue" for pattern "[\\s\\S]*" to "{\"ha-mode\":\"all\",\"ha-sync-mode\":\"manual\"}" with priority "0"

 

关于正则:

https://www.cnblogs.com/exmyth/p/7868582.html

https://blog.csdn.net/lynn_coder/article/details/79502322

https://zhidao.baidu.com/question/1447232660045793060.html

常用正则:

http://www.cnblogs.com/zxin/archive/2013/01/26/2877765.html

 

rpm安装rabbitmq的一些冲突

1.yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel安装时出现

PackageKit-0.8.9-11.el7.x86_64 has missing requires of PackageKit-backend及另外一个依赖冲突,参考:

https://www.cnblogs.com/stxs/p/9155858.html

使用yum命令来安装或更新rpm和yum的依赖包。

$ yum install yum-utils

$ yum install yum-rhn-plugin

$ yum update rpm-build

$ yum update rpm-libs

$ yum update rpm-python

然后

谷歌搜索PackageKit-0.8.9-11.el7.x86_64,在http://buildlogs-seed.centos.org/c7.00.02/PackageKit/20140529191922/0.8.9-11.el7.x86_64/ 找到了相应的rpm包。

将rpm包下载下来后,用rpm命令一一安装。我这时想起来当时用rpm -qa|grep yum命令时有一条是PackageKit-yum*****,而我现在使用rpm -qa|grep yum所得到的结果没有PackageKit-yum*****了,我就尝试从这个网站上下载PackageKit-yum-0.8.9-11.el7.x86_64.rpm 和PackageKit-yum-plugin-0.8.9-11.el7.x86_64.rpm,使用rpm命令安装,发现安装了PackageKit-yum-0.8.9-11.el7.x86_64.rpm之后系统就不提示信息了,至此问题得到完满解决

 

2.上面的问题解决后,出现Processing Conflict: initscripts-9.49.46-1.el7.x86_64 conflicts redhat-release < 7.5-0.11,解决:

删除冲突的包即可
rpm -e redhat-release-server-7.0-1.el7.x86_64 --nodeps

参考

http://blog.51cto.com/2484643/2140696

http://www.mamicode.com/info-detail-2369782.html

 

 

常用yum和rpm命令参考:

http://blog.chinaunix.net/uid-24677087-id-3935161.html

https://blog.csdn.net/wzyzzu/article/details/41250905

 

posted @ 2019-01-15 17:18  free_wings  阅读(2073)  评论(0编辑  收藏  举报