1、Nacos

Nacos安装指南[^1]

2、RabbitMQ

RabbitMQ部署指南[^2]

3、Elasticsearch

elasticsearch安装指南[^3]

[^1]: # Nacos安装指南

# 1、Windows安装(单点部署)

## 1.1、下载安装包

**在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:** 
**GitHub主页:**​[https://github.com/alibaba/nacos](https://github.com/alibaba/nacos)

**如图:** 
![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_0-20251130181901-n3j7hy0.png)
**我这里是用1.4.1.版本的Nacos,压缩包链接如下:** 
**链接:**​[https://pan.baidu.com/s/1ykqimWbU04_w9ymutt9VQw?pwd=0xws](https://pan.baidu.com/s/1ykqimWbU04_w9ymutt9VQw?pwd=0xws)
**提取码:0xws**
 **--来自百度网盘超级会员V5的分享**

## 1.2、解压

**将这个包解压到任意非中文目录下,如图:** 
![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_1-20251130181901-dah0weu.png)
**目录说明:**

- **bin:启动脚本**
- **conf:配置文件**

## 1.3、端口配置

Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
**如果无法关闭占用8848端口的进程**,也可以进入nacos的conf目录,修改配置文件中的端口:
![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_2-20251130181901-4eb53qo.png)
**修改其中的内容:** 
![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_3-20251130181901-m9qr1jt.png)

## 1.4、启动

**启动非常简单,进入bin目录,结构如下:** 
![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_4-20251130181901-l89naw2.png)
**然后执行命令即可:**

startup.cmd -m standalone
**执行后的效果如图:** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_5-20251130181901-03e90lf.png) ## 1.5、访问 **在浏览器输入地址:**​[http://127.0.0.1:8848/nacos](http://127.0.0.1:8848/nacos)​**即可:** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_6-20251130181901-a9p4dol.png) **默认的账号和密码都是**<font color= "#F33232">**nacos**</font> **,**​**进入后:** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_7-20251130181901-g4jqhoo.png) # 2、Linux安装 **(单点部署)** **Linux或者Mac安装方式与Windows类似。** ## 2.1、安装JDK **Nacos依赖于JDK运行,所以Linux上也需要安装JDK才行。** ## 2.2、上传安装包 **压缩包链接如下:** **链接:**​[https://pan.baidu.com/s/1L9WhrNmwvDVlk_liAuC6WA?pwd=slg0](https://pan.baidu.com/s/1L9WhrNmwvDVlk_liAuC6WA?pwd=slg0) **提取码:slg0** **--来自百度网盘超级会员V5的分享** **上传到Linux服务器的某个目录,例如**​ **/usr/local/src****目录下:** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_8-20251130181901-9fg5e1w.png) ## 2.3、解压 **命令解压缩安装包:**
tar -xvf nacos-server-1.4.1.tar.gz
**然后删除安装包:**
rm -rf nacos-server-1.4.1.tar.gz
**目录内部:** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_9-20251130181901-5fkbb5p.png) ## 2.4、端口配置 **与windows中类似** ## 2.5、启动 **在nacos/bin目录中,输入命令启动Nacos:**
sh startup.sh -m standalone
# 3、Nacos的依赖 **父工程:**
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
**客户端:**
<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
# 4、Nacos集群搭建 ## 1、集群结构图 **官方给出的Nacos集群图:** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_10-20251130181901-hgnmsu0.png) **其中包含**<font color= "#FF0001">**3**</font>**个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。** **我们计划的集群结构:** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_11-20251130181901-0visdt3.png) **三个nacos节点的地址:** |节点|ip|port| | ------| -------------| ----| |nacos1|192.168.150.1|8845| |nacos2|192.168.150.1|8846| |nacos3|192.168.150.1|8847| ## 2、搭建集群 **搭建集群的基本步骤:** - **搭建数据库,初始化数据库表结构** - **下载nacos安装包** - **配置nacos** - **启动nacos集群** - **nginx反向代理** ### 2.1、初始化数据库 **Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。** **官方推荐的最佳实践是使用带有主从的高可用数据库集群。** **这里我们以单点的数据库为例来讲解。** **首先新建一个数据库,命名为nacos,而后导入下面的SQL:**
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
​
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
​
​
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
​
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
​
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
​
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = group_capacity   */
/******************************************/
CREATE TABLE `group_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
​
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = his_config_info   */
/******************************************/
CREATE TABLE `his_config_info` (
  `id` bigint(64) unsigned NOT NULL,
  `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `data_id` varchar(255) NOT NULL,
  `group_id` varchar(128) NOT NULL,
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL,
  `md5` varchar(32) DEFAULT NULL,
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `src_user` text,
  `src_ip` varchar(50) DEFAULT NULL,
  `op_type` char(10) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`nid`),
  KEY `idx_gmt_create` (`gmt_create`),
  KEY `idx_gmt_modified` (`gmt_modified`),
  KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
​
​
/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = tenant_capacity   */
/******************************************/
CREATE TABLE `tenant_capacity` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
​
​
CREATE TABLE `tenant_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `kp` varchar(128) NOT NULL COMMENT 'kp',
  `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
​
CREATE TABLE `users` (
    `username` varchar(50) NOT NULL PRIMARY KEY,
    `password` varchar(500) NOT NULL,
    `enabled` boolean NOT NULL
);
​
CREATE TABLE `roles` (
    `username` varchar(50) NOT NULL,
    `role` varchar(50) NOT NULL,
    UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
​
CREATE TABLE `permissions` (
    `role` varchar(50) NOT NULL,
    `resource` varchar(255) NOT NULL,
    `action` varchar(8) NOT NULL,
    UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);
​
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
​
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');
### 2.2、下载nacos **nacos在GitHub上有下载地址:**​[https://github.com/alibaba/nacos/tags](https://github.com/alibaba/nacos/tags)​ **,可以选择任意版本下载。** **本例中采用1.4.1版本,下载链接如下:** **链接:**​[https://pan.baidu.com/s/1ykqimWbU04_w9ymutt9VQw?pwd=0xws](https://pan.baidu.com/s/1ykqimWbU04_w9ymutt9VQw?pwd=0xws) **提取码:0xws** **--来自百度网盘超级会员V5的分享** ### 2.3、配置Nacos **将这个包解压到任意非中文目录下,如图:** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_12-20251130181901-b0v4anx.png) **目录说明:** - **bin:启动脚本** - **conf:配置文件** **进入nacos的conf目录,修改配置文件**​******cluster.conf.example******​ **,重命名为**​******cluster.conf******​ **:** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_13-20251130181901-uetvk3l.png) **然后添加内容:**
127.0.0.1:8845
127.0.0.1.8846
127.0.0.1.8847
**然后修改application.properties文件,添加数据库配置**
spring.datasource.platform=mysql
​
db.num=1
​
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456
### 2.4、启动 **将nacos文件夹复制三份,分别命名为:nacos1、nacos2、nacos3** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_14-20251130181901-ml3j4kx.png) **然后分别修改三个文件夹中的**​******application.properties******​ **,** **nacos1:**
server.port=8845
**nacos2:**
server.port=8846
**nacos3:**
server.port=8847
**然后分别启动三个nacos节点:**
startup.cmd
### 2.5、nginx反向代理 **nginx安装包下载链接: ** **链接:**​[https://pan.baidu.com/s/1Karw3BL4fau3LgRvs7GoFw?pwd=denb](https://pan.baidu.com/s/1Karw3BL4fau3LgRvs7GoFw?pwd=denb) **提取码:denb** **--来自百度网盘超级会员V5的分享** **解压到任意非中文目录下:** ![](/assets/Nacos%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_15-20251130181901-97j711v.png) **修改**​******conf/nginx.conf******​**文件,配置如下:**
upstream nacos-cluster {
    server 127.0.0.1:8845;
    server 127.0.0.1:8846;
    server 127.0.0.1:8847;
}
​
server {
    listen       80;
    server_name  localhost;
​
    location /nacos {
    }
}
**而后在浏览器访问:**​[http://localhost/nacos](http://localhost/nacos)​**即可。** **代码中**​******application.yml******​**文件配置如下:**
spring:
  cloud:
    nacos:
      server-addr: localhost:80 # Nacos地址
### 2.6、优化 - **实际部署时,需要给做反向代理的nginx服务器设置一个域名,这样后续如果有服务器迁移nacos的客户端也无需更改配置.** - <div> <font color= "#FF0001">**Nacos的各个节点应该部署到多个不同服务器,做好容灾和隔离**</font> </div>

[^2]: # RabbitMQ部署指南

# 1、单机部署

**我们在Centos7虚拟机中使用Docker来安装。**

## 1.1、下载镜像

**方式一:在线拉取**

docker pull rabbitmq:3-management
**方式二:从本地加载** **镜像包下载链接:** **链接:**​[https://pan.baidu.com/s/1soGiZ_H8KdHvIQOqIKnPrg?pwd=ul7h](https://pan.baidu.com/s/1soGiZ_H8KdHvIQOqIKnPrg?pwd=ul7h) **提取码:ul7h** **--来自百度网盘超级会员V5的分享** **上传到虚拟机中后,使用命令加载镜像即可:**
docker load -i mq.tar
## 1.2、安装MQ **执行下面的命令来运行MQ容器:**
docker run \
 -e RABBITMQ_DEFAULT_USER=itcast \
 -e RABBITMQ_DEFAULT_PASS=123321 \
 --name mq \
 --hostname mq1 \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3-management
# 2、集群部署 ## 2.1、集群分类 **在RabbitMQ的官方文档中,讲述了两种集群的配置方式:** - **普通模式:普通模式集群不进行数据同步,每个MQ都有自己的队列、数据信息(其它元数据信息如交换机等会同步)。例如我们有2个MQ:mq1,和mq2,如果你的消息在mq1,而你连接到了mq2,那么mq2会去mq1拉取消息,然后返回给你。如果mq1宕机,消息就会丢失。** - **镜像模式:与普通模式不同,队列会在各个mq的镜像节点之间同步,因此你连接到任何一个镜像节点,均可获取到消息。而且如果一个节点宕机,并不会导致数据丢失。不过,这种方式增加了数据同步的带宽消耗。** **我们先来看普通模式集群。** ## 2.2、设置网络 **首先,我们需要让3台MQ互相知道对方的存在。** **分别在3台机器中,设置 **​ ******/etc/hosts文件******​ **,添加如下内容:**
192.168.150.101 mq1
192.168.150.102 mq2
192.168.150.103 mq3
**并在每台机器上测试,是否可以ping通对方.**

[^3]: # elasticsearch安装指南

# 1、部署单点es

## 1.1、创建网络

**因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络:**

docker network create es-net
## 1.2、加载镜像 **镜像tar包的下载链接:** **链接:**​[https://pan.baidu.com/s/10-sd8acWQ-LXqMsqqoBCwA?pwd=t9dr](https://pan.baidu.com/s/10-sd8acWQ-LXqMsqqoBCwA?pwd=t9dr) **提取码:t9dr** **--来自百度网盘超级会员V5的分享** **将其上传到虚拟机中,然后运行命令加载即可:**
# 导入docker镜像
docker load -i es.tar
**同理还有**​******kibana******​**的tar包也需要这样做。** ## 1.3、运行 **运行docker命令,部署单点es:**
docker run -d \
    --name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network es-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1
# 命令解释:
-e "cluster.name=es-docker-cluster":设置集群名称
-e "http.host=0.0.0.0":监听的地址,可以外网访问
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小
-e "discovery.type=single-node":非集群模式
-v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
-v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录
-v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
--privileged:授予逻辑卷访问权
--network es-net:加入一个名为es-net的网络中
-p 9200:9200:端口映射配置
**在浏览器中输入:**​[http://localhost:9200](http://localhost:9200)** 即可看到elasticsearch的响应结果:** ![](/assets/elasticsearch%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_0-20251130181902-tu1z9g8.png) # 2、部署kibana **kibana可以给我们提供一个elasticsearch的可视化界面,便于我们学习。** **镜像tar包的下载链接:** **链接:**​[https://pan.baidu.com/s/1cSvro3EDExjN5R9yfZiBKA?pwd=hm9a](https://pan.baidu.com/s/1cSvro3EDExjN5R9yfZiBKA?pwd=hm9a) **提取码:hm9a** **--来自百度网盘超级会员V5的分享** ## 2.1、部署 **运行docker命令,部署kibana**
# 导入kibana镜像
docker load -i kibana.tar
# 启动kibana
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=[http://es:9200](http://es:9200) \
--network=es-net \
-p 5601:5601  \
kibana:7.12.1
# 命令解释:
--network es-net:加入一个名为es-net的网络中,与elasticsearch在同一个网络中
-e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
-p 5601:5601:端口映射配置
**kibana启动一般比较慢,需要多等待一会,可以通过命令:**
docker logs -f kibana
**查看运行日志,当查看到下面的日志,说明成功:** ![](/assets/elasticsearch%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_1-20251130181902-hae1lum.png) **此时,在浏览器输入地址访问:**​[http://localhost:5601](http://localhost:5601)​ **,即可看到结果** ## 2.2、DevTools **kibana中提供了一个DevTools界面:** ![](/assets/elasticsearch%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_2-20251130181902-3ibwasp.png) ![](/assets/elasticsearch%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_3-20251130181902-apahuve.png) **这个界面中可以编写DSL来操作elasticsearch。并且对DSL语句有自动补全功能。** # 3、安装IK分词器 ## 3.1、在线安装ik插件(较慢)
# 进入容器内部
docker exec -it elasticsearch /bin/bash
​
# 在线下载并安装
./bin/elasticsearch-plugin  install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.12.1.zip
​
#退出
exit
#重启容器
docker restart elasticsearch
## 3.2、离线安装ik插件(推荐) ### 1)查看数据卷目录 **安装插件需要知道elasticsearch的**​******plugins目录******​**位置,而我们用了数据卷挂载,因此需要查看elasticsearch的数据卷目录,通过下面命令查看:**
docker volume inspect es-plugins
**显示结果:**
[
    {
        "CreatedAt": "2022-05-06T10:06:34+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/es-plugins/_data",
        "Name": "es-plugins",
        "Options": null,
        "Scope": "local"
    }
]
**说明plugins目录被挂载到了:****/var/lib/docker/volumes/es-plugins/_data ****这个目录中。** ### 2)分词安装包 **下载链接如下:** **链接:**​[https://pan.baidu.com/s/1D5Qsgq7rnq1ZL5y74LmIMw?pwd=d373](https://pan.baidu.com/s/1D5Qsgq7rnq1ZL5y74LmIMw?pwd=d373) **提取码:d373** **--来自百度网盘超级会员V5的分享** ### 3)上传到es容器的插件数据卷中 **也就是**​ **/var/lib/docker/volumes/es-plugins/_data****:** ![](/assets/elasticsearch%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_4-20251130181902-mp40c4l.png) ### 4)重启容器
# 4、重启容器
docker restart es
# 查看es日志
docker logs -f es
### 5)测试: **IK分词器包含两种模式:** - **ik_smart**​ **:最少切分** - **ik_max_word**​ **:最细切分**
GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "黑马程序员学习java太棒了"
}
**结果:**
{
  "tokens" : [
    {
      "token" : "黑马",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "程序员",
      "start_offset" : 2,
      "end_offset" : 5,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "程序",
      "start_offset" : 2,
      "end_offset" : 4,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "员",
      "start_offset" : 4,
      "end_offset" : 5,
      "type" : "CN_CHAR",
      "position" : 3
    },
    {
      "token" : "学习",
      "start_offset" : 5,
      "end_offset" : 7,
      "type" : "CN_WORD",
      "position" : 4
    },
    {
      "token" : "java",
      "start_offset" : 7,
      "end_offset" : 11,
      "type" : "ENGLISH",
      "position" : 5
    },
    {
      "token" : "太棒了",
      "start_offset" : 11,
      "end_offset" : 14,
      "type" : "CN_WORD",
      "position" : 6
    },
    {
      "token" : "太棒",
      "start_offset" : 11,
      "end_offset" : 13,
      "type" : "CN_WORD",
      "position" : 7
    },
    {
      "token" : "了",
      "start_offset" : 13,
      "end_offset" : 14,
      "type" : "CN_CHAR",
      "position" : 8
    }
  ]
}
## 3.3、扩展词词典 **随着互联网的发展,“造词运动”也越发的频繁。出现了很多新的词语,在原有的词汇列表中并不存在。比如:“奥力给”,“啊米诺斯” 等。** **所以我们的词汇也需要不断的更新,IK分词器提供了扩展词汇的功能。** ### **1)打开IK分词器config目录:** ![](/assets/elasticsearch%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_5-20251130181902-hkaen5g.png) ### 2)在IKAnalyzer.cfg.xml配置文件内容添加:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "[http://java.sun.com/dtd/properties.dtd](http://java.sun.com/dtd/properties.dtd)">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典 *** 添加扩展词典-->
        <entry key="ext_dict">ext.dic</entry>
</properties>
### 3)新建一个 ext.dic,可以参考config目录下复制一个配置文件(随便哪个都行)进行修改
啊米诺斯
奥力给
### 4)重启elasticsearch
docker restart es
​
# 查看 日志
docker logs -f es
![](/assets/elasticsearch%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_6-20251130181902-ufhb3gu.png) **日志中已经成功加载ext.dic配置文件** ### 5)测试效果:
GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "传智播客Java就业超过90%,奥力给!"
}
> **注意当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑** > ## 3.4、停用词词典 **在互联网项目中,在网络间传输的速度很快,所以很多语言是不允许在网络上传递的,如:**​******关于宗教、政治等敏感词语******​ **,那么我们在搜索时也应该忽略当前词汇。** **IK分词器也提供了强大的停用词功能,让我们在索引时就直接忽略当前的停用词汇表中的内容。** ### 1)IKAnalyzer.cfg.xml配置文件内容添加:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "[http://java.sun.com/dtd/properties.dtd](http://java.sun.com/dtd/properties.dtd)">
<properties>
        <comment>IK Analyzer 扩展配置</comment>
        <!--用户可以在这里配置自己的扩展字典-->
        <entry key="ext_dict">ext.dic</entry>
         <!--用户可以在这里配置自己的扩展停止词字典  *** 添加停用词词典-->
        <entry key="ext_stopwords">stopword.dic</entry>
</properties>
### 2)在 stopword.dic 添加停用词
习大大
### 3)重启elasticsearch
# 重启服务
docker restart es
# 查看 日志
docker logs -f es
![](/assets/elasticsearch%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_7-20251130181902-29026r3.png) ### 4)测试效果:
GET /_analyze
{
  "analyzer": "ik_max_word",
  "text": "传智播客Java就业率超过95%,习大大都点赞,奥力给!"
}
> **注意当前文件的编码必须是 UTF-8 格式,严禁使用Windows记事本编辑** > # 4、安装拼音分词器 **下载链接如下:** **链接:**​[https://pan.baidu.com/s/1cvoABBQpnswUd76fX9o5tQ?pwd=9uyi](https://pan.baidu.com/s/1cvoABBQpnswUd76fX9o5tQ?pwd=9uyi) **提取码:9uyi** **--来自百度网盘超级会员V5的分享** > **具体安装过程同IK一样** > ** ① 上传到虚拟机中,elasticsearch的****plugin目录** **​ ② 重启elasticsearch** **​ ③ 测试** **测试用法如下:**
POST /_analyze
{
  "text": "如家酒店还不错",
  "analyzer": "pinyin"
}
**结果:** ![](/assets/elasticsearch%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97_image_8-20251130181902-z1u913m.png) # 5、部署es集群 **部署es集群可以直接使用docker-compose来完成,不过要求你的Linux虚拟机至少有**<font color= "#F33232">**4G**</font>**的内存空间** **首先编写一个docker-compose文件,内容如下:**
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.12.1
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic
​
volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local
​
networks:
  elastic:
    driver: bridge
**Run **​******docker-compose******​ ** to bring up the cluster:**
docker-compose up