Skip to content
On this page

ELK basic

ES 集群部署

环境:

角色主机、IP
es-01172.16.1.128
es-02172.16.1.134
es-03172.16.1.136

ES启动时不允许root用户运行,所以在部署之前单独为其创建一个账户,用来专门管理es

useradd esuser
echo 123 | passwd --stdin esuser
# 将 esuser 用户添加进无密码sudoers
echo "esuser ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/es
chmod 0440 /etc/sudoers.d/es
# 为之后的es数据和日志创建目录
mkdir /es/data -pv
mkdir /es/logs
chown -R esuser:esuser /es
chown -R esuser:esuser /usr/local/elasticsearch-7.7.1/
# ------ 切换到 esuser 用户,下面的所有操作都使用 esuser 用户
su esuser
useradd esuser
echo 123 | passwd --stdin esuser
# 将 esuser 用户添加进无密码sudoers
echo "esuser ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/es
chmod 0440 /etc/sudoers.d/es
# 为之后的es数据和日志创建目录
mkdir /es/data -pv
mkdir /es/logs
chown -R esuser:esuser /es
chown -R esuser:esuser /usr/local/elasticsearch-7.7.1/
# ------ 切换到 esuser 用户,下面的所有操作都使用 esuser 用户
su esuser

安装ES之前,需要安装JDK,该步骤在此就不再赘述。

从官方站点下载ES的压缩包, 并解压到指定目录当中去:

tar xf elasticsearch-7.7.1-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/elasticsearch-7.7.1
tar xf elasticsearch-7.7.1-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/elasticsearch-7.7.1

修改配置文件config/elasticsearch.yml

# vim config/elasticsearch.yml
# 集群名称,默认是elasticsearch,通过组播的方式通信,通过名称判断属于哪个集群
cluster.name: es-cluster
# 是否可以成为master节点
node.master: true
# 是否允许该节点存储数据,默认开启
node.data: true
# 节点名称,要唯一
node.name: es-01
# 数据存放位置
path.data: /es/data
# 日志存放位置
path.logs: /es/logs
# 网络绑定,这里我绑定 0.0.0.0,支持外网访问
network.host: 0.0.0.0
# 设置对外服务的http端口,默认为9200
http.port: 9200
# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300
# 集群最少master数量
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 3s
# 初始化时可进行选举的节点,不填端口默认为9300
discovery.zen.ping.unicast.hosts: ["es-01", "es-02", "es-03"]
# 支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
# Bootstrap the cluster using an initial set of master-eligible nodes:
# 手动指定可初始化的master节点
cluster.initial_master_nodes: ["es-01"]
# vim config/elasticsearch.yml
# 集群名称,默认是elasticsearch,通过组播的方式通信,通过名称判断属于哪个集群
cluster.name: es-cluster
# 是否可以成为master节点
node.master: true
# 是否允许该节点存储数据,默认开启
node.data: true
# 节点名称,要唯一
node.name: es-01
# 数据存放位置
path.data: /es/data
# 日志存放位置
path.logs: /es/logs
# 网络绑定,这里我绑定 0.0.0.0,支持外网访问
network.host: 0.0.0.0
# 设置对外服务的http端口,默认为9200
http.port: 9200
# 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300
# 集群最少master数量
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 3s
# 初始化时可进行选举的节点,不填端口默认为9300
discovery.zen.ping.unicast.hosts: ["es-01", "es-02", "es-03"]
# 支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
# Bootstrap the cluster using an initial set of master-eligible nodes:
# 手动指定可初始化的master节点
cluster.initial_master_nodes: ["es-01"]

修改完配置文件之后,启动es节点:

bin/elasticsearch -d
bin/elasticsearch -d

⚠️启动时可能报出如下错误:

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

解决方法:

sudo vim /etc/security/limits.conf
# ----- 添加如下内容 ------
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
# -------------------------
# 可以使用 `ulimit -Hn` 命令进行查看
sudo echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p
sudo vim /etc/security/limits.conf
# ----- 添加如下内容 ------
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
# -------------------------
# 可以使用 `ulimit -Hn` 命令进行查看
sudo echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p

修改完毕之后,重新打开当前终端使其生效。

测试es对外提供服务的HTTP端口:

[root@es-01 ~]\# curl es-01:9200
{
  "name" : "es-01",
  "cluster_name" : "es-cluster",
  "cluster_uuid" : "B6--eo9YQC62LNyo0JiLIw",
  "version" : {
    "number" : "7.7.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "ad56dce891c901a492bb1ee393f12dfff473a423",
    "build_date" : "2020-05-28T16:30:01.040088Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
[root@es-01 ~]\# curl es-01:9200
{
  "name" : "es-01",
  "cluster_name" : "es-cluster",
  "cluster_uuid" : "B6--eo9YQC62LNyo0JiLIw",
  "version" : {
    "number" : "7.7.1",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "ad56dce891c901a492bb1ee393f12dfff473a423",
    "build_date" : "2020-05-28T16:30:01.040088Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

将配置文件复制到其他节点上去:

scp conf/elasticsearch.yml es-02:/usr/local/elasticsearch-7.7.1/conf
scp conf/elasticsearch.yml es-03:/usr/local/elasticsearch-7.7.1/conf
scp conf/elasticsearch.yml es-02:/usr/local/elasticsearch-7.7.1/conf
scp conf/elasticsearch.yml es-03:/usr/local/elasticsearch-7.7.1/conf

同样,在其他节点上,进行与之前相同的操作,唯一需要修改的就是其配置文件的node.name

vim config/elasticsearch.yml
# --------- es-02 ---------
node.name: es-02
# --------- es-03 ---------
node.name: es-03
vim config/elasticsearch.yml
# --------- es-02 ---------
node.name: es-02
# --------- es-03 ---------
node.name: es-03

最后,启动各节点的ES服务:bin/elasticsearch -d

Logstash

logstash 同样依赖于JDK环境,需要提前安装。

从官方站点下载 logstash 的压缩包,并解压到指定目录:

tar xf logstash-7.7.1-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/logstash-7.7.1
tar xf logstash-7.7.1-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/logstash-7.7.1

启动logstash

# 快速启动测试,标准输入输出作为input和output
bin/logstash -e 'input { stdin {} } output { stdout {} }'

* 常用启动参数说明:
`-e`: 立即执行,使用命令行里的配置参数启动实例
`-f`: 指定启动实例的配置文件	
`-t`: 测试配置文件的正确性	
`-l`: 指定日志文件名称	
`-w`: 指定filter线程数量,默认线程数是5	
# 快速启动测试,标准输入输出作为input和output
bin/logstash -e 'input { stdin {} } output { stdout {} }'

* 常用启动参数说明:
`-e`: 立即执行,使用命令行里的配置参数启动实例
`-f`: 指定启动实例的配置文件	
`-t`: 测试配置文件的正确性	
`-l`: 指定日志文件名称	
`-w`: 指定filter线程数量,默认线程数是5	

Kibana

从官方站点下载 Kibana 的压缩包,并解压到指定目录:

 tar xf kibana-7.7.1-linux-x86_64.tar.gz -C /usr/local/
 cd /usr/local/kibana-7.7.1-linux-x86_64
 tar xf kibana-7.7.1-linux-x86_64.tar.gz -C /usr/local/
 cd /usr/local/kibana-7.7.1-linux-x86_64

启动kibanabin/kibana

其他

官方均提供有制作好的RPMDEB和适用于Windows下的二进制包,可以直接下载安装使用:

# 以redhat系为例
yum localinstall -y kibana-7.7.1-x86_64.rpm
# 以redhat系为例
yum localinstall -y kibana-7.7.1-x86_64.rpm

附:es 环境脚本

useradd esuser
echo 123 | passwd --stdin esuser
# 将 esuser 用户添加进无密码sudoers
echo "esuser ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/es
chmod 0440 /etc/sudoers.d/es
# 为之后的es数据和日志创建目录
mkdir /es/data -pv
mkdir /es/logs
chown -R esuser:esuser /es
chown -R esuser:esuser /usr/local/elasticsearch-7.7.1/
# ------ 切换到 esuser 用户,下面的所有操作都使用 esuser 用户
cat << EOF >> /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
EOF

sudo echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p
su - esuser
useradd esuser
echo 123 | passwd --stdin esuser
# 将 esuser 用户添加进无密码sudoers
echo "esuser ALL = (root) NOPASSWD:ALL" | tee /etc/sudoers.d/es
chmod 0440 /etc/sudoers.d/es
# 为之后的es数据和日志创建目录
mkdir /es/data -pv
mkdir /es/logs
chown -R esuser:esuser /es
chown -R esuser:esuser /usr/local/elasticsearch-7.7.1/
# ------ 切换到 esuser 用户,下面的所有操作都使用 esuser 用户
cat << EOF >> /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
EOF

sudo echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p
su - esuser