【集群运维篇】使用docker搭建es(ElasticSearch)集群

tech2022-08-15  134

使用docker搭建es(ElasticSearch)集群

准备环境

在生产环境中在Docker中运行Elasticsearch时,以下要求和建议适用。

防止jvm报错:该vm.max_map_count内核设置必须至少设置为262144用于生产。

Linux系统:

该vm.max_map_count设置应在以下位置永久设置/etc/sysctl.conf

grep vm.max_map_count /etc/sysctl.conf vm.max_map_count=262144 #临时生效 sysctl -w vm.max_map_count=262144 #永久生效 echo vm.max_map_count=262144>>/etc/sysctl.conf sysctl -p

macOS 系统:(Docker for Mac)

这个vm.max_map_计数必须在xyve虚拟机中设置:

#1.从命令行运行: screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty #2.按enter键并使用“sysctl”进行配置vm.max_map_计数: sysctl -w vm.max_map_count=262144 #3.退出 screen 会话, 使用 Ctrl a d 健退出;

配置docker网络(可选)

为了模拟我们的es是独立服务器,我们可以使用docker网络IP指定隔离;docker 创建容器时默认采用的bridge网络,自行分配IP,不允许我们自己指定。而在实际部署中,我们需要指定容器IP,不允许其自行分配IP,尤其是搭建集群时,固定IP时必须的。所以我们可以创建自己的bridge网络:mynet,创建容器的时候指定网络为mynet并指定IP即可

#查看网络模式 docker network ls #创建一个新的bridge网络-mynet docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 mynet #查看网络详情 docker network inspect mynet #以后使用--network=mynet --ip 172.18.12.x 指定IP

创建es节点

我们这里以3从主3从为例,先创建3个Master节点,复制下方脚本可以方便快速的创建出3个master节点。

for port in $(seq 1 3); \ do \ mkdir -p ~/mydata/elasticsearch/master-${port}/config mkdir -p ~/mydata/elasticsearch/master-${port}/data chmod -R 777 ~/mydata/elasticsearch/master-${port} cat <<EOF >~/mydata/elasticsearch/master-${port}/config/elasticsearch.yml cluster.name: my-es #集群名称,同一集群该值必须设置相同 node.name: es-master-${port} #该节点的名字 node.master: true #该节点有机会成为master节点 node.data: false #该节点可以存储数据 network.host: 0.0.0.0 http.host: 0.0.0.0 #所有http均可访问 http.port: 920${port} transport.tcp.port: 930${port} discovery.zen.ping_timeout: 10s #设置集群中自动发现其他节点时ping连接的超时时间 discovery.seed_hosts: ["172.18.12.21:9301","172.18.12.22:9302","172.18.12.23:9303"] #设置集群中的master节点的初始化列表,可以通过这些节点来自动发现其他新加入集群的节点,es7的新增配置 cluster.initial_master_nodes: ["172.18.12.21"] # 新集群初始时的候选主节点,es7的新增配置 EOF docker run --name es-master-${port} \ -p 920${port}:920${port} -p 930${port}:930${port} \ --network=mynet --ip 172.18.12.2${port} \ -e ES_JAVA_OPTS="-Xms300m -Xmx300m" \ -v ~/mydata/elasticsearch/master-${port}/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v ~/mydata/elasticsearch/master-${port}/data:/usr/share/elasticsearch/data \ -v ~/mydata/elasticsearch/master-${port}/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.9.0 #发文时最新版本为7.9.0 done #停止指定的es容器 docker stop $(docker ps -a |grep es-node-*|awk '{print $1}') #删除指定es容器 docker rm -f $(docker ps -a |grep es-node-*|awk '{print $1}')

另外再创建3个node节点,命令同上面相似,注意改node.master: false, node.data:true 即可;复制下面命令创建3个node节点。

for port in $(seq 4 6); \ do \ mkdir -p ~/mydata/elasticsearch/node-${port}/config mkdir -p ~/mydata/elasticsearch/node-${port}/data chmod -R 777 ~/mydata/elasticsearch/node-${port} cat <<EOF >~/mydata/elasticsearch/node-${port}/config/elasticsearch.yml cluster.name: my-es #集群名称,同一集群该值必须设置相同 node.name: es-node-${port} #该节点的名字 node.master: false #该节点有机会成为master节点 node.data: true #该节点可以存储数据 network.host: 0.0.0.0 http.host: 0.0.0.0 #所有http均可访问 http.port: 920${port} transport.tcp.port: 930${port} discovery.zen.ping_timeout: 10s #设置集群中自动发现其他节点时ping连接的超时时间 discovery.seed_hosts: ["172.18.12.21:9301","172.18.12.22:9302","172.18.12.23:9303"] #设置集群中的master节点的初始化列表,可以通过这些节点来自动发现其他新加入集群的节点,es7的新增配置 cluster.initial_master_nodes: ["172.18.12.21"] # 新集群初始时的候选主节点,es7的新增配置 EOF docker run --name es-node-${port} \ -p 920${port}:920${port} -p 930${port}:930${port} \ --network=mynet --ip 172.18.12.2${port} \ -e ES_JAVA_OPTS="-Xms300m -Xmx300m" \ -v ~/mydata/elasticsearch/node-${port}/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v ~/mydata/elasticsearch/node-${port}/data:/usr/share/elasticsearch/data \ -v ~/mydata/elasticsearch/node-${port}/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.9.0 #发文时最新版本为7.9.0 done

测试集群

由于我的宿主机IP为 192.168.0.100 ,所以我可以通过192.168.0.100访问容器暴露出来的es服务;

http://192.168.0.100:9202/_cat/nodes 查看各个节点信息 ,其中带* 为默认主节点。

172.18.12.23 34 71 3 0.10 0.24 0.29 ilmr - es-master-3 172.18.12.24 37 71 4 0.10 0.24 0.29 dilrt - es-node-4 172.18.12.25 36 71 3 0.10 0.24 0.29 dilrt - es-node-5 172.18.12.22 33 71 4 0.10 0.24 0.29 ilmr - es-master-2 172.18.12.21 27 71 4 0.10 0.24 0.29 ilmr * es-master-1 172.18.12.26 38 71 3 0.10 0.24 0.29 dilrt - es-node-6

http://192.168.0.100:9202/_cat/health 查看当前节点的集群健康状态,green代表健康,6个节点,3个主节点。

1599055528 14:05:28 my-es green 6 3 0 0 0 0 0 0 - 100.0%

http://192.168.0.100:9202/_cluster/health?pretty 查看集群健康状态

http://192.168.0.100:9202/_cluster/stats?pretty 查看集群详细信息

至此es集群搭建完成,es 的各种操作命令见官方文档查询,这里就不一一测试了。各位可以自己在docker容器搭建试试。最后大家在生产环节下使用也不用自己搭建,目前市面上阿里云、腾讯云 也有开箱即用的容器云供大家使用;

阿里云 · Elasticsearch 链接传送 兼容开源Elasticsearch的功能,以及Security、Machine Learning、Graph、APM等商业功能,致力于数据分析、数据搜索等场景服务。与开源社区背后商业公司Elastic战略合作,为客户提供企业级权限管控、安全监控告警、自动报表生成等场景服务。【0元开通ELK】腾讯云Elasticsearch Service连接传送 开箱即用的云端 Elasticsearch 服务,集成安全、SQL、机器学习、告警等高级特性(X-Pack) 52it.club 认证博客专家 数据分析 项目经理 产品经理 1、【极客精神】具有较强行业敏锐度,喜欢追逐前沿技术(docker、k8s、elasticsearch、Nginx、mongodb、spring boot/spring cloud等开源软件)、并关注前沿技术在业务中的价值;时刻清理自我,过去的经历不再重要,面对未来,我始终保持一颗学习的心态; 2、【团队管理】擅长团队组建与扩充、产品(尤其是软件产品)研发管理体系的建立与完善;极强的适应能力、组织能力、接受能力和应变能力,友善处理人际关系;曾带领研发团队(UI、前端、后端、测试、产品)高效完成电商、新媒体、物联网产品等产品3、【项目丰富】开发过多种类型的产品,其中包括电商、股票理财、资讯等
最新回复(0)