RabbitMQ普通镜像集群安装步骤

RabbitMQ 3.5.6 普通镜像集群安装步骤-手动模式安装

一、准备工作

1、三台虚拟机

172.22.40.104(磁盘节点)
172.22.40.105(内存节点)
172.22.40.106(内存节点)

2、安装环境

centos-release-7-3

3、集群命名

qa-rabbitmq-group-1

4、使用版本

RabbitMQ v3.5.6
Erlang v18.2

Erlang和RabbitMQ版本关系如下:

RabbitMQErlang/OTP
3.8.16,3.8.17,3.8.18,3.8.1923.2~24.x
3.8.9,3.8.10,3.8.11,3.8.12,3.8.13,3.8.14,3.8.1522.3~23.x
3.8.4,3.8.5,3.8.6,3.8.7,3.8.821.3~23.x
3.7.15,3.7.16,3.7.17,3.7.1820.3~22.x
3.7.11,3.7.12,3.7.13,3.7.1420.3~21.x
3.7.7,3.7.8,3.7.9,3.7.1019.3~21.x
3.7.0,3.7.1,3.7.2,3.7.3,3.7.4,3.7.5,3.7.619.3~20.x

5、hostname

说明:这步操作也可以放到集群配置的时候再修改,但是如果节点启动后再修改hostname的话,需要重置节点!

扩展:
RabbitMQ节点是由节点名称标识并根据节点名称存储数据。在集群中,节点使用节点名称相互识别和联系,节点名称由两部分固定前缀rabbit@和hostname,如:rabbit@localhost
#hostname用于显示系统的主机名称,使用 hostname 或 hostnamectl 命令来查看当前的主机名
[root@localhost ~]# hostname
[root@localhost ~]# hostnamectl

5.1、修改hostname

分别设置三台机器的hostname为rabbitmq-1、rabbitmq-2和rabbitmq-3

#使用hostname命令设置hostname值
[root@localhost ~]# hostname yourHostname
#修改静态主机名
[root@localhost ~]# echo yourHostname > /etc/hostname
注意:此命令修改hostname可立即生效,但系统重启后失效。为了保证重启后依然有效,需要修改 /etc/sysconfig/network 配置文件:
[root@localhost ~]# vim /etc/sysconfig/network
输入以下文件:
	NETWORKING=yes
	NETWORKING_IPV6=yes
	HOSTNAME=yourHostname
修改了 /etc/sysconfig/network 下的HOSTNAME后需要重启机器才能生效,我们以使用命令 sysctl kernel.hostname 使其立即生效。
[root@localhost ~]# sysctl kernel.hostname=yourHostname
再扩展:
hostname 与 /etc/hosts 的关系?
很多人一提到更改hostname首先就想到修改/etc/hosts文件,认为hostname的配置文件就是/etc/hosts。其实不是的。hosts文件的作用相当于dns,提供ip地址到hostname的对应映射关系。
例如,我们绑定以下host:
127.0.0.1 www.baidu.com
那么我们本机再 ping www.baidu.com 的时候就会解析出127.0.0.1这个ip
5.1.1、修改172.22.40.104机器的hostname
[root@localhost ~]# hostname rabbitmq-1
#查看当前hostname,看是否修改成功
[root@localhost ~]# hostname

#查看静态主机名
[root@localhost ~]# cat /etc/hostname
localhost.localdomain

#修改静态主机名
[root@localhost ~]# echo rabbitmq-1 > /etc/hostname

#再次查看静态主机名
[root@localhost ~]# cat /etc/hostname              
rabbitmq-1

#使hostname永久有效
[root@localhost ~]# vim /etc/sysconfig/network
输入:
	NETWORKING=yes
	NETWORKING_IPV6=yes
	HOSTNAME=rabbitmq-1
	
#使 /etc/sysconfig/network 配置生效
[root@localhost ~]# sysctl kernel.hostname=rabbitmq-1
kernel.hostname = rabbitmq-1

#修改完后,重新登录机器可以看到hostname修改成功
[root@rabbitmq-1 ~]#
5.1.2、按照同样的方法修改另外两台机器的hostname

二、单节点RabbitMQ服务安装步骤

1、安装工具包和常用命令

其实RabbitMQ只需要socat,因为我这里是新机器,索性一次性都安装了

yum groupinstall "Development Tools"
yum -y install wget make unzip zip gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel gtk2-devel binutils-devel unixODBC-devel socat lrzsz wxWidgets-devel epel-release ncurses-devel logrotate

2、安装Erlang

wget http://erlang.org/download/otp_src_18.2.tar.gz

3、解压Erlang

tar -xzvf otp_src_18.2.tar.gz

4、进入Erlang解压目录

cd otp_src_18.2

5、Erlang配置安装

5.1、检查编译环境并配置安装路径

./configure --prefix=/usr/local/otp_src_18.2 --without-javac

5.2、编译和安装

#从makefile中读取指令,执行源码编译命令和安装命令
make && make install

5.3、设置Erlang环境变量

vim /etc/profile

5.4、添加如下文本

#set erlang environment
export PATH=$PATH:/usr/local/otp_src_18.2/bin

5.5、保存并使环境变量立即生效

source /etc/profile

5.6、验证是否安装成功

erl

6、安装RabbitMQ

6.1、下载安装包

https://github.com/rabbitmq/rabbitmq-server/releases/tag/rabbitmq_v3_5_6/
下载:rabbitmq-server-generic-unix-3.5.6.tar.gz
下载后把包上传到服务器 /usr/local 目录下

6.2、解压RabbitMQ安装包

tar -xzvf rabbitmq-server-generic-unix-3.5.6.tar.gz 

6.3、进入RabbitMQ解压目录

cd rabbitmq_server-3.5.6

6.4、配置RabbitMQ的环境变量

vim /etc/profile

6.5、添加如下文本

#rabbitMQ
export PATH=$PATH:/usr/local/rabbitmq_server-3.5.6/sbin

6.6、保存并使环境变量立即生效

source /etc/profile

6.7、启动和设置用户管理插件

cd /usr/local/rabbitmq_server-3.5.6/sbin
6.7.1、后台启动RabbitMQ服务
#这个命令执行的时候会报 Warning: PID file not written; -detached was passed. 忽略即可
./rabbitmq-server -detached
6.7.2、添加admin用户
#因为guest用户只能在本机访问(只能通过localhost登陆使用),添加一个admin用户,密码设置为:963741852
./rabbitmqctl add_user admin 963741852
#设置admin为超级管理员
./rabbitmqctl set_user_tags admin administrator
#为admin账号添加所有的权限
./rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
#RabbitMQ默认账户和密码为 guest/guest,我们修改guest用户密码
./rabbitmqctl change_password guest 852963741
#查看当前的用户列表
./rabbitmqctl list_users
 #如果想要删除一个用户
./rabbitmqctl delete_user yourUserName
扩展:
	1)rabbitmq用户角色
	用户角色可分为五类:超级管理员、监控者、策略制定者、普通管理者以及其他
	(1) 超级管理员(administrator)
		可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户、策略(policy)进行操作
	(2) 监控者(monitoring)
		可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数、内存使用情况、磁盘使用情况等)
	(3) 策略制定者(policymaker)
		可登陆管理控制台(启用management plugin的情况下),同时可以对policy进行管理,但无法查看节点的相关信息
	(4) 普通管理者(management)
		仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理
	(5) 其他
		无法登陆管理控制台,通常就是普通的生产者和消费者
	了解了这些后,就可以根据需要给不同的用户设置不同的角色,以便按需管理

	设置用户角色的命令为:
	./rabbitmqctl set_user_tags User Tag
	User为用户名,Tag为角色名(对应于上面的 administrator、monitoring、policymaker、management或其他自定义名称)
	也可以给同一用户设置多个角色,例如:
	./rabbitmqctl set_user_tags myName monitoring policymaker

	2)用户权限
	用户权限指的是用户对 exchange、queue 的操作权限,包括配置权限、读写权限。
	配置权限会影响到 exchange,queue 的声明和删除。
	读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作
	例如:
		将queue绑定到某exchange上,需要具有queue的写权限,以及exchange的读权限。
		向exchange发送消息需要具有exchange的写权限。
		从queue里取数据需要具有queue的读权限。
	相关命令为:
	(1) 设置用户权限
	./rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
	如:设置guest用户权限
	./rabbitmqctl set_permissions -p / guest '.*' '.*' '.*'
	(2) 查看(指定VHostPath)所有用户的权限信息
	./rabbitmqctl list_permissions [-p VHostPath]
	如:列出虚拟主机上的所有权限
	./rabbitmqctl list_permissions -p /
	(3) 查看指定用户的权限信息
	./rabbitmqctl list_user_permissions User
	如:列出guest用户权限
	./rabbitmqctl list_user_permissions guest
	(4) 清除用户的权限
	./rabbitmqctl clear_permissions [-p VHostPath]  User

	3)vhost 操作
	./rabbitmqctl delete_vhost /
	./rabbitmqctl add_vhost /
	./rabbitmqctl list_vhosts
6.7.3、启用web后台管理插件
./rabbitmq-plugins enable rabbitmq_management
./rabbitmq-plugins enable rabbitmq_shovel
./rabbitmq-plugins enable rabbitmq_shovel_management

#对应的禁用web后台管理插件
./rabbitmq-plugins disable rabbitmq_management
./rabbitmq-plugins disable rabbitmq_shovel
./rabbitmq-plugins disable rabbitmq_shovel_management
6.7.4、启动和关闭
1)直接启动模式:如果你关闭窗口或者需要在该窗口使用其他命令时应用就会停止
./rabbitmq-server 			//启动
./rabbitmq-server restart 	//重启
./rabbitmq-server stop 		//停止
./rabbitmq-server status 	//查看状态

2)rabbitmq以应用方式后台启动
./rabbitmq-server -detached //rabbitmq分别启动节点和应用,不会生成pid_file文件
./rabbitmqctl status 		//查看运行状态
./rabbitmqctl start_app 	//应用启动,此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止的 RabbitMQ 应用,比如reset
./rabbitmqctl stop_app 		//将rabbitmq服务应用关闭,但是Erlang虚拟机还是处于运行状态
./rabbitmqctl stop 			//同时关闭应用和节点
6.7.5、查看端口
#15672是HTTP API客户端、web管理界面使用,25672用于节点间通信,5672是AMQP使用的端口
netstat -lnp |grep beam
6.7.6、管理界面访问测试
http://172.22.40.104:15672

三、普通集群配置

1、准备单节点RabbitMQ服务

同上面单节点RabbitMQ服务安装的步骤,
把172.22.40.105、172.22.40.106这两台机器上也安装好RabbitMQ服务。

2、修改hosts配置

绑定ip和hostname的映射关系,便于RabbitMQ节点间进行DNS解析和通信

[root@rabbitmq-1 ~]# cat /etc/hosts
[root@rabbitmq-1 ~]# vim /etc/hosts

三台机器的hosts文件中都添加如下文本:
172.22.40.104 rabbitmq-1
172.22.40.105 rabbitmq-2
172.22.40.106 rabbitmq-3

2、查看hosts是否生效

#在任意一台机器上ping这三个hostname,能正确解析出对应ip即成功
[root@rabbitmq-1 ~]# ping rabbitmq-1 

3、同步 .erlang.cookie 文件

3.1、Erlang Cookie

RabbitMQ节点是使用cookie来确定它们是否被允许相互通信的(erlang集群是通过这个cookie进行通信认证),为了让节点间能够通信,它们必须具有相同的共享秘密,称为:Erlang Cookie。
所以必须确保集群中的每个RabbitMQ节点都使用相同的cookie值。

3.2、Erlang Cookie的位置

Erlang Cookie的位置通常在:$HOME/.erlang.cookie
所以要想知道Erlang Cookie位置,首先要取得RabbitMQ启动日志里面的home dir的根路径:
#RabbitMQ日志所在目录:/usr/local/rabbitmq_server-3.5.6/var/log/rabbitmq
[root@rabbitmq-1 ~]# cd /usr/local/rabbitmq_server-3.5.6/var/log/rabbitmq
[root@rabbitmq-1 rabbitmq]# cat rabbit@rabbitmq-1.log | grep home
home dir       : /root
home dir       : /root
可知,RabbitMQ的$HOME目录为:/root

3.3、Erlang Cookie的权限

[root@rabbitmq-1 rabbitmq]# cd ~
[root@rabbitmq-1 ~]# ls -la // 可以看到一个 .erlang.cookie 文件
[root@rabbitmq-1 ~]# chmod 400 /root/.erlang.cookie // 修改.erlang.cookie的权限为只读
#如果需要,请把.erlang.cookie文件的拥有者改为指定的rabbitmq用户或组
#[root@rabbitmq-1 ~]# chown -R rabbitmq:rabbitmq .erlang.cookie
[root@rabbitmq-1 ~]# cat .erlang.cookie // 查看cookie的值

注意:.erlang.cookie 文件的权限必须是400,不然存在节点之间无法通信的风险。
扩展:
	chmod权限的三个数字:
	第一个数字表示文件所有者的权限
	第二个数字表示与文件所有者同属一个用户组的其他用户的权限
	第三个数字表示其它用户组的权限
	权限分为三种:读(r=4),写(w=2),执行(x=1),无(-=0)。
	综合起来还有:只读(r=4)、可读可执行(rx=5=4+1)、可读可写(rw=6=4+2)、可读可写可执行(rwx=7=4+2+1)

	所以:
	chmod 400 file // 所有人只读
	chmod 600 file // 设置拥有者可读写及执行
	chmod 777 file // 所有人可以读写及执行

3.4、Erlang Cookie的同步

保持三台机器的.erlang.cookie值一致
在172.22.40.105机器执行:
[root@rabbitmq-2 ~]# scp root@172.22.40.104:/root/.erlang.cookie /root/
[root@rabbitmq-2 ~]# chmod 400 /root/.erlang.cookie

在172.22.40.106机器执行:
[root@rabbitmq-3 ~]# scp root@172.22.40.104:/root/.erlang.cookie /root/
[root@rabbitmq-3 ~]# chmod 400 /root/.erlang.cookie

注意:.erlang.cookie 文件同步复制完成后,须逐个重启节点服务。

4、创建集群

为了使三个节点连接到一起组成一个集群,我们需要把另外两个节点(rabbit@rabbitmq-2和rabbit@rabbitmq-3)加入到第一个节点(rabbit@rabbitmq-1),在此之前,必须重新设置两个新加入的成员节点。

4.1、将节点rabbit@rabbitmq-2加入到rabbit@rabbitmq-1的集群中

#在rabbit@rabbitmq-2[root@rabbitmq-2 ~]# cd /usr/local/rabbitmq_server-3.5.6/sbin/
[root@rabbitmq-2 sbin]# ./rabbitmqctl stop_app
Stopping node 'rabbit@rabbitmq-2' ...

[root@rabbitmq-2 sbin]# ./rabbitmqctl reset
Resetting node 'rabbit@rabbitmq-2' ...

#加入集群时指定节点类型,--ram 指定内存节点类型,--disc 指定磁盘节点类型
[root@rabbitmq-2 sbin]# ./rabbitmqctl join_cluster --ram rabbit@rabbitmq-1
Clustering node 'rabbit@rabbitmq-2' with 'rabbit@rabbitmq-1' ...

[root@rabbitmq-2 sbin]# ./rabbitmqctl start_app
Starting node 'rabbit@rabbitmq-2' ...

[root@rabbitmq-2 sbin]# ./rabbitmqctl cluster_status
Cluster status of node 'rabbit@rabbitmq-2' ...
[{nodes,[{disc,['rabbit@rabbitmq-1']},{ram,['rabbit@rabbitmq-2']}]},
 {running_nodes,['rabbit@rabbitmq-1','rabbit@rabbitmq-2']},
 {cluster_name,<<"rabbit@rabbitmq-1">>},
 {partitions,[]}]

4.2、将节点rabbit@rabbitmq-3加入到集群中

这次我们将rabbit@rabbitmq-3节点集群到rabbit@rabbitmq-2节点来证明新节点加入集群时跟选择集群的节点无关紧要,只须提供一个在线节点。

#在rabbit@rabbitmq-3[root@rabbitmq-3 ~]# cd /usr/local/rabbitmq_server-3.5.6/sbin/
[root@rabbitmq-3 sbin]# ./rabbitmqctl stop_app
Stopping node 'rabbit@rabbitmq-3' ...

[root@rabbitmq-3 sbin]# ./rabbitmqctl reset
Resetting node 'rabbit@rabbitmq-3' ...

[root@rabbitmq-3 sbin]# ./rabbitmqctl join_cluster --ram rabbit@rabbitmq-2
Clustering node 'rabbit@rabbitmq-3' with 'rabbit@rabbitmq-2' ...

[root@rabbitmq-3 sbin]# ./rabbitmqctl start_app
Starting node 'rabbit@rabbitmq-3' ...

[root@rabbitmq-3 sbin]# ./rabbitmqctl cluster_status
Cluster status of node 'rabbit@rabbitmq-3' ...
[{nodes,[{disc,['rabbit@rabbitmq-1']},
         {ram,['rabbit@rabbitmq-3','rabbit@rabbitmq-2']}]},
 {running_nodes,['rabbit@rabbitmq-2','rabbit@rabbitmq-1','rabbit@rabbitmq-3']},
 {cluster_name,<<"rabbit@rabbitmq-1">>},
 {partitions,[]}]

4.设置集群名字

#在任意一台节点机器上查看集群状态
[root@rabbitmq-1 sbin]# ./rabbitmqctl cluster_status
可知,集群的名字为:rabbit@rabbitmq-1

#在任意一台节点机器上执行修改集群名字的命令
[root@rabbitmq-1 sbin]# ./rabbitmqctl set_cluster_name qa-rabbitmq-group-1
Setting cluster name to qa-rabbitmq-group-1 ...

再次查看集群状态可知,集群的名字为:qa-rabbitmq-group-1

在这里插入图片描述

四、镜像集群配置

上面配置的普通集群为RabbitMQ默认集群模式,但并不保证队列的高可用性,
尽管队列名、交换机、绑定关系这些元数据可以在集群节点间相互复制,
但是队列中的内容不会被复制,虽然该模式解决一部分节点压力,
但队列节点宕机将直接导致该队列无法使用,只能等待重启,
所以要想在队列节点宕机或故障的时候也能正常使用,
就要复制队列的内容到集群里的每个节点,需要创建镜像队列。
在这里插入图片描述

1、镜像集群:在普通集群的基础上,创建镜像策略,如下,即可实现集群之间镜像的复制:
在这里插入图片描述

使用Rabbit镜像功能,需要基于rabbitmq策略来实现,策略是用来控制和修改群集内的队列行为和Exchange行为。

2、测试镜像策略是否生效
在这里插入图片描述

五、高可用集群配置

HAProxy + Keepalived 实现高可用方案,忽略。

六、RabbitMQ其他介绍

详见 RabbitMQ相关资料

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值