注:9200和9201节点的配置文件,区别就是数据存放目录、日志存放目录、服务端口、集群间相互通信的端口不同,其余都一样;数据目录和日志目录都需手动创建,属主数组都是elasticsearch用户。
注:“cluster.routing.allocation.same_shard.host: true”参数的作用,es天生集群特性,用户只管往es集群里存放数据,es主节点会把数据分布到各个节点,目的是为了保证节点宕机后数据不丢失。如果一台机器上起多个es实例的话,因为es集群默认不知道这个机器上有多个es实例,所以可能会出现把本该分散放到多个机器的某些索引分片,都集中放到了这个多实例的机器上,因为es以为这几个多实例是分布在不同的机器上,假如这个多节点的机器宕机,那就可能会造成丢失数据。上面那个参数的作用就是,允许es主节点探测该物理机是不是存在多个实例,如果存在多个实例,则只给这个机器一份独立数据,也就是说es集群存储数据时,会把这些在一台机器上的多个实例当做一个实例来对待。
注:es多实例的好处,因为JVM局限性,es最大分配内存不要超过32G,否则jvm垃圾回收会严重影响性能。es实例最大给32G内存,而物理机内存很大,所以就可以启动多个实例,来提高整个es集群的性能。
3.elasticsearch启动文件修改
3.1 9200es节点的启动文件内容
[root@localhost etc]# egrep -v "^$|^#" /usr/lib/systemd/system/elasticsearch-9200.service
[Unit]
Description=Elasticsearch
Documentation=http://www.elastic.co
Wants=network-online.target
After=network-online.target
[Service]
Environment=ES_HOME=/usr/share/elasticsearch
Environment=CONF_DIR=/etc/elasticsearch/elasticsearch-config-9200
Environment=DATA_DIR=/var/lib/elasticsearch
Environment=LOG_DIR=/var/log/elasticsearch
Environment=PID_DIR=/var/run/elasticsearch-9200
EnvironmentFile=-/etc/sysconfig/elasticsearch
WorkingDirectory=/usr/share/elasticsearch
User=elasticsearch
Group=elasticsearch
ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec
ExecStart=/usr/share/elasticsearch/bin/elasticsearch \
-p ${PID_DIR}/elasticsearch.pid \
--quiet \
-Edefault.path.logs=${LOG_DIR} \
-Edefault.path.data=${DATA_DIR} \
-Edefault.path.conf=${CONF_DIR}
StandardOutput=journal
StandardError=inherit
LimitNOFILE=65536
LimitNPROC=2048
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
3.2 9201es节点的启动文件内容
[root@localhost etc]# egrep -v "^$|^#" /usr/lib/systemd/system/elasticsearch-9201.service
[Unit]
Description=Elasticsearch
Documentation=http://www.elastic.co
Wants=network-online.target
After=network-online.target
[Service]
Environment=ES_HOME=/usr/share/elasticsearch
Environment=CONF_DIR=/etc/elasticsearch/elasticsearch-config-9201
Environment=DATA_DIR=/var/lib/elasticsearch
Environment=LOG_DIR=/var/log/elasticsearch
Environment=PID_DIR=/var/run/elasticsearch-9201
EnvironmentFile=-/etc/sysconfig/elasticsearch
WorkingDirectory=/usr/share/elasticsearch
User=elasticsearch
Group=elasticsearch
ExecStartPre=/usr/share/elasticsearch/bin/elasticsearch-systemd-pre-exec
ExecStart=/usr/share/elasticsearch/bin/elasticsearch \
-p ${PID_DIR}/elasticsearch.pid \
--quiet \
-Edefault.path.logs=${LOG_DIR} \
-Edefault.path.data=${DATA_DIR} \
-Edefault.path.conf=${CONF_DIR}
StandardOutput=journal
StandardError=inherit
LimitNOFILE=65536
LimitNPROC=2048
LimitAS=infinity
LimitFSIZE=infinity
TimeoutStopSec=0
KillSignal=SIGTERM
KillMode=process
SendSIGKILL=no
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
注:9200和9201的启动文件内,修改es配置文件目录和pid存放目录,这两个目录都需要手动创建,属主数组都是elasticsearch用户。
4.启动es多实例
systemctl enable elasticsearch-9200 && systemctl enable elasticsearch-9201
systemctl restart elasticsearch-9200 && systemctl restart elasticsearch-9201
启动后查看es实例日志,没有error就是启动成功了。
5.其它
这一段是为了提醒自己不要忘记配置的,各位也了解了解吧。
yum安装的话,用root用户执行systemctl start elasticsearch也是以elasticsearch这个用户来运行elasticsearch,而elasticsearch用户默认没有锁内存的权限,同时修改最大描述符限制,所以需要在/etc/security/limits.conf 里加入以下内容:
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
在/etc/sysctl.conf里加入一下内容:
vm.max_map_count=655360(默认的65535 es会报不够用)
按上面的修改后,启动es还是报这个错,重启系统应该可行,但是没试。
实际解决办法:
官网给出的办法是,要避免使用swap,可以使用以下三种方式:
?swapoff -a
?vm.swappiness = 1
?bootstrap.mlockall: true
我选择了关闭swap,即“swapoff -a”,并把它加入到/etc/rc.local。所以如果“bootstrap.memory_lock: true”这个参数用不了,而又不是特别依赖swap分区,可以关闭swap分区,然后“bootstrap.memory_lock: false”就可以了。
原文:http://blog.51cto.com/10546390/2066815