一、ES集群的多实例部署¶
1、在elk121节点上配置集群免密登录及同步脚本
在elk121节点上修改主机列表
[root@elk121 ~]# cat >> /etc/hosts <<'EOF'
192.168.1.121 elk121
192.168.1.122 elk122
192.168.1.123 elk123
EOF
在elk121节点上生成密钥对
| [root@elk121 ~]# ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -q |
|---|
在elk121节点上配置所有集群节点的免密登录
| [root@elk121 ~]# for ((host_id=121;host_id\<=123;host_id++));do ssh-copy-id elk\${host_id} ;done |
|---|
在elk121节点上链接测试
[root@elk121 ~]# ssh elk122
[root@elk121 ~]# ssh elk123
所有节点安装rsync数据同步工具
[root@elk121 ~]# yum -y install rsync
[root@elk122 ~]# yum -y install rsync
[root@elk123 ~]# yum -y install rsync
在elk121节点上编写同步脚本
[root@elk121 ~]# cat > /usr/local/sbin/data_rsync.sh <<'EOF'
#!/bin/bash
# Auther: zq
if [ $# -ne 1 ];then
echo "Usage: $0 /path/to/file(绝对路径)"
exit
fi
# 判断文件是否存在
if [ ! -e $1 ];then
echo "[ $1 ] dir or file not find!"
exit
fi
# 获取父路径
fullpath=`dirname $1`
# 获取子路径
basename=`basename $1`
# 进入到父路径
cd $fullpath
for ((host_id=122;host_id<=123;host_id++))
do
# 使得终端输出变为绿色
tput setaf 2
echo ===== rsyncing elk${host_id}: $basename =====
# 使得终端恢复原来的颜色
tput setaf 7
# 将数据同步到其他两个节点
rsync -apz $basename `whoami`@elk${host_id}:$fullpath
if [ $? -eq 0 ];then
echo "命令执行成功!"
fi
done
EOF
在elk121节点上给脚本授权
| [root@elk121 ~]# chmod +x /usr/local/sbin/data_rsync.sh |
|---|
2、下载ES软件包
地址链接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.23.tar.gz

3、所有节点上创建运行ES服务的用户
[root@elk121 ~]# useradd -u 2023 es
[root@elk122 ~]# useradd -u 2023 es
[root@elk123 ~]# useradd -u 2023 es
4、在elk121节点上创建ElasticSearch的工作目录
[root@elk121 ~]# install -d /es/{data,logs,softwares}/es6 -o es -g es
[root@elk122~]# install -d /es/{data,logs,softwares}/es6 -o es -g es
[root@elk123~]# install -d /es/{data,logs,softwares}/es6 -o es -g es
5、在elk121节点上解压软件包
[root@elk121 ~]# tar xf elasticsearch-6.8.23.tar.gz -C /es/softwares/es6/
[root@elk121 ~]# chown es:es -R /es/softwares/es6/elasticsearch-6.8.23/
6、在elk121节点上修改配置文件
复制第17行内容修改集群名字
[root@elk121 ~]# vim +17 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
cluster.name: es6
复制第24行内容修改node名字
[root@elk121 ~]# vim +24 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
node.name: elk121
复制第34行内容修改数据路径
[root@elk121 ~]# vim +34 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
path.data: /es/data/es6
复制第38行内容修改日志路径
[root@elk121 ~]# vim +38 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
path.logs: /es/logs/es6
复制第56行内容修改ES服务监听对外暴露服务的地址为192.168.1.121,具体内容如下
[root@elk121 ~]# vim +56 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
network.host: 192.168.1.121
复制第64行内容修改http端口和tcp端口
[root@elk121 ~]# vim +65 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
http.port: 19200
transport.tcp.port: 19300
复制第71行内容指定ES集群的节点IP,具体内容如下
[root@elk121 ~]# vim +71 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
discovery.zen.ping.unicast.hosts: ["elk121","elk122","elk123"]
复制第77行内容指定master节点数量为2
[root@elk121 ~]# vim +77 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
discovery.zen.minimum_master_nodes: 2
最后修改后的配置文件如下:
[root@elk121 ~]# egrep -v '^#|^$' /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
cluster.name: es6
node.name: elk121
path.data: /es/data/es6
path.logs: /es/logs/es6
network.host: 192.168.1.121
http.port: 19200
transport.tcp.port: 19300
discovery.zen.ping.unicast.hosts: ["elk121","elk122","elk123"]
discovery.zen.minimum_master_nodes: 2
7、在elk121节点上修改堆内存大小
修改第22行和第23行内容
[root@elk121 ~]# vim +23 /es/softwares/es6/elasticsearch-6.8.23/config/jvm.options
…
…
-Xms256m
-Xmx256m
8、在elk121节点上编写启动脚本
[root@elk121 ~]# cat > /usr/lib/systemd/system/es6.service <<EOF
[Unit]
Description=es6
After=network.target
[Service]
Type=simple
Environment=JAVA_HOME=/es/softwares/jdk1.8.0_291
ExecStart=/es/softwares/es6/elasticsearch-6.8.23/bin/elasticsearch
User=es
LimitNOFILE=131070
[Install]
WantedBy=multi-user.target
EOF
9、在elk121节点上同步配置文件
[root@elk121 ~]# data_rsync.sh /es/softwares/es6/
[root@elk121 ~]# data_rsync.sh /usr/lib/systemd/system/es6.service
10、在elk122节点和elk123节点上修改各节点的配置文件
复制第24行内容修改node名字
[root@elk122 ~]# vim +24 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
node.name: elk122
[root@elk123 ~]# vim +24 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
node.name: elk123
复制第56行内容修改ES服务监听对外暴露服务的地址为各自节点IP,具体内容如下
[root@elk122 ~]# vim +56 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
network.host: 192.168.1.122
[root@elk123 ~]# vim +56 /es/softwares/es6/elasticsearch-6.8.23/config/elasticsearch.yml
network.host: 192.168.1.123
11、所有节点启动服务
[root@elk121 ~]# systemctl daemon-reload && systemctl enable --now es6
[root@elk122 ~]# systemctl daemon-reload && systemctl enable --now es6
[root@elk123 ~]# systemctl daemon-reload && systemctl enable --now es6
12、在elk121节点上查看集群节点的API是否正常
[root@elk121 ~]# curl 192.168.1.121:9200/_cat/nodes
192.168.1.122 14 68 0 1.96 1.09 0.43 cdfhilmrstw * elk122
192.168.1.121 5 71 0 2.10 1.18 0.49 cdfhilmrstw - elk121
192.168.1.123 6 67 0 2.49 1.23 0.47 cdfhilmrstw - elk123
说明:*代表该节点为主节点。主节点挂掉后会飘到其他节点上面。之前的主节点恢复后不存在抢占机制。另外,也存在”半数存活”规则(防止脑裂),这意味着最多只能挂一台。
13、在elk121节点上查看集群是否正常
[root@elk121 ~]# yum install -y jq
[root@elk121 ~]# curl 192.168.1.121:9200/_cluster/health 2>/dev/null | jq
{
"cluster_name": "es",
"status": "green",
"timed_out": false,
"number_of_nodes": 3,
"number_of_data_nodes": 3,
"active_primary_shards": 3,
"active_shards": 6,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 100
}
二、其他组件¶
2.1 elasticsearch head¶
1、准备扩展包并进行解压
下载地址:https://chromewebstore.google.com/detail/cpmmilfkofbeimbmgiclohpodggeheim
2、加载已解压的扩展程序包


3、点击安装好的扩展程序,输入集群机器IP

说明:*代表该节点为主节点。主节点挂掉后会飘到其他节点上面。之前的主节点恢复后不存在抢占机制。另外,也存在”半数存活”规则(防止脑裂),这意味着最多只能挂一台。
2.2 postman¶
Postman 是一种流行的 API 开发和测试工具,它提供了一个直观的界面,让开发人员可以轻松地创建、测试和调试 API。
1、准备安装包
下载地址:https://dl.pstmn.io/download/latest/win64
2、双击安装并进行注册

3、创建新的Workspace
点击【New Workspace】

填写Name以及Summary后,点击【Create Workspace】

4、基本使用
点击【+】会创建一个默认目录

点击默认目录,修改目录名字为测试API

右键【测试API】会新建一个默认GET请求

点击默认GET请求,修改GET请求名字为【01-查看节点列表】

输入请求url:192.168.1.121:9200/_cat/nodes

三、故障排查¶
3.1 故障排查思路¶
1、看日志
[root@elk121 ~]# tail -100f /es/logs/es7/es.log
[root@elk121 ~]# journalctl -u es7
2、监听端口
| [root@elk121 ~]# ss -ntl | grep -E '9200|9300' |
|---|
3、进程信息
[root@elk121 ~]# jps
[root@elk121 ~]# ps -ef | grep es7
4、通过API查询
查看集群节点的API
| [root@elk121 ~]# curl 192.168.1.121:9200/_cat/nodes |
|---|
查看集群是否正常
[root@elk121 ~]# yum install -y jq
[root@elk121 ~]# curl 192.168.1.121:9200/_cluster/health 2>/dev/null | jq
3.2 故障案例¶
常见报错:
1、java.lang.RuntimeException: can not run elasticsearch as root
报错原因:
不能以root用户启动ES服务。
解决方案:
使用普通用户启动服务即可。
2、bootstrap check failure [1] of [3]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
报错原因:
程序默认的的文件打开数量上线过低。
解决方案:
调大文件打开数量上限即可。
3、bootstrap check failure [2] of [3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
报错原因:
内核参数虚拟内存映射过低。
解决方案:
调大内核虚拟内存映射值即可。
4、bootstrap check failure [3] of [3]: max number of threads [3795] for user [oldboyedu] is too low, increase to at least [4096]
报错原因:
程序打开的线程数量设置过低。
解决方案:
调大程序打开的线程数量即可。
5、initial heap size [268435456] not equal to maximum heap size [1031798784]; this can cause resize pauses and prevents mlockall from locking the entire heap
报错原因:
初始化堆内存和最大堆内存大小不一致。
解决方案:
观察配置是否生效,建议将"-Xms"和"-Xmx"值配置一致。
四、集群的颜色¶
Green:表示所有的主分片和副本分片均正常工作。
Yellow:表示有部分副本分片不正常工作。
Red:表示有部分主分片不正常工作。