RabbitMQ、Redis和ElasticSearch的安装部署
1.前言
在上一篇中,我们完成了 Linux 入门阶段最重要的一步——软件部署实战。从 MySQL 数据库的安装配置,到 Tomcat 服务端的部署运行,再到 Nginx 反向代理的搭建使用,我们一起走完了从"会敲 Linux 命令"到"能搭建真实服务"的全过程。
如果你已经跟着上一篇一步步操作下来,那么你的 Linux 环境里现在应该已经跑起了三个核心服务:一个负责存储数据的 MySQL、一个负责运行 Java 应用的 Tomcat、一个负责流量分发和静态资源加速的 Nginx。可以说,你手头已经有了一套 Web 应用上线所需的基础设施雏形。
2. RabbitMQ安装部署
部署了三个核心中间件:RabbitMQ消息队列通过生产者-消费者模型实现系统解耦,需配置yum源安装并启用管理插件;Redis高性能缓存通过EPEL源安装,默认端口6379;Elasticsearch全文搜索引擎需配置集群信息,API端口9200。三者均通过systemctl管理,开放对应端口即可使用,形成完整中间件栈。
2.1 简介
简单说,RabbitMQ是一个"消息中转站"。支付系统只需要把"订单已支付"这个消息丢给RabbitMQ,就可以立刻告诉你"支付成功",然后转身去干别的了。至于扣库存、发短信、通知卖家这些事,都由RabbitMQ在背后慢慢分发出去,各自的服务收到消息后再去执行。
| 场景 | 没有 RabbitMQ | 有了 RabbitMQ |
|---|---|---|
| 系统解耦 | 支付成功要同时通知积分、短信、物流系统,改一个就要改支付代码 | 支付成功只管发消息,谁需要谁自己来拿 |
| 流量削峰 | 秒杀瞬间百万请求涌入,数据库直接崩 | 请求全丢进队列,后端慢慢处理,系统稳如泰山 |
| 异步提速 | 发短信耗时3秒,用户等着 | 发短信丢进队列秒返回,用户丝滑体验 |
核心概念
生产者→ 发消息的人(比如订单系统)
交换机→ 分拣员,决定消息往哪送
队列→ 快递柜,暂存消息等着被取
消费者→ 取消息的人(比如库存系统)
RabbitMQ 让不同的系统之间"通过消息说话",不用互相等着,也不用互相依赖,大家都轻松。
2.2 安装
1. 准备yum仓库
# root执行 # 1. 准备gpgkey密钥 rpm --import https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc rpm --import https://packagecloud.io/rabbitmq/erlang/gpgkey rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey# 2. 准备仓库文件 vim /etc/yum.repos.d/rabbitmq.repo# 填入如下内容 ## ## Zero dependency Erlang ## [rabbitmq_erlang] name=rabbitmq_erlang baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch repo_gpgcheck=1 gpgcheck=1 enabled=1 # PackageCloud's repository key and RabbitMQ package signing key gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 [rabbitmq_erlang-source] name=rabbitmq_erlang-source baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS repo_gpgcheck=1 gpgcheck=0 enabled=1 # PackageCloud's repository key and RabbitMQ package signing key gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 ## ## RabbitMQ server ## [rabbitmq_server] name=rabbitmq_server baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch repo_gpgcheck=1 gpgcheck=0 enabled=1 # PackageCloud's repository key and RabbitMQ package signing key gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=300 [rabbitmq_server-source] name=rabbitmq_server-source baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/SRPMS repo_gpgcheck=1 gpgcheck=0 enabled=1 gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt metadata_expire=3002. 安装RabbitMQ
rabbitmq语言用erlang开发的
# root执行 yum install erlang rabbitmq-server -y安装完成
3. 启动
# root执行 # 使用systemctl管控,服务名:rabbitmq-server systemctl enable rabbitmq-server # 开机自启 systemctl disable rabbitmq-server # 关闭开机自启 systemctl start rabbitmq-server # 启动 systemctl stop rabbitmq-server # 关闭 systemctl status rabbitmq-server # 查看状态4.放行端口
# 方式1(推荐),关闭防火墙 systemctl stop firewalld # 关闭 systemctl disable firewalld # 关闭开机自启 # 方式2,放行5672 25672端口 firewall-cmd --add-port=5672/tcp --permanent # 放行tcp规则下的5672端口,永久生效 firewall-cmd --add-port=15672/tcp --permanent # 放行tcp规则下的15672端口,永久生效 firewall-cmd --add-port=25672/tcp --permanent # 放行tcp规则下的25672端口,永久生效 firewall-cmd --reload # 重新加载防火墙规则rabbitmq-plugins enable rabbitmq_management #启动RabbitMQ的WEB管理控制台#添加admin用户,并赋予权限 下面是rabbitmq的命令 rabbitmqctl add_user admin '密码' rabbitmqctl set_permissions -p "/" "admin" ".*" ".*" ".*" #最大权限 rabbitmqctl set_user_tags admin administrator#浏览器打开管理控制台 http://192.168.88.130:15672 或 http://centos:156723. Redis安装部署
3.1 简介
Redis 就是一个"超级内存快递柜",数据全放在内存里,读写速度极快(毫秒级),专门用来存那些需要频繁读取的"热数据"。
Redis 官方基准测试:单机读速度 10万+ 次/秒,写速度 8万+ 次/秒。
Redis的特点就是快
它用来干什么?(what do?)
| 场景 | 没 Redis 时 | 有 Redis 时 |
|---|---|---|
| 缓存加速 | 每次查数据库,压力大、响应慢 | 热门数据存 Redis,直接从内存取,秒开 |
| 分布式锁 | 多台服务器抢资源,乱套了 | Redis 当"裁判",确保同一时刻只有一台服务器干活 |
| 实时排行榜 | 每次重新算一遍,又慢又累 | Redis 的有序集合(Zset)实时维护,随时查 |
和 MySQL 的区别
| 对比 | MySQL | Redis |
|---|---|---|
| 数据存在哪 | 硬盘(慢慢慢) | 内存(快快快) |
| 能存什么 | 表格数据(结构化) | 字符串、哈希、列表、集合、有序集合、位图等 8 种数据类型 |
| 能不能持久化 | 能,断电数据还在 | 能(RDB快照 + AOF日志),但主要还是当缓存用 |
| 典型组合 | MySQL 当主力仓库,Redis 当高速缓存,两者配合使用 | |
Redis 把数据放在内存里,让访问速度从"骑自行车"变成"坐火箭",专门应对数据库扛不住的高并发场景。
3.2 安装
1. 配置EPEL仓库
EPEL 简介
EPEL(Extra Packages for Enterprise Linux)是由Fedora 社区主导维护的开源项目,专为RHEL(Red Hat Enterprise Linux)及其衍生发行版(如 CentOS、Rocky Linux、AlmaLinux 等)提供高质量的额外软件包。
核心功能是填补官方软件源的空白。企业级 Linux 发行版以稳定为首要目标,官方仓库的软件版本往往偏旧、数量有限。许多常用的开源工具(如htop、fail2ban、certbot、Nginx等)在官方源中并不可用,而通过 EPEL 可以一键安装,极大扩展了系统的软件生态。
EPEL 是企业级 Linux 用户不可或缺的“软件扩充仓库”,让系统在保持稳定的同时,也能便捷地获取丰富的开源工具,是每位运维人员的必备基础配置。
#root执行 yum install -y epel-release2. 安装Redis
# root执行 yum install -y redis3. 启动Redis
# root执行 # 使用systemctl管控,服务名:redis systemctl enable redis # 开机自启 systemctl disable redis # 关闭开机自启 systemctl start redis # 启动 systemctl stop redis # 关闭 systemctl status redis # 查看状态4.放行端口
# 方式1(推荐),关闭防火墙 systemctl stop firewalld # 关闭 systemctl disable firewalld # 关闭开机自启 # 方式2,放行6379端口 firewall-cmd --add-port=6379/tcp --permanent # 放行tcp规则下的6379端口,永久生效 firewall-cmd --reload5. 启动Redis服务
# 执行redis-cli redis-cli 127.0.0.1:6379> set one hello OK 127.0.0.1:6379> get one "hello" 127.0.0.1:6379>4. ElasticSearch(ES)安装部署
4.1 简介
Elasticsearch(简称 ES)就是一个"超级搜索引擎",专门用来在海量数据中快速找到你想要的内容。维基百科、Stack Overflow、Github 都采用它。
它能干什么?(what do?)
| 场景 | 不用 ES 时 | 用了 ES 之后 |
|---|---|---|
| 全文搜索 | 用LIKE '%关键词%'查百万条数据,卡半天 | 输入关键字,毫秒级返回匹配结果,还带高亮 |
| 日志分析 | 服务器日志散落在各个机器,排查问题全靠 grep | 所有日志统一存 ES,随时搜索、聚合分析 |
| 商品/文章检索 | 按标题和分类简单过滤,搜"手机"出来一堆"手机壳" | 智能分词、拼音搜索、相关性排序,搜得准 |
和 MySQL 的区别
| 对比 | MySQL | Elasticsearch |
|---|---|---|
| 核心能力 | 事务性存储(增删改查) | 全文搜索 + 数据分析 |
| 搜索方式 | 精确匹配为主,LIKE慢且弱 | 倒排索引,分词搜索,又快又准 |
| 数据量级 | 千万级还行,亿级就吃力了 | 百亿级数据照样轻松检索 |
| 典型组合 | MySQL 存原始数据,ES 建索引提供搜索,两者配合使用 | |
核心概念
索引≈ MySQL 里的"数据库",存同一类文档的地方
文档≈ MySQL 里的"一行记录",JSON 格式
倒排索引= ES 的"秘密武器":把文字拆成词,建个"词 → 文档"的目录,搜词直接定位,不用全文扫荡
Elasticsearch 让"大海捞针"变成"按图索骥",应对数据量大、搜索慢、模糊匹配不准的毛病。
(大部分互联网公司的搜索功能:MySQL 存数据,ES 建索引,业务系统搜 ES,用户搜得又快又准。)
4.2 安装
1. 添加yum仓库
# root执行 # 导入仓库密钥 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch# 添加yum源 # 编辑文件 vim /etc/yum.repos.d/elasticsearch.repo [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md # 更新yum缓存 yum makecache2. 安装ES
yum install -y elasticsearch3. 配置ES
vim /etc/elasticsearch/elasticsearch.yml # 17行,设置集群名称 cluster.name: my-cluster # 23行,设置节点名称 node.name: node-1 # 56行,允许外网访问 network.host: 0.0.0.0 # 74行,配置集群master节点 cluster.initial_master_nodes: ["node-1"]4. 启动ES
systemctl start | stop | status | enable | disable elasticsearch5. 放行端口
# 方式1(推荐),关闭防火墙 systemctl stop firewalld # 关闭 systemctl disable firewalld # 关闭开机自启 # 方式2,放行9200端口 firewall-cmd --add-port=9200/tcp --permanent # 放行tcp规则下的9200或9300端口,永久生效 firewall-cmd --reload6. 测试
浏览器打开:http://ip:9200/?pretty #浏览器打开管理控制台 http://192.168.88.130:9200 或 http://centos:9300