RabbitMQ 3.5.6 普通镜像集群安装步骤-手动模式安装
- 一、准备工作
- 1、三台虚拟机
- 2、安装环境
- 3、集群命名
- 4、使用版本
- 5、hostname
- 5.1、修改hostname
- 5.1.1、修改172.22.40.104机器的hostname
- 5.1.2、按照同样的方法修改另外两台机器的hostname
- 二、单节点RabbitMQ服务安装步骤
- 1、安装工具包和常用命令
- 2、安装Erlang
- 3、解压Erlang
- 4、进入Erlang解压目录
- 5、Erlang配置安装
- 5.1、检查编译环境并配置安装路径
- 5.2、编译和安装
- 5.3、设置Erlang环境变量
- 5.4、添加如下文本
- 5.5、保存并使环境变量立即生效
- 5.6、验证是否安装成功
- 6、安装RabbitMQ
- 6.1、下载安装包
- 6.2、解压RabbitMQ安装包
- 6.3、进入RabbitMQ解压目录
- 6.4、配置RabbitMQ的环境变量
- 6.5、添加如下文本
- 6.6、保存并使环境变量立即生效
- 6.7、启动和设置用户管理插件
- 6.7.1、后台启动RabbitMQ服务
- 6.7.2、添加admin用户
- 6.7.3、启用web后台管理插件
- 6.7.4、启动和关闭
- 6.7.5、查看端口
- 6.7.6、管理界面访问测试
- 三、普通集群配置
- 1、准备单节点RabbitMQ服务
- 2、修改hosts配置
- 2、查看hosts是否生效
- 3、同步 ==.erlang.cookie== 文件
- 3.1、Erlang cookie
- 3.2、Erlang cookie的位置
- 3.3、Erlang cookie的权限
- 3.4、Erlang cookie的同步
- 4、创建集群
- 4.1、将节点rabbit@rabbitmq-2加入到rabbit@rabbitmq-1的集群中
- 4.2、将节点rabbit@rabbitmq-3加入到集群中
- 4.设置集群名字
- 四、镜像集群配置
- 五、高可用集群配置
- 六、RabbitMQ其他介绍
172.22.40.104(磁盘节点) 172.22.40.105(内存节点) 172.22.40.106(内存节点)2、安装环境
centos-release-7-33、集群命名
qa-rabbitmq-group-14、使用版本
RabbitMQ v3.5.6 Erlang v18.2
Erlang和RabbitMQ版本关系如下:
说明:这步 *** 作也可以放到集群配置的时候再修改,但是如果节点启动后再修改hostname的话,需要重置节点!
扩展: RabbitMQ节点是由节点名称标识并根据节点名称存储数据。在集群中,节点使用节点名称相互识别和联系,节点名称由两部分固定前缀rabbit@和hostname,如:rabbit@localhost #hostname用于显示系统的主机名称,使用 hostname 或 hostnamectl 命令来查看当前的主机名 [root@localhost ~]# hostname [root@localhost ~]# hostnamectl5.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这个ip5.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 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 logrotate2、安装Erlang
wget http://erlang.org/download/otp_src_18.2.tar.gz3、解压Erlang
tar -xzvf otp_src_18.2.tar.gz4、进入Erlang解压目录
cd otp_src_18.25、Erlang配置安装 5.1、检查编译环境并配置安装路径
./configure --prefix=/usr/local/otp_src_18.2 --without-javac5.2、编译和安装
#从makefile中读取指令,执行源码编译命令和安装命令 make && make install5.3、设置Erlang环境变量
vim /etc/profile5.4、添加如下文本
#set erlang environment export PATH=$PATH:/usr/local/otp_src_18.2/bin5.5、保存并使环境变量立即生效
source /etc/profile5.6、验证是否安装成功
erl6、安装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.gz6.3、进入RabbitMQ解压目录
cd rabbitmq_server-3.5.66.4、配置RabbitMQ的环境变量
vim /etc/profile6.5、添加如下文本
#rabbitMQ export PATH=$PATH:/usr/local/rabbitmq_server-3.5.6/sbin6.6、保存并使环境变量立即生效
source /etc/profile6.7、启动和设置用户管理插件
cd /usr/local/rabbitmq_server-3.5.6/sbin6.7.1、后台启动RabbitMQ服务
#这个命令执行的时候会报 Warning: PID file not written; -detached was passed. 忽略即可 ./rabbitmq-server -detached6.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_vhosts6.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_management6.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 beam6.7.6、管理界面访问测试
http://172.22.40.104:15672三、普通集群配置 1、准备单节点RabbitMQ服务
2、修改hosts配置同上面单节点RabbitMQ服务安装的步骤,
把172.22.40.105、172.22.40.106这两台机器上也安装好RabbitMQ服务。
绑定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-32、查看hosts是否生效
#在任意一台机器上ping这三个hostname,能正确解析出对应ip即成功 [root@rabbitmq-1 ~]# ping rabbitmq-13、同步 .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目录为:/root3.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条)