【说明】需要配置本机的yum源,用于安装socat软件。
8.1 安装socat
操作系统ReadHat7
# yum -y install socat
报错1:
此时会报错没有socat包或是找不到socat包,解决方法安装centos的epel的扩展源
yum -y install epel-release
之后重新安装socat
操作系统ReadHat6
先将socat-1.7.2.4-1.el6.rf.x86_64.rpm上传到目标服务器上/opt/software/rabbitmq
# cd /opt/software/rabbitmq
# rpm -ivh socat-1.7.2.4-1.el6.rf.x86_64.rpm
8.2 安装erlang
操作系统ReadHat7
# rpm -ivh erlang-21.3.8.6-1.el7.x86_64.rpm
报错1:
warning: erlang-20.3.8.22-1.el7.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY
error: Failed dependencies:
libcrypto.so.10(OPENSSL_1.0.2)(64bit) is needed by erlang-20.3.8.22-1.el7.x86_64
升级openssl版本为OPENSSL_1.0.2
# rpm -ivh openssl-libs-1.0.2k-16.el7.x86_64.rpm --force
之后重新安装erlang
# rpm -ivh erlang-21.3.8.6-1.el7.x86_64.rpm
操作系统ReadHat6
# rpm -ivh erlang-21.3.8.6-1.el6.x86_64.rpm
报错1:
warning: erlang-21.3.8.6-1.el6.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 6026dfca: NOKEY
error: Failed dependencies:
libcrypto.so.10(OPENSSL_1.0.1)(64bit) is needed by erlang-21.3.8.6-1.el6.x86_64
libcrypto.so.10(OPENSSL_1.0.1_EC)(64bit) is needed by erlang-21.3.8.6-1.el6.x86_64
libcrypto.so.10(libcrypto.so.10)(64bit) is needed by erlang-21.3.8.6-1.el6.x86_64
升级openssl版本为OPENSSL_1.0.1
# rpm -ivh openssl-1.0.1e-57.el6.x86_64.rpm --force –nodeps
之后重新安装erlang
8.3 安装Rabbitmq
先将rabbitmq-server-3.7.16-1.el7.noarch.rpm上传到目标服务器上/opt/software/rabbitmq
# cd /opt/software/rabbitmq
# rpm -ivh rabbitmq-server-3.7.8-1.el7.noarch.rpm (ReadHat7)
# rpm -ivh rabbitmq-server-3.7.8-1.el6.noarch.rpm (ReadHat6)
8.4 配置Rabbitmq
(1)生成配置文件
# cp /usr/share/doc/rabbitmq-server-3.7.8/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
(2)启动rabbitmq
# service rabbitmq-server start (ReadHat6)
或/etc/init.d/rabbitmq-server start
# systemctl start rabbitmq-server.service (ReadHat7)
# systemctl enable rabbitmq-server.service (ReadHat7)
(3)为MQ添加admin用户并设置密码为admin
# rabbitmqctl add_user admin admin
执行结果回显如下:
Creating user " admin " ...
或
Adding user "admin" ...
删除用户
rabbitmqctl delete_user Username
查看用户列表
rabbitmqctl list_users
(4)允许管理用户的配置、写入和读取访问
# rabbitmqctl set_permissions admin ".*" ".*" ".*"
执行结果回显如下:
Setting permissions for user "admin" in vhost "/" ...
(5)设置admin用户为管理员,可用于页面登录
# rabbitmqctl set_user_tags admin administrator
执行结果回显如下:
Setting tags for user "admin" to [administrator] ...
(6)修改rabbitmq 允许打开的文件数为:100000(ReadHat7)
vi /usr/lib/systemd/system/rabbitmq-server.service
找到[Service]配置项,在其中新增一行配置:LimitNOFILE=100000, 如果有不用新增
(7)开启rabbitmq web页面支持
# rabbitmq-plugins enable rabbitmq_management
【说明】如果报”cannot_read_enabled_plugins_file,"/etc/rabbitmq/enabled_plugins",可忽略该提示,然后执行如下命令:
# chmod 755 /etc/rabbitmq/enabled_plugins
【注意】/etc/hosts需要配置主机名
(7)【可选】rabbitmq禁用guest用户登录管理页面
修改/etc/rabbitmq/rabbitmq.config配置文件
搜索loopback_users
取消掉%% {loopback_users, [<<"guest">>]}, 前面的注释%%
8.5 启动Rabbitmq
# systemctl restart rabbitmq-server.service (ReadHat7)
# service rabbitmq-server restart (ReadHat6)
或
# /sbin/service rabbitmq-server restart (ReadHat6)
或/etc/init.d/rabbitmq-server start
etc/init.d/service rabbitmq-server start
8.6 访问Rabbitmq
(1)页面访问:http://10.10.167.34:15672,用户名和密码为admin/admin
(2)登录后能看到一个节点及其他信息
8.7 集群Rabbitmq
(1)配置hostname
文件,此步骤需放启动rabbitmq之前执行
首先,在10.10.167.33服务器上,修改vi /etc/hostname
:
# vi /etc/hostname
node1
后,在10.10.167.34服务器上,修改vi /etc/hostname
:
# vi /etc/hostname
node2
(2)配置hosts文件
然后在node1服务器上,修改vi /etc/hosts:
# vi /etc/hosts
10.10.167.33 node1
10.10.167.34 node2
在node2
服务器上,修改vi /etc/hosts
:
# vi /etc/hosts
10.10.167.33 node1
10.10.167.34 node2
然后查看下hostnamectl status
,如果不正确的话,需要再进行设置下:
[root@node1 ~]# hostnamectl status
Static hostname: node1
Icon name: computer-vm
Chassis: vm
Machine ID: d01c397f6dd1423f808eaadf13a0dc08
Boot ID: f35d1333c9e648faaf68add6d15d1b9c
Virtualization: vmware
Operating System: Red Hat Enterprise Linux Server 7.2 (Maipo)
CPE OS Name: cpe:/o:redhat:enterprise_linux:7.2:GA:server
Kernel: Linux 3.10.0-327.el7.x86_64
Architecture: x86-64
(3)搭建集群
配置Erlang Cookie,要保证集群中的不同节点相互通信必须共享相同的 Erlang Cookie。具体的目录存放在/var/lib/rabbitmq/.erlang.cookie,把node2设置成和node1一样的即可,权限是400
先启动一台,启动后会在用户的根目录下生成一个.erlang.cookie文件,然后把这个文件复制到其它机器的同样目录下,必须保证3台机器的cookie是一样的,然后再重启另外两台。
[root@node1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
LBOTELUJAMXDMIXNTZMB
[root@node1 ~]# chmod 400 /var/lib/rabbitmq/.erlang.cookie
将node1
服务器中的.erlang.cookie
文件,拷贝到node2
服务器上:
[root@node1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq
先停止运行节点,然后以后台方式启动 RabbitMQ Server(node1
和node2
分别执行):
[root@node1 ~]# rabbitmqctl stop redhat6、7 不需要
[root@node1 ~]# rabbitmq-server -detached
service: name=rabbitmq-server enabled=yes state=restarted redhat6
systemctl restart rabbitmq-server.service redhat7
使命令在控制台不能按ctrl + c和关闭,关闭程序自动停
然后我们以node1
作为集群中心,在node2
上执行加入集群中心命令(节点类型为磁盘节点):
[root@node2 ~]# rabbitmqctl stop_app
[root@node2 ~]# rabbitmqctl reset
[root@node2 ~]# rabbitmqctl join_cluster rabbit@node1
//默认是磁盘节点,如果是内存节点的话,需要加--ram参数
[root@node2 ~]# rabbitmqctl start_app
直接删掉集群中的某个节点:
rabbitmqctl forget_cluster_node node_name
例子:
rabbitmqctl forget_cluster_node rabbit@rabbit2
(4)验证集群
查看集群的状态(包含node1
和node2
节点):
[root@node1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@node1
[{nodes,[{disc,[rabbit@node1,rabbit@node2]}]}, {running_nodes,[rabbit@node2,rabbit@node1]},
{cluster_name,<<"rabbit@node1">>},
{partitions,[]},
{alarms,[{rabbit@node2,[]},{rabbit@node1,[]}]}]
从 RabbitMQ Web 管理界面,验证集群的信息: