使用docker 搭建Elasticsearch集群
1 安装环境 安装多机es集群时(分布式集群),在三台服务器分别安装一个es节点,这三个节点组成一个es集群。因为是小集群,因此设置这三个节点都可作为master节点和data节点。服务器的ip分别为192.168.1.111、192.168.1.112和192.168.1.113。 安装单机es集群时,在一台服务器192.168.1.114上安装三个es节点。 ELastics
1 安装环境
安装多机es集群时(分布式集群),在三台服务器分别安装一个es节点,这三个节点组成一个es集群。因为是小集群,因此设置这三个节点都可作为master节点和data节点。服务器的ip分别为192.168.1.111、192.168.1.112和192.168.1.113。
安装单机es集群时,在一台服务器192.168.1.114上安装三个es节点。
ELasticsearch 5.6要求JDK 1.8及其以上版本。软件版本如下所示。
(1)JDK 1.8(不用另外安装)
(2)docker 17.12.1-ce
(3)Elasticsearch 5.6.4
(4)Elasticsearch-head:5插件
2 多机es集群搭建
在服务器192.168.1.111、192.168.1.112和192.168.1.113上安装。
2.1 节点1
在192.168.1.111上。
1、拉取es的docker镜像。
sudo docker pull elasticsearch:5.6.4
2、在服务器上创建es的数据文件夹—data和配置文件—es.yml,并设置es.yml的文件内容。具体如下所述。
#集群名
cluster.name: crm
#节点名
node.name: node-111
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,
#指绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,
#值必须是个真实的ip地址
network.publish_host: 192.168.1.111
#设置对外服务的http端口,默认为9200
http.port: 9200
#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#是否允许跨域REST请求
http.cors.enabled: true
#允许 REST 请求来自何处
http.cors.allow-origin: "*"
#节点角色设置
node.master: true
node.data: true
#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts: ["192.168.1.111:9300","192.168.1.112:9300","192.168.1.113:9300"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
3、创建并运行es容器
给容器命名,设置映射端口,将es容器的配置文件和 data文件映射到服务器物理机上。
docker run -d --name crm-es -p 9200:9200 -p 9300:9300 -v /data/crm/elasticsearch/conf/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/crm/elasticsearch/data/data:/usr/share/elasticsearch/data elasticsearch:5.6.4
2.2 节点2
在192.168.1.112上。
1、拉取es的docker镜像。
sudo docker pull elasticsearch:5.6.4
2、在服务器上创建es的数据文件夹—data和配置文件—es.yml,并设置es.yml的文件内容。具体如下所述。
#集群名
cluster.name: crm
#节点名
node.name: node-112
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,
#指绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,
#值必须是个真实的ip地址
network.publish_host: 192.168.1.112
#设置对外服务的http端口,默认为9200
http.port: 9200
#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#是否允许跨域REST请求
http.cors.enabled: true
#允许 REST 请求来自何处
http.cors.allow-origin: "*"
#节点角色设置
node.master: true
node.data: true
#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts: ["192.168.1.111:9300","192.168.1.112:9300","192.168.1.113:9300"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
3、创建并运行es容器
给容器命名,设置映射端口,将es容器的配置文件和 data文件映射到服务器物理机上。
docker run -d --name crm-es -p 9200:9200 -p 9300:9300 -v /data/crm/elasticsearch/conf/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/crm/elasticsearch/data/data:/usr/share/elasticsearch/data elasticsearch:5.6.4
2.3 节点3
在192.168.1.113上。
1、拉取es的docker镜像。
sudo docker pull elasticsearch:5.6.4
2、在服务器上创建es的数据文件夹—data和配置文件—es.yml,并设置es.yml的文件内容。具体如下所述。
#集群名
cluster.name: crm
#节点名
node.name: node-113
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,
#指绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,
#值必须是个真实的ip地址
network.publish_host: 192.168.1.113
#设置对外服务的http端口,默认为9200
http.port: 9200
#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#是否允许跨域REST请求
http.cors.enabled: true
#允许 REST 请求来自何处
http.cors.allow-origin: "*"
#节点角色设置
node.master: true
node.data: true
#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts: ["192.168.1.111:9300","192.168.1.112:9300","192.168.1.113:9300"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
3、创建并运行es容器
给容器命名,设置映射端口,将es容器的配置文件和 data文件映射到服务器物理机上。
docker run -d --name crm-es -p 9200:9200 -p 9300:9300 -v /data/crm/elasticsearch/conf/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/crm/elasticsearch/data/data:/usr/share/elasticsearch/data elasticsearch:5.6.4
3 单机es集群搭建
在192.168.1.114上安装。拉取es的docker镜像。
sudo docker pull elasticsearch:5.6.4
3.1 节点1
在192.168.1.114上。
1、在服务器上创建es的数据文件夹—data-1和配置文件—es-1.yml,并设置es-1.yml的文件内容。具体如下所述。
#集群名
cluster.name: erp
#节点名
node.name: node-114-1
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,
#指绑定这台机器的任何一个ip
network.bind_host: 0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,
#值必须是个真实的ip地址
network.publish_host: 192.168.1.114
#设置对外服务的http端口,默认为9200
http.port: 9200
#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port: 9300
#是否允许跨域REST请求
http.cors.enabled: true
#允许 REST 请求来自何处
http.cors.allow-origin: "*"
#节点角色设置
node.master: true
node.data: true
#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts: ["erp-es-1:9300","erp-es-2:9301","erp-es-3:9302"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes: 2
2、创建并运行es容器
给容器命名,设置映射端口,将es容器的配置文件和 data文件映射到服务器物理机上。
docker run -d --name erp-es-1 -p 9200:9200 -p 9300:9300 -v /data/erp/elasticsearch/conf/es-1.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/erp/elasticsearch/data/data-1:/usr/share/elasticsearch/data elasticsearch:5.6.4
3.2 节点2
在192.168.1.114上。
1、在服务器上创建es的数据文件夹—data-2和配置文件—es-2.yml,并设置es-2.yml的文件内容。具体如下所述。
#集群名
cluster.name:erp
#节点名
node.name:node-114-2
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,指绑定这台机器的任何一个ip
network.bind_host:0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
network.publish_host:192.168.1.114
#设置对外服务的http端口,默认为9200
http.port:9201
#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port:9301
#是否允许跨域REST请求
http.cors.enabled:true
#允许 REST 请求来自何处
http.cors.allow-origin:"*"
#节点角色设置
node.master:true
node.data:true
#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts:["erp-es-1:9300","erp-es-2:9301","erp-es-3:9302"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes:2
2、创建并运行es容器
给容器命名,设置映射端口,将es容器的配置文件和 data文件映射到服务器物理机上。
docker run -d --name erp-es-2 -p 9201:9201 -p 9301:9301 --link erp-es-1:erp-es-1 -v /data/erp/elasticsearch/conf/es-2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/erp/elasticsearch/data/data-2:/usr/share/elasticsearch/data elasticsearch:5.6.4
3.3 节点3
在192.1.68.1.114上。
1、在服务器上创建es的数据文件夹—data-3和配置文件—es-3.yml,并设置es-3.yml的文件内容。具体如下所述。
#集群名
cluster.name:erp
#节点名
node.name:node-114-3
#设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,指绑定这台机器的任何一个ip
network.bind_host:0.0.0.0
#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址
network.publish_host:192.168.1.114
#设置对外服务的http端口,默认为9200
http.port:9202
#设置节点之间交互的tcp端口,默认是9300
transport.tcp.port:9302
#是否允许跨域REST请求
http.cors.enabled:true
#允许 REST 请求来自何处
http.cors.allow-origin:"*"
#节点角色设置
node.master:true
node.data:true
#有成为主节点资格的节点列表
discovery.zen.ping.unicast.hosts:["erp-es-1:9300","erp-es-2:9301","erp-es-3:9302"]
#集群中一直正常运行的,有成为master节点资格的最少节点数(默认为1)
# (totalnumber of master-eligible nodes / 2 + 1)
discovery.zen.minimum_master_nodes:2
2、创建并运行es容器
给容器命名,设置映射端口,将es容器的配置文件和 data文件映射到服务器物理机上。
docker run -d --name erp-es-3 -p 9202:9202 -p 9302:9302 --link erp-es-1:erp-es-1 --link erp-es-2:erp-es-2 -v /data/erp/elasticsearch/conf/es-3.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/erp/elasticsearch/data/data-3:/usr/share/elasticsearch/data elasticsearch:5.6.4
4 通过head查看集群
Head只需在一台服务器上安装即可,在此选则在192.168.1.111这台服务器上安装。安装步骤如下所述。
1、 拉取head镜像
sudo docker pull mobz/elasticsearch-head:5
2、 创建并运行head容器,命令如下。
docker run --name elasticsearch-head-5 -p 9100:9100 mobz/elasticsearch-head:5
3、 打开head界面,查看集群信息。http://192.168.1.111:9100/
5 其他
5.1. 安装ik中文分词
如果需要,可以给es安装ik中文分词器。安装步骤如下所述。
进入es节点的docker容器,然后进入对应的文件夹(plugins),然后下载并解压对应版本的ik插件。
$ sudo docker exec -it 容器id(或容器名) /bin/bash
$ cd plugins
$ wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.4/elasticsearch-analysis-ik-5.6.4.zip
$ unzip elasticsearch-analysis-ik-5.6.4.zip
$ rm elasticsearch-analysis-ik-5.6.4.zip
安装完后需要重启es节点的docker容器后,ik分词器才会生效。集群状态下,每个节点都需要分别安装ik分词器。
注意:
(1)注意安装与es版本匹配的ik分词器。
(2)下面是另一种安装方式,但是在重启es时可能会报错,导致安装ik失败。因此推荐上一种安装方式。
./bin/elasticsearch-plugin
install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.4/elasticsearch-analysis-ik-5.6.4.zip
报错如下:
java.io.FileNotFoundException:/usr/share/elasticsearch/config/analysis-ik/IKAnalyzer.cfg.xml (No such file ordirectory)
...
(3)分词效果验证参考github:
https://github.com/medcl/elasticsearch-analysis-ik/blob/v5.6.4/README.md
5.2. 安装docker-ui
docker-ui 是docker容器可视化管理工具。
sudo docker run -d --name ui-for-docker -p 9000:9000 --privileged -v /var/run/docker.sock:/var/run/docker.sock uifd/ui-for-docker
打开链接 http://192.168.1.111:9000/,查看111机器的docker。
5.3. es启动报错1
1、启动es报错,错误如下所述。
ERROR:[1] bootstrap checks failed
[1]: maxvirtual memory areas vm.max_map_count [65530] istoo low, increase to at least [262144]
2、解决办法:
Elasticsearch针对各种文件使用NioFS和MMapFS的混合。确保配置最大映射计数,以便有足够的虚拟内存可用于mmapped文件。
(1)切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
(2)添加下面配置
vm.max_map_count=655300
(3)并执行命令
sysctl -p
(4)重新启动elasticsearch,即可启动成功。
查看vm.max_map_count是否设置成功:
cat /proc/sys/vm/max_map_count
5.4. es启动报错2
1、 问题
集群启动是可能报下面的错误。
java.net.NoRouteToHostException:No route to host
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
...
2、 解决办法
(1) 查看docker的ip地址
(2) 将docker的搜索ip地址加入白名单。举例如下。
firewall-cmd--permanent --zone=trusted --add-source=172.17.0.0/16
firewall-cmd--reload
5.5. docker容器互联
同一个宿主机上的多个docker容器互联。通过docker run命令的--link参数可以让容器之间通过连接(linking)系统进行交互。参数格式如下。
--link name:alias
name是要链接的容器名称,alias是此连接的别名。容器的连接系统会依据容器的名称,创建容器之间一个安全隧道。
6 参考文献
(1) 点击打开链接
(2)点击打开链接
(3)点击打开链接
更多推荐
所有评论(0)