集群配置
三台centos 7虚拟机
10.1.10.35 master
10.1.10.36 slave1
10.1.10.37 slave2
资源下载
下载到 /Download 文件夹下
1. rabbitmq server 下载
[root@seclab-master Downloads]# wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-generic-unix-3.6.10.tar.xz
2. erlang下载
[root@seclab-master Downloads]# wget http://erlang.org/download/otp_src_20.0.tar.gz
远程复制文件到slave1
和slave2
1. 到slave1
[root@seclab-master Downloads]# scp rabbitmq-server-generic-unix-3.6.10.tar.xz root@10.1.10.36:/root/Downloads/
[root@seclab-master Downloads]# scp otp_src_20.0.tar.gz root@10.1.10.36:/root/Downloads/
2. 到slave2
[root@seclab-master Downloads]# scp rabbitmq-server-generic-unix-3.6.10.tar.xz root@10.1.10.37:/root/Downloads/
[root@seclab-master Downloads]# scp otp_src_20.0.tar.gz root@10.1.10.37:/root/Downloads/
以下需要在三台虚拟机上重复操作:
安装需要的依赖
[root@seclab-master Downloads]# yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto
解压erlang并编译,指定安装路径到/opt/erlang
[root@seclab-master Downloads]# tar -xzvf otp_src_20.0.tar.gz
[root@seclab-master Downloads]# cd otp_src_20.0/
[root@seclab-master otp_src_20.0]# ./configure --prefix=/opt/erlang
[root@seclab-master otp_src_20.0]# make && make install
配置erlang环境变量
[root@seclab-master erlang]# pwd
/opt/erlang
[root@seclab-master erlang]# vim /etc/profile
在最末尾添加:
# set erlang environment
export ERLANG_HOME=/opt/erlang
export PATH=$PATH:$ERLANG_HOME/bin
保存之后记得让修改生效:
[root@seclab-master erlang]# source /etc/profile
测试一下,运行erl命令输出如下:
[root@seclab-master erlang]# erl
Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V9.0 (abort with ^G)
1>
解压rabbitmq压缩包到/opt
文件夹下(和erlang同级),修改环境变量
[root@seclab-master Downloads]# xz -d rabbitmq-server-generic-unix-3.6.10.tar.xz
[root@seclab-master Downloads]# ls
otp_src_20.0 otp_src_20.0.tar.gz rabbitmq-server-generic-unix-3.6.10.tar
[root@seclab-master Downloads]# tar -xvf rabbitmq-server-generic-unix-3.6.10.tar -C /opt
添加RABBITMQ_HOME变量,并求改PATH变量:
# set rabbitmq environment
export RABBITMQ_HOME=/opt/rabbitmq_server-3.6.10
export PATH=$PATH:$ERLANG_HOME/bin:$RABBITMQ_HOME/sbin
保存之后记得让修改生效:
[root@seclab-master erlang]# source /etc/profile
相关命令
启动rabbitmq服务:
[root@seclab-master rabbitmq_server-3.6.10]# rabbitmq-server -detached # detached表示在后台启动(默认前台)
Warning: PID file not written; -detached was passed.
查看rabbitmq服务状态:
[root@seclab-master ~]# rabbitmqctl status
Status of node 'rabbit@seclab-master'
[{pid,48527},
{running_applications,
[{rabbit,"RabbitMQ","3.6.10"},
{mnesia,"MNESIA CXC 138 12","4.15"},
{rabbit_common,
"Modules shared by rabbitmq-server and rabbitmq-erlang-client",
"3.6.10"},
{ranch,"Socket acceptor pool for TCP protocols.","1.3.0"},
{ssl,"Erlang/OTP SSL application","8.2"},
{public_key,"Public key infrastructure","1.4.1"},
{asn1,"The Erlang ASN1 compiler version 5.0","5.0"},
{xmerl,"XML parser","1.3.15"},
{os_mon,"CPO CXC 138 46","2.4.2"},
{syntax_tools,"Syntax tools","2.1.2"},
{crypto,"CRYPTO","4.0"},
{compiler,"ERTS CXC 138 10","7.1"},
{sasl,"SASL CXC 138 11","3.0.4"},
{stdlib,"ERTS CXC 138 10","3.4"},
{kernel,"ERTS CXC 138 10","5.3"}]},
{os,{unix,linux}},
{erlang_version,
"Erlang/OTP 20 [erts-9.0] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:64] [hipe] [kernel-poll:true]\n"},
{memory,
[{total,52634456},
{connection_readers,0},
{connection_writers,0},
{connection_channels,0},
{connection_other,0},
{queue_procs,2840},
{queue_slave_procs,0},
{plugins,0},
{other_proc,20241416},
{mnesia,61808},
{metrics,184376},
{mgmt_db,0},
{msg_index,46552},
{other_ets,1743024},
{binary,56592},
{code,21374827},
{atom,891849},
{other_system,8212636}]},
{alarms,[]},
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]},
{vm_memory_high_watermark,0.4},
{vm_memory_limit,409573785},
{disk_free_limit,50000000},
{disk_free,19460112384},
{file_descriptors,
[{total_limit,924},{total_used,2},{sockets_limit,829},{sockets_used,0}]},
{processes,[{limit,1048576},{used,153}]},
{run_queue,0},
{uptime,160},
{kernel,{net_ticktime,60}}]
关闭rabbitmq服务:
[root@seclab-master ~]# rabbitmqctl stop
Stopping and halting node 'rabbit@seclab-master'
启动浏览器插件
首先新建文件夹,否则可能报错:
[root@seclab-master ~]# mkdir /etc/rabbitmq
然后启用插件,便于用浏览器管理服务:
[root@seclab-master ~]# 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@seclab-slave1... started 6 plugins.
将15672
,5672
端口开放
15672是浏览器访问端口:
[root@seclab-master ~]# firewall-cmd --zone=public --add-port=15672/tcp --permanent
success
[root@seclab-master ~]# firewall-cmd --reload
success
5672是rabbitmq服务端口:
[root@seclab-master ~]# firewall-cmd --zone=public --add-port=5672/tcp --permanent
success
[root@seclab-master ~]# firewall-cmd --reload
success
然后浏览器访问:
http://<ip or localhost>:15672
例如本机的话:http://localhost:15672
浏览器管理需要登陆
初始登陆账号:guest,密码:guest
创建账号:lhb,密码:lhb:
[root@seclab-master ~]# rabbitmqctl add_user lhb lhb
Creating user "lhb"
添加权限:
[root@seclab-master ~]# rabbitmqctl set_permissions -p "/" lhb ".*" ".*" ".*"
Setting permissions for user "lhb" in vhost "/"
设置账号lhb为管理员:
[root@seclab-master ~]# rabbitmqctl set_user_tags lhb administrator
Setting tags for user "lhb" to [administrator]
试一试远程访问:
浏览器输入:http://<ip>:15672,例如:http://10.1.10.35:15672, 即可登陆rabbitmq服务管理后台界面
以上为单机安装配置,下面开始集群搭建
修改hosts
文件
seclab-master上:
127.0.0.1 localhost seclab-master localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost seclab-master localhost.localdomain localhost6 localhost6.localdomain6
10.1.10.35 seclab-master
10.1.10.36 seclab-slave1
10.1.10.37 seclab-slave2
seclab-slave1上:
127.0.0.1 localhost seclab-slave1 localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost seclab-slave1 localhost.localdomain localhost6 localhost6.localdomain6
10.1.10.35 seclab-master
10.1.10.36 seclab-slave1
10.1.10.37 seclab-slave2
seclab-slave2上:
127.0.0.1 localhost seclab-slave2 localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost seclab-slave2 localhost.localdomain localhost6 localhost6.localdomain6
10.1.10.35 seclab-master
10.1.10.36 seclab-slave1
10.1.10.37 seclab-slave2
查看是否相互ping
通
测试seclab-master:
[root@seclab-master etc]# ping seclab-slave1
PING seclab-slave1 (10.1.10.36) 56(84) bytes of data.
64 bytes from seclab-slave1 (10.1.10.36): icmp_seq=1 ttl=64 time=0.659 ms
...
[root@seclab-master etc]# ping seclab-slave2
PING seclab-slave2 (10.1.10.37) 56(84) bytes of data.
64 bytes from seclab-slave2 (10.1.10.37): icmp_seq=1 ttl=64 time=0.530 ms
...
测试seclab-slave1:
[root@seclab-slave1 ~]# ping seclab-master
PING seclab-master (10.1.10.35) 56(84) bytes of data.
64 bytes from seclab-master (10.1.10.35): icmp_seq=1 ttl=64 time=0.486 ms
...
[root@seclab-slave1 ~]# ping seclab-slave2
PING seclab-slave2 (10.1.10.37) 56(84) bytes of data.
64 bytes from seclab-slave2 (10.1.10.37): icmp_seq=1 ttl=64 time=0.467 ms
...
测试seclab-slave2:
[root@seclab-slave2 ~]# ping seclab-master
PING seclab-master (10.1.10.35) 56(84) bytes of data.
64 bytes from seclab-master (10.1.10.35): icmp_seq=1 ttl=64 time=0.358 ms
...
[root@seclab-slave2 ~]# ping seclab-slave1
PING seclab-slave1 (10.1.10.36) 56(84) bytes of data.
64 bytes from seclab-slave1 (10.1.10.36): icmp_seq=1 ttl=64 time=0.467 ms
...
开放4369
和25672
端口
此处和之前开放15672端口一样,略。
查看端口开放状态(三台虚拟机都要开放以下四个端口):
[root@seclab-master etc]# firewall-cmd --list-ports
5672/tcp 25672/tcp 4369/tcp 15672/tcp
将seclab-slave1
和seclab-slave2
的erlang cookie
设置成和seclab-master
一致
.erlang.cookie文件夹可能存在于:
Windows:
C:\Users\Current User\.erlang.cookie (%HOMEDRIVE% + %HOMEPATH%\.erlang.cookie)
or C:\Documents and Settings\Current User\.erlang.cookie
or C:\Windows\.erlang.cookie
Unix:
/var/lib/rabbitmq/.erlang.cookie
or $HOME/.erlang.cookie.
查看并复制seclab-master的.erlang.cookie:
[root@seclab-master ~]# ls -a |grep .erlang
.erlang.cookie
[root@seclab-master ~]# cat .erlang.cookie
WEVLCKAPKHTVCGKQTOJY
复制这些字符串并放到其余两个节点(覆盖掉它们原来的):
seclab-slave1:
[root@seclab-slave1 ~]# chmod 700 .erlang.cookie
[root@seclab-slave1 ~]# echo "WEVLCKAPKHTVCGKQTOJY" >./.erlang.cookie
[root@seclab-slave1 ~]# chmod 400 .erlang.cookie
[root@seclab-slave1 ~]# cat .erlang.cookie
WEVLCKAPKHTVCGKQTOJY
seclab-slave2:
[root@seclab-slave2 ~]# chmod 700 .erlang.cookie
[root@seclab-slave2 ~]# echo "WEVLCKAPKHTVCGKQTOJY" >./.erlang.cookie
[root@seclab-slave2 ~]# chmod 400 .erlang.cookie
[root@seclab-slave2 ~]# cat .erlang.cookie
WEVLCKAPKHTVCGKQTOJY
重启rabbitmq
seclab-slave1:
[root@seclab-slave1 ~]# rabbitmqctl stop
Stopping and halting node 'rabbit@seclab-slave1'
[root@seclab-slave1 ~]# rabbitmq-server -detached
seclab-slave2:
[root@seclab-slave2 ~]# rabbitmqctl stop
Stopping and halting node 'rabbit@seclab-slave2'
[root@seclab-slave2 ~]# rabbitmq-server -detached
按照以下步骤将slave1
和slave2
加入master
集群
seclab-slave1:
[root@seclab-slave1 ~]# rabbitmqctl stop_app # 关闭
Stopping rabbit application on node 'rabbit@seclab-slave1'
[root@seclab-slave1 ~]# rabbitmqctl reset # 重置
Resetting node 'rabbit@seclab-slave1'
[root@seclab-slave1 ~]# rabbitmqctl join_cluster rabbit@seclab-master # 加入集群
Clustering node 'rabbit@seclab-slave1' with 'rabbit@seclab-master'
[root@seclab-slave1 ~]# rabbitmqctl start_app # 启动slave1节点
Starting node 'rabbit@seclab-slave1'
seclab-slave2:
[root@seclab-slave2 ~]# rabbitmqctl stop_app
Stopping rabbit application on node 'rabbit@seclab-slave2'
[root@seclab-slave2 ~]# rabbitmqctl reset
Resetting node 'rabbit@seclab-slave2'
[root@seclab-slave2 ~]# rabbitmqctl join_cluster rabbit@seclab-master
Clustering node 'rabbit@seclab-slave2' with 'rabbit@seclab-master'
[root@seclab-slave2 ~]# rabbitmqctl start_app
Starting node 'rabbit@seclab-slave2'
最后看看集群的状态:
[root@seclab-master ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@seclab-master'
[{nodes,[{disc,['rabbit@seclab-master','rabbit@seclab-slave1',
'rabbit@seclab-slave2']}]},
{running_nodes,['rabbit@seclab-slave2','rabbit@seclab-slave1',
'rabbit@seclab-master']},
{cluster_name,<<"rabbit@localhost">>},
{partitions,[]},
{alarms,[{'rabbit@seclab-slave2',[]},
{'rabbit@seclab-slave1',[]},
{'rabbit@seclab-master',[]}]}]
参考
rabbitmq官网:
http://www.rabbitmq.com/
http://www.rabbitmq.com/clustering.html
博客:
http://www.cnblogs.com/silent2012/p/5329591.html
http://www.jianshu.com/p/54d56123a704
http://blog.csdn.net/jack85986370/article/details/51169203
http://blog.csdn.net/huoyunshen88/article/details/33738393