rabbitmq是队列管理的,这个教程主要是在虚拟机上安装3个rabbitmq
前置条件
服务器 | 地址 | 备注 |
rabbitmqs | 192.168.137.105 | |
rabbitmqn1 | 192.168.137.102 | |
rabbitmqn2 | 192.168.137.103 |
复制虚拟机
从centos7开始复制,centos7是已经安装好的centos7.8的虚拟机,通过virt-clone拷贝
[root@localhost bin]# virt-clone -o centos7 -n rabbitmqs -f /vms/reabbitmqs.qcow2
Allocating 'reabbitmqs.qcow2' | 40 GB 00:00:32
Clone 'rabbitmqs' created successfully.
[root@localhost bin]# virt-clone -o centos7 -n rabbitmqn1 -f /vms/reabbitmqn1.qcow2
Allocating 'reabbitmqn1.qcow2' | 40 GB 00:00:03
Clone 'rabbitmqn1' created successfully.
[root@localhost bin]# virt-clone -o centos7 -n rabbitmqn2 -f /vms/reabbitmqn2.qcow2
Allocating 'reabbitmqn2.qcow2' | 40 GB 00:00:02
Clone 'rabbitmqn2' created successfully.
设置各虚拟机的IP地址
以rabbitmq为例
# vi /etc/sysconfig/network-scripts/ifcfg-ens2
#注意ifcfg-ens2 是本地的名字,你的机器和我教程中的机器的网卡名称可能不一样,或者你的是ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=statc# 从dhcp 改成 static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens2
UUID=454d5414-37f7-4213-b554-68b35c3a5a0e
DEVICE=enp0s3
ONBOOT=yes
#以下为新增
IPADDR=192.168.137.105
NETMASK=255.255.255.0
GATEWAY=192.168.137.1
设置rabbitmq相关的群
rabbitmq是erlang配合使用的,因此erlang也需要安装。
/etc/yum.repos.d/rabbitmq-erlang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
rabbitmq-server.repo
[bntray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
在每个机器上的/etc/hosts文件增加本地域名解析
#在原来的hosts文件下增加
192.168.137.105 rabbitmqs
192.168.137.102 rabbitmqn1
192.168.137.103 rabbitmqn2
然后执行. 安装server之后要检查server是不是启动。
yum -y install erlang #安装erlang
yum install rabbitmq-server -y #安装rabbitmq server
systemctl start rabbitmq-server #启动rabbitmq server
rabbitmq-plugins enable rabbitmq_management #加plugin做我页面管理默认端口 15672
查看端口是否启动 ,端口15672已经启动了。
[root@rabbitmqn2 rabbitmq]# netstat -ntap
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 5987/beam.smp
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1065/master
tcp 0 0 0.0.0.0:25672 0.0.0.0:* LISTEN 5987/beam.smp
tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 6207/epmd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 903/sshd
tcp 0 0 192.168.137.103:4369 192.168.137.103:50345 TIME_WAIT -
访问127.0.0.1:15672 ,第一次访问需要登录,默认的账号密码为:guest/guest, 这个只能通过localhost登录,我们在虚拟机里面没有界面,因此我们需要通过server正常的ip地址访问,那么我们需要创建用户yucheng作为访问
rabbitmqctl add_user yucheng yucheng123
rabbitmqctl set_user_tags yucheng administrator
rabbitmqctl set_permissions -p / yucheng ".*" ".*" "."
这样就可以直接通过http://192.168.137.105:15672/ 登录,用户名yucheng,密码为yucheng123
单机安装成功。
下面提供一个安装erlang和rabbitmq-server的脚本
#!/bin/bash
# add 2 repos for erlang & rabbitmq-server
cat <<EOF >/etc/yum.repos.d/Elang.repo
[rabbitmq-erlang]
name=rabbitmq-erlang
baseurl=https://dl.bintray.com/rabbitmq-erlang/rpm/erlang/21/el/7
gpgcheck=1
gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
repo_gpgcheck=0
enabled=1
EOF
cat <<EOF >/etc/yum.repos.d/rabbitmq.repo
[bntray-rabbitmq-server]
name=bintray-rabbitmq-rpm
baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/
gpgcheck=0
repo_gpgcheck=0
enabled=1
EOF
#install the erlang
yum -y install erlang
#install rabbitmq-server
yum install rabbitmq-server -y
# install the management web pages
rabbitmq-plugins enable rabbitmq_management
拷贝erlan.cookie文件
为了三个直接的通信,这个三个机器上的这个文件内容不一样的话不能通信。我们从rabbutmqs上拷贝文件
scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmqn1: /var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@rabbitmqn2: /var/lib/rabbitmq/.erlang.cookie
加入集群
在rabbitmqn2上加入rabbitmqs的集群cluster,注意,三台机器上的防火墙必须关闭,加入集群以后,node节点会相互通信,通信会出现如下错误
2021-01-05 23:54:26.607 [error] <0.189.0> Mnesia(rabbit@rabbitmqn2): ** ERROR ** Mnesia on rabbit@rabbitmqn2 could not connect to node(s) [rabbit@rabbitmqn1]
正式加入集群,加入集群的node节点要停止rabbitmq里面的应用,即stop_app,加入成功以后再开启。
[root@rabbitmqn2 rabbitmq]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbitmqn2 ...
[root@rabbitmqn2 rabbitmq]# rabbitmqctl join_cluster --ram rabbit@rabbitmqs
Clustering node rabbit@rabbitmqn2 with rabbit@rabbitmqs
同理,在rabbitmqn1上做同样的操作。
(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,rabbitmqn1和rabbitmqn2是内存节点,rabbitmqs是磁盘节点。
(2)如果要使rabbitmqn1、rabbitmqn2都是磁盘节点,去掉--ram参数即可。
(3)如果想要更改节点类型,可以使用命令rabbitmqctl change_cluster_node_type disc(ram),前提是必须停掉rabbit应用
在rabbitmqs增加用户
加入集群以后,原来的用户会消失
rabbitmqctl add_user yucheng yucheng123
rabbitmqctl set_user_tags yucheng administrator
rabbitmqctl set_permissions -p / yucheng ".*" ".*" "."
然后登陆到集群,可以看到集群已经成功
结束!