开发者社区> 游客nxqdpyvox2h3g> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

阿里云ECS

简介: docker部署ES集群
+关注继续查看

我是来自南京的一所高校大三本科在读,是通过老师的推荐与介绍了解到飞天加速计划的,在南京某公司实习期间,看到了公司所搭建的ES集群,想要使用阿里云服务器自己亲自动手尝试一下

在云服务器使用时,我选装的是centos7.9系统,在部署搭建ES集群时,也踩了很多坑。使用Docker容器技术,虚拟三个节点,以下是我搭建时所学习记录的笔记,同时也发布在CSDN,和阿里开发社区。

Docker安装

# 删除历史docker相关包及配置

sudo yum remove docker \

                docker-client \

                docker-client-latest \

                docker-common \

                docker-latest \

                docker-latest-logrotate \

                docker-logrotate \

                docker-engine

# 安装所需要安装的包

sudo yum install -y yum-utils

# 配置镜像仓库

sudo yum-config-manager \

   --add-repo \

  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新yum软件包索引

yum makecache fast

# 安装Docker相关

sudo yum install docker-ce docker-ce-cli containerd.io

# 启动Docker

systemctl start docker

# 检查是否安装成功

docker version

# 测试hello-world程序

docker run hello-world

# 查看当前下载的hello-world 镜像

[root@iZuf68bhooanbyuniyoqm0Z ~]# docker images

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE

hello-world   latest   feb5d9fea6a5   4 months ago   13.3kB

# 卸载docker

# 卸载依赖

sudo yum remove docker-ce docker-ce-cli containerd.io

# 删除资源

sudo rm -rf /var/lib/docker

$ sudo rm -rf /var/lib/containerd

Docker常用命令

docker --help

# 镜像

docker image COMMAND

# Commands:

  build       构建镜像

  history     查看镜像构建历史

  import     Import the contents from a tarball to create a filesystem image

  inspect     洞察:查看详情

  load       导入

   ls         List images

  prune       移除未使用的

  pull       从仓库拉取

  push       推送到仓库

   rm         Remove one or more images

  save       导出

  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

# 导出镜像为文件

docker image save hello-world -o hello.img

# 导入镜像

docker image load -i hello.img

# 网络

docker network --help

# 环境部署的三个时代

# 同一个服务器部署多个网站,一个被入侵,全体都挂

#同一个服务器安装多个虚拟机,虚拟机里部署网站(实现隔离)

#同一个服务器,多个容器(默认隔离)

Usage: docker network COMMAND

Manage networks

Commands:

connect     Connect a container to a network

create     Create a network

disconnect Disconnect a container from a network

inspect     Display detailed information on one or more networks

ls         List networks

prune       Remove all unused networks

rm         Remove one or more networks

# 文件存储 (volume)

# 卷(volume)是Docker持久化工具,文件存储

Usage: docker volume COMMAND

Manage volumes

Commands:

create     Create a volume

inspect     Display detailed information on one or more volumes

ls         List volumes

prune       Remove all unused local volumes

rm         Remove one or more volumes

# 容器(*)

Usage: docker container COMMAND

Manage containers

Commands:

attach     Attach local standard input, output, and error streams to a running container

commit     Create a new image from a container's changes

cp         Copy files/folders between a container and the local filesystem

create     Create a new container

diff       Inspect changes to files or directories on a container's filesystem

exec       Run a command in a running container

export     Export a container's filesystem as a tar archive

inspect     Display detailed information on one or more containers

kill       Kill one or more running containers

logs       Fetch the logs of a container

ls         List containers

pause       Pause all processes within one or more containers

port       List port mappings or a specific mapping for the container

prune       Remove all stopped containers

rename     Rename a container

restart     Restart one or more containers

rm         Remove one or more containers

run         Run a command in a new container

start       Start one or more stopped containers

stats       Display a live stream of container(s) resource usage statistics

stop       Stop one or more running containers

top         Display the running processes of a container

unpause     Unpause all processes within one or more containers

update     Update configuration of one or more containers

wait       Block until one or more containers stop, then print their exit code

 

# run命令重点参数

docker run [参数] [镜像名称] bash

--name my_name # 指定容器名称

--rm # 结束自动删除

--net my_net # 指定容器加入的网络

--volume ${PWD}:/tmp # 把当前目录挂载到容器中

-it # 进入容器内部,挂载终端

-d # 以守护进程运行

-p # 端口映射

Docker compose

# 用于定义和运行多容器的docker工具

# 可以使用yaml配置程序和服务

# 使用单个命令,创建并启动所有的服务

# 安装docker——compose

# ubuntun安装

sudo apt install docker-compose

# centos安装

# 1、下载docker-compose

curl -L "https://get.daocloud.io/docker/compose/releases/download/1.27.3/docker-compose-$(uname -s)-$(uname -m)" -o/usr/local/bin/docker-compose

# 2、加上可执行权限:

chmod +x /usr/local/bin/docker-compose

# 3、查看docker-compose版本

docker-compose --version

# docker-compose命令

# Commands:

  build             Build or rebuild services(构建)

  config             Validate and view the Compose file

  create             Create services

  down               Stop and remove containers, networks, images, and volumes

  events             Receive real time events from containers

  exec               Execute a command in a running container

  help               Get help on a command

  images             List images

   kill               Kill containers

  logs               View output from containers

  pause             Pause services

  port               Print the public port for a port binding

   ps                 List containers

  pull               Pull service images

  push               Push service images

   restart           Restart services

   rm                 Remove stopped containers

  run               Run a one-off command

  scale             Set number of containers for a service

   start             Start services

   stop               Stop services

   top               Display the running processes

  unpause           Unpause services

  up                 Create and start containers

  version           Show version information and quit

# 配合docker-compose.yaml文件

# docker-compose内容结构

# dockerfile一定以from开头(指令建议大写)

# 例子

version'3.7' # 指定docker-compose版本

services:

postgres:     # 服务名称

  image'' # 指定镜像

  container_name'' # 容器名称,非必填

  restartalways # 启动方式

  networks:

    - postgresql # 指定网络

  ports:

    - 5432:5432

  environment# 环境命令 **重点

    TZAsia/Shanghai

    POSTGRES_USERpostgres

    POSTGRES_PASSWORDpostgres_pass

   

  volumes:

    - ./data:/var/lib/postgresql/data

     

     

     

pgadmin:

  image'' # 指定镜像

  container_name'' # 容器名称,非必填

  restartunless-stopped # 启动方式

  ports:

    - 5431:80

  environment:  # 环境变量是 服务编排 重点

    PGADMIN_DEFAULT_EMAILsan@q.com

    PGADMIN_DEFAULT_PASSWORDPGadmin

  depends_on:    # 启动依赖 重点

    - postgres

       

  networks:

    - postgresql

   

   

# 声明使用了哪些共享文件夹

volumes:

data:

# 声明使用了哪些网络 

networks:

postgresql:

  external

    namepostgresql            

     

# 核心是services(描述服务之间的关系)

# 配置阿里云镜像加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": ["https://ysyq7xvr.mirror.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

DockerUI Portainer

# 查看DockerUI Portainer镜像

docker search Portainer

# 选择喜欢的DockerUI风格镜像下载

docker pull docker.io/portainer/portainer

# 启动UI

docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer portainer/portainer

# 查看容器

docker ps -a

Docker ES 安装集群的搭建

# 使用docker安装ES并且完成集群配置工作

# 安装ES镜像

docker pull elasticsearch:7.17.0

# 在根目录建立一个文件夹ES/config

mkdir -p /ES/config

# 进入config

cd /ES/config

# 分别创建三个文件

vim es1.yml

vim es2.yml

vim es3.yml

# 三个文件内容如下

# 集群唯一名称,所有节点一致

cluster.name: elasticsearch-cluster

# 节点名称

node.name: es-node1

# 设置可以访问的ip,默认为0.0.0.0,这里全部设置通过

network.host: 0.0.0.0

# 设置其他节点和该节点交互的ip地址

network.publish_host: 47.113.201.81

# 设置对外服务的http端口,默认9200

http.port: 9200

# 设置节点之间交互的tcp端口,默认为9300

transport.tcp.port: 9300

# 是否支持跨域

http.cors.enabled: ture

# 表示支持所有域名

http.cors.allow-origin: "*"

# 配置该节点是否有资格被选举为主节点(候选主节点),为了防止脑裂,配置奇数个候选主节点

node.master: ture

# 配置该节点是数据节点,用于保存数据

node.data: ture

# 集群各节点IP地址

discovery.zen.ping.unicast.hosts:

["47.113.201.81:9300","47.113.201.81:9301",i"47.113.201.81:9302"]

# 自动发现master节点的最小数

discovery.zen.minimum_master_nodes: 1

# v7+ 集群配置新方案cluster.name: elasticsearch-cluster node.name: es-node1 node.master: true  node.data: true # path.data: /opt/elasticsearch-7.0.0/data # path.logs: /opt/elasticsearch-7.0.0/logs network.host: 0.0.0.0transport.tcp.port: 9300 transport.tcp.compress: true http.port: 9200 http.max_content_length: 100mb bootstrap.memory_lock: true discovery.seed_hosts: ["47.113.201.81:9300","47.113.201.81:9301","47.113.201.81:9302"]cluster.initial_master_nodes: ["47.113.201.81:9300","47.113.201.81:9301","47.113.201.81:9302"]gateway.recover_after_nodes: 2 gateway.recover_after_time: 5m gateway.expected_nodes: 3 

  • Es1.yml

cluster.name: elasticsearch-clusternode.name: es-node1network.host: 0.0.0.0network.publish_host: 47.113.201.81http.port: 9200transport.tcp.port: 9300http.cors.enabled: truehttp.cors.allow-origin: "*"node.master: truenode.data: truecluster.initial_master_nodes: ["es-node1"]discovery.zen.ping.unicast.hosts: ["47.113.201.81:9300","47.113.201.81:9301","47.113.201.81:9302"]# discovery.zen.minimum_master_nodes: 1  # v7+ 版本ES不在使用该配置

  • Es2.yml

cluster.name: elasticsearch-clusternode.name: es-node2network.host: 0.0.0.0network.publish_host: 47.113.201.81http.port: 9201transport.tcp.port: 9301http.cors.enabled: truehttp.cors.allow-origin: "*"node.master: truenode.data: truecluster.initial_master_nodes: ["es-node1"]discovery.zen.ping.unicast.hosts: ["47.113.201.81:9300","47.113.201.81:9301","47.113.201.81:9302"]# discovery.zen.minimum_master_nodes: 1  # v7+ 版本ES不在使用该配置

  • Es3.yml

cluster.name: elasticsearch-clusternode.name: es-node3network.host: 0.0.0.0network.publish_host: 47.113.201.81http.port: 9202transport.tcp.port: 9302http.cors.enabled: truehttp.cors.allow-origin: "*"node.master: truenode.data: truecluster.initial_master_nodes: ["es-node1"]discovery.zen.ping.unicast.hosts: ["47.113.201.81:9300","47.113.201.81:9301","47.113.201.81:9302"]# discovery.zen.minimum_master_nodes: 1  # v7+ 版本ES不在使用该配置

OpenJdk搭建

# 检查并卸载OpenJDK# 检查命令java -versionrpm -qa | grep java# 卸载命令rpm -e –nodeps tzdata-java-2012c-1.el6.noarchrpm -e –nodeps java-1.6.0-openjdk-1.6.0.0-1.45.1.11.1.el6.x86_64# 将安装文件上传到linux服务器后,进入到该目录执行解压安装tar -xvf jdk-7u75-linux-x64.tar# 解压完成后创建一个新的java目录并将刚刚解压的jdk目录移动到我们创建的目录mkdir -p /wocloud/javamv ./jdk1.7.0_75 /workcloud/java/# 最后再删除安装文件rm -rf jdk-7u75-linux-x64.gz# 安装完成后需要配置一下环境变量,编辑/etc/profile文件vi /etc/profile# 在文件尾部添加如下配置export JAVA_HOME=/wocloud/java/jdk1.7.0_75 export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$PATH:$JAVA_HOME/bin# source命令重新加载/etc/profile文件,使得修改后的内容生效source /etc/profile

# 分别创建三个容器# 查看ES镜像IDdocker images# 创建容器docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /ES/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES01 [镜像ID]docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /ES/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES02 [镜像ID]docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9202:9202 -p 9302:9302 -v /ES/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES03 [镜像ID]

# 本机配置docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 -v /ES/config/es1.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES01 6fe993d6e7eddocker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9201:9201 -p 9301:9301 -v /ES/config/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES02 6fe993d6e7eddocker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9202:9202 -p 9302:9302 -v /ES/config/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name ES03 6fe993d6e7ed

# 如果遇到elasticsearch启动时错误# 查看日志docker logs [容器ID]# 最大虚拟内存区域vm.max_map_count[65530]太低,请至少增加到[262144]# 解决方法# 在/etc/sysctl.conf文件最后添加一行,退出系统目录vim /etc/sysctl.conf# 最后一行添加vm.max_map_count = 655360# 并执行命令sysctl -p# 重新启动elasticsearch,即可启动成功# 重启三个容器docker restart ES01 ES02 ES03# 访问:http://47.113.201.81:9200/# 查看节点信息http://47.113.201.81:9200/_cat/nodes?pretty

ES启动常见问题

# 问题一Exception in thread "main" SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ElasticsearchParseException[malformed, expected settings to start with 'object', instead was [VALUE_STRING]];# 原因:elasticsearch.yml文件错误# 解决:参数与参数值等号间需要空格node.name ="node"  ##错误node.name = "node" ##正确# 问题二org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root# 原因:处于对root用户的安全保护,需要使用其他用户组进行授权启动# 解决:# step1:用户组进行授权启动   groupadd elsearch               useradd elsearch -g elsearch -p elasticsearch    chown -R elsearch:elsearch  elasticsearch-6.3.0    # 备注: 添加用户组 elsearch           # 添加用户 elsearch 密码为 elasticsearch 到用户组 elsearch         # 将elsearch安装目录授权给 用户组:用户  即 elsearch:elsearch# step2: 重新启动    su elsearch    /elasticsearch-6.3.0/bin/elasticsearch   # 备注:切换 elsearch 用户          # 重新启动                    # 问题三OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot a ...'(errno=12);# 原因:jvm要分配最大内存超出系统内存# 解决:# step1:适当调整指定jvm内存vi /home/elasticsearch-6.3.0/config/jvm.options #备注:编辑elasticsearch jvm配置文件 修改如下 esc+:wq保存退出## JVM configuration ################################################################## IMPORTANT: JVM heap size#################################################################### You should always set the min and max JVM heap## size to the same value. For example, to set## the heap to 4 GB, set:#### -Xms4g## -Xmx4g#### See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html## for more information################################################################## # Xms represents the initial size of total heap space# Xmx represents the maximum size of total heap space -Xms512m-Xmx512m # 备注:由于虚拟机内存制定1g,所以适当降低jvm内存指定# step2:重启su elsearch/elasticsearch-6.3.0/bin/elasticsearch# 问题四ERROR: [3] bootstrap checks failed# 原因:虚拟机限制用户的执行内存# 解决:[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536][2]: max number of threads [3802] for user [elsearch] is too low, increase to at least [4096]# step1:修改安全限制配置文件su root vi /etc/security/limits.conf    # 备注:使用最高权限 修改安全配置 在文件末尾加入    # End of file    elsearch       hard        nofile        65536     elsearch       soft        nofile        65536    *               soft       nproc         4096    *               hard       nproc         4096    # 备注: elsearch为用户名 可以是使用*进行通配      # nofile 最大打开文件数目    # nproc 最大打开线程数目[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]# step2:修改系统配置文件vi /etc/sysctl.conf # 备注:行末加上vm.max_map_count = 655360 ,esc +:wq保存退出# step3:重启# 问题五org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: failed to obtain node locks, tried [[/home/elasticsearch-6.3.0/data/elasticsearch]] with lock id [0]; maybe these locations are not writable or multiple nodes were started without increasing [node.max_local_storage_nodes] (was [1])?# 原因:线程占用# 解决:重新启动# step1:杀死elasticsearch线程ps -ef | grep elastic# step2: 重启# 问题六ERROR: bootstrap checks failedmemory locking requested for elasticsearch process but memory is not locked# 原因:锁定内存失败# 解决:vim /etc/security/limits.conf 添加下面两行soft memlock unlimitedhard memlock unlimited# tips:* 代表的是linux内所有的用户# 问题七Unsupported major.minor version 52.0# 原因:java版本太低# 解决:更换jdk版本,ElasticSearch5.0.0支持jdk1.8.0以上# 问题八org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: Property [elasticsearch.version] is missing for plugin [head]# 原因:elasticsearch新版本是不允许安装插件在文件目录plugins下面的# 解决:将plugins下面的插件目录放到其他目录即可

Elasticsearch-Head管理界面

# Docker 部署 Elasticsearch-Head# 可以通过管理界面查看ElasticSearch相关信息# 拉取镜像docker pull mobz/elasticsearch-head:5# 运行容器docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5# 等待启动成功# 常见问题_search 406 (Not Acceptable)# 解决办法  # 进入docker es_admin容器  # 命令 docker exec -it [容器ID] /bin/bash  docker exec -it es_admin /bin/bash  # 进入head安装目录  # cd 进入_site/目录,编辑vendor.js共两处(若无vim编辑器,见下面Docker容器vim安装)  6886行:/contentType: "application/x-www-form-urlencoded"改成 -->   contentType: "application/json;charset=UTF-8"  7573行:var inspectData = s.contentType === "appliaction/x-www-form-urlencoded"&& 改成 -->  var inspectData = s.contentType === "application/json;charset=UTF-8"&&  # Docker容器vim安装# 更新源apt-get update# 先更新 防止提示:Unable to locate package vim# 安装vimapt-get install vim 


最后,通过这次短暂的学习和体验,感受到了阿里云服务器的强大,同时,也加深了自己对强大技术学习的渴望,在今后的日子里,我将继续深入学习云服务器相关技术,让编程变得更加奇趣无穷。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云ECS续领
计算机小白第一次使用云服务器
67 0
阿里云续领ecs
通过阿里云的高校计划,我掌握了linux的一些基本命令,搭建了个人的博客
61 0
阿里云ECS使用体验
飞天加速计划·高校学生在家实践活动体验
210 0
阿里云ECS使用体验
历时两个礼拜的阿里云ESC使用体验以及一些使用的技巧攻略
153 0
阿里云ECS使用体验
阿里云ECS使用初体验记录
111 0
阿里云ECS使用体验
关于使用阿里云ECS云服务器的个人体验
158 0
阿里云ECS使用体验
阿里云ECS使用简单总结
139 0
阿里云ECS使用体验
阿里云ECS一周使用体验简单总结
133 0
对于阿里云ECS使用体验
熟悉ecs的使用,对于专业有很大帮助
192 0
阿里云ecs使用体验
因疫情在家进行阿里云ecs实践体验
227 0
1
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载