本篇安装软件
Hive1.2
python jdk Linux安装 -》https://blog.csdn.net/dudadudadd/article/details/117822225
Zookeeper3.4
Kafka2.11-0.10
redis3.0.0
elasticsearch-6.6.2
elasticsearch-7.17.3
elasticsearch-ik分词器 版本和安装es保持一致
elasticsearch-8.9.2 集群版本
Hive
重点说明hive不是个数据库!!!,它是基于hadoop的一个提供sql化处理数据的工具而已,只是它和数据库在提供的能力上长得很像而已。
还要强调一个小问题,hive需要安装在hadoop集群上,和hadoop是一体的不分开,hive没有单独的集群一说,但是元数据服务和hs2可以搭建成主备高可用的,这个就需要看实际需求了,一般情况下商用集群元数据服务在5个,hs2在3个左右的样子,不过本篇是测试用的,所以就搭了一个,和前面的hadoop一样,要是需要主备搭建方式的,去我主页下找
第一步:上传hive的压缩包,并解压,进入到conf文件下,修改hive-env.sh文件,在这个文件中修改HADOOP_HOME和hive配置文件的位置,如果默认的配置文件存在template后缀,则要先mv改名字,去掉末尾的template

第二步:在hadoop集群里面用hadoop fs -mkdir 目录创建/tmp和/user/hive/warehouse目录,/tmp是Hadoop的运行时的临时文件目录,这两个路径用hadoop fs -chmod 权限 目录,设置同组可写的764权限,或者直接全部777,如果你不是个人使用,去看我写的另一篇权限改造
第三步:进入bin目录运行hive命令,查看是否可以正常启动hive,如果启动要账号密码,随便输一个就行,商用的话要走权限改造
随便使用一下,比如建立一个库之类的操作都是可以的,之后打开hadoopweb页面可以看到,先前建立的/user/hive/warehouse目录下有了我们在hive中操作的东西,库和表都在这里,而tmp正常情况下是打不开的,除非你把权限设置成了777,不过也没关系,只要知道这两个文件里面有东西hive也可以使用就可以了
这个时候hive已经安装成功了,但是它的元数据保存在自带的文件中,很容易损坏,而且不支持高并发,因此我们要使用mysql存储它的元数据
第四步:保证linux安装了mysql,操作mysql中的mysql数据库中的user表,我们要在这张表中创建一个允许远程访问用户,如果你的mysql是按照我之前的步骤安装的,那就已近创建好了,没有按照我的方法安装的可以回顾之前的mysql安装,值得注意的是低版本的hive,配置完mysql元数据服务,直接启动会自动初始化,但是3.x之后的就需要额外执行初始化脚本,而且在版本上低版本的hive版本也不需要太高5.x的就行
第五步:在hive的conf路径下创建hive-site.xml文件,并根据官方文档在文件中配置,可以直接用我下面的,把mysql地址,用户的账号密码等改成大家自己的
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc 链接地址mysql 特别注意要改成自己的mysql所在地址,还有库名也可以自定义,注意mysql里面的元数据库一定不要盲目的手动去建立,不然使用的时候会出问题的,你要想自己先建好,那么要运行alter database hive character set latin1; 把字符集改了-->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hdp2:3306/metastore?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<!-- mysql口令也要改写成自己的口令-->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
<!-- hive的warehouse保存目录,就是hive保存数据的目录-->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<property>
<name>hive.cli.print.header</name>
<value>true</value>
</property>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
<!-- 这个是hive需要的一个jar包,这个jar大家自己在网上找一下或者私信我,没有不配也可以,主要是有一些额外的扩展-->
<property>
<name>hive.aux.jars.path</name>
<value>file:///opt/hive/lib/json-serde-1.3.8-jar-with-dependencies.jar</value>
</property>
<property>
<name>hive.exec.compress.output</name>
<value>false</value>
</property>
<!-- 元数据服务配置 -->
<property>
<name>hive.metastore.uris</name>
<value>thrift://hdp2:9083</value>
</property>
</configuration>
释放hive-log4j2.properties.template文件,修改里面的property.hive.log.dir配置指定日志路径
第六步:将相应版本的mysql的jdbc驱动和前面提到的hive所需要的jar包放到hive目录下lib目录中,如果你和我一样为了方便用的root,就需要注意hive用root用户必做操作
第七步:运行命令进入hive,测试一下是否可以操作
/opt/hive/bin/hive --service metastore &
/opt/hive/bin/hive
并且测试hiveserver2能否正常使用
/opt/hive/bin/hiveserver2 &
/opt/hive/bin/beeline -u jdbc:hive2://node001:10000
或者查看hiveserver2的端口是否有了监听
[root@node1 ~]# netstat -nltp|grep 10000
tcp6 0 0 :::10000 :::* LISTEN 3258/java
第八步:配置hive的环境变量,并按照自己的需要进行scp的分发

第九步:把元数据mysql库的字符集改成utf8或者utf8mb4
先查看一下当前的字符集和排序规则
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
全局所有mysql实例改字符集,则修改my.cnf,但这需要重启mysql服务
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
单独改,运行如下语句,下面是改了高频使用的,后面使用中如果存在字符集不对的自己改一下就行
alter database hive character set utf8;
ALTER TABLE DBS modify column `DESC` varchar(4000) character set utf8;
ALTER TABLE DBS modify column DB_LOCATION_URI varchar(4000) character set utf8;
ALTER TABLE DBS modify column `NAME` varchar(200) character set utf8;
ALTER TABLE TBLS modify column TBL_NAME varchar(200) character set utf8;
ALTER TABLE TBLS modify column `OWNER` varchar(200) character set utf8;
alter table COLUMNS_V2 modify column `COMMENT` varchar(256) character set utf8;
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
ALTER TABLE PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
ALTER TABLE PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
ALTER TABLE PARTITION_KEYS modify column PKEY_NAME varchar(128) character set utf8;
FLUSH PRIVILEGES;
至于上面SHOW查询字符集的结果,如果需要更改要去改mysql的配置文件,这相当于全局在更改,一般不需要改
[mysqld]
character-set-server=utf8
collation-server=utf8mb4_general_ci
[client]
default-character-set=utf8
Zookeeper
Zookeeper是一个服务器的粘溶剂,很多节点应用都依赖zookeeper协调结点
1、 解压zookeeper的安装包
2、 在zookeeper安装路径下创建zkData,用来存放运行时的数据,目录可自定义
3、zkData目录下创建一个myid的文件
4、 在myid中书写服务器的编号如1,注意这个文件里面只写一个数字就行其他啥都不要有,而且正常情况下myid的范围一般是1-255,包括1和255,但是使用的时候其实没那么严格,比如有的大数据同伴也会从0开始配
5、之后进入:zookeeper-3.4.10/conf
6、将zoo_sample.cfg更名为zoo.cfg ,并进入其中修改如下配置,注意使用自己的配置
设置dataDir值为之前准备的zkData路径

在zoo.cfg文件末尾增加各zookeeper节点的地址后保存退出
server.1=hdp1:2888:3888
server.2=hdp2:2888:3888
server.3=hdp3:2888:3888
7、修改log4文件设置zookeeper日志路径,这个路径也是自己建立的,如:

8、使用scp命令分发zookeeper,并修改每个结点中的myid文件中的编号,注意修改的编号要和配置文件中的吻合,配置文件中各ip对应编号为几,那么对应的服务器就要配置为几
9.每台节点运行bin/zkServer.sh start启动zookeeper,并在所有节点分别运行bin/zkServer.sh status查看是否有leader和follover结点,如果有则安装成功
Kafka
1、解压安装包
tar -zxvf kafka_2.11-0.11.0.2.tgz -C /opt
2、修改解压后的文件名称,自己决定修改成什么,我改成了kafka
mv kafka_2.11-0.11.0.2 kafka
3、在/opt /kafka目录下创建logs文件夹
mkdir logs
4、修改配置文件
cd config/
vim server.properties
无则输入有则修改以下内容,注意使用自己的配置:
#broker的全局唯一编号,所有服务器不能重复,从0开始
broker.id=0
#删除topic功能使能
delete.topic.enable=true
#节点自身的服务配置,每个节点用自己的ip或者是域名
listeners=PLAINTEXT://hdp1:9092
host.name=hdp1
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka运行日志(还有生产者发给kafka的消息,这些信息本质上是以日志的形式存储,因此空间要足够)存放的路径
log.dirs=/opt/kafka/logs
#topic在当前broker节点上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
#logs路径下数据文件保留的最长时间,超时将被删除,单位小时,也就是说这段时间后无论是否消费对应的数据就没了
log.retention.hours=168
#log下日志文件最大保留多少字节,和小时策略不冲突,独立运行的
log.retention.bytes=1073741824
log.segment.bytes=1073741824
#配置连接Zookeeper集群地址
zookeeper.connect=hadoop102:2181,hadoop103:2181,hadoop104:2181
5、配置环境变量
vim /etc/profile
export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
source /etc/profile
6、分发安装包
注意:分发之后记得配置其他机器的环境变量,以及每个结点上的broker.id和服务域名
7、分别在其他服务器结点上修改配置文件中的broker.id和服务ip
8、启动集群
先启动Zookeeper
依次在其他节点上启动kafka,我这是后台启动,推荐新手前台启动,前台启动去掉命令中的-daemon
bin/kafka-server-start.sh -daemon config/server.properties
9、关闭集群命令如下
bin/kafka-server-stop.sh
10、当kafka启动不报错,运行
bin/kafka-topics.sh --zookeeper zookeeper集群地址 --list
一般情况下可以展示自带的名字为first的topic,不过有时候或许因为其他原因所以并不展示,我们可以自己创建一个,并使用这个topic进行生产消费测试正常,则kafka集群安装成功,生产消费模型如下:
kafka-topics.sh --create --zookeeper zookeeper集群地址 --replication-factor 1 --partitions 1 --topic test
kafka-console-producer.sh --broker-list kafka集群地址 --topic topic名字
kafka-console-consumer.sh --bootstrap-server kafka集群地址 --topic topic名字
之后在生产者随便发一些东西,看看消费者能不能收到,到此kafka安装完成
redis
Redis是一个基于内存的数据库,但是由于它基于key-value结构存储数据,因此多数被应用在内存墙相关的场景下,而非持久保存数据
可以通过官网下载-》https://redis.io,也可以通过国内的中文网下载-》http://www.redis.net.cn/
第一步:安装c语言环境
yum install -y gcc-c++
第二步:上传安装包解压
tar -zxvf redis-3.0.0.tar.gz
第三步:进入redis主目录,执行make命令,编译redis
make
第四步:在主目录下再次运行make生成bin目录
make PREFIX=/opt/redis-3.0.0 install
第五步:在主目录下复制一份redis.conf配置文件,并修改
cp redis.conf redis.conf.bak
vi redis.conf
在配置文件中找到,并修改启动方式配置为后台启动
daemonize yes
第六步:启动
在主目录下启动
./bin/redis-server ./redis.conf
当你查看进程,发现如下进程即安装成功

运行客户端连接redis,并且发送测试用的ping命令,服务器返回PONG
./bin/redis-cli

ES 6
ES的安装必须品有三个:ES服务包、node环境、head界面安装包
第一步:上传ES包解压
tar -zxvf elasticsearch-6.6.2.tar.gz
mv elasticsearch-6.6.2 es-6.2.2
第二步:准备文件夹存放ES的运行数据
mkdir /opt/es-6.2.2/es_datas
mkdir /opt/es-6.2.2/es_datas/data
mkdir /opt/es-6.2.2/es_datas/log
第三步:修改ES的配置文件
vi /opt/es-6.2.2/config/elasticsearch.yml
取消下面配置项注释,并修改
path.data: /opt/es-6.2.2/es_datas/data
path.logs: /opt/es-6.2.2/es_datas/log
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
#下面这三个配置源文件没有手动添加就行
bootstrap.system_call_filter: false
http.cors.enabled: true
http.cors.allow-origin: '*'
第四步:修改系统配置文件
vi /etc/security/limits.conf
追加如下内容
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
vi /etc/sysctl.conf
追加如下内容
vm.max_map_count=262144
vi /etc/security/limits.d/90-nproc.conf
添加如下
* soft nproc 4096
root soft nproc 4096
上面文件配置完后,运行系统命令生效配置
sysctl -p
第五步:ES不允许Root用户开启,我们需要新增一个用户
useradd es
passwd es #这个命令是给es设置密码的
chown -R es:es /opt/es-6.2.2
第六步:重启服务器,并使用es用户登录
reboot
重启后登录es用户
第七步:启动es
/opt/es-6.2.2/bin/elasticsearch
#-d参数可以后台启动
/opt/es-6.2.2/bin/elasticsearch -d
这种方式是前台启动,使用浏览器访问9200端口,出现如下信息,ES服务安装成功

随后停止前台进程关掉ES,我们去安装另外的web页面
ES的图像界面web-head,这个页面和mysql的navicat等价,不过它需要一个nodejs语言环境,因此我们要先安装node,安装的时候先切回root用户
第一步:上传node包并解压
tar xf node-v14.18.1-linux-x64.tar.xz
mv node-v14.18.1-linux-x64/ node-14.18.1
第二步:配置Node环境变量
vi /etc/profile
追加:
export NODE_HOME=/opt/node-14.18
export PATH=$NODE_HOME/bin:$PATH
保存后生效
source /etc/profile
随后检查版本,如果正常输出既安装成功

第三步:安装cnpm命令,并将node的镜像换成淘宝的,注意这一步,需要联网
npm install -g cnpm --registry=https://registry.npm.taobao.org

等待安装完成即可
现在Node环境有了,我们开始安装head
第一步:上传head包并解压
unzip elasticsearch-head-master.zip
mv elasticsearch-head-master head
第二步:进入主目录下执行命令安装
cnpm install

这里有个坑如果你运行安装直接报如下错误

这个是因为你的node版本太低,去下载一个较新的版本就好了,下载的时候注意,之所以让你注意版本,是因为nodejs这个环境巨恶心,版本一堆,但是不同情况下各版本不一定能用,安装ES我一般用14.18.1,其他版本各种报错
第三步:在head 的主目录下,运行启动命令
cnpm run start
运行后日志输出会让你访问一个网址


到此head也就安装完成了,但是我们需要用它连接搭建好的ESServer,那么我们现在开始连接
第一步:克隆一个会话,切换用户
su es
/opt/es-6.2.2/bin/elasticsearch
第二步:复制es服务器访问地址,复制到head界面,点击连接

随后你就可以看到你的ES

我们测试创建一个索引,也就是ES的一个库


成功后,在数据预览中就可以看到这个索引

这里也说一下在ES中,库叫做索引,表叫做类型,字段没有特殊名称
到此整个ES 6 安装结束!
ES 7
由于es6和7底层架构不一样了,所以为应对不同需求装了两套,es7的安装和6区别就在于配置文件某些配置不一样了,其他的没差别
vi /opt/es-7.17.3/config/elasticsearch.yml
取消下面配置项注释,并按个人需要修改
cluster.name: my-application
node.name: hdp2
path.data: /opt/es-7.17.3/es_datas/data
path.logs: /opt/es-7.17.3/es_datas/log
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1"]
cluster.initial_master_nodes: ["hdp2"]
#下面这三个配置源文件没有手动添加就行
bootstrap.system_call_filter: false
http.cors.enabled: true
http.cors.allow-origin: '*'
ES ik分词器
安装方式都一样,注意版本就行,这里使用7.17.3的,之所以要安装ik分词器,是因为ES默认不会整理中文,所以国内有大佬写了ik分词器,下载路径也给大家https://github.com/medcl/elasticsearch-analysis-ik

下载时上图的位置可以选择版本
第一步:ik分词器解压后不止一个路径,为了后期方便使用,我们在es的plugins目录下创建一个ik路径
cd /opt/es-7.17.3/plugins
mkdir ik
cd ik
第二步:上传并解压ik分词器
unzip elasticsearch-analysis-ik-7.17.3.zip
最后重启es服务即可,观察日志你会发现,加载插件的时候会多出一个ik分词器

ES 8 集群版本
本文采用 elasticsearch-8.9.2 安装集群版本,如果各位读者的版本和本文相差太大可能在细节上会有一点不一样,这方面要注意一下
ES集群部署和单节点的部署,在前置操作,比如修改系统内核这些操作是一样的,不同的点是配置文件需要修改为如下配置
# 集群名字所有接地要一致
cluster.name: my-cluster
# 节点标识,每个节点唯一
node.name: node1
# 数据存放路径
path.data: /opt/es-8.9.2/es_datas/data
# 日志存放路径
path.logs: /opt/es-8.9.2/es_datas/log
# 关闭内存检查
bootstrap.memory_lock: false
# 服务监听地址
network.host: 0.0.0.0
# 对外服务接口
http.port: 9200
# 集群所有节点的 IP 列表
discovery.seed_hosts: ["192.168.1.101","192.168.1.102","192.168.1.103"]
# 集群在第一次初始化时为哪些节点初始化主节点身份,写的是node.name,这个配置 7 之前是一个单独的 node.master 布尔值
cluster.initial_master_nodes: ["node1","node2"]
# 证书配置
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
# 服务证书
xpack.security.http.ssl:
enabled: true
keystore.path: certs/http.p12
# 节点之间数据传输证书
xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: certs/transport.p12
truststore.path: certs/transport.p12
# 跨域配置
http.cors.enabled: true
# 这个跨域实际使用时,不要直接写 *
http.cors.allow-origin: '*'
# 非主节点,设置节点角色 data 表示数据节点,ingest表示加工节点
# 主节点不用设置,默认拥有所有角色身份。ingest 负责数据入库前,在这里进行清洗、格式转换、字段提取等操作,当你的集群要负责的数据量很大时,酌情让其他部分数据节点同样持有该角色即可
node.roles: [data,ingest]
证书,要单独强调,初始安装包的配置文件,没有证书配置项,在初始化阶段会自动生成,但是通常手动创建,并放在 es 配置路径下,创建 certs 路径,证书本身可以用一套,生成方法是将 pem 格式的证书,通过如下命令转换成 p12 格式
openssl pkcs12 -export -in server.crt -inkey server-key.pem -out server.p12 -password pass: -passin pass:私钥密码
-in server.crt 你的证书文件(PEM 格式)
-inkey server-key.pem 你的私钥文件(PEM 格式)
-out server.p12 输出的文件名
-password pass: 冒号后面为空,表示不设置密码
-passin pass:私钥密码 私钥没有密码可以不带
# 查看证书信息(会提示输入密码,如果无密码直接回车)
openssl pkcs12 -info -in server.p12 -noout
不止传输、服务可以用一个证书,所有节点默认都可以使用同一个证书,因为 ES 8 通讯时默认只检查是否同一个 CA verification_mode: certificate
在启动节点,一定要先前台启动测试,先启动主节点,当主节点都启动,主节点中的 active 节点选举完成,在 active 节点的控制台会输出如下的东西
✅ Elasticsearch security features have been automatically configured!
✅ Authentication is enabled and cluster connections are encrypted.
ℹ️ Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):
Ymgv6wPKOj-_uomykA*U
ℹ️ HTTP CA certificate SHA-256 fingerprint:
8a49caf91b0d90b473901be9241fe8e37297b4df99a6d01dd0ac2e05cf12a92e
ℹ️ Configure Kibana to use this cluster:
• Run Kibana and click the configuration link in the terminal when Kibana starts.
• Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjkuMiIsImFkciI6WyIxOTIuMTY4LjEuMTAxOjkyMDAiXSwiZmdyIjoiOGE0OWNhZjkxYjBkOTBiNDczOTAxYmU5MjQxZmU4ZTM3Mjk3YjRkZjk5YTZkMDFkZDBhYzJlMDVjZjEyYTkyZSIsImtleSI6Ik9uSkotWjRCdF96MS1NWjktMWF0OmxKZTVhWVdmVERPSDdTS1h3V0trZFEifQ==
ℹ️ Configure other nodes to join this cluster:
• Copy the following enrollment token and start new Elasticsearch nodes with `bin/elasticsearch --enrollment-token <token>` (valid for the next 30 minutes):
eyJ2ZXIiOiI4LjkuMiIsImFkciI6WyIxOTIuMTY4LjEuMTAxOjkyMDAiXSwiZmdyIjoiOGE0OWNhZjkxYjBkOTBiNDczOTAxYmU5MjQxZmU4ZTM3Mjk3YjRkZjk5YTZkMDFkZDBhYzJlMDVjZjEyYTkyZSIsImtleSI6Ik8zSkotWjRCdF96MS1NWjktMWF0OmJTanZQTkRRUms2TExUVUZvR0pWMWcifQ==
If you're running in Docker, copy the enrollment token and run:
`docker run -e "ENROLLMENT_TOKEN=<token>" docker.elastic.co/elasticsearch/elasticsearch:8.9.2`
你要记住的是Ymgv6wPKOj-_uomykA*U,它是连接集群的初始密码,你需要通过bin/elasticsearch-reset-password -u elastic 重置密码。重置时注意一个事情,上面说了 ES 只校验证书的 CA 因此如果你是图方便从其他节点同步了证书,则一定要在证书源头节点上执行,虽然命令有 curl 参数,但是不能在这种场景下使用
[root@9895507f4228 es-8.9.2]# bin/elasticsearch-reset-password -u elastic
This tool will reset the password of the [elastic] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]y
Password for the [elastic] user successfully reset.
New value: vVKTuBhU2B+Gb*kYcV1O
集群列表通过接口查看。说一个要点,操作ES接口的时候,你可以向任何节点发出请求,内部会转发给主节点
[root@9895507f4228 es-8.9.2]# curl -k -u elastic:'vVKTuBhU2B+Gb*kYcV1O' -X GET "https://192.168.1.101:9200/_cat/nodes?v"
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.1.103 23 49 0 0.00 0.02 0.00 di - node3
192.168.1.102 27 49 0 0.00 0.02 0.00 cdfhilmrstw * node2
192.168.1.101 7 49 0 0.00 0.02 0.00 cdfhilmrstw - node1
最后要说一点重要的事情,其他的服务,比如 Redis 它有备份节点这种机制,但是 ES 的备份取决于创建索引库是的配置指定,你也可以理解为节点坏了,但索引库有备份,那节点坏了就坏了,如果没备份,节点坏了上面的数据,可能有丢了
springboot 的数据Bean可以用注解的方式指定
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Setting;
@Document(indexName = "your_index_name")
@Setting(replicas = 2) // 显式指定副本数为 2
public class YourEntity {
// ... 你的实体字段
}
手动创建测试索引时也可以指定
# -k 是跳过证书认证,因为用的是自签证书 curl 会报错
[root@9895507f4228 es-8.9.2]# curl -k -u elastic:'vVKTuBhU2B+Gb*kYcV1O' -X PUT "https://192.168.1.101:9200/my_index" \
> -H "Content-Type: application/json" \
> -d '{
> "settings": {
> "number_of_shards": 1,
> "number_of_replicas": 1
> }
> }'
{"acknowledged":true,"shards_acknowledged":true,"index":"my_index"}
# 查询索引,返回结果中会包含 "number_of_replicas" : "1",这就说明默认是 1,也就是这个索引有一个备份。
[root@9895507f4228 es-8.9.2]# curl -k -u elastic:'vVKTuBhU2B+Gb*kYcV1O' -X GET "https://192.168.1.101:9200/_settings?pretty"
{
"my_index" : {
"settings" : {
"index" : {
"routing" : {
"allocation" : {
"include" : {
"_tier_preference" : "data_content"
}
}
},
"number_of_shards" : "1",
"provided_name" : "my_index",
"creation_date" : "1782310243204",
"number_of_replicas" : "1",
"uuid" : "ujjJGpV1Tm2Q4KOxAIX5bw",
"version" : {
"created" : "8090299"
}
}
}
}
}
# 修改索引,只能通过命令行。且索引必须处于打开状态也就是不能是操作过 POST /my_index/_close ,如果是,需要先打开 POST /my-index/_open
curl curl -k -u elastic:'vVKTuBhU2B+Gb*kYcV1O' -X PUT "192.168.1.101:9200/my_index/_settings" -H 'Content-Type: application/json' -d'
{
"index": {
"number_of_replicas": 2
}
}'
除了备份,索引的主分片的个数也很重要,number_of_shards, es写入数据的时候,是通过索引 id 来哈希决定这条数据要写到哪个分片上,随后同步写入副本节点,如果你的分片只有一个,那么就会始终写到一个节点上,一旦这个节点坏了,那么数据恢复的成本会很大。一个索引创建的时候es会自动尽量的把分片均摊到所有节点上
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Setting;
@Document(indexName = "your_index_name")
@Setting(shards = 3) // 指定主分片数为 3
public class YourEntity {
// ... 你的实体字段
}
第一篇https://blog.csdn.net/dudadudadd/article/details/109647930
第二篇https://blog.csdn.net/dudadudadd/article/details/109659923
第四篇https://blog.csdn.net/dudadudadd/article/details/109719624
第五篇https://blog.csdn.net/dudadudadd/article/details/109726023
第六篇https://blog.csdn.net/dudadudadd/article/details/109744195
790

被折叠的 条评论
为什么被折叠?



