ES部署
一、配置网卡(无网环境忽略此条)
1 2 3 4 5 6
| vi /etc/sysconfig/network-scripts/ifcfg-*
BOOTPROTO=static # 修改为静态网路,可以不修改 ONBOOT=yes
systemctl restart network
|
二、配置本地yum源(有网环境忽略此条)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| mkdir /centos7 #存放本地yum源
mount /iso ./tmp #将iso镜像挂载到本地文件中
cp -vrf ./tmp/* /centos7 #将挂载后到本地文件copy到本地yum源文件中
cd /etc/yum.repos.d
mv ./CentOS-* /root/tmp #移除yum到网络源信息
vi yum.repo #编写本地yum [centos7-yum] name="yum.local" baseurl=file:///centos7 gpgcheck=0 enabled=1
yum clean all #刷新缓存
rm -rf /var/cache/yum
yum list #显示数据则表示本地yum配置成功
yum install net-tools #安装net-tools,查看ifconfig
|
注意:
本地挂载完镜像之后,如果还要使用该文件的话,必须先umount该文件,否则会报错,提示权限不够
三、关闭防火墙及selinux
1 2 3 4 5 6 7
| systemctl disable firewalld systemctl stop firewalld
vi /etc/sysconfig/selinux SELINUX=disabled setenforce 0 getenforce
|
注意:
安装docker时可以不用关闭,当es进行集群部署时,必须关闭,否则集群无法生效
四、安装docker
1 2 3 4 5
| scp docker.zip root@ip:~ #没网手动copy unzip docker.zip cd docker sh setup_without_container-selinux-2.9 #虚拟机/实体机 # 服务器,直接联网安装,不赘述
|
setup_without_container-selinux-2.9.sh 脚本内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| #auto-mount yum clean all yum makecache yum remove -y docker-engine mkdir -p /data/tmp chmod -R 777 /data/tmp mkdir -p /data/sys/var/docker chmod -R 777 /data/sys/var/docker ln -s /data/sys/var/docker /var/lib/docker ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo "vm.max_map_count=655360" >> /etc/sysctl.conf && sysctl -p yum install -y net-tools useradd -d /data/duser -m duser echo "duser:5VSDHai4" |chpasswd echo "duser ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers rpm -ivh container-selinux-2.9-4.el7.noarch.rpm yum install -y ./docker-ce-17.09.0.ce-1.el7.centos.x86_64.rpm usermod -aG docker duser rm -fr ./* cd ../ rm -fr docker_install docker_install.tar.gz
|
注意:
sh脚本可以根据具体情况进行修改
当出现无法安装成功,且提示rpm安装问题时,在rpm安装命令之后,加 —nodeps —force ,意思为不考虑分析包之间的依赖关系,即可安装成功
五、开启docker服务
1 2 3 4
| systemctl start docker systemctl enable docker systemctl status docker docker version #查询是否开启docker
|
六、安装java(部署es 的依赖)
1
| java -version #查看是否有java,如果有,忽略以后步骤
|
本地安装java
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
1 2 3 4 5 6
| mkdir /usr/java cp jdk-8u171-linux-x64.rpm /usr/java cd /usr/java chmod +x jdk-8u171-linux-x64.rpm rpm -ivh jdk-8u171-linux-x64.rpm java -version
|
七、读取镜像(根据实际情况)
1 2 3 4 5 6 7 8 9 10 11
| docker load -i image.tar #如果是zip的镜像,则先unziip成tar文件 docker images
# 启动容器,并且将本地的文件目录挂载至容器data目录下 docker run -itd -p 8888:8888 -v /data/origin_file:/data/duser/patent_similaruty/data/origin_file --name patent_preprocess patent_preprocess:1.1 bash
#进入容器 docker exec -it patent_preprocess bash
#停止容器 docker stop patent_preprocess
|
八、如果需要docker-compose启动
安装并使用docker-compose
方法一:
使用curl命令下载
1 2 3
| curl -L https://github.com/docker/compose/releases/download/1.24.0/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
|
方法二:
使用pip命令下载
1 2 3 4 5
| yum -y install epel-release
yum -y install python-pip
pip install docker-compose
|
搜索的部署
一、部署集群
user用户下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| unzip elasticsearch_bak.zip #解压引擎文件 # 修改默认的配置文件 cd elasticsearch_bak/config vi elasctsearch.yml cluster.name: es-zl #修改集群名,所有节点配置的该名称必须一样 node.name: es-46 #修改每个节点的名称,必须不同,以区分每个节点 node.master:true #是否可作为主节点 path.data: /data/es_data #es数据存放的位置 network.host:127.17.30.46 #每个节点的ip地址 http.port: 9200 #节点的端口,必须相同,默认9200 bootstrap.memory_lock: true bootstrap.system_call_filter: false #内存锁定,防止swap使es产生内存交互 discovery.zen.ping.unicast.hosts:["127.17.30.44","127.17.30.45",,] #集群master节点的ip,不需要所有节点的ip,其他节点只要能与任意一个master节点通讯,即可加入到该集群当中 discovery.zen.minimum_master_nodes:2 #当2个有资格成为主节点的从节点认为主节点挂了,则进行重新选主,一般设置为(n/2)+1,防止es出现脑裂情况 gateway.recover_after_nodes: 3 #节点数量达到多少之后,进行数据恢复处理 http.cors.enabled: true http.cors.allow-origin: "*" vi yvm.options -Xms16g #默认为2g,可根据服务器内存,自行修改 #通过一下命令查看内存 cat /proc/cpuinfo | grep 'cpu cores' | wc -l #查看cpu核数 cat /proc/meminfo | grep MemTotal #只查看内存 free -h #查看内存的使用 df -h #查看硬盘存储
|
注意:
该操作必须在每台服务器上都要部署,并不能在root用户下操作,要在user下操作,如果没有usr用户,则创建
如果没有操作权限,则执行:
1 2 3
| # root下,将文件权限设置为duser用户可操作 chown duser * chgrp duser *
|
当不使用es远程词典时:
修改elasticsearch-5.3.0/plugins/ik/config/IKAnalyzer.cfg.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>IK Analyzer 扩展配置</comment> <entry key="ext_dict">custom/mydict.dic;custom/single_word_low_freq.dic</entry> <entry key="ext_stopwords">custom/ext_stopword.dic</entry>
</properties>
|
说明:
注释后两项即可
添加自定义同义词
替换config/synonyms.txt文件
synonyms.txt文件内格式,所有同义词为一行,且用 “, ” 隔开
二、修改集群配置
root用户下
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| vi /etc/security/limits.conf #添加一下语句 * soft nofile 65536 * hard nofile 65536 * soft nproc 65536 * hard nproc 65536 duser soft memlock unlimited duser hard memlock unlimited
vi /etc/sysctl.conf #修改以下语句 vm.max_map_count=655360 sysctl -p
|
三、启动集群
user用户下
1 2 3 4 5
| cd elasticsearch_bak/bin ./elasticsearch -d #后台启动集群 curl 172.17.30.45:9200/_cat/nodes #查看所有节点,*为主节点
# 启动不了时候,查看es-log
|
四、搜索部署
user用户下的操作
1 2 3 4 5 6 7 8
| vi index_search_mapping.sh #修改的ip和端口与集群一样 curl -XPUT "http://10.25.114.90:9200/index" { settings": { "number_of_shards": 6, #主分片数量,一般为 服务器总核数 "number_of_replicas": 2, #副本分片的数量,防止数据丢失 }
|
注意:
分词器anslyzer可以根据实际情况进行修改、删除和添加
添加删除字段
当需要添加字段时,只要在以下位置添加即可
1 2 3 4 5 6 7 8 9 10 11 12
| "mappings": { "index": { "properties": { "id": { "type": "keyword" }, "": { #需要添加的字段名 "type":"" #添加的字段的约束条件 } } } }
|
注意:
修改某个文件的字段之前,需要先删除该文件的core
重新启动搜索时,也需要进行以下步骤
1 2 3
| curl -XDELETE "http://172.19.30.45:9200/index" #修改完之后,重新运行该文件 sh index_search_mapping.sh
|
五、查询启动结果
1 2 3 4
| curl http://ip:9200/index?pretty #查询字段 curl http://ip:9200/_cat/nodes #查询节点 curl http://ip:9200/_cat/health #查询加群健康,green curl http://ip:9200/_cat/shards #查询集群分片状态
|
六、数据量查询
1 2 3 4 5 6 7
| curl http://ip:9200/one_index/_stats #查询某一个index下的数据量 curl http://ip:9200/one_index,two_index/_stats #查询多个index的数据量,使用,隔开 curl http://ip:9200/_all/_stats #查询所有index下的数据量
# 返回search、fetch、get、index、bulk、segment、counts
curl http://ip:9200/_cat/count/index #只查询某个index下的文档数,如果不加index,则查询所有的index的文档总数
|
七、search-guard为es集群配置auth
1、安装search-guard插件和ssl插件
查询es的版本
1 2 3
| curl ip:9200
# 结果中的number数据即代表版本号
|
安装search-guard
https://repo1.maven.org/maven2/com/floragunn/search-guard-5
找到对应的版本,下载即可
或者使用命令行下载,es目录下
1
| bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.3.0-12
|
安装search-guard-ssl
https://repo1.maven.org/maven2/com/floragunn/search-guard-ssl
命令行
1
| bin/elasticsearch-plugin install -b com.floragunn:search-guard-ssl:5.3.0-22
|
注意:
当es版本较高时,可能并不需要这两个都存在,取search-guard即可
2、生成es证书文件
下载search-guard源码工具,生成证书的工具
1
| git clone https://github.com/floragunncom/search-guard-ssl.git
|
修改ca配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| cd search-guard-ssl/example-pki-scripts/etc/
vi root-ca.conf # 根证书配置 0.domainComponent = "www.test.com” # 域名 1.domainComponent = "www.test.com" # 域名 organizationName = "Test" # 组织名称 organizationalUnitName = "Test Root CA" # 组织单位名称 commonName = "Test Root CA" # 通用名称 vi signing-ca.conf # 签名证书配置 0.domainComponent = "www.test.com” # 域名 1.domainComponent = "www.test.com" # 域名 organizationName = "Test" # 组织名称 organizationalUnitName = "Test Signing CA" # 组织单位名称 commonName = "Test Signing CA" # 通用名称
|
注意:
以上信息填写,必须保证和生成证书时信息一致
修改sh文件
返回example-pki-scripts目录下,修改example.sh文件:
1 2 3 4 5 6 7 8 9 10 11 12 13
| #!/bin/bash
set -e
./clean.sh
./gen_root_ca.sh 12345678 12345678
./gen_node_cert.sh 0 12345678 12345678&& ./gen_node_cert.sh 1 12345678 12345678 && ./gen_node_cert.sh 2 12345678 12345678
./gen_client_node_cert.sh test 12345678 12345678
./gen_client_node_cert.sh test 12345678 12345678
|
参数说明:
./gen_root_ca.sh 12345678 12345678
第一个参数为CA_PASS,即CA密码(根证书密码)
第二个参数为TS_PASS,即TS密码(truststore,信任证书密码)
./gen_node_cert.sh 0 12345678 12345678
第一个参数为node编号,生成证书后的文件名为node-0*
第二个参数为KS_PASS(keystore文件密码)
第三个参数为CA_PASS
./gen_client_node_cert.sh test 12345678
第一个参数为客户端节点名称,生成证书后的文件名为test*
第二个参数为KS_PASS
第三个参数为CA_PASS
生成证书,运行example.sh
1 2 3
| sh example.sh
# 在当前目录下会生成证书文件
|
3、配置es,启动search-guard
将生成的各个节点的证书,分别copy到各个节点上
1 2 3 4 5 6 7 8 9
| # 将node-0-keystore.jks和truststore.jks复制到es的config目录下
cp node-0-keystore.jks ~/elasticsearch/config/ cp truststore.jks ~/elasticsearch/config/
# 将test-keystore.jks和truststore.jks复制到es的plugins/search-guard-2/sgconfig目录下
cp test-keystore.jks ~/elasticsearch/plugins/search-guard-2/sgconfig/ cp truststore.jks ~/elasticsearch/plugins/search-guard-2/sgconfig/
|
注意:
保持证书的一致性,因此只需要在一台机器上生成CA证书即可
修改es的配置文件config/elaticsearch.yml
在之前修改的基础上,增加如下配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| searchguard.ssl.transport.enabled: true searchguard.ssl.transport.keystore_filepath: node-0-keystore.jks searchguard.ssl.transport.keystore_password: 12345678 searchguard.ssl.transport.truststore_filepath: truststore.jks searchguard.ssl.transport.truststore_password: 12345678 searchguard.ssl.transport.enforce_hostname_verification: false searchguard.ssl.transport.resolve_hostname: false
searchguard.ssl.http.enabled: false searchguard.ssl.http.keystore_filepath: node-0-keystore.jks searchguard.ssl.http.keystore_password: 12345678 searchguard.ssl.http.truststore_filepath: truststore.jks searchguard.ssl.http.truststore_password: 12345678
searchguard.authcz.admin_dn: - CN=test, OU=client, O=client, L=Test, C=DE
|
启动es
4、将search-guard的配置写入es中
添加权限
1
| chmod -R 777 plugins/search-guard-5/tools/sgadmin.sh
|
配置格式
1
| ./plugins/search-guard-5/tools/sgadmin.sh -cn clustername -h hostname -cd plugins/search-guard-5/sgconfig -ks plugins/search-guard-5/sgconfig/admin-keystore.jks -kspass password -ts plugins/search-guard-5/sgconfig/truststore.jks -tspass password -nhnv
|
注意:
clustername为集群的名称
hostname为elasticsearch.yml 文件中 network.host 的值
password生成证书设置的密码
以上配置生成的命令为
1
| ./plugins/search-guard-5/tools/sgadmin.sh -cn es-nlp -h 192.168.124.18 -cd plugins/search-guard-5/sgconfig -ks plugins/search-guard-5/sgconfig/test-keystore.jks -kspass 12345678 -ts plugins/search-guard-5/sgconfig/truststore.jks -tspass 12345678 -nhnv
|
5、添加es用户及密码
生成md5加密密码
1 2 3 4 5 6 7
| chmod -R 777 plugins/search-guard-2/tools/hash.sh
cd plugins/search-guard-2/tools/
plugins/search-guard-2/tools/hash.sh -p 123456
# 保存生成的hash密码
|
添加用户及密码
1 2 3 4 5 6 7
| vim plugins/search-guard-5/sgconfig/sg_internal_users.yml
sunww: hash: 加密后的字符串 # password: 123456 # 最后一行时password提示,防止忘记
|
添加用户的权限
1 2 3 4 5 6 7 8
| vim plugins/search-guard-5/sgconfig/sg_roles_mapping.yml
ag_all_access: users: - admin - sunww
# 添加所有权限给sunww用户
|
重新将配置写入es中生效
1
| ./plugins/search-guard-5/tools/sgadmin.sh -cn es-nlp -h 192.168.124.18 -cd plugins/search-guard-5/sgconfig -ks plugins/search-guard-5/sgconfig/test-keystore.jks -kspass 12345678 -ts plugins/search-guard-5/sgconfig/truststore.jks -tspass 12345678 -nhnv
|
6、测试
1 2 3 4 5
| curl http://sunww:123456@127.0.0.1:9200
curl -u sunww:123456 http://127.0.0.1:9200
curl --user sunww:123456 http://127.0.0.1:9200
|
八、x-pack为es集群配置auth
1、要求
es的版本必须为6.X及以上,5.X的es配置x-pack只能通过api修改密码
1
| wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.tar.gz
|
2、安装x-pack
1
| ./bin/elasticsearch-plugin install x-pack
|
3、对elasticsearch、logstash、kibana分别设置登录密码(默认es用户名为elastic,logstash用户名为logstash_system,kibana用户名为kibana)
1
| ./bin/x-pack/setup-passwords interactive
|
注意:
此时的es必须时启动状态
4、配置./config/elasticsearch.yml
1 2 3 4 5 6 7 8 9 10 11 12
| http.cors.enabled: true http.cors.allow-origin: '*' http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.graph.enabled xpack.ml.enabled xpack.monitoring.enabled xpack.reporting.enabled xpack.security.enabled xpack.watcher.enabled
|
5、测试访问
1
| curl -u elastic:password ip:port
|
6、x-pack默认账号密码
注意:
x-pack只有一个月的使用时间,适合poc使用
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com