从零开始 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、新建虚拟机

1.jpg

2、内存大小

2.jpg

3、虚拟硬盘

3.jpg

4、虚拟硬盘文件类型

4.jpg

5、存储在物理硬盘上

5.jpg

6、文件位置和大小

6.jpg

7、载入镜像文件

1596160353(1).jpg

8、网卡配置

1596162552(1).jpg

Centos 7.8 安装

1、选择语言

1596160681(1).jpg

2、磁盘分区

1596160809(1).jpg

3、手动分区

1596160986(1).jpg

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

1596161057(1).jpg

5、设置Root密码

1596161103(1).jpg

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
查看集群状态

1596181998(1).jpg

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

1596182148(1).jpg

恢复节点

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)