当前位置:网站首页 > R语言数据分析 > 正文

elasticsearch集群(多机版)

前言:由于考虑到elasticsearch单节点的不稳定性和服务的高可用性,随着用户量和数据量的增加,elasticsearch需要搭建集群,集群的优点这里就不赘述了。

一、准备环境

1.192.168.11.24 和192.168.11.25(需要安装java环境)

2.elastisearch安装包:elasticsearch-6.2.2.tar.gz,

3.两个服务器上需要创建es权限的非root用户,以上不会的可以参考我之前的博客:centos服务器配置elasticsearch

在服务器上将安装包拷贝出来一份,我的es安装目录在/usr/local下,所以我在该目录下建立一个slave目录用于存放需要集群的es。

二、搭建集群环境

1.集群概况:

服务器ip 节点名称 是否为主节点 是否为数据节点
192.168.11.24 master
192.168.11.25 slave-1
192.168.11.25 slave-2

 

2.配置主节点

集群名称,每个节点配置成一样的名称才能形成正确的集群 cluster.name: htflsys 节点名称,每个节点配置不同名称 node.name: master 是否主节点 node.master: true 是否数据节点 node.data: true 单机最大节点数 node.max_local_storage_nodes: 3 索引数据的存储路径(可自定义,我这里不设置就默认安装路径) #path.data: /usr/local/es/data 日志文件的存储路径(可自定义,我这里不设置就默认安装路径) #path.logs: /usr/local/es/logs 启动时锁定内存,设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap bootstrap.memory_lock: true bootstrap.system_call_filter: false 绑定的ip地址 network.host: 192.168.11.24 设置对外服务的http端口,默认为9200 http.port: 9200 设置节点间交互的tcp端口,默认是9300 transport.tcp.port: 9300 transport.tcp.compress: true 设置集群中节点的初始列表,可以通过这些节点来自动发现新加入集群的节点 discovery.zen.ping.unicast.hosts: ["192.168.11.24:9300","192.168.11.25:9300","192.168.11.25:9301"] 防止脑裂现象,如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 这将导致数据丢失(单个master无需设置,如果是3个master需设置成2)(N/2)+1 #discovery.zen.minimum_master_nodes: 2 #在删除索引时,是否需要明确指定名称,该值为false时,将可以通过正则或_all进行所以 删除 #action.destructive_requires_name: true 防止同一个shard的主副本存在同一个物理机上 cluster.routing.allocation.same_shard.host: true

3.重启成功节点信息截图(由于我原始数据快照问题出现Unassigned请忽略):

4.配置子节点

需要修改的参数有:node-name、node-master、network.host、http.port、transport.tcp.port

子节点1配置如下:

集群名称,每个节点配置成一样的名称才能形成正确的集群 cluster.name: htflsys 节点名称,每个节点配置不同名称 node.name: slave-node1 是否主节点 node.master: false 是否数据节点 node.data: true 单机最大节点数 node.max_local_storage_nodes: 3 索引数据的存储路径(可自定义,我这里不设置就默认安装路径) #path.data: /usr/local/es/data 日志文件的存储路径(可自定义,我这里不设置就默认安装路径) #path.logs: /usr/local/es/logs 启动时锁定内存,设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap bootstrap.memory_lock: true bootstrap.system_call_filter: false 绑定的ip地址 network.host: 192.168.11.25 设置对外服务的http端口,默认为9200 http.port: 9200 设置节点间交互的tcp端口,默认是9300 transport.tcp.port: 9300 transport.tcp.compress: true 设置集群中节点的初始列表,可以通过这些节点来自动发现新加入集群的节点 discovery.zen.ping.unicast.hosts: ["192.168.11.24:9300","192.168.11.25:9300","192.168.11.25:9301"] 防止脑裂现象,如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 这将导致数据丢失(单个master无需设置,如果是3个master需设置成2)(N/2)+1 #discovery.zen.minimum_master_nodes: 2 #在删除索引时,是否需要明确指定名称,该值为false时,将可以通过正则或_all进行所以 删除 #action.destructive_requires_name: true 防止同一个shard的主副本存在同一个物理机上 cluster.routing.allocation.same_shard.host: true

子节点2配置如下: 

 

集群名称,每个节点配置成一样的名称才能形成正确的集群 cluster.name: htflsys 节点名称,每个节点配置不同名称 node.name: slave-node2 是否主节点 node.master: false 是否数据节点 node.data: true 单机最大节点数 node.max_local_storage_nodes: 3 索引数据的存储路径(可自定义,我这里不设置就默认安装路径) #path.data: /usr/local/es/data 日志文件的存储路径(可自定义,我这里不设置就默认安装路径) #path.logs: /usr/local/es/logs 启动时锁定内存,设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap bootstrap.memory_lock: true bootstrap.system_call_filter: false 绑定的ip地址 network.host: 192.168.11.25 设置对外服务的http端口,默认为9200 http.port: 9201 设置节点间交互的tcp端口,默认是9300 transport.tcp.port: 9301 transport.tcp.compress: true 设置集群中节点的初始列表,可以通过这些节点来自动发现新加入集群的节点 discovery.zen.ping.unicast.hosts: ["192.168.11.24:9300","192.168.11.25:9300","192.168.11.25:9301"] 防止脑裂现象,如果没有这种设置,遭受网络故障的集群就有可能将集群分成两个独立的集群 - 这将导致数据丢失(单个master无需设置,如果是3个master需设置成2)(N/2)+1 #discovery.zen.minimum_master_nodes: 2 #在删除索引时,是否需要明确指定名称,该值为false时,将可以通过正则或_all进行所以 删除 #action.destructive_requires_name: true 防止同一个shard的主副本存在同一个物理机上 cluster.routing.allocation.same_shard.host: true

5.配置子节点

 从192.168.11.24上将安装包上传值192.168.11.25服务器

scp elasticsearch-6.2.2.tar.gz root@192.168.11.25:/usr/local/

在usr/local下创建目录,将安装包复制进去,分别解压配置,安装,启动:

/usr/local/elasticsearch/salve1 /usr/local/elasticsearch/salve2

备注:从节点配置过程需要赋予elk权限:

groupadd elk # 创建用户组elk useradd elk -g elk -p  # 创建新用户elk,-g elk 设置其用户组为 elk,-p  设置其密码6个1 chown -R elk:elk /usr/local/elasticsearch # 更改 /usr/local/elasticsearch 文件夹及内部文件的所属用户及组为 elk:elkelasticsearch chmod -R 777 /usr/local/elasticsearch # 启动报日志无权限需赋予文件夹可读写权限

配置成功截图:

5. ElasticSearch监控工具 - cerebro

选择的原因是:cerebro的使用特别简单,页面漂亮,支持高版本

安装过程:

--下载安装包(安装包下载耗时非常久,如果需要我的安装包可以关注公众号FOSSspace,联系我)

wget https://github.com/lmenezes/cerebro/releases/download/v0.8.3/cerebro-0.8.3.tgz

--解压安装到安装目录(我习惯和es同级/usr/local)

tar xzf cerebro-0.8.3.tgz

 --指定端口启动(默认是9000)

./cerebro -Dhttp.port=8888

后台运行:

nohup /usr/local/cerebro-0.8.3/bin/cerebro -Dhttp.port=8888 &

 

 --配置服务器(选配)

经常使用相同的es地址,可在conf/application.conf中配置好:

hosts = [ { host = "http://localhost:9200" name = "master" }, # Example of host with authentication #{ # host = "http://some-authenticated-host:9200" # name = "Secured Cluster" # auth = { # username = "username" # password = "secret-password" # } #} ]

--使用

浏览器打开连接http://192.168.11.24:8888

 

6.需要注意的!!

 由于master上的product索引安装了ik分词器插件,所以商品数据无法分片到从节点,从节点也需要单独安装ik分词器。

安装方法:

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.2.2/elasticsearch-analysis-ik-6.2.2.zip

安装完一定要重启,观察启动项是否有分词器,血的教训!!!!!!!! 

总结:

1.如果是单机多节点,只是提高了ES服务器cpu的利用率,当服务器出现问题之后,整个集群还是不能正常使用。

2.配置elasticsearch.yml文件的时候我的node.master属性是指定死的,所以比较依赖master服务,如果master服务挂掉的话,整个服务也会挂掉,解决方案是在该服务器上创建多个master,如果master服务器挂掉,服务仍然会挂掉,所以最终解决方案可以是在两台服务器上创建master。如果使用node.master属性的默认值,如果指定的master挂掉了,整个集群可以正常使用,但是master节点就依赖谁先启动谁就是master。

该博客的完成参考了:elasticsearch集群(多机版) 

到此这篇elasticsearch集群(多机版)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • elasticsearch分片报错Unassigned2024-11-30 15:09:05
  • spring cloud微服务配置log4j2日志组件和zipkin进行服务链路追踪2024-11-30 15:09:05
  • spring cloud搭建elk2024-11-30 15:09:05
  • centos安装rabbitMQ2024-11-30 15:09:05
  • windows安装mitmproxy2024-11-30 15:09:05
  • centos服务器配置elasticsearch2024-11-30 15:09:05
  • mac下使用MxSrvs配置thinkphp52024-11-30 15:09:05
  • centos使用crontab调度任务2024-11-30 15:09:05
  • 阿里云centos7安装redis全过程记录2024-11-30 15:09:05
  • eclipse导出的包在服务上访问不了Servlet2024-11-30 15:09:05
  • 全屏图片