1. 程式人生 > >單機上啟動多個elasticsearch實例

單機上啟動多個elasticsearch實例

sse sysctl ofo 啟動文件 ping service sco tcp mit

使用elasticsearch的默認配置的話,一臺機器上只能啟動一個elasticsearch實例,下面是配置多實例的過程。
1.環境介紹
操作系統:centos7
elasticsearch版本:5.6.1
啟動實例個數:2個
elasticsearch安裝方式:使用官方yum源,yum安裝。
2.elasticsearch配置
2.1 配置目錄結構
[root@localhost etc]# tree /etc/elasticsearch
/etc/elasticsearch
├── elasticsearch-config-9200
│?? ├── elasticsearch.yml
│?? ├── jvm.options
│?? ├── log4j2.properties
│?? └── scripts
├── elasticsearch-config-9201
│?? ├── elasticsearch.yml
│?? ├── jvm.options
│?? ├── log4j2.properties
│?? └── scripts
默認的話,elasticsearch的配置文件放在/etc/elasticsearch目錄下。
多實例的話,在/etc/elasticsearch下分別創建elasticsearch-config-9200和elasticsearch-config-9201兩個目錄,jvm.options根據自身情況修改。
2.2 配置文件內容
2.2.1 9200es節點的配置文件內容
[root@localhost etc]# egrep -v "^$|^#" /etc/elasticsearch/elasticsearch-config-9200/elasticsearch.yml
cluster.name: sfbest-es
node.name: es-7-168-9200
path.data: /home/es-data-9200
path.logs: /var/log/elasticsearch-9200
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: ""
node.max_local_storage_nodes: 2 //單機上最大允許運行的es實例個數
discovery.zen.ping.unicast.hosts: ["10.10.10.245","10.10.10.168:9300","10.10.10.168:9301"]
action.destructive_requires_name: true
cluster.routing.allocation.same_shard.host: true //如果是多實例的話,為防止索引分片丟失,需要開啟這個參數。
2.2.2 9201es節點的配置文件內容
cluster.name: sfbest-es
node.name: es-7-168-9201
path.data: /home/es-data-9201
path.logs: /var/log/elasticsearch-9201
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9201
transport.tcp.port: 9301
http.cors.enabled: true
http.cors.allow-origin: "
"
node.max_local_storage_nodes: 2
discovery.zen.ping.unicast.hosts: ["10.10.10.245","10.10.10.168:9300","10.10.10.168:9301"]
action.destructive_requires_name: true
cluster.routing.allocation.same_shard.host: true

註: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 裏加入以下內容:

  • soft nofile 1024000
  • hard nofile 1024000
    hive - nofile 1024000
    hive - nproc 1024000

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”就可以了。

單機上啟動多個elasticsearch實例