构建elasticsearch集群,故障转移扩容,引入中文分词,可视化界面,es 增删改查

1.搭建elasticsearch集群

该elasticsearch集群是基于docker镜像进行搭建
引入 需要的镜像

docker pull elasticsearch:7.6.1 
docker pull kibana:7.6.1

1.1. 配置

master

cluster.name: elasticsearch-cluster 
node.name: es-master-10 
network.host: 0.0.0.0 
network.publish_host: 180.200.7.10 
http.port: 9200 
transport.tcp.port: 9300 
http.cors.enabled: true 
http.cors.allow-origin: "*" 
node.master: true 
node.data: true 
discovery.zen.ping.unicast.hosts: ["180.200.7.10:9300","180.200.7.101:9300","180.200.7.102:9300"] discovery.zen.minimum_master_nodes: 1 
cluster.initial_master_nodes: es-master-10

slave

cluster.name: elasticsearch-cluster 
node.name: es-node-101
network.host: 0.0.0.0 
network.publish_host: 180.200.7.101 
http.port: 9200 
transport.tcp.port: 9300 
http.cors.enabled: true 
http.cors.allow-origin: "*" 
node.master: true 
node.data: true 
discovery.zen.ping.unicast.hosts: ["180.200.7.10:9300","180.200.7.101:9300","180.200.7.102:9300"]
discovery.zen.minimum_master_nodes: 1

对应的docker-composer

version: '3.6' 
services:
	es_master_180_10:    
		image: elasticsearch:7.6.1    
		container_name: es_master_180_10    
		environment:
			- "ES_JAVA_OPTS=-Xms512m -Xmx512m"    
		volumes:
			- /www/wwwroot/2007_SRM/elasticsearch/master_10/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml      
			- /www/wwwroot/2007_SRM/elasticsearch/slave_11/data:/usr/share/elasticsearch/data    
		privileged: true    
		ports:
			- 9210:9200      
			- 9310:9300    
		networks:
			es:        
				ipv4_address: 180.200.7.10  
	es_slave_11:    
		image: elasticsearch:7.6.1    
		container_name: es_slave_11    
		environment:      
			- "ES_JAVA_OPTS=-Xms512m -Xmx512m"    
		volumes:      
			- /www/wwwroot/2007_SRM/elasticsearch/slave_11/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
			- /www/wwwroot/2007_SRM/elasticsearch/slave_11/data:/usr/share/elasticsearch/data    
		privileged: true    
		ports:      
			- 9211:9200      
			- 9311:9300    
		networks:      
			es:        
				ipv4_address: 180.200.7.11  
	es_slave_12:    
		image: elasticsearch:7.6.1   
		container_name: es_slave_12   
		environment:      
			- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
		volumes:
			- /www/wwwroot/2007_SRM/elasticsearch/slave_12/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
			- /www/wwwroot/2007_SRM/elasticsearch/slave_11/data:/usr/share/elasticsearch/data 
		privileged: true    
		ports:      
			- 9212:9200      
			- 9312:9300    
		networks:      
			es:        
				ipv4_address: 180.200.7.12 
	networks:  
		es:    
			driver: bridge    
			ipam:      
				config:        
					- subnet: "180.200.7.0/24"

1.2. 构建集群注意事项

  1. 一个es的容器在构建的时候是需要系统提供200M的内存(建议实现)
  2. 系统需要配置 sysctl -w vm.max_map_count=262144 参考地址 https://www .jianshu.com/p/79946b7a9c48 3. 配置es的共享目录的时候需要给文件操作的权限777

2. 理解es集群

请求创建
http://192.168.169.120:9210/address

 {    
 "settings":{ 
        "number_of_shards"  : 3,   //定义3个分片
        "number_of_replicas": 1    //1个副本集
        },
 "mappings":{
        "properties":{
             "id"      :{"type":"keyword"},                
             "country" :{"type":"keyword"},                
             "province":{"type":"keyword"},                
             "city"    :{"type":"keyword"},                
             "address1":{"type":"text"},                
             "remark"  :{"type":"text"}           
         }        
       }
}

http://192.168.169.120:9210/es_name

{    
"settings":{ 
       "number_of_shards"  : 3,
       "number_of_replicas": 1   
        },   
"mappings":{ 
       "properties":{ 
                      "id"      :{"type":"keyword"},               
                      "country" :{"type":"keyword"},               
                      "province":{"type":"keyword"},               
                      "city"    :{"type":"keyword"},               
                      "address1":{"type":"text"},               
                      "remark"  :{"type":"text"}            
                  }       
          } 
}

如图所示,

  1. 分片结构:这个索引一共有6个分片,3个shard分片集,每个shard有1个replica副本集,所以一共就有6个分片集,es是基于Lucene内核的,这6个分片集,就是6 个Lucene内核。
  2. 分片分布: 3个shard会自动分布在3台服务器上,大家可以看到,每台服务器上分布的分片数量是一样多,这个均衡分布是es内部机制完成的, 另外, shard对应 的replica是不会在同一台机器上面的。如上图,shard1是不可能和replica1放在一台机器上的,这样一台机器奔溃了,还有备胎在其它机器上。
  3. 主从节点: 如上图, 我们有es-node1为master节点,es-node2和es-node3为从节点。我们的主节点,负责管理:集群范围内的所有变更,例如增加、删除索 引,或者增加、删除节点等。但是,主节点并不处理文档级别的增删改查。

3.用户请求方式

在这里插入图片描述
如图,不论我们有多少个es实例,当用户需要对es进行增删改查的时候,连接任何一台节点都行,es内部会进行转发。这也是es集群的个性之一。

4.故障转移与扩容

故障转移
假设我们es-node1挂了,集群中会发生什么呢?具体会发生这2个动作:
其一: 因为es-node1是master节点,所以es会自动重新选举一名master。
其二: 因为es-node1上面的shard1和replica3挂了,新的master会把node2上的replica-1提升为shard1.
这样,整个集群还是正常进行的

扩容
这个过程,用户不需要做什么,只需要增加节点到集群就行了
在这里插入图片描述

5. 引入中文分词

生成镜像的dockerfile文件

FROM elasticsearch:7.6.1
COPY ./elasticsearch-analysis-ik-7.6.1.zip /usr/share/elasticsearch/plugins/
RUN cd /usr/share/elasticsearch/plugins \
  && mkdir ik \  
  && mv elasticsearch-analysis-ik-7.6.1.zip ik/ \  
  && cd ik \  
  && unzip elasticsearch-analysis-ik-7.6.1.zip \  
  && rm -rf elasticsearch-analysis-ik-7.6.1.zip

6.引入Kibara

kibana是es的一个可视化工具,提供了友好的可视化查看和操作页面,同学们可以简单的理解为类似于mysql的phpadmin。
现在我们来创建一个kibana容器:添加到docker-compose中,重新执行一次docker-compose

# ... 
	kibana:
		image: kibana:7.6.1  
		container_name: kibana  
		environment:    
			- "ELASTICSEARCH_HOSTS=http://180.200.7.12:9200"    
			- "SERVER_PORT=5601"
			- "SERVER_HOST=0.0.0.0"
		ports:    
			- 5601:5601  
		networks:   
			es:      
				ipv4_address: 180.200.7.13
	# ...

接下来,我们就可以用浏览器进入kibana界面了。
下面这个是kibana的控制台界面,我们可以在左边输入内容,右边会显示执行结果。→ 这是官方推荐
在这里插入图片描述
其他可视化工具:head,kibana,elasticHD

7. es 增删改查

7.1 创建商品列表索引

请求地址:http://ip:端口/索引名称
索引名称必须小写
http方法:PUT

实操:
http://ip:9200/goods_list

{    
	"settings":{
	        "number_of_shards":2,        
	        "number_of_replicas":1
	 },    
	 "mappings":{ 
	        "properties":{                
		        "id":{"type":"integer"},                
		        "goods_name":{"type":"text"},                
		        "goods_description":{"type":"text"},                
		        "goods_info":{"type":"text"}            
	        }        
	} 
}

参数详解:
number_of_shards:分片数量。
number_of_replicas:副本数量。

注意:默认情况下添加数据时,如果指定的某个字段不存在时,es会自动创建该字段

7.2 指定id,不存在则创建,存在则更新

请求地址:http://ip:端口/索引名/_doc/商品id
上面这里不添加id就自动生成
http方法:PUT

实操:
GET /goods_list/_doc/123

{ 
	 "id": "123",  
	"goods_name": "测试商品的名称",  
	"goods_description": "测试商品的描述",  
	"goods_info": "。。。" 
}

7.3 查询数据

GET /goods_list/_search/ 
{  
	"query": {   
	 	"bool": {     
	 		 "must": [{        
	   		 "match": { 
	               "goods_name": "测试商品的名称"         
	                }        
	          }]    
	    } 
	} 
}

返回:

{  
"took" : 5,  
"timed_out" : false,  
"_shards" : {
    "total" : 2,    
    "successful" : 2,    
    "skipped" : 0,
    "failed" : 0  
    },  
"hits" : {
    "total" : { 
         "value" : 1,     
         "relation" : "eq"    
         },    
    "max_score" : 0.2876821,    
    "hits" : [
          {        
          "_index" : "goods_list",        
          "_type" : "_doc",        
          "_id" : "123",        
          "_score" : 0.2876821,       
          "_source" : {
                    "id" : "123",          
                    "goods_name" : "测试商品的名称",          
                    "goods_description" : "测试商品的描述",          
                    "goods_info" : "。。。"        
                    }      
         }    
         ]  
    } 
}

7.4 修改数据

POST /goods_list/_update_by_query/ 
{  
"query": {
    "bool": {
          "must": [
                  {
                      "term": { 
                                 "goods_name": "测试商品的名称"          
                        }        
                   }      
                   ]    
            }  
          },  
"script": {
    "source": "ctx._source.goods_name='测试商品的名称1'"  
    } 
}

7.5 删除数据

POST /goods_list/_delete_by_query/ 
{  
	"query": {    
		"bool": {      
			"must": [        
				{          
					"term": {
					"goods_name": "测试商品的名称1" 
					}   
				}    
			]    
		}  
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值