docker容器获取
- docker pull elasticsearch:7.4.2
- docker pull mobz/elasticsearch-head:5
Elasticsearch
创建宿主机文件
mkdir -p /data/docker/elasticsearch/config/node0
mkdir -p /data/docker/elasticsearch/config/node1
mkdir -p /data/docker/elasticsearch/config/node2
mkdir -p /data/docker/elasticsearch/config/node3
mkdir -p /data/docker/elasticsearch/data/node0
mkdir -p /data/docker/elasticsearch/data/node1
mkdir -p /data/docker/elasticsearch/data/node2
mkdir -p /data/docker/elasticsearch/data/node3
mkdir -p /data/docker/elasticsearch/logs/node0
mkdir -p /data/docker/elasticsearch/logs/node1
mkdir -p /data/docker/elasticsearch/logs/node2
mkdir -p /data/docker/elasticsearch/logs/node3
# 重新设置系统级别的默认打开文件最大个数 防止JVM报错
echo vm.max_map_count=655360 >> /etc/sysctl.conf
# 在root账户执行这一句 作用是重新载入sysctl系统参数
sysctl -p
环境配置
Mac
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
按回车键
sysctl -w vm.max_map_count=262144
修改单个进程打开的句柄个数
sudo launchctl limit maxfiles 99999 99999
sudo ulimit -n 99999
ulimit -H -l
配置前置
裂脑事件
Elasticsearch牺牲了一致性,以确保可用性和分区容错。其背后的原因是短期的不良行为比短期的不可用性问题少。换句话说,当群集中的Elasticsearch节点无法复制对数据的更改时,它们将继续为应用程序提供服务。当节点能够复制其数据时,它们将尝试聚合副本并实现最终的一致性。
Elasticsearch通过选举主节点来解决之前的问题,主节点负责数据库操作,例如创建新索引,在群集节点周围移动分片等等。主节点与其他节点主动协调其操作,确保数据可以由非主节点汇聚。
在某些情况下,先前的机制可能会失败,从而导致裂脑事件。当Elasticsearch集群分为两个区块时,若每个区块都有一个节点都认为它们是主节点,因为主节点将在数据上独立工作,数据一致性就会丢失。因此,节点将对相同的查询做出不同的响应。这将会是灾难性的事件,因为来自两个主节点的数据无法自动重新加入,并且需要相当多的手动工作来纠正这种情况。
创建配置文件
# 集群名称
cluster.name: "elasticsearch-cluster"
# 节点名称
node.name: node0
# 是否为主节点
node.master: true
# 该节点是否存储数据
node.data: true
# 回环地址
network.host: 0.0.0.0
# 对外开放的ip
network.publish_host: 172.18.0.6
# 对外开放的http端口
http.port: 9200
# 集群的ip集合,可指定端口,默认为9300
#discovery.zen.ping.unicast.hosts: ["172.18.0.6", "172.18.0.7", "172.18.0.8"]
cluster.initial_master_nodes: ["node0"]
discovery.seed_hosts: ["172.18.0.6", "172.18.0.7", "172.18.0.8", "172.18.0.9"]
# 内部节点通信端口
transport.tcp.port: 9300
# 是否允许跨域请求
http.cors.enabled: true
# 定义允许哪些源请求
http.cors.allow-origin: "*"
# 有成为主节点资格的最小节点数(为避免脑裂,设置为超总数一半)
#discovery.zen.minimum_master_nodes: 2
# 是否开启安全验证
xpack.security.enabled: false
# 锁住内存,确保ES不使用swap
#bootstrap.memory_lock: true
# 集群名称
cluster.name: "elasticsearch-cluster"
# 节点名称
node.name: node1
# 是否为主节点
node.master: false
# 该节点是否存储数据
node.data: true
# 回环地址
network.host: 0.0.0.0
# 对外开放的ip
network.publish_host: 172.18.0.7
# 对外开放的http端口
http.port: 9200
# 集群的ip集合,可指定端口,默认为9300
#discovery.zen.ping.unicast.hosts: ["172.18.0.6", "172.18.0.7", "172.18.0.8"]
cluster.initial_master_nodes: ["node0"]
discovery.seed_hosts: ["172.18.0.6", "172.18.0.7", "172.18.0.8", "172.18.0.9"]
# 内部节点通信端口
transport.tcp.port: 9300
# 是否允许跨域请求
http.cors.enabled: true
# 定义允许哪些源请求
http.cors.allow-origin: "*"
# 有成为主节点资格的最小节点数(为避免脑裂,设置为超总数一半)
#discovery.zen.minimum_master_nodes: 2
# 是否开启安全验证
xpack.security.enabled: false
# 锁住内存,确保ES不使用swap
#bootstrap.memory_lock: true
# node2, node3同node1, 修改ip以及端口
启动容器
docker run --net mynetwork --ip 172.18.0.6 -d --restart always -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -v /data/docker/elasticsearch/config/node/node0/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/docker/elasticsearch/data/node0:/usr/share/elasticsearch/data -v /data/docker/elasticsearch/logs/node0:/usr/share/elasticsearch/logs --name es-node0 elasticsearch:7.4.2
docker run --net mynetwork --ip 172.18.0.7 -d --restart always -p 9201:9200 -p 9301:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -v /data/docker/elasticsearch/config/node/node1/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/docker/elasticsearch/data/node1:/usr/share/elasticsearch/data -v /data/docker/elasticsearch/logs/node1:/usr/share/elasticsearch/logs --name es-node1 elasticsearch:7.4.2
docker run --net mynetwork --ip 172.18.0.8 -d --restart always -p 9203:9200 -p 9303:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -v /data/docker/elasticsearch/config/node/node2/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/docker/elasticsearch/data/node2:/usr/share/elasticsearch/data -v /data/docker/elasticsearch/logs/node2:/usr/share/elasticsearch/logs --name es-node2 elasticsearch:7.4.2
docker run --net mynetwork --ip 172.18.0.9 -d --restart always -p 9204:9200 -p 9304:9300 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -v /data/docker/elasticsearch/config/node/node3/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/docker/elasticsearch/data/node3:/usr/share/elasticsearch/data -v /data/docker/elasticsearch/logs/node3:/usr/share/elasticsearch/logs --name es-node3 elasticsearch:7.4.2
Elasticsearch-head
启动容器
docker run --net mynetwork --ip 172.18.0.10 -d --restart always -p 9100:9100 -d --name elasticsearch-head mobz/elasticsearch-head:5
docker exec -it elasticsearch-head bash
apt-get update
apt-get install vim
vim _site/vendor.js
application/x-www-form-urlencoded 改为 application/json;charset=UTF-8 exit
docker restart elasticsearch-head
访问
http://127.0.0.1:9100/