从零开始 Elasticsearh Docker 单机集群

  • 准备工作

    • VirtualBox 虚拟机添加

      • 新建虚拟机
      • 内存大小
      • 虚拟硬盘
      • 虚拟硬盘文件类型
      • 存储在物理硬盘上
      • 文件位置和大小
      • 载入镜像文件
      • 网卡配置
    • Centos 7.8 安装

      • 选择语言
      • 磁盘分区
      • 手动分区
      • 网络配置
      • 设置Root密码
    • docker 安装 && Elasticsearch 镜像

      • docker 安装
      • docker 查看版本
      • 拉取镜像
    • 数据目录

      • config && Log && Data
      • 文件权限
      • vm.max_map_count 调整
    • 参数说明
    • 配置文件 && 运行

      • Es0
      • Es1
      • Es2
      • 启动ElasticSearch集群容器
      • 查看集群状态
    • Elasticsearch-Head

      • 安装
      • Node.js
      • 查看集群状态
      • 模拟节点下线
    • ik 插件安装

      • 下载地址
      • 复制
      • 获取容器ID
      • 复制ik
    • docker 启动 or 关闭快捷命令
    • Elasticsearch 集群连接

      • PHP
      • JAVA
    • Elasticsearch 节点分类

      • 主节点
      • 数据节点
      • 客户节点
    • 引用

准备工作

VirtualBox 虚拟机添加

1、新建虚拟机

从零开始 Elasticsearh Docker 单机集群_第1张图片

2、内存大小

从零开始 Elasticsearh Docker 单机集群_第2张图片

3、虚拟硬盘

从零开始 Elasticsearh Docker 单机集群_第3张图片

4、虚拟硬盘文件类型

从零开始 Elasticsearh Docker 单机集群_第4张图片

5、存储在物理硬盘上

从零开始 Elasticsearh Docker 单机集群_第5张图片

6、文件位置和大小

从零开始 Elasticsearh Docker 单机集群_第6张图片

7、载入镜像文件

从零开始 Elasticsearh Docker 单机集群_第7张图片

8、网卡配置

从零开始 Elasticsearh Docker 单机集群_第8张图片

Centos 7.8 安装

1、选择语言

从零开始 Elasticsearh Docker 单机集群_第9张图片

2、磁盘分区

从零开始 Elasticsearh Docker 单机集群_第10张图片

3、手动分区

从零开始 Elasticsearh Docker 单机集群_第11张图片

swap 分区,一般物理内存的2倍
boot 分区, centos 6.x 100M 7.X 300M
/根分区,分配剩下来所有存储空间
4、网络配置

从零开始 Elasticsearh Docker 单机集群_第12张图片

5、设置Root密码

从零开始 Elasticsearh Docker 单机集群_第13张图片

docker 安装 && Elasticsearch 镜像

1、docker 安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2、docker 查看版本
docker version
3、拉取镜像
docker pull elasticsearch:5.4.3

数据目录

1、config && Log && Data
mkdir -p /usr/local/elasticsearch/{config,logs/{node0,node1,node2},data/{node0,node1,node2}}
touch es0.yml es1.yml es2.yml
tree elasticsearch
elasticsearch/
├── config
│   ├── es0.yml
│   ├── es1.yml
│   └── es2.yml
├── data
│   ├── node0
│   ├── node1
│   └── node2
└── logs
    ├── node0
    ├── node1
    └── node2
2、文件权限
chmod -R 777 /usr/local/elasticsearch/data/*
chmod -R 777 /usr/local/elasticsearch/logs/*
chmod -R 777 /usr/local/elasticsearch/config/*
4、vm.max_map_count 调整
echo vm.max_map_count=262144 >> /etc/sysctl.conf
sysctl -p

参数说明

集群名称
cluster.name: elasticsearch-cluster
节点名
node.name: es-nodex
主节点
node.master
数据节点
node.data
外网访问配置
network.bind_host 设置成0.0.0.0 任何主机都可以访问
本机ip
network.publish_host
设置对外服务的http端口,默认为9200
http.port
设置节点间交互的tcp端口,默认是9300

transport.tcp.port

跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.zen.ping.unicast.hosts
该属性定义的是为了形成一个集群,有主节点资格并互相连接的节点的最小数目。
discovery.zen.minimum_master_nodes
//quorum的算法=master候选节点数量/2+1
JVM内存大小配置
ES_JAVA_OPTS=-Xms512m -Xmx512m

配置 && 运行

Es0
cluster.name: elasticsearch-cluster

node.name: es-node1
node.master: true 
node.data: true  

network.bind_host: 0.0.0.0
network.publish_host: 192.168.56.101

http.port: 9200
transport.tcp.port: 9300

http.cors.enabled: true
http.cors.allow-origin: "*"

discovery.zen.ping.unicast.hosts: ["192.168.56.101:9300","192.168.56.101:9301","192.168.56.101:9302"]
discovery.zen.minimum_master_nodes: 2
Es1
cluster.name: elasticsearch-cluster

node.name: es-node2
node.master: true 
node.data: true  

network.bind_host: 0.0.0.0
network.publish_host: 192.168.56.101

http.port: 9201
transport.tcp.port: 9301

http.cors.enabled: true
http.cors.allow-origin: "*"

discovery.zen.ping.unicast.hosts: ["192.168.56.101:9300","192.168.56.101:9301","192.168.56.101:9302"]
discovery.zen.minimum_master_nodes: 2
Es2
cluster.name: elasticsearch-cluster

node.name: es-node3
node.master: true 
node.data: true  

network.bind_host: 0.0.0.0
network.publish_host: 192.168.56.101

http.port: 9202
transport.tcp.port: 9302

http.cors.enabled: true
http.cors.allow-origin: "*"

discovery.zen.ping.unicast.hosts: ["192.168.56.101:9300","192.168.56.101:9301","192.168.56.101:9302"]
discovery.zen.minimum_master_nodes: 2
启动ElasticSearch集群容器
 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /usr/local/elasticsearch/config/es0.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/elasticsearch/data/node0:/usr/share/elasticsearch/data --name ES01 elasticsearch:5.4.3
 
 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /usr/local/elasticsearch/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/elasticsearch/data/node1:/usr/share/elasticsearch/data --name ES02 elasticsearch:5.4.3

 docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9202:9202 -p 9302:9302 -v /usr/local/elasticsearch/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/elasticsearch/data/node2:/usr/share/elasticsearch/data --name ES03 elasticsearch:5.4.3
查看集群状态
http://192.168.56.102:9200/_cat/nodes?pretty 

错误:

{"error":{"root_cause":[{"type":"master_not_discovered_exception","reason":null}],"type":"master_not_discovered_exception","reason":null},"status":503}

原因:内部 Tcp通信端口没有开放

firewall-cmd --add-port=9300/tcp
firewall-cmd --add-port=9301/tcp
firewall-cmd --add-port=9302/tcp

Elasticsearch-Head

elasticsearch-head安装
git clone git://github.com/mobz/elasticsearch-head.git
Node.js 安装
wget https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz
tar xvf node-v12.18.3-linux-x64.tar.xz

vim /etc/profile
export NODE_HOME=/usr/local/node-v12.18.3-linux-x64
export PATH=$PATH:$NODE_HOME/bin
export NODE_PATH=$NODE_HOME/lib/node_modules

source /etc/profile
elasticsearch-head 运行
cd /usr/local/elastic-head
npm install
npm run start

firewall-cmd --add-port=9100/tcp
查看集群状态

从零开始 Elasticsearh Docker 单机集群_第14张图片

模拟节点下线
PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._name" : "es-node2"
  }
}

从零开始 Elasticsearh Docker 单机集群_第15张图片

恢复节点

PUT _cluster/settings
{
  "transient" : {
    "cluster.routing.allocation.exclude._name" : ""
  }
}

ik插件

下载地址
https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.4.3/elasticsearch-analysis-ik-5.4.3.zip
复制
docker cp /usr/local/src/elasticsearch-analysis-ik-5.4.3.zip {容器ID}:/usr/share/elasticsearch/plugins
获取容器ID
docker ps
docker ps -a -q
复制ik
docker exec -it {容器ID} /bin/bash
cd plugins

mkdir ik 
mv elasticsearch-analysis-ik-5.4.3.zip ik
unzip elasticsearch-analysis-ik-5.4.3.zip
rm -rf elasticsearch-analysis-ik-5.4.3.zip

docker 启动 or 关闭快捷命令

docker start $(docker ps -a -q)
docker stop $(docker ps -a -q)

ELasticsearch 集群连接

PHP
use Elasticsearch\ClientBuilder;

$hosts => [
    '192.168.56.102:9200',
    '192.168.56.102:9201',
    '192.168.56.102:9202',
];

$client = ClientBuilder::create()
    ->setHosts($hosts)
    ->setSelector('\Elasticsearch\ConnectionPool\Selectors\RoundRobinSelector')
    ->allowBadJSONSerialization()
    ->build();
JAVA
Transport Client
RESTful Client

Elasticsearch 节点

主节点
node.master: true
node.data: true
数据节点
node.master: false
node.data: true
客户节点
node.master: false
node.data: false

引用

https://segmentfault.com/a/11...
https://blog.csdn.net/belongh...

你可能感兴趣的:(elasticsearch,集群,php,java,docker)