栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

step05 day15 学习笔记

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

step05 day15 学习笔记

1.传统hash,一致性hash与hash槽

1.1 传统哈希(硬哈希)

分布式系统中,假设有 n 个节点,传统方案使用 mod(key, n) 映射数据和节点。
当扩容或缩容时(哪怕只是增减1个节点),映射关系变为 mod(key, n+1) / mod(key, n-1),绝大多数数据的映射关系都会失效。

1.2一致性哈希(Consistent Hashing)

一致性哈希和随机树:用于缓解万维网上热点的分布式缓存协议)》,对于 K 个关键字和 n 个槽位(分布式系统中的节点)的哈希表,增减槽位后,平均只需对 K/n 个关键字重新映射。

要点:

公用哈希函数和哈希环

节点(Node)映射至哈希环

对象(Object)映射于哈希环

删除节点:服务器缩容时删除节点,或者有节点宕机。只需修改前一个节点即可

增加节点;服务点在 Node B/C 之间增加节点 Node X:只会影响欲新增节点(Node X)与上一个(顺时针为前进方向)节点(Node B)与之间的对象,也就是 Object C,

1.3 哈希槽


一个 redis 集群包含 16384 个哈希槽(hash slot),数据库中的每个数据都属于这16384个哈希槽中的一个。集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽。集群中的每一个节点负责处理一部分哈希槽。

slot返回有关哪个集群插槽映射到哪个redis实例的详细信息。该命令适用于redis集群客户端库实现,以便检索(或在收到重定向时更新)将集群散列槽与实际节点网络坐标(由ip地址和tcp端口组成)关联的映射,以便在接收到命令时,可以将其发送到命令中指定的键的正确实例。
 

 2. Tomcat连接mysql

数据库连mysql图示

 2..1  连接前准备

连接前删除docker内所有容器,并创立网段。

docker network rm my-net 删除之前的网段

docker rm -f $(docker ps -aq) 删除所有容器

docker network create dockernet --subnet=172.18.0.0/24 创建网段

docker network ls

ifconfig

2.2 启动mysql容器

在虚拟机中启动数据库,并·挂载数据卷,导入sql

docker volume create mysql-data 创建数据卷(类似于计算机中的数据库)

docker run -d --name mysql 
-p 3306:3306 
--restart=always 
-v mysql-data: /var/lib/mysql 数据库挂载
-e MYSQL_ROOT_PASSWORD=root  设置管理员密码
--net=dockernet  
--ip=172.18.0.11  手动指定ip
mariadb

连接后导入sql文件

2.3 启动tomcat容器

docker run -d --name web 
--restart=always 
-v /opt/esaymall:/usr/local/tomcat/webapps 
-p 80:8080 --net=dockernet --ip=172.18.0.12 
tomcat

2.4 访问测试

访问以下网址::http://192.168.64.150

3 .Elastic Search (ES) 

天然支持分布式检索,可运用于大量文本缓存的存储,和redis,mongodb同为非关系型数据库

ES常用于商品大量文本信息的存储,并部署在分布式的网络之中。

 3.1 ES服务器准备
  1. 克隆 docker-base: es

  2. 虚拟机内存设置成 2G 或以上

  3. 修改系统底层参数----说明:会在后边文件cat中显示

    echo 'vm.max_map_count=262144' >>/etc/sysctl.conf
  4. 重启服务器: shutdown -r now 即重启虚拟机

  5. 设置ip: 192.168.64.181

  6. 上传文件到 /root/

  7. 执行对应的操作

3.2 安装ES及分布式部署

3.2.1.安装启动服务器

3.3 Ik中文分词器及内部机制 安装服务器

1./root/ 中导入 elasticsearch-analysis-ik-7.9.3.zip
2.复制分词器到三个容器

# 复制 ik 分词器到三个 es 容器
docker cp elasticsearch-analysis-ik-7.9.3.zip node1:/root/
docker cp elasticsearch-analysis-ik-7.9.3.zip node2:/root/
docker cp elasticsearch-analysis-ik-7.9.3.zip node3:/root/

3.安装分词器

# 在 node1 中安装 ik 分词器
docker exec -it node1 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip

# 在 node2 中安装 ik 分词器
docker exec -it node2 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip

# 在 node3 中安装 ik 分词器
docker exec -it node3 elasticsearch-plugin install file:///root/elasticsearch-analysis-ik-7.9.3.zip

# 重启三个 es 容器
docker restart node1 node2 node3

4.查看安装结果

在浏览器中访问 http://192.168.64.181:9200/_cat/plugins

安装客户端插件


1.网页插件中加入es-head.crx.zip

2.开发者模式运行使用

 ik分词测试

ik_max_word 最细细粒度拆分

{
  "analyzer":"ik_max_word",
  "text":"中华人民共和国国歌"
}

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合,适合 Term Query;

ik_smart   最粗细粒度拆分

{
  "analyzer":"ik_max_word",
  "text":"中华人民共和国国歌"
}

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。

3.4  使用 Kibana 操作 ES 安装kibana

1.下载Kibana镜像

docker pull kibana:7.9.3

2.启动 Kibana 容器

docker run -d --name kibana 
--net es-net -p 5601:5601 
-e ELASTICSEARCH_HOSTS='["http://node1:9200","http://node2:9200","http://node3:9200"]' 
--restart=always kibana:7.9.3

3.访问测试

浏览器访问 Kibana,进入 Dev Tools:
http://192.168.64.181:5601/

 索引、分片和副本

索引:Elasticsearch索引用来存储我们要搜索的数据,以倒排索引结构进行存储。

索引分片:在一个索引中存储大量数据会造成性能下降,这时可以对数据进行分片存储。

 示例:设置索引参数

索引副本:对分片创建多个副本,那么即使一个节点宕机,其他节点中的副本分片还可以继续工作,不会造成数据不可用。

分片的工作机制:

  1. 主分片的数据会复制到副本分片
  2. 搜索时,以负载均衡的方式工作,提高处理能力
  3. 主分片宕机时,其中一个副本分片会自动提升为主分片

 映射(数据结构)

类似于数据库表结构,索引数据也被分为多个数据字段,并且需要设置数据类型和其他属性。

映射,是对索引中字段结构的定义和描述。

字段的数据类型
  • 数字类型:

    • byte、short、integer、long
    • float、double
    • unsigned_long
  • 字符串类型:

    • text : 会进行分词
    • keyword : 不会进行分词,适用于email、主机地址、邮编等
  • 日期和时间类型:

    • date

类型参考:

Field data types | Elasticsearch Guide [7.15] | Elastic

创建映射

分词器设置:

analyzer:在索引中添加文档时,text类型通过指定的分词器分词后,再插入倒排索引
search_analyzer:使用关键词检索时,使用指定的分词器对关键词进行分词
查询时,关键词优先使用 search_analyzer 设置的分词器,如果 search_analyzer 不存在则使用 analyzer 分词器。

# 定义mapping,数据结构
PUT /products/_mapping
{
  "properties": {
    "id": {
      "type": "long"
    },
    "title": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_smart"
    },
    "category": {
      "type": "text",
      "analyzer": "ik_smart",
      "search_analyzer": "ik_smart"
    },
    "price": {
      "type": "float"
    },
    "city": {
      "type": "text",
      "analyzer": "ik_smart",
      "search_analyzer": "ik_smart"
    },
    "barcode": {
      "type": "keyword"
    }
  }
}

 存储文档分词

文档操作

添加文档:”添加的文档会有一个名为_id的文档id,这个文档id可以自动生成,也可以手动指定,通常可以使用数据的id作为文档id。

查看文档:

#查看文档
GET /products/_doc/10037

#查看指定文档title字段的分词结果
GET /products/_doc/10037/_termvectors?fields=title

修改文档:

PUT:对文档进行完整的替换
POST:可以修改一部分字段

# 修改文档 - 替换
PUT /products/_doc/10037
{
  "id":"10037",
  "title":"SonOS PLAY:1无线智能音响系统 美国原创WiFi连接 家庭桌面音箱",
  "category":"潮酷数码会场",
  "price":"9999.99",
  "city":"上海",
  "barcode":"527783392239"
}


# 修改文档 - 更新部分字段
POST /products/_update/10037
{
  "doc": {
    "price":"8888.88",
    "city":"深圳"
  }
}

删除文档:

#按id删除消息
DELETE /products/_doc/10037 

#清空队列
POST /products/_delete_by_query
{
  "query": {
    "match_all": {}
  }
}

# 删除 products 索引
DELETE /products

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/277560.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号