基于docker部署es集群和kibana
首先得部署docker环境 --此处略过
一、安装es
1.拉取es镜像
docker pull elasticsearch:7.9.3(重点7.x开始不需要手动下载x-pack)
2.es调优
服务器参数调优
#1.===增大进程可打开的文件数======
vi /etc/security/limits.conf
#在文件末尾中增加下面内容
* soft nofile 65536
* hard nofile 65536
===增大进程可创建的线程数======
vim /etc/security/limits.conf
* soft nproc 10240
* hard nproc 20480
* 为所有用户名
#2.===最大虚拟内存太小====
vi /etc/sysctl.conf
#在文件中增加下面内容
vm.max_map_count=655360
#重新加载,输入下面命令:
sysctl -p
#3.关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
一个是性能问题,开启swap会严重影响性能(包括内存和I/O);
另一个是管理问题,开启swap后通过cgroups设置的内存上限就会失效。
有的时候可用内存很多也会swap,这时候关闭是为了避免swap带来的性能问题。
es配置调优
#1.jvm堆内存调整
默认为1G启动
合肥云服务器有 46G 的内存,最好分配为总内存的50%,我这边给分配20G
es的config中的jvm.options修改堆内存大小
#2.elasticsearch.yml 配置调优
1.选举配置,都可以成master
2.配置选举节点(数量安装候选master节点数/2 +1 ,即:N/2 +1)3台master候选节点,此处就算2 (最好master节点数为奇数)当只要一台存活集群会异常
3.开启跨域访问
4.集群安全认证配置
5.docker部署挂载本地目录
es集群 nginx+keepalived高可用负载均衡
对集群做了两台nginx负载均衡配置
配置为:
least_conn; #把请求转发给连接数较少的后端服务器
keepalived为高可用 vip地址,当一台服务器挂了,vip地址会飘到另外一台上
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bbnRT6nD-1656298259825)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20220621103836430.png)]
3.配置es集群,并启动
我此处使用三台服务器进行部署
es-1: 10.254.0.186
es-2: 10.254.0.187
es-3: 10.254.0.188
http://10.254.1.151:9200/_cat/nodes?v
http://10.254.1.151:9200/_cat/health?v
http://10.254.1.151:9100/?auth_user=elastic&auth_password=123456
首先每台服务器创建需要docker挂载的文件夹
mkdir -p elasticsearch/{data,logs,config,plugins}
es-1配置在config下创建elasticsearch.yml
#集群名称
cluster.name: es-cluster
#节点名称
node.name: es-1
## 这个参数是用来同时设置bind_host和publish_host上面两个参数。访问的IP地址,0.0.0.0表示不限制
network.host: 0.0.0.0
# 设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0,绑定这台机器的任何一个ip。
network.bind_host: 0.0.0.0
#设置其它结点和该结点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址,设置当前物理机地址
#如果是docker安装节点的IP将会是配置的IP而不是docker网管ip
network.publish_host: 10.254.0.186
#访问端口
http.port: 9200
#集群通讯端口
transport.tcp.port: 9300
#是不是有资格成为主节点
node.master: true
#是否存储数据
node.data: true
#es7.x 之后新增的配置,节点发现
discovery.zen.ping.unicast.hosts: ["10.254.0.186:9300","10.254.0.187:9300","10.254.0.188:9300"]
# 配置选举节点(数量安装候选master节点数/2 +1 ,即:N/2 +1)
# 3台master候选节点,此处就算2 (最好master节点数为奇数)
discovery.zen.minimum_master_nodes: 2
#master节点默认为es-1
cluster.initial_master_nodes: ["es-1"]
# 跨域
http.cors.enabled: true
#开启跨域访问后的地址限制,*表示无限制
http.cors.allow-origin: "*"
#允许head插件等访问的相关设置
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
#集群安全认证配置
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
es-2配置在config下创建elasticsearch.yml
cluster.name: es-cluster
node.name: es-2
network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 10.254.0.187
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["10.254.0.186:9300","10.254.0.187:9300","10.254.0.188:9300"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: ["es-1"]
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
es-3配置在config下创建elasticsearch.yml
cluster.name: es-cluster
node.name: es-3
network.host: 0.0.0.0
network.bind_host: 0.0.0.0
network.publish_host: 10.254.0.188
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["10.254.0.186:9300","10.254.0.187:9300","10.254.0.188:9300"]
discovery.zen.minimum_master_nodes: 2
cluster.initial_master_nodes: ["es-1"]
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
设置ES的JVM占用内存参数
启动之前,设置ES的JVM占用内存参数,防止内存不足错误
config/jvm.options
默认情况下,ES启动JVM最小内存1G,最大内存1G
-Xms256m
-Xmx256m
一般设置为服务器内存一半比较合适
docker启动命令
docker run --name elasticsearch \
--restart=always \
-p 9200:9200 -p 9300:9300 \
-v /mnt/share/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mnt/share/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mnt/share/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /mnt/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.9.3
二.安装ik分词器
docker exec -it elasticsearch bash
elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip
三.安装elasticsearch-head:5
docker pull mobz/elasticsearch-head:5
docker run -d -p 9100:9100 --name head5 mobz/elasticsearch-head:5
页面访问
http://10.254.1.151:9100/?auth_user=elastic&auth_password=123456
访问页面
http://ip:9100/
四、安装Kibana
docker pull kibana:7.9.3
mkdir -p kibana/config
vim kibana.yml
server.name: kibana
server.host: "0"
elasticsearch.hosts: [ "http://ip:9200","http://ip:9201","http://ip:9202" ]
xpack.monitoring.ui.container.elasticsearch.enabled: true
#elasticsearch.username: elastic
#elasticsearch.password: "123456"
#xpack.security.enabled: true
xpack.security.encryptionKey: "c77effba756146d382ebc79b279fd694"
i18n.locale: "zh-CN"
启动:
docker run -d --name kibana \
--restart=always \
-p 5601:5601 \
-v /mnt/share/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml \
-d kibana:7.9.3
五、开启安全认证
生成证书
放开elasticsearch.yml中的认证配置
docker exec -it elasticsearch bash
bin/elasticsearch-certutil ca 一路回车
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 一路回车
cd config
mkdir certs
将生成的两个文件移到certs下
chown elasticsearch elastic-certificates.p12
chomd 777 elastic-certificates.p12
这时将这个文件夹,cp到其他两个服务器docker中去
重启es
再进es
docker exec -it elasticsearch bash
执行如下命令需要一直设置密码,可以全部设置一样
bin/elasticsearch-setup-passwords interactive
打开上面kibana.yml的注释
elasticsearch.username: elastic
elasticsearch.password: "123456"
xpack.security.enabled: true
重启kibana
es-head访问方式
http://10.254.0.186:9100/?auth_user=elastic&auth_password=123456
六、安装metricbeat
docker pull docker.elastic.co/beats/metricbeat:7.9.3
cd /data
mkdir -p metricbeat/config
cd metricbeat/config
vim metricbeat.yml
配置如下
metricbeat.modules:
- module: system
period: 10s
metricsets:
- cpu
- load
- memory
- network
- process
- process_summary
#- core
#- diskio
#- socket
processes: ['.*']
process.include_top_n:
by_cpu: 5 # include top 5 processes by CPU
by_memory: 5 # include top 5 processes by memory
- module: system
period: 1m
metricsets:
- filesystem
- fsstat
processors:
- drop_event.when.regexp:
system.filesystem.mount_point: '^/(sys|cgroup|proc|dev|etc|host|lib)($|/)'
- module: system
period: 15m
metricsets:
- uptime
# 直接发送elasticsearch
output.elasticsearch:
hosts: ["10.254.0.186:9200","10.254.0.187:9200","10.254.0.188:9200"]
username: "elastic"
password: "geovis123"
# 要加载仪表板,可以在metricbeat设置中启用仪表板加载。当仪表板加载被启用时,Metricbeat使用Kibana API来加载样本仪表板。只有当Metricbeat启动时,才会尝试仪表板加载。
# 设置kibana服务地址
setup.kibana:
host: "10.254.0.186:5601"
username: "elastic"
password: "123456"
# 加载默认的仪表盘样式
setup.dashboards.enabled: true
# 设置如果存在模板,则不覆盖原有模板
setup.template.overwrite: false
启动命令
docker run -d --name=metricbeat \
--privileged=true \
--user=root \
--volume="$(pwd)/metricbeat.yml:/usr/share/metricbeat/metricbeat.yml:ro" \
--volume="/run/docker.sock:/var/run/docker.sock:ro" \
--volume="/sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro" \
--volume="/proc:/hostfs/proc:ro" \
--volume="/:/hostfs:ro" \
docker.elastic.co/beats/metricbeat:7.9.3
七、nginx做负载均衡
ubuntu系统部署nginx
安装依赖包
apt-get install gcc
apt-get install libpcre3 libpcre3-dev
apt-get install zlib1g zlib1g-dev
# Ubuntu14.04的仓库中没有发现openssl-dev,由下面openssl和libssl-dev替代
#apt-get install openssl openssl-dev
sudo apt-get install openssl
sudo apt-get install libssl-dev
/configure --prefix=/usr/local/nginx
make && make install
在nginx.conf中添加
include /usr/local/nginx/conf/conf.d/*.conf;
在nginx conf下创建 conf.d
在conf.d下创建 es.conf
配置如下:
upstream es{
least_conn; #把请求转发给连接数较少的后端服务器
server 10.254.0.186:9200;
server 10.254.0.187:9200;
server 10.254.0.188:9200;
}
server {
listen 9400;
server_name localhost;
underscores_in_headers on;
location / {
proxy_set_header Host $host:$server_port;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://es;
}
}
重载nginx ./nginx -s reload
八、部署keepalived
centos版本不做介绍 下载tar包解压后进行操作,下面主要介绍ubuntu系统
apt-cache madison keepalived
apt -y install keepalived
cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
keepalived.conf配置如下
master节点配置
#全局配置:
global_defs {
router_id es-1 ## 标识本节点的字条串,通常为 hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
interval 2 ## 检测时间间隔
weight -20 ## 如果条件成立,权重-20
}
#VRRP实例配置
vrrp_instance VI_1 {
state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
interface enp1s0 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 enp1s0
virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
mcast_src_ip 10.254.0.186 ## 本机 IP 地址
priority 100 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
## 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_nginx ## 执行 Nginx 监控的服务
}
# 虚拟 IP 池, 两个节点设置必须一样
virtual_ipaddress {
10.254.0.20 ## 虚拟 ip,可以定义多个
}
}
backup节点配置
global_defs {
router_id es-2 ## 标识本节点的字条串,通常为 hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
interval 2 ## 检测时间间隔
weight -20 ## 如果条件成立,权重-20
}
#VRRP实例配置
vrrp_instance VI_1 {
state BACKUP ## 主节点为 MASTER, 对应的备份节点为 BACKUP
interface enp1s0 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 enp1s0
virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
mcast_src_ip 10.254.0.187 ## 本机 IP 地址
priority 90 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
## 设置验证信息,两个节点必须一致
authentication {
auth_type PASS
auth_pass 1111 ## 真实生产,按需求对应该过来
}
## 将 track_script 块加入 instance 配置块
track_script {
chk_nginx ## 执行 Nginx 监控的服务
}
# 虚拟 IP 池, 两个节点设置必须一样
virtual_ipaddress {
10.254.0.20 ## 虚拟 ip,可以定义多个
}
}
systemctl start keepalived 启动即可