集群搭建和启动
对应考纲里的
Installation and Configuration
Deploy and start an Elasticsearch cluster that satisfies a given set of requirements
一般有几种方式来deploy and start 一个 ES集群,对于考试来说应该是Linux里的两种RPM包和tar包安装,毕竟包括windows、Mac在内的系统并不是搭建搜索服务器的常用环境,而docker并不是elastic的技术栈(虽然他们也有从docker image到docker-compose的支持)
Linux环境
环境准备
sudo yum install -y wget tar shasum
tar包安装方式
官网步骤
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-linux-x86_64.tar.gz.sha512
shasum -a 512 -c elasticsearch-7.6.0-linux-x86_64.tar.gz.sha512
tar -xzf elasticsearch-7.6.0-linux-x86_64.tar.gz
cd elasticsearch-7.6.0/
- 从官网地址下载对应的tar包以及它的sha512的验证文件
- 或者也可以直接下载这个包,里面只有纯开源功能的部分,不过考试的话后面可能会考到权限设置之类的只在xpack里面的功能,不大可能需要这个包https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-7.6.0-linux-x86_64.tar.gz
- tar包的格式是elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz,或者elasticsearch-oss-${ES_VERSION}-linux-x86_64.tar.gz
- 通过shasum来验证这个jar包的合法性
- 解压缩这个tar包并进入项目文件夹,这个文件夹下面会用$ES_HOME表示
- 记得给整个文件夹赋予相应的权限,特别是$ES_HOME/data和$ES_HOME/log,或者相应的配置的data和log目录
- 运行命令
sudo echo vm.max_map_count=655360 >> /etc/sysctl.conf
- 然后把修改配置文件
sudo vi /etc/security/limits.conf
- 把两个nofile的值改成65536
- * soft nofile 65535
- * hard nofile 65535
- 添加 memlock unlimited的配置
- * hard memlock unlimited
- * soft memlock unlimited
- 把两个nofile的值改成65536
- 执行启动命令
./bin/elasticsearch
,如果要求后台运行则需要加参数-d
写作./bin/elasticsearch -d
- ES默认不可以用root账户,某些旧的版本可以通过修改jvm参数或者直接在启动参数里添加
-Des.insecure.allow.root=true
来强行使用root启动 - 但是在比较新的版本里这个方式已经失效了,只能用非root用户启动
- ES默认不可以用root账户,某些旧的版本可以通过修改jvm参数或者直接在启动参数里添加
- 如果是前台运行,es节点的日志会直接输出在屏幕上,同时写在$ES_HOME/logs/${clusterName}.log
- 检查一下集群状态,是否正常启动
curl ${ip}:9200
,看是否会有显示集群信息的json返回,如果有就说明启动正常了{ "name" : "node1", // 当前访问节点名字 "cluster_name" : "docker-cluster", // 集群名称 "cluster_uuid" : "wZFXKEITRKWVg36vUHWgyQ", // 集群id(自动生成) "version" : { "number" : "7.6.0", // 节点ES版本 "build_flavor" : "oss", // 存储方式 "build_type" : "docker", // 构建方式(我用的docker,官网的例子用的tar包) "build_hash" : "7f634e9f44834fbc12724506cc1da681b0c3b1e3", // 构建hash "build_date" : "2020-02-06T00:09:00.449973Z", // 构建时间 "build_snapshot" : false, // 是否snapshot "lucene_version" : "8.4.0", // lucene版本 "minimum_wire_compatibility_version" : "6.8.0", // 最低写入版本 "minimum_index_compatibility_version" : "6.0.0-beta1" // 最低索引版本,这俩我也不太清楚啥意思,目测是最小支持的ES节点版本 }, "tagline" : "You Know, for Search" }
RPM包安装
官网步骤有俩:
直接yum install
sudo vim /etc/yum.repos.d/elasticsearch.repo
把下面这些玩意填在里面,保存并退出[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
sudo yum install --enablerepo=elasticsearch elasticsearch
手动下载rpm包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-x86_64.rpm
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.0-x86_64.rpm.sha512
shasum -a 512 -c elasticsearch-7.6.0-x86_64.rpm.sha512
sudo rpm --install elasticsearch-7.6.0-x86_64.rpm
#当然,rpm包也有开源版的,https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-oss-7.6.0-x86_64.rpm
命名格式和tar包类似,elasticsearch-${ES_VERSION}-linux-x86_64.rpm
然后就是正常的运行systemctl启动命令了,和通过systemctl安装启动其他服务一样
sudo /bin/systemctl daemon-reload // 重新家在systemctl配置
sudo systemctl enable elasticsearch.service // ES服务保活开启
sudo systemctl start elasticsearch.service // 开启ES服务
sudo systemctl stop elasticsearch.service // 关闭ES服务
通过RPM包安装和tar包安装之后配置文件包括ES的一些功能性文件(夹)的位置会有所不同,具体见下一节。
运行完systemctl start elasticsearch.service
之后有两种方式看ES节点是否正常启动
- 运行
systemctl start elasticsearch.service
,如果成功了会打印相应的start状态的日志出来 - 和tar包启动一样,运行
curl ${ip}:9200
看是否会出现集群启动成功的信息
在系统配置文件里(/etc/sysconfig/elasticsearch),RPM包安装还支持一些其他的环境配置
key | 值 |
---|---|
JAVA_HOME | 自行指定的Javahome,替代安装完之后默认的路径 |
MAX_OPEN_FILES | 最大可打开文件数?默认65535 |
MAX_LOCKED_MEMORY | 最大可锁定内存数,建议设成unlimited用来配合配置文件里的bootstrap.memory_lock |
MAX_MAP_COUNT | 最大内存map空间,不知道干嘛用的,官网提供的文档也打不开。大概说的是如果用mmapfs的方式存储数据,那么记得在systemctl启动ES之前把它设大点,默认262144 |
ES_PATH_CONF | 自定义的配置文件路径,不设就在/etc/elasticsearch目录里面 |
ES_JAVA_OPTS | 其他的Java启动参数。ES是个Java项目,所以这里可以添加一些自定的Java启动参数。我能想到的就是一些Java agent路径之类的东西 |
RESTART_ON_UPGRADE | 是否在手动安装升级之后自动重启ES实例,默认false |
tar包安装和RPM包安装的区别
区别 | tar包 | rpm包 |
---|---|---|
home | tar包解压缩的地方$ES_HOME | /usr/share/elasticsearch |
bin | $ES_HOME/bin | /usr/share/elasticsearch/bin |
conf | $ES_HOME/conf | /etc/elasticsearch,也可以配置为环境变量 ES_PATH_CONF |
data | $ES_HOME/data | /var/lib/elasticsearch |
logs | $ES_HOME/logs | /var/log/elasticsearch |
jdk | – | /usr/share/elasticsearch/jdk |
plugins | $ES_HOME/plugins | /usr/share/elasticsearch/plugins |
简单讲用tar包安装的时候,tar包解压缩的folder就是$ES_HOME,而用rpm包安装的时候,ES的各个文件夹会到处散,不过主要会在/usr/share/elasticsearch里面
安装完成
按照官网的说法,安装完成基本的安装之后,理论上应该是对ES开启守护进程或者做保活。
通过tar包安装的话,运行./bin/elasticsearch -d -p pid
让ES节点运行在指定的pid上,后面可以通过运行pkill -F pid
来停用ES节点,不过我想大家应该更多的会是直接kill -9吧。😛
给个参考命令,当然这样停止ES节点不够优雅。ps -ef | grep elastic | grep -v grep | awk '{ print $2 }'
对于RPM包安装的就不用那么麻烦
用sudo systemctl enable elasticsearch.service
做保活和自启动
用sudo systemctl stop elasticsearch.service
做服务停止
docker 方式
虽然我个人认为主流方式(考试会考)的是Linux环境的安装,但是作为越来越火的docker技术还是想提一嘴。
- 下docker镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.6.0
- 直接单节点启动
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.0
- 这里可以看到除了ES默认端口暴露之外,还有个"discovery.type=single-node",这就是单节点启动的时候不去尝试连接其他节点的意思
- 还有直接docker-compose方式启动多节点的,配置文件太长了就不贴了,有兴趣的同学可以自己下下来玩玩
参考资料
官网安装方式目录
tar包安装
rpm包安装
docker安装
转载:https://blog.csdn.net/weixin_40601534/article/details/104578981