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

使用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- p o r t / c o n f i g m k d i r − p   / m y d a t a / e l a s t i c s e a r c h / m a s t e r − {port}/config mkdir -p ~/mydata/elasticsearch/master- port/configmkdirp /mydata/elasticsearch/master{port}/data
chmod -R 777 ~/mydata/elasticsearch/master- p o r t c a t < < E O F >   / m y d a t a / e l a s t i c s e a r c h / m a s t e r − {port} cat <<EOF >~/mydata/elasticsearch/master- portcat<<EOF> /mydata/elasticsearch/master{port}/config/elasticsearch.yml
cluster.name: my-es #集群名称,同一集群该值必须设置相同
node.name: es-master-KaTeX parse error: Expected 'EOF', got '#' at position 8: {port} #̲该节点的名字 node…{port}
transport.tcp.port: 930KaTeX parse error: Expected 'EOF', got '#' at position 44: …g_timeout: 10s #̲设置集群中自动发现其他节点时p…{port}
-p 920 p o r t : 920 {port}:920 port:920{port} -p 930 p o r t : 930 {port}:930 port:930{port}
–network=mynet --ip 172.18.12.2 p o r t − e E S J A V A O P T S = " − X m s 300 m − X m x 300 m " − v   / m y d a t a / e l a s t i c s e a r c h / m a s t e r − {port} -e ES_JAVA_OPTS="-Xms300m -Xmx300m" -v ~/mydata/elasticsearch/master- porteESJAVAOPTS="Xms300mXmx300m"v /mydata/elasticsearch/master{port}/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
-v ~/mydata/elasticsearch/master- p o r t / d a t a : / u s r / s h a r e / e l a s t i c s e a r c h / d a t a − v   / m y d a t a / e l a s t i c s e a r c h / m a s t e r − {port}/data:/usr/share/elasticsearch/data -v ~/mydata/elasticsearch/master- port/data:/usr/share/elasticsearch/datav /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- p o r t / c o n f i g m k d i r − p   / m y d a t a / e l a s t i c s e a r c h / n o d e − {port}/config mkdir -p ~/mydata/elasticsearch/node- port/configmkdirp /mydata/elasticsearch/node{port}/data
chmod -R 777 ~/mydata/elasticsearch/node- p o r t c a t < < E O F >   / m y d a t a / e l a s t i c s e a r c h / n o d e − {port} cat <<EOF >~/mydata/elasticsearch/node- portcat<<EOF> /mydata/elasticsearch/node{port}/config/elasticsearch.yml
cluster.name: my-es #集群名称,同一集群该值必须设置相同
node.name: es-node-KaTeX parse error: Expected 'EOF', got '#' at position 8: {port} #̲该节点的名字 node…{port}
transport.tcp.port: 930KaTeX parse error: Expected 'EOF', got '#' at position 44: …g_timeout: 10s #̲设置集群中自动发现其他节点时p…{port}
-p 920 p o r t : 920 {port}:920 port:920{port} -p 930 p o r t : 930 {port}:930 port:930{port}
–network=mynet --ip 172.18.12.2 p o r t − e E S J A V A O P T S = " − X m s 300 m − X m x 300 m " − v   / m y d a t a / e l a s t i c s e a r c h / n o d e − {port} -e ES_JAVA_OPTS="-Xms300m -Xmx300m" -v ~/mydata/elasticsearch/node- porteESJAVAOPTS="Xms300mXmx300m"v /mydata/elasticsearch/node{port}/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
-v ~/mydata/elasticsearch/node- p o r t / d a t a : / u s r / s h a r e / e l a s t i c s e a r c h / d a t a − v   / m y d a t a / e l a s t i c s e a r c h / n o d e − {port}/data:/usr/share/elasticsearch/data -v ~/mydata/elasticsearch/node- port/data:/usr/share/elasticsearch/datav /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/healthpretty 查看集群健康状态

http://192.168.0.100:9202/_cluster/statspretty 查看集群详细信息

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

  • 阿里云 · Elasticsearch 链接传送 兼容开源Elasticsearch的功能,以及Security、Machine Learning、Graph、APM等商业功能,致力于数据分析、数据搜索等场景服务。与开源社区背后商业公司Elastic战略合作,为客户提供企业级权限管控、安全监控告警、自动报表生成等场景服务。【0元开通ELK】
  • 腾讯云Elasticsearch Service连接传送 开箱即用的云端 Elasticsearch 服务,集成安全、SQL、机器学习、告警等高级特性(X-Pack)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django DRF和Docker是两个不同的技术,它们分别用于Web开发框架和容器化部署。Elasticsearch是一个分布式搜索引擎,可以用于存储、搜索和分析大量数据。 如果您想在Django DRF应用程序中使用Elasticsearch进行搜索和分析,您可以使用Elasticsearch的Python客户端库elasticsearch-py,并将其安装到您的Django应用程序中。然后,您可以编写一些视图来与Elasticsearch进行交互,并使用DockerElasticsearch部署为集群。 以下是一些步骤来搭建Elasticsearch集群: 1. 安装DockerDocker Compose。 2. 编写一个Docker Compose文件来定义您的Elasticsearch集群。例如,以下是一个使用3个节点的集群的示例: ``` version: '3' services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0 container_name: es01 environment: - node.name=es01 - discovery.seed_hosts=es02,es03 - cluster.initial_master_nodes=es01,es02,es03 - cluster.name=es-docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata01:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - esnet es02: image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0 container_name: es02 environment: - node.name=es02 - discovery.seed_hosts=es01,es03 - cluster.initial_master_nodes=es01,es02,es03 - cluster.name=es-docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata02:/usr/share/elasticsearch/data networks: - esnet es03: image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0 container_name: es03 environment: - node.name=es03 - discovery.seed_hosts=es01,es02 - cluster.initial_master_nodes=es01,es02,es03 - cluster.name=es-docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata03:/usr/share/elasticsearch/data networks: - esnet volumes: esdata01: esdata02: esdata03: networks: esnet: ``` 3. 运行Docker Compose命令来启动您的Elasticsearch集群。例如,以下命令将在后台启动集群: ``` $ docker-compose up -d ``` 4. 确认您的集群已经启动。您可以使用以下命令来检查所有节点是否已经加入集群: ``` $ curl -X GET "localhost:9200/_cat/nodes?v&pretty" ``` 5. 在您的Django应用程序中安装elasticsearch-py库。例如,以下命令将安装最新版本的elasticsearch-py: ``` $ pip install elasticsearch ``` 6. 编写一些视图来与Elasticsearch集群进行交互。例如,以下视图将获取所有Elasticsearch集群中的文档: ``` from elasticsearch import Elasticsearch from rest_framework.views import APIView from rest_framework.response import Response class ElasticsearchView(APIView): def get(self, request): es = Elasticsearch(['es01', 'es02', 'es03']) res = es.search(index='my_index', body={'query': {'match_all': {}}}) return Response(res['hits']['hits']) ``` 7. 在您的Django应用程序中定义Elasticsearch集群的连接参数。例如,以下设置将定义3个节点的Elasticsearch集群: ``` ELASTICSEARCH_DSL = { 'default': { 'hosts': [ 'es01:9200', 'es02:9200', 'es03:9200' ] }, } ``` 8. 运行您的Django应用程序并测试您的Elasticsearch视图。例如,以下命令将启动Django开发服务器: ``` $ python manage.py runserver ``` 9. 测试您的Elasticsearch视图。例如,以下命令将获取所有Elasticsearch集群中的文档: ``` $ curl -X GET "http://localhost:8000/elasticsearch/" ``` 以上是一些步骤来搭建Elasticsearch集群并在Django DRF应用程序中使用它。请注意,这只是一个示例,您可能需要根据您自己的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值