大数据原生集群 (Hadoop2.X为核心) 本地测试环境搭建三

本篇安装软件

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&amp;useUnicode=true&amp;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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值