elsaticsearch 集群搭建

一,ElasticSearch优缺点

1.优点

  • 集群配置简单
  • 无缝扩展或者移除节点
  • 隐藏分布式系统复杂性,对用户透明(对分片和搜索的处理等)
  • 集群健康状态监控
  • 全文索引

2.缺点

  • 硬件资源要求高(分片复制占磁盘,聚合和排序操作吃内存,I/O)
  • 可靠性(Out of memory问题)
  • 灵活性问题(Mapping不可变,变需重建整个索引,与倒排索引有关)
  • 分页问题(与分片有关系)
  • 中文切词问题
  • 权限管理不完善
  • 安全性(收费插件)

二,集群搭建

1.概念介绍

  • cluster:集群
  • node:节点
  • shards:分片,包含主分片和复制分片

2.压缩包下载

  • 前往网址下载合适的版本,上传到服务器中
  • 执行以下命令,解压压缩包
    unzip elasticsearch-6.2.4.zip

3.集群安装

  • 确保服务器中已安装1.8版本以上的jdk
  • 由于elasticsearch不能以root账户启动,故需要创建新的用户和用户组(root账户下操作)
    分别执行以下命令,创建用户和用户组
    groupadd es
    useradd es -g es -p cb888
  • 执行给用户分配elasticsearch文件夹执行权限(root账户下操作)
    【elasticsearch/】为elasticsearch解压后的文件夹,请按实际情况修改
    chown -R es:es elasticsearch/
  • 修改linux文件句柄数限制(root账户下操作)
    vi /etc/security/limits.conf
    在文件末尾增加以下两行,退出保存即可
    es hard nofile 65536
    es soft nofile 65536
  • 设置vm.max_map_count(root账户下操作)
    vi /etc/sysctl.conf
    增加以下行:
    vm.max_map_count=262144
    执行以下命令,使配置生效:
    sysctl -p
  • 执行以下命令,开启9200和9300两个端口的访问权限(root账户下操作)
    firewall-cmd --zone=public --add-port=9200/tcp --permanent;firewall-cmd --reload;
    firewall-cmd --zone=public --add-port=9300/tcp --permanent;firewall-cmd --reload;
  • 配置elasticsearch配置文件elasticsearch.yml
    vi /var/elasticsearcd/config/elasticsearch.yml 修改以下属性:
#同一个集群内的所有节点配置成一样

cluster.name: my-application 
node.name: node-103 #同一个集群内不能重复
node.attr.rack: master-103
path.data: /path/to/data #数据保存路径
path.logs: /path/to/logs #日志文件保存路径
network.host: 10.0.0.103 #本节点ip地址
http.port: 9200 #对外开放的端口

#集群中其他ip地址,用来广播集群信息,如果端口不是9200,需要在ip后指定端口(只需配置除自己外的其他节点信息)

discovery.zen.ping.unicast.hosts: ["10.0.0.102", "10.0.0.103"]
discovery.zen.minimum_master_nodes: 2 #最小有选举master节点的node数,计算公式master节点数/2+1
  • 启动集群所有节点
    执行命令
su es

切换到es用户,

进入elasticsearch文件夹下的bin目录,
执行

./elasticsearch

即可,如果要后台运行,请运行

./elasticsearch -d
  • 验证集群状态
    访问集群中的任一节点,如http://10.0.0.103:9200/_cluster/health?pretty 如出现以下类似信息,则说明集群启动成功:
{
"cluster_name" : "my-application",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}