集群结构
集群搭建
准备 docker 网络
Docker 创建容器时默认采用 bridge 网络,自行分配 ip,不允许自己指定。
#查看网络模式docker network ls;#创建网络docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1mynet#查看网络信息docker network inspect mynet以后使用--network=mynet --ip 172.18.12.x 指定 ip
docker-compose
# 使用elasticsearch:7.5.1镜像
image: elasticsearch:7.17.2
container_name: elasticsearch1
# 设置环境变量:集群名称为elasticsearch,以确保节点互相发现
environment:
ES_JAVA_OPTS: "-Xms251m -Xmx251m"
# 将9200端口映射到主机端口
ports:
- "9201:9201"
- "9301:9301"
# 挂载elasticsearch数据目录
volumes:
- /docker/elasticsearch1/data:/usr/share/elasticsearch/data
- /docker/elasticsearch1/plugins:/usr/share/elasticsearch/plugins
- /docker/elasticsearch1/logs:/usr/share/elasticsearch/logs
- /docker/elasticsearch1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
restart: always
network_mode: "host"
# 使用elasticsearch:7.5.1镜像
image: elasticsearch:7.17.2
container_name: elasticsearch2
# 设置环境变量:集群名称为elasticsearch,以确保节点互相发现
environment:
ES_JAVA_OPTS: "-Xms251m -Xmx251m"
# 将9200端口映射到主机端口
ports:
- "9202:9202"
- "9302:9302"
# 挂载elasticsearch数据目录
volumes:
- /docker/elasticsearch2/data:/usr/share/elasticsearch/data
- /docker/elasticsearch2/plugins:/usr/share/elasticsearch/plugins
- /docker/elasticsearch2/logs:/usr/share/elasticsearch/logs
- /docker/elasticsearch2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
restart: always
network_mode: "host"
# 使用elasticsearch:7.5.1镜像
image: elasticsearch:7.17.2
container_name: elasticsearch3
# 设置环境变量:集群名称为elasticsearch,以确保节点互相发现
environment:
ES_JAVA_OPTS: "-Xms251m -Xmx251m"
# 将9200端口映射到主机端口
ports:
- "9203:9203"
- "9303:9303"
# 挂载elasticsearch数据目录
volumes:
- /docker/elasticsearch3/data:/usr/share/elasticsearch/data
- /docker/elasticsearch3/plugins:/usr/share/elasticsearch/plugins
- /docker/elasticsearch3/logs:/usr/share/elasticsearch/logs
- /docker/elasticsearch3/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
restart: always
network_mode: "host"
elasticsearch.yml
master节点的配置
cluster.name: my-es #集群的名称,同一个集群该值必须设置成相同的
node.name: es-master-1 #该节点的名字
node.master: true #该节点有机会成为 master 节点
node.data: false #该节点可以存储数据
network.host: 0.0.0.0
http.host: 0.0.0.0 #所有 http 均可访问
http.port: 9201
transport.tcp.port: 9301
#discovery.zen.minimum_master_nodes: 2 #设置这个参数来保证集群中的节点可以知道其它 N 个有 master 资格的节点。官方推荐(N/2)+1
discovery.zen.ping_timeout: 10s #设置集群中自动发现其他节点时 ping 连接的超时时间
discovery.seed_hosts: ["192.168.1.145:9301", "192.168.1.145:9302", "192.168.1.145:9303"] #设置集群中的 Master 节点的初始列表,可以通过这些节点来自动发现其他新加入集群的节点,es7 的新增配置
cluster.initial_master_nodes: ["es-master-1", "es-master-2", "es-master-3"] #新集群初始时的候选主节点,es7 的新增配置
slave节点的配置
cluster.name: my-es #集群的名称,同一个集群该值必须设置成相同的
node.name: es-master-1 #该节点的名字
node.master: false #该节点有机会成为 master 节点
node.data: true#该节点可以存储数据
network.host: 0.0.0.0
http.host: 0.0.0.0 #所有 http 均可访问
http.port: 9204
transport.tcp.port: 9304
#discovery.zen.minimum_master_nodes: 2 #设置这个参数来保证集群中的节点可以知道其它 N 个有 master 资格的节点。官方推荐(N/2)+1
discovery.zen.ping_timeout: 10s #设置集群中自动发现其他节点时 ping 连接的超时时间
discovery.seed_hosts: ["192.168.1.145:9301", "192.168.1.145:9302", "192.168.1.145:9303"] #设置集群中的 Master 节点的初始列表,可以通过这些节点来自动发现其他新加入集群的节点,es7 的新增配置
cluster.initial_master_nodes: ["es-master-1", "es-master-2", "es-master-3"] #新集群初始时的候选主节点,es7 的新增配置
测试集群