RabbitMQ 消息中间件_基于rabbitmq消息中间件(1),2024年最新2024网络安全大厂面试真题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注网络安全)
img

正文

consumer:消息消费者,就是接受消息的程序。
user:用户


**面试注意:集群中有两种节点**


1 内存节点:只保存状态到内存(持久的queue的持久内容将被保存到disk)


2 磁盘节点:保存状态到内存和磁盘。---推荐


内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存状态 就足够了


如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失。


### **普通集群准备环境**


**注意,这⾥三台服务器都联⽹,另外RabbitMQ集群节点必须在同⼀⽹段⾥,如果是跨⼴域⽹,效果会变差。关闭防火墙和selinux**



192.168.50.138 rabbitmq-1
192.168.50.139 rabbitmq-2
192.168.50.140 rabbitmq-3


三台机器都操作:


1. 配置hosts⽂件更改三台MQ节点的计算机名分别为rabbitmq-1、rabbitmq-2 和rabbitmq-3,然后修改hosts配置⽂件  
 [root@rabbitmq-1 ~]# vim /etc/hosts  
 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4  
 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6  
 192.168.50.138 rabbitmq-1  
 192.168.50.139 rabbitmq-2  
 192.168.50.140 rabbitmq-3  
 2.三个节点配置安装rabbitmq软件



安装依赖
[root@rabbitmq-1 ~]# yum install -y epel gcc-c++ unixODBC unixODBC-devel openssl-devel ncurses-devel
yum安装erlang
[root@rabbitmq-1 ~]# wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-20.3-1.el7.centos.x86_64.rpm/download.rpm
[root@rabbitmq-1 ~]# yum install erlang-20.3-1.el7.centos.x86_64.rpm
测试;
[root@rabbitmq-1 ~]# erl
Erlang/OTP 20 [erts-9.3] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V9.3 (abort with ^G)
1>

安装rabbitmq
[root@rabbitmq-1 ~]# wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.5/rabbitmq-server-3.7.5-1.el7.noarch.rpm
[root@rabbitmq-1 ~]# yum install rabbitmq-server-3.7.5-1.el7.noarch.rpm
3.启动
[root@rabbitmq-1 ~]# systemctl daemon-reload
[root@rabbitmq-1 ~]# systemctl start rabbitmq-server
[root@rabbitmq-1 ~]# systemctl enable rabbitmq-server
启动方式二:
[root@rabbitmq-1 ~]# /sbin/service rabbitmq-server status —查看状态
[root@rabbitmq-1 ~]# /sbin/service rabbitmq-server start —启动
每台都操作开启rabbitmq的web访问界面:
[root@rabbitmq-1 ~]# rabbitmq-plugins enable rabbitmq_management


创建用户



注意:在一台机器操作
添加用户和密码
[root@rabbitmq-1 ~]# rabbitmqctl add_user soho soso
Creating user “soho” …
…done.
设置为管理员
[root@rabbitmq-1 ~]# rabbitmqctl set_user_tags soho administrator
Setting tags for user “soho” to [administrator] …
…done.
查看用户
[root@rabbitmq-1 ~]# rabbitmqctl list_users
Listing users …
guest [administrator]
soho [administrator]
…done.

此处设置权限时注意’.‘之间需要有空格 三个’.'分别代表了conf权限,read权限与write权限 例如:当没有给
soho设置这三个权限前是没有权限查询队列,在ui界面也看不见
[root@rabbitmq-1 ~]# rabbitmqctl set_permissions -p “/” soho “." ".” “.*”
Setting permissions for user “soho” in vhost “/” …
…done.


所有机器都操作:开启用户远程登录:



[root@rabbitmq-1 ~]# cd /etc/rabbitmq/
[root@rabbitmq-1 rabbitmq]# cp /usr/share/doc/rabbitmq-server-3.7.5/rabbitmq.config.example /etc/rabbitmq/rabbitmq.config
[root@rabbitmq-1 rabbitmq]# ls
enabled_plugins rabbitmq.config
[root@rabbitmq-1 rabbitmq]# vim rabbitmq.config
修改如下:


![](https://img-blog.csdnimg.cn/img_convert/00c959058f0f6450e442265776233636.png)



三台机器都操作重启服务服务:
[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server


**查看端口**


![](https://img-blog.csdnimg.cn/img_convert/f01db61d7db426c5f628b0f053d687de.png)



4369 – erlang发现口
5672 --程序连接端口
15672 – 管理界面ui端口
25672 – server间内部通信口


**!注意如果是云服务器,切记添加安全组端口放行。**


访问:192.168.50.138:15672


![](https://img-blog.csdnimg.cn/img_convert/969a1f85527cd597f62976f81bb50503.png)


![](https://img-blog.csdnimg.cn/img_convert/44d7e4f8849537f849ee593e9749888b.png)


**这里需要注意:**


rabbitmq默认管理员用户:guest 密码:guest


新添加的用户为:soho 密码:soso


### **开始部署集群三台机器都操作:**


1.首先创建好数据存放目录和日志存放目录:



[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/data
[root@rabbitmq-1 ~]# mkdir -p /data/rabbitmq/logs
[root@rabbitmq-1 ~]# chmod 777 -R /data/rabbitmq
[root@rabbitmq-1 ~]# chown rabbitmq.rabbitmq /data/ -R
创建配置文件:
[root@rabbitmq-1 ~]# vim /etc/rabbitmq/rabbitmq-env.conf
[root@rabbitmq-1 ~]# cat /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs
重启服务
[root@rabbitmq-1 ~]# systemctl restart rabbitmq-server


**2.拷⻉erlang.cookie**


Rabbitmq的集群是依附于erlang的集群来⼯作的,所以必须先构建起erlang的集群景象。Erlang的集群中


各节点是经由⼀个cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,⽂件是400的权限。所以必须保证各节点cookie⼀致,不然节点之间就⽆法通信.


如果执行# rabbitmqctl stop\_app 这条命令报错:需要执行



#如果执行# rabbitmqctl stop_app 这条命令报错:需要执行
#chmod 400 .erlang.cookie
#chown rabbitmq.rabbitmq .erlang.cookie


(官方在介绍集群的文档中提到过.erlang.cookie 一般会存在这两个地址:第一个是home/.erlang.cookie;第二个地方就是/var/lib/rabbitmq/.erlang.cookie。如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在{home}目录下,也就是$home/.erlang.cookie。如果我们使用rpm等安装包方式进行安装的,那么这个文件会在/var/lib/rabbitmq目录下。)



[root@rabbitmq-1 ~]# cat /var/lib/rabbitmq/.erlang.cookie
HOUCUGJDZYTFZDSWXTHJ
⽤scp的⽅式将rabbitmq-1节点的.erlang.cookie的值复制到其他两个节点中。
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.50.139:/var/lib/rabbitmq/
[root@rabbitmq-1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.50.140:/var/lib/rabbitmq/


**3.将mq-2、mq-3作为内存节点加⼊mq-1节点集群中**



在mq-2、mq-3执⾏如下命令:
[root@rabbitmq-2 ~]# rabbitmqctl stop_app #停止节点,切记不是停止服务
[root@rabbitmq-2 ~]# rabbitmqctl reset #如果有数据需要重置,没有则不用
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq-1 #添加到磁盘节点
Clustering node ‘rabbit@rabbitmq-2’ with ‘rabbit@rabbitmq-1’ …
[root@rabbitmq-2 ~]# rabbitmqctl start_app #启动节点
Starting node ‘rabbit@rabbitmq-2’ …

[root@rabbitmq-3 ~]# rabbitmqctl stop_app
Stopping node ‘rabbit@rabbitmq-3’ …
[root@rabbitmq-3 ~]# rabbitmqctl reset
Resetting node ‘rabbit@rabbitmq-3’ …
[root@rabbitmq-3 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq-1
Clustering node ‘rabbit@rabbitmq-3’ with ‘rabbit@rabbitmq-1’ …
[root@rabbitmq-3 ~]# rabbitmqctl start_app
Starting node ‘rabbit@rabbitmq-3’ …

(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq-2和mq-3是内存节点,
mq-1是磁盘节点。
(2)如果要使mq-2、mq-3都是磁盘节点,去掉–ram参数即可。
(3)如果想要更改节点类型,可以使⽤命令rabbitmqctl change_cluster_node_type
disc(ram),前提是必须停掉rabbit应⽤
注:
#如果有需要使用磁盘节点加入集群
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1
[root@rabbitmq-3 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1


**4.查看集群状态**



在 RabbitMQ 集群任意节点上执行 rabbitmqctl cluster_status来查看是否集群配置成功。
在mq-1磁盘节点上面查看
[root@rabbitmq-1 ~]# rabbitmqctl cluster_status


![](https://img-blog.csdnimg.cn/img_convert/bf2e28aa306e0b1402cafe859beccb59.png)



每台机器显示出三台节点,表示已经添加成功!


**5.登录rabbitmq web管理控制台,创建新的队列**


打开浏览器输⼊[http://192.168.50.138:15672]( ), 输⼊默认的Username:guest,输⼊默认的


Password:guest


登录后出现如图所示的界⾯。


![](https://img-blog.csdnimg.cn/img_convert/3ff372793a6338b131a53b05bd6026a1.png)


根据界⾯提示创建⼀条队列


![](https://img-blog.csdnimg.cn/img_convert/f6642955536a884c95e1e0a0b6874ab9.png)


![](https://img-blog.csdnimg.cn/img_convert/5127a732d6556458eee4ca7da2d7cdce.png)


### **RabbitMQ镜像集群配置**


上面已经完成RabbitMQ默认集群模式,**但并不保证队列的高可用性,队列内容不会复制。如果队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。**


镜像队列是基于普通的集群模式的。


**创建镜像集群**


rabbitmq set\_policy :设置策略



[root@rabbitmq-1 ~]# rabbitmqctl set_policy ha-all “^” ‘{“ha-mode”:“all”}’
Setting policy “ha-all” for pattern “^” to “{“ha-mode”:“all”}” with priority “0” for vhost “/” …


再次查看队列已经同步到其他两台节点:


![](https://img-blog.csdnimg.cn/img_convert/fe2f0ded2284de4cb734046ac41f9f09.png)


**"^"匹配所有的队列, ha-all 策略名称为ha-all, '{"ha-mode":"all"}' 策略模式为 all 即复制到所有节点,包含新增节点。**



设置策略介绍:
rabbitmqctl set_policy [-p Vhost] Name Pattern Definition
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称,可以定义
Pattern: queue的匹配模式(正则表达式),也就是说会匹配一组。
Definition:镜像定义,包括ha-mode,ha-params,ha-sync-mode
ha-mode:指明镜像队列的模式
all:表示在集群中所有的节点上进行镜像
exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
ha-params:ha-mode模式需要用到的参数
案例:
例如,对队列名称以hello开头的所有队列进行镜像,并在集群的两个节点上完成镜像,policy的设置命令为:
rabbitmqctl set_policy hello-ha “^hello” ‘{“ha-mode”:”exactly”,”ha-params”:2,”ha-sync-mode”:”automatic”}’


则此时镜像队列设置成功。


已经部署完成


将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一致。


**三、常见问题**


常见错误:


1、使用 rabbitmq-server -detached命令启动rabbitmq时,出现以下提示Warning: PID file not written; -detached was passed,此时使用rabbitmqctl status提示服务已启动,可知此问题不用解决。


2、由于更改hostname文件,在每次rabbitmqctl stop或者rabbitmqctl cluster\_status等,只要是rabbitmq的命令就报错,提示大概如下



Cluster status of node rabbit@web2 …
Error: unable to connect to node rabbit@web2: nodedown

DIAGNOSTICS


attempted to contact: [rabbit@web2]

rabbit@web2:

  • connected to epmd (port 4369) on web2
  • epmd reports node ‘rabbit’ running on port 25672
  • TCP connection succeeded but Erlang distribution failed
  • Hostname mismatch: node “rabbit@mq2” believes its host is different. Please ensure that hostnames resolve the same way locally and on “rabbit@mq2”

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

RC资料&HW资料**,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注网络安全)
[外链图片转存中…(img-R8tNRyvz-1713397828231)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值