I will persist until I succeed
<span class="vcard">long</span>
long

elk集群搭建

前言

什么是 ELK?
通俗来讲,ELK 是由 Elasticsearch、Logstash、Kibana 三个开源软件的组成的一个组合体,ELK 是 elastic 公司研发的一套完整的日志收集、分析和展示的企业级解决方案,在这三个软件当中,每个软件用于完成不同的功能,ELK 又称为 ELKstack,官方域名为 elastic.co,ELK stack 的主要优点有如下几个:
处理方式灵活: elasticsearch 是实时全文索引,具有强大的搜索功能配置相对简单:elasticsearch 的 API 全部使用 JSON 接口,logstash 使用模块配置,kibana 的配置文件部分更简单。
检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
集群线性扩展:elasticsearch 和 logstash 都可以灵活线性扩展
前端操作绚丽:kibana 的前端设计比较绚丽,而且操作简单

elk集群实现规划图

环境规划如下:

elk集群各节点(Ubuntu-18.04.3):
192.168.37.111/24: es-node1.long.com (kibana也装在192.168.37.111上)
192.168.37.112/24: es-node2.long.com
192.168.37.113/24: es-node3.long.com
192.168.37.114/24: logstash-to-es.long.com
192.168.37.115/24: redis.long.com
192.168.37.116/24: logstash-to-redis.long.com
192.168.37.117/24: web1.long.com
192.168.37.118/24: web2.long.com
192.168.37.119/24: web3.long.com

各服务器均做如下环境初始化:
#systemctl disable firewalld
# systemctl disable NetworkManager
#sed -i ‘/SELINUX/s/enforcing/disabled/’ /etc/selinux/config
#echo “* soft nofile 65536” >> /etc/security/limits.conf
#echo “* hard nofile 65536” >> /etc/security/limits.conf
#cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#cat /etc/crontab
*/5 * * * * ntpdate time1.aliyun.com &> /dev/null &&hwclock -w” >> /var/spool/cron/root
官网下载elasticsearch的deb包:

安装:
dpkg -i elasticsearch-7.6.1-amd64.deb
准备java环境:
[root@es-node1 /usr/local/src ]#apt install openjdk-8-jdk(简化配置过程,就不使用oracle-jdk解压安装了)
[root@es-node1 /usr/local/src ]#java -version
openjdk version “1.8.0_312”
OpenJDK Runtime Environment (build 1.8.0_312-8u312-b07-0ubuntu1~18.04-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
[root@es-node1 ~ ]#grep “^[a-Z]” /etc/elasticsearch/elasticsearch.yml

cluster.name: long-es-cluster1 #ELK 的集群名称,名称相同即属于是同一个集群
node.name: node1-111 #当前节点在集群内的节点名称
path.data: /elk/data #ES 数据保存目录
path.logs: /elk/logs #ES 日志保存目
bootstrap.memory_lock: true #服务启动的时候锁定足够的内存,防止数据写入swap
network.host: 192.168.37.111 #监听 IP
http.port: 9200 #监听端口
集群中 node 节点发现列表
discovery.seed_hosts: [“192.168.37.111″,”192.168.37.112″,”192.168.37.113”]
集群初始化那些节点可以被选举为 master
cluster.initial_master_nodes: [“192.168.37.111″,”192.168.37.112″,”192.168.37.113”]
一个集群中的 N 个节点启动后,才允许进行数据恢复处理,默认是 1
gateway.recover_after_nodes: 2
设置是否可以通过正则或者_all 删除或者关闭索引库,默认 true 表示必须需要
显式指定索引库名称,生产环境建议设置为 true,删除索引库的时候必须指定,
否则可能会误删索引库中的索引库。
action.destructive_requires_name: true
http.cors.enabled: true #开启支持跨域访问
http.cors.allow-origin: “*” #指定允许访问范围

[root@es-node1 ~ ]# vim /usr/lib/systemd/system/elasticsearch.service #修改内存
限制
LimitMEMLOCK=infinity #无限制使用内存

#vim /etc/elasticsearch/jvm.options
22 -Xms4g
23 -Xmx4g #最小和最大内存限制,为什么最小和最大设置一样大?
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
官方配置文档最大建议 30G 以内。
es-node2.long.com、es-node3.long.com配置同es-node1.long.com

[root@es-node1 ~ ]#systemctl start elasticsearch.service
[root@es-node1 ~ ]#systemctl status elasticsearch.service
● elasticsearch.service – Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-06-29 23:39:32 CST; 2s ago
Docs: http://www.elastic.co
Main PID: 2565 (java)
Tasks: 57 (limit: 7202)
CGroup: /system.slice/elasticsearch.service
├─2565 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.neg
└─2671 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller
Jun 29 23:39:20 es-node1.long.com systemd[1]: Starting Elasticsearch…
Jun 29 23:39:20 es-node1.long.com elasticsearch[2565]: OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was
Jun 29 23:39:32 es-node1.long.com systemd[1]: Started Elasticsearch.

通过浏览器访问 elasticsearch 服务端口:

安装 elasticsearch 插件之 head:
插件是为了完成不同的功能,官方提供了一些插件但大部分是收费的,另外也有一些开发爱好者提供的插件,可以实现对 elasticsearch 集群的状态监控与管理配置等功能。
[root@es-node1 ~ ]#apt install docker -y
[root@es-node1 ~ ]systemctl start docker && systemctl enable docker
[root@es-node1 ~ ]# docker version

[root@es-node1 ~ ]#docker run -d -p 9100:9100 mobz/elasticsearch-head:5

通过浏览器访问head插件的页面:


鉴于后续步骤较多,logstash及kibanaan安装、配置先省略。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。后续再详细发布

最后kibana展示的效果如下:












Ubuntu1804.3上编译安装HAProxy-2.0.29

环境:

haproxy:  https://www.haproxy.org/download/2.0/src/haproxy-2.0.29.tar.gz

OS:Ubuntu1804.3

lua:  http://www.lua.org/ftp/lua-5.4.4.tar.gz

晚风心里吹

安装步骤:

1.准备编译安装HAProxy的基础环境

apt install make gcc build-essential libssl-dev zlib1g-dev libpcre3 libpcre3-dev libsystemd-dev libreadline-dev -y

2.编译安装lua,为HAProxy支持基于其实现功能扩展。
注:HAProxy要求的lua最低版本为5.3
2.1 下载并且安装lua
# cd /usr/local/src/
# cd  wget  http://www.lua.org/ftp/lua-5.4.4.tar.gz
# tar xf lua-5.4.4.tar.gz
# cd lua-5.4.4/src/
# make all test

2.2 查看编译后的版本
# ./lua -v
Lua 5.4.4Copyright (C) 1994-2018 Lua.org, PUC-Rio

3.编译安装haproxy
3.1 解压并安装
# cd /usr/local/src/
# tar xf haproxy-2.0.29.tar.gz
# cd haproxy-2.0.29
# make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.4.4/src/ LUA_LIB=/usr/local/src/lua-5.4.4/src/ PREFIX=/apps/haproxy

3.2 查看编译安装好的版本信息
# ./haproxy -v
HA-Proxy version 2.0.29-5e15b0f 2022/05/13 – https://haproxy.org/

4.编写haproxy启动脚本
# vim  /lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/apps/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c
ExecStart=/apps/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 \$MAINPID

[Install]
WantedBy=multi-user.target

5.编写配置文件/etc/haproxy/haproxy.cfg
# mkdir /etc/haproxy
# cat > /etc/haproxy/haproxy.cfg << EOF
global
maxconn 100000
chroot /usr/local/haproxy
stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
uid 99
gid 99
daemon
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local3 info

defaults
option http-keep-alive
option forwardfor
maxconn 100000
mode http
timeout connect 300s
timeout client 300s
timeout server 300s

listen stats
bind :9999
stats enable
stats uri /status
stats auth admin:123456
6.创建相关目录
# mkdir /var/lib/haproxy
# mkdir /usr/local/haproxy
# mkdir /etc/haproxy
# chown 99.99 /var/lib/haproxy/ -R
# chown 99.99 /usr/local/haproxy -R

7.启动并设为开机自启动和查看haproxy状态
# systemctl daemon-reload
# systemctl enable –now haproxy
# systemctl status haproxy

[root@ubuntu-template ~ ]#systemctl status haproxy
● haproxy.service – HAProxy Load Balancer
Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2022-05-14 17:58:44 CST; 27min ago
Process: 698 ExecStartPre=/apps/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -c (code=exited, status=0/SUCCESS)
Main PID: 763 (haproxy)
Tasks: 3 (limit: 2288)
CGroup: /system.slice/haproxy.service
├─763 /apps/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
├─802 /apps/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
└─803 /apps/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid

May 14 17:58:44 ubuntu-template systemd[1]: Starting HAProxy Load Balancer…
May 14 17:58:44 ubuntu-template haproxy[698]: [WARNING] 133/175844 (698) : Proxy ‘stats’: in multi-process mode, stats will be limite
May 14 17:58:44 ubuntu-template haproxy[698]: Configuration file is valid
May 14 17:58:44 ubuntu-template systemd[1]: Started HAProxy Load Balancer.
May 14 17:58:44 ubuntu-template haproxy[763]: [WARNING] 133/175844 (763) : Proxy ‘stats’: in multi-process mode, stats will be limite
May 14 17:58:45 ubuntu-template haproxy[763]: [NOTICE] 133/175844 (763) : New worker #1 (802) forked
May 14 17:58:45 ubuntu-template haproxy[763]: [NOTICE] 133/175844 (763) : New worker #2 (803) forked

8.访问状态页