ElasticSearch单机版和集群版学习及安装

1 前言

1.1 概述

本文档针对ElasticSearch2.1.2内部版本的部署进行介绍。

1.2 适用范围

需要部署ElasticSearch集群的项目。

1.3 部署环境

本文档以最小化安装的Centos7 64位操作系统作为示例进行介绍。

2 部署软件包

elasticsearch-2.1.2.tar.gz

3 部署

3.1 部署环境准备

3.1.1 部署服务器

假设需要在以下三台服务器上搭建ES集群:

  1. 172.16.58.21,主机名为bigdata01;

  2. 172.16.58.22,主机名为bigdata02;

  3. 172.16.58.23,主机名为bigdata03。

注意:这些服务器的ES数据目录所在磁盘请使用ext4文件系统。

3.1.2 关闭相关服务

su - root

  1. 关闭防火墙

需要在每台服务器关闭防火墙:

systemctl disable NetworkManager.service

systemctl disable firewalld.service

systemctl stop NetworkManager.service

systemctl stop firewalld.service

  1. 关闭SELinux

集群每台服务器都需要关闭SELinux:

vi /etc/selinux/config

SELINUX=enforcing修改为SELINUX=disabled

注意SELINUXTYPE配置不需要修改

此操作为常见配置,对于Spark部署来说是非必要操作,建议配置。

注意:关闭SELinux后需要重启服务器才会起效。

异常情况处理:

  1. 错误修改SELINUXTYPE为disabled导致开机失败

系统启动时,按下“e”键进入grub编辑界面,编辑grub菜单,使用上下键选择“kernel”一行,按“e”键进入编辑,在末尾增加“enforcing=0”,按“enter”保存设置并退到上一层,按“b”键继续引导后正常开机,修改“/etc/selinux/config”中的“SELINUXTYPE=targeted”。

  1. 修改SELINUX后开机卡在登录页面或报faild to load SELinux policy freezing错误

重启时在启动页面按 e,进入 grub 编辑页面,找到 linux 那一行,在最后的 language 后面空格加上 selinux=0,按 ctrl + x 重新启动系统,系统启动后删除 /etc/selinux 下面的 config~ 文件。

3.1.3 配置主机名和IP映射

为每台服务器配置主机名,并对集群中所有节点进行主机名和IP映射。

su - root

  1. 修改主机名

hostnamectl set-hostname 新主机名

以上命令会更新/etc/hostname文件,因此重启后新主机名依然起效。

执行如下命令使新主机名马上起效:

systemctl restart systemd-hostnamed

  1. 配置全部节点的IP和主机名映射

vi /etc/hosts

内容为:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.16.58.21 bigdata01

172.16.58.22 bigdata02

172.16.58.23 bigdata03

3.1.4 关闭文件更新时间、关闭swap文件交换

vi /etc/fstab

  1. 注释包含swap的行:
 # /dev/mapper/centos-swap   swap   swap  defaults    0 0
  1. 关闭文件更新时间,若有多个盘可相应配置
/dev/mapper/centos-root      /     ext4    noatime,nodiratime      0 0

一般来说,只需要在数据目录配置noatime,nodiratime,若此前相关目录已配置为default,需要把defaults修改为noatime,nodiratime,可通过以下命令查看数据目录的设备名称:

df -h

注意:必须重启服务器,才能使此配置起效。

异常情况处理:

修改完此文件重启服务器后,发现根目录下的所有文件无法修改,如用“touch xxx”命令创建文件失败并报为只读文件系统。查看/etc/fatab文件内容,若根目录的配置被注释了,说明是此错误配置造成的,需要执行如下命令使根目录恢复为可读写状态:

mount -o remount, rw /

然后修改/etc/fstab文件,把根目录的配置的注释去掉。

3.1.5 内存设置参数调整

vi /etc/sysctl.conf

增加:

vm.swappiness=0  # 设置尽可能利用物理内存,在用尽物理内存情况下才使用虚拟内存

vm.max_map_count=655360 # 放开map counts的限制

执行如下命令使配置马上起效:

sysctl -w vm.max_map_count=655360

3.1.6 创建用户和用户组

注意:

  1. 每台服务器的es用户的密码必须相同;

  2. 若此前已有es用户,则可跳过该小节;

  3. 同一台服务器上安装的多个ES可共用es用户及起主目录/opt/es。

  4. 创建es用户和用户组

su - root

# 创建用户组,若1001号用户组已经被占用,可换成其他数字

groupadd -g 1001 es

# 创建用户,若用户组号不为1001,需要相应修改

useradd -d /opt/es -s /bin/bash -g 1001 es

passwd es

以下为命令行提示:

更改用户es的密码。

新的密码:es

无效的密码:密码少于8个字符

重新输入新的密码:es

passwd:所有的身份验证令牌已经成功更新。

注意:

  1. 标红部分为手工输入的内容,输入过程界面不会显示密码内容;

  2. 只有当密码长度少于8时,使用passwd命令修改密码才需要输入两次密码。

  3. 设置环境配置权限

chown -R es:es /opt/es

异常情况处理:

  1. 用户主目录原本存在

若用户主目录在创建用户之前已经存在,在创建用户时会提示目录已存在的提示,此时创建用户是成功的,但切换到用户时会出现如下情况:

[root@bigdata01 ~]$ su - es

上一次登录:日 12月 18 11:20:44 CST 2017pts/0 上

-bash-4.2$

此情况说明用户主目录的用户信息文件未正确创建,此时用户无法正常使用。

解决办法:

su - root

cp .bashrc .bash_profile .bash_logout /opt/es/

chown -R es:es /opt/es/

su - es

source .bashrc .bash_profile

此时命令行提示变成如下:

[es@bigdata01 ~]$

若回到root用户后再切换为es用户后依然如上提示,说明创建用户成功。

  1. 需要删除用户或用户组
su - root

# 删除用户命令

userdel es

# 删除用户组命令

groupdel es

3.1.7 设置可打开的最大文件个数、放开最大可锁定内存限制

  1. 修改配置
vi /etc/security/limits.conf

添加:

es soft nofile 65535

es hard nofile 65535

es soft nproc 65535

es hard nproc 65535

es soft memlock unlimited

es hard memlock unlimited

执行如下命令放开锁定内存限制:

ulimit -l unlimited
  1. 配置在登录后自动加载以上设置
vi /etc/pam.d/login

增加:

session  required  /lib64/security/pam_limits.so

3.1.8 安装JDK

每台服务器都必须安装JDK 1.8.0_60,请参考《JDK1.8.0_60 部署文档》。

3.2 部署步骤

注意:

3.2.1、3.2.4节都需要在每台服务器进行操作,3.2.2、3.2.3、3.2.5节只需要在需要配置免密码登录的服务器上执行。

配置免密码登录的目的如下:

当需要在一台服务器上批量操作多台服务器时,如批量启停软件节点,为了避免每次远程到其他服务器执行命令时都需要输入密码,就需要在该服务器对目标服务器配置免密码登录,若只需要以其中一台来管理整个集群,则只需要在一台服务器上按照3.2.3的步骤来配置免密码即可,若希望使用多台来管理,则需要在这些服务器上都操作3.2.2、3.2.3、3.2.5。

3.2.1 上传软件到服务器

上传elasticsearch-2.1.2.tar.gz到每台服务器,如/tmp目录,解压到安装目录:

su - root

tar -zxf /tmp/elasticsearch-2.1.2.tar.gz -C /opt

cd /opt/es

ln -s elasticsearch-2.1.1 es

chown -R es:es /opt/es

chmod -R 777 /opt/es/install

注意:

本文档默认/opt目录下此前未安装过ES在/opt/es目录中,若此前安装过,需要安装到另外的目录,需要如下操作:

假设安装到/opt/esface目录中

su - root

mkdir /opt/esface

tar -zxf /tmp/elasticsearch-2.1.2.tar.gz -C /opt/esface

cd /opt/esface

mv es/* ./

rm -rf es

ln -s elasticsearch-2.1.1 es

chown -R es:es /opt/esface

chmod -R 777 /opt/esface/install

安装的多个ES都可以共用es用户。

对于后续步骤,都应以/opt/esface目录作为安装目录来相应修改。

3.2.2 安装必要的软件

su - root

cd /opt/es/install/rpm

rpm -ivh tcl-8.5.7-6.el6.x86_64.rpm

rpm -ivh expect-5.44.1.15-4.el6.x86_64.rpm

注意:这两个软件为做免密码登录必要的软件,要先安装tcl后再安装expect,若系统之前已安装,则可以跳过此步。

3.2.3 配置免密码登录

注意:所有节点必须能相互ping通,所有服务器的es用户已创建好,并且密码必须相同才能使用下面的方法配置免密码登录。

以在bigdata01服务器上作为例子,具体配置步骤如下:

su - es
  1. 修改脚本读取的IP和主机名映射
vi /opt/es/install/servers.txt

内容为:

172.16.58.21 bigdata01

172.16.58.22 bigdata02

172.16.58.23 bigdata03
  1. 给es用户做免密码登录
cd /opt/es/install

ssh-keygen -t rsa   # 提示输入时直接按回车确认

./establishSSH.sh es es /opt/es

其中:

establishSSH.sh脚本的参数含义如下:

  1. 第一个参数:用户名;

  2. 第二个参数:用户密码,部署的多台服务器中想用用户名的密码必须相同;

  3. 第三个参数:用户主目录,根据3.2.4节中配置的主目录为/opt/es

验证:

使用es用户执行“ssh ip date”和“ssh hostname date”在其他每台服务器执行查看时间的命令,若不需要输入密码即可查看其他服务器的时间,则表示免密码登录做成功。

例如:

ssh 172.16.58.21 date

ssh bigdata01 date

注意:必须ssh ip date和ssh hostname date都不需要输入密码时,免密码登录才算完全配置成功。

异常情况处理:

若此前创建过免密码登录,在操作时会提示是否覆盖文件(y/n),输入y回车覆盖文件继续操作即可。若免密码一直无法做成功,可如下操作(假设要从bigdata01做免密码到全部服务器):

远程到每一台服务器(包括bigdata1),执行如下操作:

su - es

rm -rf ~/.ssh

然后远程到bigdata01,执行如下操作:

su - es

ssh-keygen -t rsa

# 以下ssh-copy-id命令针对bigdata01-03,172.16.58.21-23

# 都分别执行一次,也就是总共执行6次ssh-copy-id命令

ssh-copy-id -i ~/.ssh/id_rsa.pub  es@bigdata01

ssh-copy-id -i ~/.ssh/id_rsa.pub  es@172.16.58.21

...

ssh-copy-id -i ~/.ssh/id_rsa.pub  es@bigdata03

ssh-copy-id -i ~/.ssh/id_rsa.pub  es@172.16.58.23

注意:ssh-copy-id命令每次执行都需要输入用户密码

以上命令执行完后,尝试用ssh命令从bigdata01远程到任意节点(包括自身),确认免密码登录是否都做成功。

3.2.4 修改ES配置文件

  1. 修改配置文件
vi /opt/es/es/config/elasticsearch.yml

修改:

cluster.name: 集群名称

node.name: 节点名称

network.host: 本机IP地址,如172.16.58.21

http.port: 端口号,若不设置默认为9200

transport.tcp.port: 端口号,若不设置默认为9300

node.master: true/false

node.data: true/false

discovery.zen.ping.unicast.hosts: ["172.16.58.21:9300","172.16.58.22:9300","172.16.58.23:9300"]

discovery.zen.minimum_master_nodes: 数字

bootstrap.mlockall: true/false

注意:

  1. cluster.name应全部字母小写,可由字母、数字、下划线等组成,cluster.name同名的节点才会组成集群;

  2. 每个节点都应有唯一的node.name,命名规则同cluster.name,一般命名为主机名;

  3. http.port是http访问端口,如通过web网页访问ES集群或通过RESTful接口操作ES集群等通过此端口进行;

  4. transport.tcp.port是tcp访问端口,通过编程语言API来操作ES集群时通过此端口进行;

  5. 若本节点可作为Master节点,node.master参数需设置为true,否则为false,此配置应根据实际部署规划来进行设置;

  6. 若本节点希望保存索引数据,node.data参数需设置为true,否则为false,此配置应根据实际部署规划来进行设置;

  7. discovery.zen.ping.unicast.hosts参数表示当前节点可通过配置的几个节点来发现集群并加入,一般配置全部Master节点的IP和端口;

  8. discovery.zen.minimum_master_nodes参数配置:假设Master节点数为N,则此参数配置为(N+1)/2,如N为3此值配置2,N为4时配置为2,其中N建议为单数;

  9. bootstrap.mlockall参数表示ES进程是否启动后马上申请配置的堆内存并一直占用。1)若为true,则启动时会申请内存并一直占用,前提是按照3.2.5配置了放开可锁定

    内存,若未配置,并且elasticsearch.in.sh中配置的堆内存大小超出操作系统的
    
    锁定内存限制,则ES会启动失败。此为建议值,能够提升ES的性能;
    

    2)若为false,则ES启动时会首先占用elasticsearch.in.sh中配置的ES_MIN_MEM

    内存空间,若未按3.2.5配置放开可锁定内存,并且该内存空间大小超出操作系统的
    
    锁定内存限制,则ES会启动失败;
    
  10. 紧跟参数的英文冒号后面的空格是必要的,否则会启动ES失败并且无日志输出。

  1. 为ES进程分配固定堆内存:
vi /opt/es/es/bin/elasticsearch.in.sh

修改:

ES_CLASSPATH="/opt/spark/spark/conf/:$ES_HOME/lib/*:$ES_HOME/libext/*"

...

if [ "x$ES_MIN_MEM" = "x" ]; then

    ES_MIN_MEM=4g

fi

if [ "x$ES_MAX_MEM" = "x" ]; then

    ES_MAX_MEM=4g

fi

注意:

  1. ES_CLASSPATH中的spark目录应与spark实际安装目录对应;

  2. 对于单个ES节点来说,ES_MIN_MEM和ES_MAX_MEM应不小于2G且不大于30G,并且不大于本机内存大小的40%,如:服务器有96G内存则可配置30G,有16G内存则可配置6G,有8G内存则可配置2-3G。当一台服务器上启动两个ES节点时,应两个ES占用总内存不超过本机内存的40%,即有16G内存可为每个ES分配3G,有8G可为每个ES分配2G内存。

3.2.5 为批量起停ES节点准备

vi /opt/es/servers.txt

内容为:

172.16.58.21 bigdata01

172.16.58.22 bigdata02

172.16.58.23 bigdata03

4 起停服务

4.1 启动ES

  1. 启动多个节点

在配置了免密码登录的服务器上执行:

su - es

/opt/es/es-cluster.sh start

注意:

  1. 此命令会启动/opt/es/servers.txt文件中的全部节点上安装目录相同的ES,本文档es-cluster.sh脚本所在的安装目录为/opt/es;

  2. 在执行脚本所在服务器上,必须配置免密码登录,可参照3.3.3节。若未配置或配置失败,以上命令每启动一个ES节点都会提示要求输入es用户的密码。此情况下,应先关闭ES集群,把免密码登录配置好,然后重新启动ES集群。

  3. 启动单个节点

若想启动单个节点,可在所在服务器上执行:

su - es

/opt/es/es/bin/es-start.sh

4.2 停止ES

  1. 停止多个节点

在配置了免密码登录的服务器上执行:

su - es

/opt/es/es-cluster.sh stop

注意:

  1. 此命令会关闭/opt/es/servers.txt文件中的全部节点上安装目录相同的ES,本文档es-cluster.sh脚本所在的安装目录为/opt/es;

  2. 在执行脚本所在服务器上,必须配置免密码登录,可参照3.3.3节。若未配置或配置失败,以上命令每关闭一个ES节点都会提示要求输入es用户的密码。此情况下,需手动关闭每个节点的ES进程,然后把免密码登录配置好,在下次关闭ES集群时更方便。

  3. 停止单个节点

在希望停止的节点上执行:

su - es

/opt/es/es/bin/es-stop.sh

或使用ps -ef | grep /opt/es命令找到ES的进程PID后,执行下面的命令停止单个ES节点:

kill -15 PID
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354