部署 elasticsearch和迁移数据
一、 服务器资源
服务类型:Linux服务器
IP:服务器公网ip地址
操作系统:CentOS 7.9 x64
二、服务端安装JDK
2.1、卸载系统自带的jdk
Centos可能自带了jdk,但是版本可能会较低,执行下面的命令检测是否已经安装了jdk
代码语言:javascript复制# rpm -qa | grep jdk
复制代码
如果检测已经安装了二进制的jdk,则使用下面的命令卸载,防止现在的二进制jdk对你之后安装的源码jdk冲突
可能已经安装,但是版本相当于官网较低,为防止冲突,所以先卸载自带的jdk
代码语言:javascript复制#rpm -e --nodeps tzdata-java-2014g-1.el6.noarch
复制代码
2.2、将JDK放到 tools目录下并解压
把jdk-8u201-linux-x64.tar.gz上传到/opt/tools目录下,解压到/opt/app目录下
代码语言:javascript复制# cd /opt/tools //进到tools目录
# tar -zxvf jdk-8u201-linux-x64.tar.gz -C /opt/app/ //解压jdk-8u201-linux-x64.tar.gz压缩包
复制代码
把解压出来的目录改名为jdk1.8
代码语言:javascript复制# cd /opt/app //进到app目录
# mv jdk1.8.0_201 jdk1.8 //改文件的名称
复制代码
2.3、将JDK添加到环境变量中
代码语言:javascript复制# vi /etc/profile //打开profile
复制代码
在文件末尾添加以下内容:
代码语言:javascript复制#java env
export JAVA_HOME=/opt/app/jdk1.8
export PATH=$PATH:$JAVA_HOME/bin
复制代码
使修改生效:
代码语言:javascript复制# source /etc/profile
复制代码
验证安装是否成功:
代码语言:javascript复制# java -version
复制代码
三、从节点配置防火墙
启动9200、9300端口
代码语言:javascript复制# vi /etc/sysconfig/iptables //打开iptables
复制代码
添加以下内容:
代码语言:javascript复制-A INPUT -m state --state NEW -m tcp -p tcp --dport 9200 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9300 -j ACCEPT
复制代码
重启防火墙
代码语言:javascript复制# service iptables restart
复制代码
四、服务端安装Elasticsearch
4.1、将Elasticsearch放到 tools目录下并解压
把elasticsearch-6.3.2.tar.gz
上传到/opt/tools
目录下,解压到/opt/app目录下
# cd /opt/tools //进到tools
# tar -zxvf elasticsearch-6.3.2.tar.gz -C /opt/app/ //解压到app目录
复制代码
把解压出来的目录改名为elasticsearch
# cd /opt/app //进到app目录
# mv elasticsearch-6.3.2 elasticsearch //更改名称
复制代码
4.2、创建数据和日志目录
代码语言:javascript复制# cd /opt/ //进到opt目录
# mkdir elk //创建elk
# cd elk //进到elk
# mkdir data //创建data
# mkdir logs //创建logs
复制代码
4.3、修改ES配置文件
代码语言:javascript复制# cd /opt/app/elasticsearch/ //进到elasticsearch
# vi config/elasticsearch.yml //打开elasticsearch.yml
复制代码
把里面的内容替换为:
代码语言:javascript复制cluster.name: dzjk-es
node.name: es-node1
cluster.initial_master_nodes: [es-node1]
path.data: /opt/elk/data
path.logs: /opt/elk/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: ip
http.port: 9200
discovery.zen.ping.unicast.hosts: ["ip:9300"]
http.cors.enabled: true
http.cors.allow-origin: "*"
复制代码
注意:以上内容的两处ip替换为Linux服务器的IP
4.4、JVM调优
代码语言:javascript复制# vi /opt/app/elasticsearch/config/jvm.options
复制代码
把xms和xmx设置为物理内存的一半:
代码语言:javascript复制-Xms8g
-Xmx8g
复制代码
4.5、新建es专用用户并授权
代码语言:javascript复制# groupadd elsearch
# useradd elsearch -g elsearch -p elasticsearch
复制代码
把es安装目录授权给elsearch
用户
# cd /opt/app/
# chown -R elsearch:elsearch ./elasticsearch
复制代码
把elk数据和日志目录elsearch用户
代码语言:javascript复制# chown -R elsearch:elsearch /opt/elk
复制代码
4.6、将es添加到环境变量中
代码语言:javascript复制# vi /etc/profile
复制代码
在文件末尾添加以下内容:
代码语言:javascript复制#elasticsearch env
export ES_HOME=/opt/app/elasticsearch
export PATH=$PATH:$ES_HOME/bin
复制代码
使修改生效:
代码语言:javascript复制# source /etc/profile
复制代码
4.7、系统优化
代码语言:javascript复制# vi /etc/security/limits.conf
复制代码
在文件末尾添加以下内容:(同时打开文件数和进行数)
代码语言:javascript复制* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 131072
复制代码
代码语言:javascript复制# vi /etc/security/limits.d/20-nproc.conf
复制代码
添加以下内容:
代码语言:javascript复制elsearch soft nproc 65536
复制代码
代码语言:javascript复制# vi /etc/sysctl.conf
复制代码
在文件末尾添加以下内容:
代码语言:javascript复制fs.file-max = 655360
vm.max_map_count = 262144
复制代码
马上生效:
代码语言:javascript复制# sysctl -p
复制代码
如果启动报错:
代码语言:javascript复制max file size [67108864] for user [elsearch] is too low, increase to [unlimited]
#切换root用户,执行下面命令
ulimit -f unlimited
永久解决:
vi /etc/security/limits.conf
加上下面的语句
elsearch - fsize unlimited
注意:/etc/profile 下面是否设置了ulimit -f 1024000,否则不生效
复制代码
4.8、启动es
切换到elsearch用户
代码语言:javascript复制# su - elsearch
复制代码
控制台方式启动:
代码语言:javascript复制# elasticsearch
复制代码
后台方式启动:
代码语言:javascript复制# elasticsearch -d
复制代码
root用户下切换用户后台方式启动:
代码语言:javascript复制# su - elsearch -c "/opt/app/elasticsearch/bin/elasticsearch -d"
复制代码
4.9、测试验证
代码语言:javascript复制curl <http://ip:9200>
复制代码
注意:以上ip替换为Linux服务器的IP
或者在浏览器访问:http://ip:9200/_search?pretty
注意:以上ip替换为Linux服务器的IP
4.10、安装最新版es-7.10.0
1.安装jdk11,安装方式与上面的jdk8相同
代码语言:javascript复制# vi /etc/profile
复制代码
在文件末尾添加以下内容:
代码语言:javascript复制#java11 env
export JAVA_HOME2=/opt/app/jdk11
export PATH=$PATH:$JAVA_HOME2/bin
复制代码
使修改生效:
代码语言:javascript复制# source /etc/profile
复制代码
把jdk11安装目录授权给elsearch用户
代码语言:javascript复制# cd /opt/app/
# chown -R elsearch:elsearch ./jdk11
复制代码
2. 解压es后,修改es的配置为使用jdk11
代码语言:javascript复制# vi /opt/app/elasticsearch/bin/elasticsearch-env
复制代码
3. 启动新版es
切换到elsearch用户
代码语言:javascript复制# su - elsearch
复制代码
控制台方式启动:
代码语言:javascript复制# elasticsearch
复制代码
后台方式启动:
代码语言:javascript复制# elasticsearch -d
复制代码
root用户下切换用户后台方式启动:
代码语言:javascript复制# su - elsearch -c "/opt/app/elasticsearch/bin/elasticsearch -d"
复制代码
验证是否启动成功:
代码语言:javascript复制curl <http://ip:9200>
复制代码
4.11、添加用户权限
1.添加权限配置:
代码语言:javascript复制# cd /opt/app/elasticsearch/
# vi config/elasticsearch.yml
复制代码
添加内容:
代码语言:javascript复制cluster.initial_master_nodes: [es-node1]
## 加密方式
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
复制代码
2. 重启es让配置生效
代码语言:javascript复制# su - elsearch -c "/opt/app/elasticsearch/bin/elasticsearch -d"
复制代码
3. 执行命令设置超级管理员用户的密码
代码语言:javascript复制cd /opt/app/elasticsearch
./bin/elasticsearch-setup-passwords interactive
复制代码
然后输入密码:elastic(多次一样即可)
4. 创建自定义用户
代码语言:javascript复制curl -XPOST -u elastic 'ip:9200/_xpack/security/user/esUser' -H "Content-Type: application/json" -d '{
"password" : "es12qw!@P@ssw0rd",
"full_name" : "es user",
"email" : "test@test",
"roles" : [ "superuser" ],
"metadata" : {
"intelligence" : 7
}
}'
复制代码
5. 测试连接
Linux测试:(-u用刚才新加的用户密码访问)
代码语言:javascript复制curl http://ip:9200 -u esUser:dbPassw0rd
复制代码
浏览器测试:
使用es-heads输入http://ip:9200/ 会提示填写账号密码,把刚刚设置的esUser,dbPassw0rd填写完连接即可
6. springboot使用es的配置如下:
代码语言:javascript复制Spring:
elasticsearch:
rest:
uris: ip:9200
username: esUser
password: dbPassw0rd
复制代码
4.12、添加es防火墙ip白名单
修改防火墙:
代码语言:javascript复制vi /etc/service/iptables
复制代码
把原9200和9300端口开放的两条规则前面添加#号注释:即变成
代码语言:javascript复制#-A INPUT -p tcp -m state --state NEW -m tcp --dport 9200 -j ACCEPT
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 9300 -j ACCEPT
复制代码
在COMMIT前添加以下内容:
代码语言:javascript复制-A INPUT -s 172.29.0.128 -p tcp --dport 9200 -j ACCEPT
-A INPUT -s 172.29.0.128 -p tcp --dport 9300 -j ACCEPT
-A INPUT -s 172.0.29.133 -p tcp --dport 9200 -j ACCEPT
-A INPUT -s 172.0.29.133 -p tcp --dport 9300 -j ACCEPT
复制代码
保存退出
重启防火墙:
代码语言:javascript复制service iptables restart
复制代码
五、Elasticdump数据迁移
5.1、安装nodejs
把node官方连接nodejs.org/zh-cn/downl…
代码语言:javascript复制# tar -xf node-v14.15.4-linux-x64.tar.xz
注:(无法用tar解压的,先自己本地解压成xxx.tar)
复制代码
代码语言:javascript复制# mv node-v14.15.4-linux-x64 /usr/local/node
# cd /usr/bin #切换到环境变量目录下
# ln -s /usr/local/node/bin/node node #添加软连接
# ln -s /usr/local/node/bin/npm npm
# node -v #查看版本,验证是否安装成功
# npm-v
复制代码
5.2、安装Elasticdump
代码语言:javascript复制# npm install elasticdump -g
#添加软连接
# ln -s /usr/local/node/lib/node_modules/elasticdump/bin/elasticdump /usr/bin/elasticdump
#添加软连接
# ln -s /usr/local/node/lib/node_modules/elasticdump/bin/multielasticdump /usr/bin/multielasticdump
#验证
# elasticdump --help
复制代码
如
:无法连网安装
,找一个同样环境的联网机器,虚拟机也可以,用来拷贝Elasticdump模块缓存
安装好npm
和node
以后,npm install elasticdump -g
。
安装完成后输入命令查看缓存目录位置:
代码语言:javascript复制npm config get cache ==> /root/.npm
复制代码
将.npm 打包并拷贝出来
代码语言:javascript复制# cd /root/
# tar -cf npm-cache.tar .npm/
复制代码
传输到离线机器上的/root目录下面:
代码语言:javascript复制#tar -xf /root/npm-cache.tar
# npm install --cache ./npm-cache --optional --cache-min 99999999999 --shrinkwrap false elasticdump
#添加软连接
# ln -s /root/node_modules/elasticdump/bin/elasticdump /usr/bin/elasticdump
#添加软连接
# ln -s /root/node_modules/elasticdump/bin/multielasticdump /usr/bin/multielasticdump
#验证
# elasticdump --help
复制代码
5.3、迁移数据
ES导出 数据 到本地JSON文件 :
#格式:elasticdump --input {protocol}://{host}:{port}/{index} --output ./test_index.json
#例子:将ES中的test_index 中的索引导出
#导出当前索引的mapping结构
代码语言:javascript复制# elasticdump --input http://user:password@ip:9200/test_index --output ./test_index_mapping.json --type=mapping
复制代码
#导出当前索引下的所有真实数据
代码语言:javascript复制# elasticdump --input http://user:password@ip:9200/test_index --output ./test_index.json --type=data
复制代码
#上面导出的两个文件都是在导入到ES中所需要的,一个是mapping文件,另外一个是数据,当然mapping也可以自己手动建立
本地JSON文件导入到ES中:
通过上面导出,已经导出了两个文件,一个是数据文件,一个是mapping文件。
#创建索引
代码语言:javascript复制# curl -XPUT <http://ip:9200/test_index> -u esUser:dbPassw0rd
复制代码
#导入mapping
代码语言:javascript复制# elasticdump --input ./test_index_mapping.json --output http://user:password@ip:9200/ --type=mapping
复制代码
#导入data数据
代码语言:javascript复制# elasticdump --input ./test_index.json --output http://user:password@ip:9200/ --type=data
复制代码
好了,以上就是linux部署elasticsearch,迁移elasticsearch数据的全过程,到zheljiu全部结束了,有不懂的可以在下方留言^_^