range

If there were you, the world would be just right

ik分词器安装 声明:安装完成后需要重新启动elasticsearch,elasticsearch-head,kibana

1.进入elasticsearch目录

# git文档查看 https://github.com/medcl/elasticsearch-analysis-ik

#执行安装
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.6.1/elasticsearch-analysis-ik-7.6.1.zip

2.重启es

3.elasticsearch-plugin list 可以通过这个命令来查看加载进来的插件


下载解压,主要kibana版本需要跟es版本一致

wget https://artifacts.elastic.co/downloads/kibana/kibana-7.6.1-linux-x86_64.tar.gz

tar -zxvf kibana-7.6.1-linux-x86_64.tar.gz

1. 修改kibana配置文件kibana.yml

vim config/kibana.yml

# 追加配置如下:
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://192.168.16.199:9200"]
i18n.locale: "zh-CN" #汉化

4. 启动kibana

#后台启动
nohup  ./kibana --allow-root  &

一、内存回收策略

1. 删除到达时间的键对象。 
2. 内存使用达到maxmemory上限时触发内存溢出控制策略。

二、持久化

持久化的功能:Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令) 从内 存保存到硬盘。 当下次Redis重启时,利用持久化文件实现数据恢复。除此之外,为了进行灾难备份,可以将持久化文件拷贝到一个远程位置。Redis持久化 分为 RDB持久化和AOF持久化,前者将当前数据保存到硬盘,后者则是将每次执行的写命令保存到硬盘。

2.1. RDB持久化
    RDB是一种快照存储持久化方式,具体就是将Redis某一时刻的内存数据保存到硬盘的文件当中,默认保存的文件名为dump.rdb,而在Redis服务器启动时,会重新 加载dump.rdb文件的数据到内存当中恢复数据。触发 RDB 持久化过程分为手动触发和自动触发。

    手动触发分别对应 save 和 bgsave 命令 
        save 命令:阻塞当前 Redis 服务器,直到 RDB 过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上环境不建议使用。 
        bgsave 命令:Redis 进程执行 fork 操作创建子进程,RDB 持久化过程由子进程负责,完成后自动结束。阻塞只发生在 fork 阶段,一般时间很短。显然 bgsave 命令是针对 save 阻塞问题做的优化。因此 Redis 内部所有的涉及 RDB 的操作都采用 bgsave 的方式 
    除了执行命令手动触发之外,Redis 内部还存在自动触发RDB 的持久化机制,例如以下场景: 
        1. 使用 save 相关配置,如“save m n”。表示 m 秒内数据集存在 n 次修改时,自动触发 bgsave。 
        2. 如果从节点执行全量复制操作,主节点自动执行 bgsave 生成 RDB 文件并发送给从节点。 
        3. 执行 debug reload 命令重新加载 Redis 时,也会自动触发 save 操作。 
        4. 默认情况下执行shutdown命令时,如果没有开启 AOF 持久化功能则自动执行 bgsave

2.2 AOF持久化
    AOF(append only file)持久化:与RDB存储某个时刻的快照不同,AOF持久化方式会记录客户端对服务器的每一次写操作命令到日志当中,并将这些写操作 以 Redis协议追加保存到以后缀为aof文件末尾。
    开启 AOF 功能需要设置配置:appendonly yes,默认不开启。AOF 文件名通过 appendfilename 配置设置,默认文件名是 appendonly.aof。保存路径同 RDB 持久 化方式一致,通过 dir 配置指定

三、redis主从

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave),数据的复制是单向的,只能由主节点到 从节点。 

默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

Redis 复制问题,当主机 Master 宕机以后,我们需要人工解决切换,比如使用 slaveof no one 。实际上主从复制并没有实现 高可用。

四、哨兵机制

redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工讲从节点晋升为主节点,同时还要通知应用方更新主节点地址,那这就会存在着问题;哨兵 就是来处理这个问题的
    1. 主节点发生故障后,客户端连接主节点失败,两个从节点与主节点连接失败造成复制中断 
    2. 如果主节点无法正常确定,需要选出一个从节点升级为主节点,对它执行 slaveof no one 命令 
    3. 原来的从节点成为新的主节点后,更细应用方的主节点信息,重新启动应用方 
    4. 客户端命令另外一个从节点去复制新的主节点 
    5. 待原来的主节点恢复后,让它去复制新的主节点。

五、Redis 集群

Redis Cluster 是 Redis 的分布式解决方案,在3.0版本正式推出,有效地解决了 Redis 分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用 Cluster 架构方案达到负载均衡的目的。

使用集群好处
    1、将数据自动切分到多个节点的能力。
    2、当集群中的一部分节点失效或者无法进行通讯时,仍然可以继续处理命令请求的能力,拥有自动故障转移的能力。

创建一个新的索引库

PUT /leyou
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  }
}

查看索引信息

GET /leyou

删除索引库

DELETE /leyou

添加映射(mappings),ps:等同数据库建表

# 参数说明
PUT /索引库名/_mapping    #(自7.0起取消了Type,不需要加索引类型名,统一为_doc)
{
  "properties": {
    "字段名": {
      "type": "类型",        # 类型:可以是text、long、short、date、integer、object等
      "index": true,        # 是否索引,默认为true
      "store": true,        # 是否存储,默认为false
      "analyzer": "分词器"   # 分词器 使用ik分词器: ik_max_word 会将文本做最细粒度的拆分,ik_smart 会做最粗粒度的拆分
    }
  }
}

# 常用类型
1 String类型,分两种:
  text: 可分词,不可参与聚合
  keyword: 不可分词,数据会作为完整字段进行匹配,可以参与聚合
    
2 Numerical数值类型,分两种:
  基本数据类型:long、interger、short、byte、double、float、half_float
  浮点数的高精度类型:scaled_float 需要指定一个精度因子,比如10或100。elasticsearch会把真实值乘以这个因子后存储,取出时再还原。

3 日期类型: 
  Date elasticsearch可以对日期格式化为字符串存储,但是建议我们存储为毫秒值,存储为long,节省空间。

# 使用示例
PUT /leyou/_mapping
{
  "properties":{
    "title":{
      "type": "text",
      "analyzer": "ik_max_word"
    },
    "images":{
      "type": "keyword",
      "index": "false"
    },
    "price":{
      "type":"float"
    }
  }
}

查看索引库的索引类型

GET /leyou/_mapping

阅读剩余部分...


elasticsearch是什么东西,请自行百度。此处只是记录一下安装所需要操作日志。
0: 安装java环境
0.1.先查看本地是否自带java环境:

yum list installed |grep java

0.2.卸载自带的java(输入su,输入root超级管理员的密码,切换到root用户模式)

yum -y remove java-1.8.0-openjdk* 

yum -y remove tzdata-java*

0.3.查看yum仓库中的java安装包

yum -y list java*

0.4.安装java:

yum -y install java-1.8.0-openjdk*

0.5.查找Java安装路径

which java

ls -lrt /usr/bin/java(也就是上一步查询出来的路径),然后回车

输入ls -lrt /etc/alternatives/java(也就是上一步查询出来的路径),然后回车

从路径中可以看到在jvm目录下,输入cd /usr/lib/jvm,跳转到jvm的目录

输入ls 列出当前目录下的文件和文件夹

0.6.配置Java环境变量

输入vi /etc/profile去编辑环境变量

添加如下:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export JRE_HOME=$JAVA_HOME/jre  
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib

保存退出

输入source /etc/profile,使配置立即生效

0.7.检查Java安装和配置情况 输入java -version,然后回车

1、创建用户 es(必须)

#使用root用户的操作 添加一个用户,叫做es
useradd es 
#设置密码
passwd es

1.1、创建文件目录

# 使用root用户创建目录
mkdir -p /data/es/servers
mkdir -p /data/es/data
mkdir -p /data/es/logs
# 将目录的权限分配给es用户
chown -R es /data/es/servers
chown -R es /data/es/data
chown -R es /data/es/logs

2、下载安装包

切换到es用户下,下载安装包
su es
# 进入Home目录
cd 
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.1-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.6.1-linux-x86_64.tar.gz -C /data/es/servers

3 修改配置文件

cd /data/es/servers/elasticsearch-7.6.1/config
vi elasticsearch.yml

# 追加内容
cluster.name: my-application
node.name: node-1
path.data: /data/es/data
path.logs: /data/es/logs
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]

4、启动

nohup /data/es/servers/elasticsearch-7.6.1/bin/elasticsearch >/dev/null 2>&1 &

5、 查看错误信息-(无报错则忽略)

tail -100f /data/es/logs/my-application.log 
ERROR: [1] bootstrap checks failed
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

修改/etc/security/limits.conf在最后追加

* soft nofile 65536
* hard nofile 65536
修改/etc/sysctl.conf在最后追加

vm.max_map_count=655360

保存后,执行:
sysctl -p
重新切换es用户,重启elasticsearch

6、访问es

http://IP:9200

9200.png

使用

1.1 创建索引

curl -XPUT http://ip:9200/blog01/?pretty

1.2 插入文档

curl -XPUT http://ip:9200/blog01/article/1?pretty -d  '{"id": "1", "title": "What is lucene"}' -H "Content-Type: application/json"

1.3 查询文档

curl -XGET "http://ip:9200/blog01/article/1?pretty" -H "Content-Type: application/json"

1.4 更新文档

curl -XPUT http://ip:9200/blog01/article/1?pretty -d  '{"id": "1", "title": " What is elasticsearch"}' -H "Content-Type: application/json"

1.5 搜索文档

curl -XGET "http://ip:9200/blog01/article/1?pretty" -H "Content-Type: application/json"
curl -XGET "http://ip:9200/blog01/article/_search?q=title:'elasticsearch'&pretty" -H "Content-Type: application/json"

1.6 删除文档

curl -XDELETE "http://ip:9200/blog01/article/1?pretty"

1.7 删除索引

curl -XDELETE "http://ip:9200/blog01?pretty"