目录

一、项目背景

二、环境准备

华为云账号与资源准备

项目核心依赖包

 虚拟私有云VPC的搭建与安全组策略的指定

    虚拟私有云VPC创建:

  安全组的创建:

Rocky Linux 8.5跳板机与模板机镜像创建与配置

       项目跳板机的创建:

​编辑​​编辑​​编辑​

​编辑​​编辑​​编辑​​编辑​​编辑​

      弹性公网IP(与跳板机绑定):

      跳板机部署配置:

​编辑

      模板机部署配置:

三、项目架构图

四、Apache集群部署与NFS服务部署

        Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。

        NFS(Network File System,网络文件系统)是一种分布式文件系统,允许计算机客户端将远程NFS服务器共享的目录挂载到本地文件系统中,实现文件的共享和访问。

  基本环境准备:

使用镜像机模板购买华为云主机及批量购买华为云主机

部署NFS服务

部署Apache服务及集群服务

五、负载均衡ELB

        购买华为ELB负载均衡

        为负载均衡创建监听器 

        测试:通过访问负载均衡的弹性公网IP即可以访问我们的网站首页如下

六、部署ELK日志收集与分析系统

Elasticsearch服务搭建

        部署 es-0001

        部署 es-0002 

         集群扩容

 图像化Elasticsearch插件安装Head部署

Logstash服务配置

部署安装logstash

        编写Logstash-Input-filter-output模块配置文件

         测试Elasticsearch的head插件可以登录

Filebeat插件部署

 七、Kibana配置与日志分析

        部署kibana

         日志数据分析

        使用仪表盘进行分析

八、项目测试与优化

九、总结与展望

一、项目背景

      在现在这样互联网飞速发展的时代,想要部署可以稳定访问的网站,可以借助华为云强大的技术支持,我们能够轻松实现Apache网站的搭建与部署。本项目将结合实战经验,利用华为云搭建跳板机,并使用华为云主机部署NFS服务、WEB服务ELP、Elasticsearch服务、Filebeat插件、Logstash服务以及Kibana等工具和服务,以使用Rocky Linux 8.5 64位系统的基础上搭建一个功能完善的Apache网站。

       云计算的优点在于其简单、方便且高效的特性。 通过借助云主机,我们能够快速部署网站,实现稳定可靠的高并发访问。这个项目将向您展示如何利用云计算技术,以最简单的方式搭建出一个稳定、高效的网站,让您的业务在数字化时代中蓬勃发展。

        本项目会带你在Linux中配置各种服务,并处理各个服务之间的协调,还有跳板机的制作、还有如何最优购买云主机,如何使用华为云主机的负载均衡

二、环境准备

华为云账号与资源准备

注册华为云账号并登录控制台。根据项目需求选择并购买云服务器、存储、网络等相关资源。 项目核心依赖包

elasticsearch-7.17.8-x86_64.rpmfilebeat-7.17.8-x86_64.rpmkibana-7.17.8-x86_64.rpmlogstash-7.17.8-x86_64.rpmmetricbeat-7.17.8-x86_64.rpm测试网站项目tar包   

        以上软件包是本项目所使用的软件包,可以去对应官网下载相对版本,如果版本不对应所产生的问题可能就是不对版的原因,所以尽量使用与本项目所写版本一致,关于网站可以自己准备自己想要发布的,也可以通过我的gitee仓库下载测试网站项目,等测试成功以后可以直接替换网站目录即可

        gitee仓库地址为:My-ELK-Project: project---tar rpm

 虚拟私有云VPC的搭建与安全组策略的指定

在本项目中,我们需要创建自己的局域网,也就是虚拟私有云VPC。这样我们在云架构部署中所有云主机都可以通过跳板机连接公网,通过跳板机的反向代理转发云主机的YUM请求,这样可以减少公网IP的购买,同时,所有云主机的网络YUM源也得到解决。

    虚拟私有云VPC创建:

                华为云地址:共建智能世界云底座-华为云

  安全组的创建:

        安全组实际上就是云主机的防火墙,我们要在云主机上设置安全组策略,来控制互联网用户访问我们所购买的云主机,这种访问规则就是云主的入口规则,出口规则就是我们VPC中的云主机访问互联网则无限制

                华为云地址:共建智能世界云底座-华为云

        ***我们仅需在入口设置规则即可,出口则不需要限制***

Rocky Linux 8.5跳板机与模板机镜像创建与配置

在本项目中所有云主机的网络通信、网络YUM源、云主机的安全稳定运行都少不了跳板机的存在,而我们所搭建的云主机可以直接免密使用,并且可以YUM仓库也可以正常使用,这些又都离不开我们所制作的Rocky Linux系统模板机镜像。

跳板机与模板机的IP规划

主机名IP地址主机身份ecs-proxy192.168.1.252跳板机ecs-host192.168.1.125模板机

       项目跳板机的创建:

        跳板机:跳板机通常用于安全地远程访问内部网络资源,用户通过跳板机再连接到目标服务器,以减少对目标服务器的直接暴露。通过SSH等方式安全访问内部服务器,并配置跳板机的安全策略,确保只有授权用户能够访问。

                华为云地址:共建智能世界云底座-华为云​​

​​​

​​​​​

      弹性公网IP(与跳板机绑定):

              跳板机在我们整个项目中是唯一一个可以直接连接公网的IP,我们创建其他的云主机也都是通过访问跳板机所部署的Nginx反向代理,将在我们搭建的VPC下的云主机访问请求转发到公网。为什么要这样做呢?第一是公网IP地址的稀缺,第二是租用多个公网IP的成本较大,对于一些互联网小公司和我们这样的自营户不太友好,所以跳板机就此产生,为我们解决这些问题。

        购买弹性公网IP:

        华为云地址:共建智能世界云底座-华为云

 

 

      跳板机部署配置:

              在跳板机上我们需要安装ansible为之后做集群方便,创建公私钥对、优化系统配置、安装Nginx部署反向代理yum仓库等

               跳板机的连接:

                       可以使用远程连接工具进行连接,如果使用命令行终端的方式有可能会断开连接这种,所以最好是使用远程工具连接即可。本项目采用Windterm远程连接工具进行连接如下:

               安装Ansible以及免密登录:

[root@ecs-proxy ~] dnf install -y ansible-core #安装ansible

[root@ecs-proxy ~] ssh-keygen #创建公私钥对

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

... ...

[root@ecs-proxy ~] chmod 0400 /root/.ssh/id_rsa #赋予公钥只读权限,这样可以预防公钥失效

[root@ecs-proxy ~] ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.1.125 #使用公钥拷贝命令,将公钥拷贝给我们的购买好的模板机,拷贝完成即可实现免密登录

               优化跳板机系统设置:

[root@ecs-proxy ~] systemctl stop atd kdump nis-domainname

[root@ecs-proxy ~] dnf remove -y postfix at audit kexec-tools firewalld-* *-firmware unbound-libs

[root@ecs-proxy ~] dnf install -y rsync tree bash-completion lrzsz tar iptables patch ipset time

[root@ecs-proxy ~] echo 'ListenAddress 0.0.0.0' >>/etc/ssh/sshd_config

[root@ecs-proxy ~] sed -ri 's,^(OPTIONS).*,\1="-4u chrony",' /etc/sysconfig/chronyd

[root@ecs-proxy ~] sed 's,^manage_etc_hosts:.*,# &,' -i /etc/cloud/cloud.cfg

[root@ecs-proxy ~] vim /etc/hosts

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

[root@ecs-proxy ~] reboot

#systemctl stop atd kdump nis-domainname:停止 atd、kdump 和 nis-domainname 服务。这些服务可能不需要在某些服务器上运行,因此可以将它们停止以节省资源。

#dnf remove -y postfix at audit kexec-tools firewalld-* *-firmware unbound-libs:删除指定的软件包。这些软件包可能不需要在某些服务器上安装,因此可以将它们删除以节省磁盘空间。

#dnf install -y rsync tree bash-completion lrzsz tar iptables patch ipset time:安装指定的软件包。这些软件包可能对服务器的管理和功能有用,因此可以将它们安装到服务器上。

#echo 'ListenAddress 0.0.0.0' >>/etc/ssh/sshd_config:将 "ListenAddress 0.0.0.0" 添加到 sshd_config 文件中。这将允许 SSH 服务监听所有 IP 地址,而不仅仅是本地回环地址。

#sed -ri 's,^(OPTIONS).*,\1="-4u chrony",' /etc/sysconfig/chronyd:使用 sed 命令修改 chronyd 配置文件。这将更改 OPTIONS 配置项,使其仅监听 IPv4 地址。

#sed 's,^manage_etc_hosts:.*,# &,' -i /etc/cloud/cloud.cfg:使用 sed 命令修改 cloud.cfg 文件。这将注释掉 manage_etc_hosts 配置项,以防止 cloud-init 在启动时自动管理 /etc/hosts 文件。

#vim /etc/hosts: 删掉不需要的域名解析

#reboot: 有些配置重启才有效

               使用Nginx创建反向代理:

[root@ecs-proxy ~] dnf install -y nginx

[root@ecs-proxy ~] vim /etc/nginx/default.d/dnf_proxy.conf

resolver 100.125.1.250 100.125.129.250 valid=5 ipv6=off;

location ~ ^/rockylinux/(.*)$ {

proxy_pass https://repo.huaweicloud.com/rockylinux/$1;

}

[root@ecs-proxy ~] systemctl enable --now nginx

#dnf install -y nginx:安装 Nginx 软件包。这将在服务器上安装 Nginx Web 服务器,用于处理 HTTP 和 HTTPS 请求。

#vim /etc/nginx/default.d/dnf_proxy.conf:使用 vim 编辑器创建并编辑 /etc/nginx/default.d/dnf_proxy.conf 文件。这个文件将包含 Nginx 配置,用于设置 DNS 解析器和反向代理。

#resolver 100.125.1.250 100.125.129.250 valid=5 ipv6=off;:设置 DNS 解析器。这里使用了两个 DNS 服务器地址:100.125.1.250 和 100.125.129.250。valid=5 表示缓存 DNS 解析结果的有效时间为 5 秒。ipv6=off 表示禁用 IPv6 解析。

#location ~ ^/rockylinux/(.*)$ { ... }:定义一个 location 块,用于处理以 /rockylinux/ 开头的请求。这里使用了正则表达式捕获路径中的任意字符,以便在 proxy_pass 指令中使用。

#proxy_pass https://repo.huaweicloud.com/rockylinux/$1;:设置反向代理。将匹配到的请求转发到 https://repo.huaweicloud.com/rockylinux/ 并附加捕获到的路径。这样,当用户访问 /rockylinux/ 路径时,Nginx 会将请求转发到指定的 URL。

#systemctl enable --now nginx:启用并立即启动 Nginx 服务。这将使 Nginx 服务在系统启动时自动运行,并立即启动服务以便开始处理请求。

               配置自定义YUM仓库(我们需要将第二栏中核心依赖包传入到跳板机上):

[root@ecs-proxy ~] dnf install -y createrepo #安装生成YUM仓库清单软件包

[root@ecs-proxy ~] mkdir -p /var/localrepo

#将准备号的rpm包拷贝到/var/localrepo目录中,可以使scp、rsync命令,也可以使用windterm、某shell等远程工具中上传文件的工具也可以

[root@ecs-proxy ~] createrepo --update /var/localrepo #为此目录下的rpm包生成软件清单

[root@ecs-proxy ~] ln -s /var/localrepo /usr/share/nginx/html/

#此命令是将nginx收到的请求转发到此YUM仓库目录下查找所做的软连接,至于nginx请求怎么转发就是咱们上一项反向代理匹配正则表达式来控制转发

      模板机部署配置:

      模板机镜像:在华为云服务器上部署一台以Rocky Linux 8.5 64位系统的镜像,设置该镜像主机的网络、密码等优化设置,之后创建的虚拟机都会基于此镜像模板机

                华为云地址:共建智能世界云底座-华为云

​​​​​

        模板机的连接:

                模板机的连接需要我们先连接上跳板机,因为跳板机与模板机在共同一个虚拟私有VPC中,所以我们只能通过跳板机使用ssh进行连接VPC所有云主机。

        模板机的部署:

               配置YUM客户端:

[root@ecs-host ~] rm -f /etc/yum.repos.d/{epel,Rocky-[!ABE]}*

#这个命令确保模板机上不会有任何与 EPEL 和 Rocky Linux 相关的仓库配置文件,以防止在后续操作中引入不必要的依赖或冲突。

[root@ecs-host ~] sed -ri 's,https://repo.huaweicloud.com,http://192.168.1.252,' /etc/yum.repos.d/*.repo

#这个命令将模板机上的所有仓库配置文件中的远程仓库 URL 替换为本地仓库 URL,以确保在安装和更新软件包时使用本地仓库。

[root@ecs-host ~] vim /etc/yum.repos.d/local.repo

[local_repo]

name=Rocky Linux $releasever - Localrepo

baseurl=http://192.168.1.252/localrepo

enabled=1

gpgcheck=0

#这个命令创建一个名为 local_repo 的新仓库配置文件,指向本地仓库(位于 http://192.168.1.252/localrepo)--也就是跳板机的IP,在这里就是将YUM请求转发给跳板机,跳板机通过反向代理转发请求到自定义YUM仓库或者网络YUM源。这将确保模板机在安装和更新软件包时使用本地仓库,从而加快部署速度并避免因网络问题导致的安装失败。

[root@ecs-host ~] dnf makecache

Rocky Linux 8 - AppStream 187 kB/s | 4.8 kB 00:00

Rocky Linux 8 - BaseOS 172 kB/s | 4.3 kB 00:00

Rocky Linux 8 - Extras 105 kB/s | 3.5 kB 00:00

Rocky Linux 8 - Localrepo 2.9 MB/s | 3.0 kB 00:00

Metadata cache created.

#dnf 与 yum 命令相同用法也一致,此命令是更新yum缓存

               优化系统配置:

[root@ecs-proxy ~] systemctl stop atd kdump nis-domainname

[root@ecs-proxy ~] dnf remove -y postfix at audit kexec-tools firewalld-* *-firmware unbound-libs

[root@ecs-proxy ~] dnf install -y rsync tree bash-completion lrzsz tar iptables patch ipset time

[root@ecs-proxy ~] echo 'ListenAddress 0.0.0.0' >>/etc/ssh/sshd_config

[root@ecs-proxy ~] sed -ri 's,^(OPTIONS).*,\1="-4u chrony",' /etc/sysconfig/chronyd

[root@ecs-proxy ~] sed 's,^manage_etc_hosts:.*,# &,' -i /etc/cloud/cloud.cfg

[root@ecs-proxy ~] vim /etc/hosts

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

[root@ecs-proxy ~] poweroff

#systemctl stop atd kdump nis-domainname:停止 atd、kdump 和 nis-domainname 服务。这些服务可能不需要在某些服务器上运行,因此可以将它们停止以节省资源。

#dnf remove -y postfix at audit kexec-tools firewalld-* *-firmware unbound-libs:删除指定的软件包。这些软件包可能不需要在某些服务器上安装,因此可以将它们删除以节省磁盘空间。

#dnf install -y rsync tree bash-completion lrzsz tar iptables patch ipset time:安装指定的软件包。这些软件包可能对服务器的管理和功能有用,因此可以将它们安装到服务器上。

#echo 'ListenAddress 0.0.0.0' >>/etc/ssh/sshd_config:将 "ListenAddress 0.0.0.0" 添加到 sshd_config 文件中。这将允许 SSH 服务监听所有 IP 地址,而不仅仅是本地回环地址。

#sed -ri 's,^(OPTIONS).*,\1="-4u chrony",' /etc/sysconfig/chronyd:使用 sed 命令修改 chronyd 配置文件。这将更改 OPTIONS 配置项,使其仅监听 IPv4 地址。

#sed 's,^manage_etc_hosts:.*,# &,' -i /etc/cloud/cloud.cfg:使用 sed 命令修改 cloud.cfg 文件。这将注释掉 manage_etc_hosts 配置项,以防止 cloud-init 在启动时自动管理 /etc/hosts 文件。

#vim /etc/hosts: 删掉不需要的域名解析

#poweroff: 关机以后把主机系统盘制作为镜像模板

               跟据模板机制作镜像模板:

三、项目架构图

四、Apache集群部署与NFS服务部署

        Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。

        NFS(Network File System,网络文件系统)是一种分布式文件系统,允许计算机客户端将远程NFS服务器共享的目录挂载到本地文件系统中,实现文件的共享和访问。

Apache安装与基本配置

在华为云主机上配置Apache网站,可以使用测试网站,也可以使用自己准备的网站。配置虚拟主机、端口号等基本参数,确保网站能够正常访问。NFS服务搭建

在NFS服务器上安装和配置NFS服务,创建Apache共享目录。测试Apache网站,能够访问NFS共享目录,并显示出网站内容。网站内容部署

将网站文件部署到NFS共享目录中,确保Apache服务器能够访问这些文件。配置Apache服务器以正确展示网站内容。

  基本环境准备:

名称IP地址配置NFS192.168.1.101CPU,1G内存web-0001192.168.1.112CPU,4G内存web-0002192.168.1.122CPU,4G内存web-0003192.168.1.132CPU,4G内存

使用镜像机模板购买华为云主机及批量购买华为云主机

        在文章上部分,我们已经搭建好跳板机及模板机,也为模板机创建了私有镜像模板,接下来可以使用模板机模板进行购买华为云主机,使用私有镜像购买的云主机,具备了模板机的开机密码、YUM仓库、优化服务等,对我们接下来的项目搭建节省了很多时间。

     华为云地址:共建智能世界云底座-华为云

        批量购买云主机可以一次性购买多台,名字会以当前设置名字+0001往下顺延,IP地址也会从所设主机IP顺延

部署NFS服务

        将准备好的WEB网站放入NFS共享目录,使Web集群有可以发布出来的网站

# 创建共享目录,并部署网站页面

[root@nfs ~] mkdir -p /var/webroot

[root@nfs ~] tar -zxf website.tar.gz -C /var/webroot/

# 部署 NFS 服务

[root@nfs ~] dnf install -y nfs-utils

[root@nfs ~] vim /etc/exports

/var/webroot 192.168.1.0/24(rw,no_root_squash)

[root@nfs ~] systemctl enable --now nfs-server.service

部署Apache服务及集群服务

        挂载nfs共享出的Apache网站,可以使用Ansible环境一键部署Apache集群

[root@ecs-proxy ~] mkdir website

[root@ecs-proxy ~] cd website

[root@ecs-proxy website]# vim ansible.cfg

[defaults]

inventory = hostlist

host_key_checking = False

[root@ecs-proxy website] vim hostlist

[web]

192.168.1.[11:13]

[root@ecs-proxy website] vim web_install.yaml

---

- name: web 集群安装

hosts: web

tasks:

- name: 安装 apache 服务

dnf:

name: httpd,php,nfs-utils

state: latest

update_cache: yes

- name: 配置 httpd 服务

service:

name: httpd

state: started

enabled: yes

- name: 编辑 fstab 文件,添加 NFS 配置

lineinfile:

path: /etc/fstab

regexp: '^192.168.1.10:/.*'

line: '192.168.1.10:/var/webroot /var/www/html nfs defaults,_netdev,nolock 1 1'

create: yes

- name: 挂载 NFS

shell:

cmd: mount /var/www/html

        设置中文语言环境,可以使测试的网站即使有中文也可以正常访问,并执行Ansible剧本

# 设置语言环境

[root@ecs-proxy website] locale

[root@ecs-proxy website] export LANG="en_US.UTF-8" LC_ALL="en_US.UTF-8"

[root@ecs-proxy website] echo 'export LANG="en_US.UTF-8"' >>/etc/profile.d/lang.sh

# 执行 playbook 完成安装

[root@ecs-proxy website] ansible-playbook web_install.yaml

五、负载均衡ELB

        ELB(Elastic Load Balancer,弹性负载均衡)是一种用于将网络流量分发到多个后端服务器上的服务,可以提高应用的可用性、性能和可扩展性,可以将访问流量跟据转发策略分发到后端多台服务器的流量分发控制服务,弹性负载均衡可以通过流量分发应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。

负载均衡ELB配置

在华为云上可直接购买并配置ELB,创建负载均衡器。将多个Apache服务器实例添加到负载均衡池中,实现流量分发和故障转移。

        购买华为ELB负载均衡

 

 

        为负载均衡创建监听器 

 

 

       客户端要访问Apache服务,就要监听客户的访问80端口请求,也就是网站,所以我们第一个为负载均衡添加的监听端口是Web集群的80端口,客户将请求访问负载均衡的地址通过算法转发给后台服务器。

        因此,负载均衡的地址也必须是弹性公网IP,按照以上购买负载均衡的方法是没有弹性公网IP的,应此我们要按照第二章环境准备里购买弹性公网IP的方法再购买一个弹性公网IP,然后与我们的负载均衡进行绑定。这样我们通过此弹性公网IP即可访问负载均衡器并自动转发访问请求。以下是负载均衡榜绑定弹性IP的教程:

        测试:通过访问负载均衡的弹性公网IP即可以访问我们的网站首页如下

六、部署ELK日志收集与分析系统

ELK是什么?

        ELK是一整套解决方案,是三个软件产品的首字母缩写,很多公司都在使用,例如:美团、华为、携程等。ELK分别是Elasticsearch、Logstash、Kibana,由Elasticsearch负责日志检索和存储,Logstash负责日志的收集与分析、处理,Kibana负责日志的可视化。

Elasticsearch服务:Elasticsearch是一个基于Lucene构建的开源、分布式、RESTful搜索引擎,它能够提供全文搜索、结构化搜索、分析以及这三者结合的能力,为日志数据提供了强大的存储和搜索功能。

Elasticsearch服务搭建

在华为云服务器上安装Elasticsearch,并根据项目需求进行配置,包括设置集群名称、节点角色、分片与副本数等。创建必要的索引和映射,以适应日志数据的存储和查询需求。配置Elasticsearch的安全策略,包括访问控制、数据加密等,确保日志数据的安全性。=

主机IP地址配置es-0001192.168.1.21最低配置2核4Ges-0002192.168.1.22最低配置2核4Ges-0003192.168.1.23最低配置2核4Ges-0004192.168.1.24最低配置2核4Ges-0005192.168.1.25最低配置2核4G

        首先部署es-0001与es-0002两台服务器,因为Elasticsearch有投票选举的功能,部署两台可以先启动哦服务,再之后进行扩容Elasticsearch集群。投票选举(Voting election)是 Elasticsearch 集群中的一种关键机制,用于在主节点(Master node)出现故障时选举新的主节点。投票选举的原理如下:

        集群中的每个节点都有一个投票权重,默认情况下,每个节点的投票权重为 1。投票权重可以通过配置文件进行调整。        当集群中的主节点出现故障时,其他节点会触发投票选举。选举过程中,每个节点都会向其他节点发送投票请求。        在投票过程中,每个节点都会收到其他节点的投票请求。节点会根据自己的投票权重和其他节点的投票权重来决定是否接受对方的投票请求。        当一个节点收到的投票数超过集群中节点总数的一半(即获得多数派支持),该节点就会被选举为新的主节点。        新的主节点会向集群中的其他节点发送通知,告知它们自己已经成为新的主节点。其他节点收到通知后,会更新自己的状态,将新的主节点加入到集群中。

        通过投票选举机制,Elasticsearch 可以确保在主节点出现故障时,集群能够快速地恢复正常运行。这种机制有助于提高集群的可用性和容错能力。

        部署 es-0001

[root@es-0001 ~] vim /etc/hosts

192.168.1.21 es-0001

192.168.1.22 es-0002

192.168.1.23 es-0003

192.168.1.24 es-0004

192.168.1.25 es-0005

[root@es-0001 ~] dnf install -y elasticsearch

[root@es-0001 ~] vim /etc/elasticsearch/elasticsearch.yml

17: cluster.name: my-es

23: node.name: es-0001

56: network.host: 0.0.0.0

70: discovery.seed_hosts: ["es-0001", "es-0002", "es-0003"]

74: cluster.initial_master_nodes: ["es-0001", "es-0002", "es-0003"]

[root@es-0001 ~] systemctl enable --now elasticsearch

# 服务启动成功

[root@es-0001 ~] curl http://127.0.0.1:9200

{

"name" : "es-0001",

"cluster_name" : "my-es",

"cluster_uuid" : "_na_",

"version" : {

"number" : "7.17.8",

"build_flavor" : "default",

"build_type" : "rpm",

"build_hash" : "120eabe1c8a0cb2ae87cffc109a5b65d213e9df1",

"build_date" : "2022-12-02T17:33:09.727072865Z",

"build_snapshot" : false,

"lucene_version" : "8.11.1",

"minimum_wire_compatibility_version" : "6.8.0",

"minimum_index_compatibility_version" : "6.0.0-beta1"

},

"tagline" : "You Know, for Search"

}

        部署 es-0002 

# 验证集群状态失败

[root@es-0002 ~] curl http://es-0001:9200/_cat/nodes?pretty

{

"error" : {

"root_cause" : [

{

"type" : "master_not_discovered_exception",

"reason" : null

}

],

"type" : "master_not_discovered_exception",

"reason" : null

},

"status" : 503

}

# 部署服务

[root@es-0002 ~] vim /etc/hosts

192.168.1.21 es-0001

192.168.1.22 es-0002

192.168.1.23 es-0003

192.168.1.24 es-0004

192.168.1.25 es-0005

[root@es-0002 ~] dnf install -y elasticsearch

[root@es-0002 ~] vim /etc/elasticsearch/elasticsearch.yml

17: cluster.name: my-es

23: node.name: es-0002

56: network.host: 0.0.0.0

70: discovery.seed_hosts: ["es-0001", "es-0002", "es-0003"]

74: cluster.initial_master_nodes: ["es-0001", "es-0002", "es-0003"]

[root@es-0002 ~] systemctl enable --now elasticsearch

# 验证集群状态

[root@es-0002 ~] curl http://es-0001:9200/_cat/nodes?pretty

192.168.1.21 16 89 2 0.15 0.06 0.04 cdfhilmrstw * es-0001

192.168.1.22 6 88 61 1.00 0.23 0.08 cdfhilmrstw - es-0002

         集群扩容

#在所有 es 主机安装 Elasticsearch

[root@ecs-proxy ~] mkdir es

[root@ecs-proxy ~] cd es

[root@ecs-proxy es] vim ansible.cfg

[defaults]

inventory = hostlist

host_key_checking = False

[root@ecs-proxy es] vim hostlist

[es]

192.168.1.[21:25]

[root@ecs-proxy es] rsync -av 192.168.1.21:/etc/elasticsearch/elasticsearch.yml elasticsearch.j2

[root@ecs-proxy es] vim elasticsearch.j2

23: node.name: {{ ansible_hostname }}

[root@ecs-proxy es] vim es_install.yaml

---

- name: Elasticsearch 集群安装

hosts: es

tasks:

- name: 设置 /etc/hosts

copy:

dest: /etc/hosts

owner: root

group: root

mode: '0644'

content: |

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

{% for i in groups.es %}

{{ hostvars[i].ansible_eth0.ipv4.address }} {{ hostvars[i].ansible_hostname }}

{% endfor %}

- name: 安装 ES 服务

dnf:

name: elasticsearch

state: latest

update_cache: yes

- name: 拷贝配置文件

template:

src: elasticsearch.j2

dest: /etc/elasticsearch/elasticsearch.yml

owner: root

group: elasticsearch

mode: '0660'

- name: 配置 ES 服务

service:

name: elasticsearch

state: started

enabled: yes

[root@ecs-proxy es] ansible-playbook es_install.yaml

[root@ecs-proxy es] curl http://192.168.1.21:9200/_cat/nodes?pretty

192.168.1.21 32 88 0 0.04 0.01 0.00 cdfhilmrstw * es-0001

192.168.1.22 16 87 0 0.13 0.04 0.01 cdfhilmrstw - es-0002

192.168.1.23 6 86 1 0.64 0.21 0.07 cdfhilmrstw - es-0003

192.168.1.24 18 86 0 0.44 0.13 0.05 cdfhilmrstw - es-0004

192.168.1.25 6 86 1 0.67 0.21 0.07 cdfhilmrstw - es-0005

 图像化Elasticsearch插件安装Head部署

        head插件也在我的gitee仓库中:My-ELK-Project: project---tar rpm

        拷贝插件

# 拷贝插件 head.tar.gz 到 es-0001 主机

[root@ecs-proxy] rsync -av public/head.tar.gz 192.168.1.21:./

#-------------------------------------------------

# 在 es-0001 上安装 web 服务,并部署插件

[root@es-0001 ~] dnf install -y nginx

[root@es-0001 ~] systemctl enable --now nginx

[root@es-0001 ~] tar zxf head.tar.gz -C /usr/share/nginx/html/

        使用nginx转发Head插件要求

[root@es-0001 ~] vim /etc/nginx/default.d/esproxy.conf

location ~* ^/es/(.*)$ {

proxy_pass http://127.0.0.1:9200/$1;

auth_basic "Elasticsearch admin";

auth_basic_user_file /etc/nginx/auth-user;

}

[root@es-0001 ~] dnf install -y httpd-tools

[root@es-0001 ~] htpasswd -cm /etc/nginx/auth-user admin

New password:

Re-type new password:

Adding password for user admin

[root@es-0001 ~] systemctl reload nginx

Logstash服务:Logstash是一个强大的开源数据收集引擎,它能够实时地收集、转换和传输来自不同来源的数据,包括日志、事件、度量指标等,为数据的进一步处理和分析提供了便利。

Logstash服务配置

安装Logstash,并创建配置文件,定义日志数据的输入、过滤和输出流程。配置Logstash从Filebeat接收日志数据,并进行必要的清洗、转换和格式化处理。将处理后的日志数据输出到Elasticsearch中,以供后续分析和查询。

部署安装logstash

主机名称IP地址配置logstash192.168.1.27最低配置4核8G

        安装部署

[root@logstash ~] vim /etc/hosts

192.168.1.21 es-0001

192.168.1.22 es-0002

192.168.1.23 es-0003

192.168.1.24 es-0004

192.168.1.25 es-0005

192.168.1.27 logstash

[root@logstash ~] dnf install -y logstash

[root@logstash ~] ln -s /etc/logstash /usr/share/logstash/config

        编写Logstash-Input-filter-output模块配置文件

[root@logstash ~]# vim /etc/logstash/conf.d/my.conf

input {

beats {

port => 5044

}

}

filter{

if [fields][logtype] == "apache_log" {

grok {

match => { "message" => "%{HTTPD_COMBINEDLOG}" }

remove_field => ["message"]

}}

}

output{

stdout{ codec => "rubydebug" }

if [fields][logtype] == "apache_log" {

elasticsearch {

hosts => ["es-0004:9200", "es-0005:9200"]

index => "weblog-%{+YYYY.MM.dd}"

}}

}

#输入(input)部分:

#使用Beats插件,监听5044端口,接收日志数据。

#过滤(filter)部分:

#如果日志类型(fields.logtype)为"apache_log",则应用grok插件。

#grok插件使用HTTPD_COMBINEDLOG模式匹配日志数据,并将结果添加到事件中。

#删除原始的"message"字段。

#输出(output)部分:

#将处理后的日志数据输出到stdout,使用rubydebug编解码器进行格式化。

#如果日志类型(fields.logtype)为"apache_log",则将数据输出到Elasticsearch。

#Elasticsearch的主机地址为"es-0004:9200"和"es-0005:9200"。

#索引名称为"weblog-%{+YYYY.MM.dd}",其中"%{+YYYY.MM.dd}"表示当前日期。

         测试Elasticsearch的head插件可以登录

Filebeat插件部署

        Filebeat是一个轻量级的日志收集器,它能够监视并转发服务器上的日志文件到指定的位置,如Logstash或Elasticsearch,确保日志数据的实时收集与传输。

Filebeat插件配置

在每个Apache服务器上安装Filebeat,并配置其监控指定目录中的日志文件。设置Filebeat的输出目标为Logstash或Elasticsearch,确保日志数据能够正确传输。根据需要调整Filebeat的采集频率、过滤规则等,以满足项目特定的日志收集需求。

[root@web-0001 ~] dnf install -y filebeat

[root@web-0001 ~] systemctl enable filebeat

[root@web-0001 ~] vim /etc/filebeat/filebeat.yml

25: id: my-filestream-id # 如果同时配置多个收集器,id不能重复

28: enabled: true # 打开收集模块

32: - /var/log/httpd/access_log # 日志文件路径

135: # 注释掉 Elasticsearch 配置

137: # 注释掉 Elasticsearch 配置

148: output.logstash: # 设置输出模块

150: hosts: ["192.168.1.27:5044"] # 输出给logstash

163: # processors: 注释(用于收集系统信息)

164: # - add_host_metadata: 注释掉(收集主机信息)

165: # when.not.contains.tags: forwarded 注释掉(判断是否为容器)

166: # - add_cloud_metadata: ~ 注释掉(收集 cloud 信息)

167: # - add_docker_metadata: ~ 注释掉(收集 docker 信息)

168: # - add_kubernetes_metadata: ~ 注释掉(收集 kubernetes 信息)

# 设置识别标签

49: fields:

50: logtype: apache_log

# 清理冗余数据

164: processors:

165: - drop_fields:

166: fields:

167: - log

168: - offset

169: - agent

170: - ecs

[root@web-0001 ~] rm -f /var/log/httpd/*

[root@web-0001 ~] systemctl restart filebeat httpd

# 测试验证: 访问页面,观察 logstash 是否能够获取数据

[root@web-0001 ~] curl http://192.168.1.11/info.php

         使用ansible为Apache集群批量部署filebeat插件

[root@ecs-proxy ~] cd website

[root@ecs-proxy website] rsync -av 192.168.1.11:/etc/filebeat/filebeat.yml filebeat.j2

[root@ecs-proxy website] vim filebeat.yaml

---

- name: 集群安装部署 filebeat

hosts: web

tasks:

- name: 安装 filebeat

dnf:

name: filebeat

state: latest

update_cache: yes

- name: 同步配置文件

template:

src: filebeat.j2

dest: /etc/filebeat/filebeat.yml

owner: root

group: root

mode: '0600'

- name: 设置启动服务

service:

name: filebeat

enabled: yes

- name: 清理历史日志

file:

path: "{{ item }}"

state: absent

loop:

- /var/log/httpd/access_log

- /var/log/httpd/error_log

- name: 重启服务

service:

name: "{{ item }}"

state: restarted

loop:

- httpd

- filebeat

[root@ecs-proxy website] ansible-playbook filebeat.yaml

验证日志收集

# 删除日志数据

[root@ecs-proxy ~] curl -XDELETE "http://192.168.1.21:9200/weblog-*"

{"acknowledged":true}

# 通过浏览器访问 Web 集群页面,观察 head 插件,是否有数据写入

 七、Kibana配置与日志分析

        Kibana是一个专为Elasticsearch设计的开源数据可视化平台,它允许用户通过搜索、查看和可视化存储在Elasticsearch中的日志和数据,从而深入理解系统的运行状况和用户行为。

安装Kibana,并连接到已配置好的Elasticsearch服务。在Kibana中创建索引模式,以匹配存储在Elasticsearch中的日志数据结构。使用Kibana的搜索和可视化功能,对日志数据进行深入分析和监控,包括趋势分析、事件关联、异常检测等。创建仪表盘和报告,将分析结果以直观的方式呈现给相关人员,帮助他们更好地理解系统的运行状况和问题所在。

主机IP地址配置kibana192.168.1.26最低配置2核4G

        部署kibana

[root@kibana ~] vim /etc/hosts

192.168.1.21 es-0001

192.168.1.22 es-0002

192.168.1.23 es-0003

192.168.1.24 es-0004

192.168.1.25 es-0005

192.168.1.26 kibana

[root@kibana ~] dnf install -y kibana

[root@kibana ~] vim /etc/kibana/kibana.yml

02: server.port: 5601

07: server.host: "0.0.0.0"

23: server.publicBaseUrl: "http://192.168.1.26:5601"

32: elasticsearch.hosts: ["http://es-0004:9200", "http://es-0005:9200"]

115: i18n.locale: "zh-CN"

[root@kibana ~] systemctl enable --now kibana

        使用 ELB 绑定端口 5601(与绑定80端口一致),通过 WEB 浏览器访问验证

         日志数据分析

 

        使用仪表盘进行分析

 

 

 

 

八、项目测试与优化

1. 功能测试

对搭建的Apache网站进行功能测试,确保网站能够正常访问、页面显示正确、链接有效等。对负载均衡ELB和进行测试,验证其是否能够有效地分发流量和优化网站性能。对日志收集与分析系统进行测试,验证日志数据的收集、传输、存储和查询功能是否正常工作。

2. 性能测试

使用压力测试工具对网站进行性能测试,模拟大量用户并发访问的场景,测试网站的响应时间和吞吐量等指标。根据测试结果调整服务器配置、优化代码和配置参数,提升网站的性能和稳定性。

3. 安全测试

对网站进行安全测试,包括漏洞扫描、SQL注入、跨站脚本攻击等常见安全问题的测试。根据测试结果修复潜在的安全隐患,加强网站的安全防护措施。

4. 优化建议

根据项目实际运行情况和测试结果,提出针对性的优化建议,包括硬件升级、配置调整、代码优化等方面。总结项目经验教训,为未来的类似项目提供参考和借鉴。对于此项目的后期扩展性十分之大,可以替换网站,可以将Apache网站替换成Nginx网站、Tomcat网站等,有了该项目,可以将其中的部分进行替换即可。

九、总结与展望

        经过本次实战项目的深入实施,我们成功借助华为云强大的服务与工具,搭建起了一个功能全面、性能卓越的Apache网站,并实现了日志数据的实时收集与分析。在这个过程中,我们不仅锤炼了技术能力,更积累了宝贵的实战经验,为未来的项目奠定了坚实的基础。

        对于华为云,我们抱有深厚的信任和极高的期望。华为云作为业界领先的云服务提供商,持续为我们带来创新、稳定且高效的解决方案。我们期待华为云在未来能够进一步拓展其服务领域,为我们提供更多样化、更智能化的产品与服务。特别是在网站搭建和运维方面,我们期待华为云能够持续推出更多便捷、高效的工具,助力我们更轻松地实现网站的快速部署、优化与升级。

        同时,我们也对华为云所涵盖的各类软件与服务抱有热切的期盼。我们期望华为云能够不断优化其软件性能,提升用户体验,让我们的工作更加得心应手。此外,我们还希望华为云能够加强与各行业的合作,结合实际需求,推出更多定制化的解决方案,满足我们个人项目的多样化需求。

        展望未来,我渴望继续深入探索华为云在网站搭建和运维领域的无限可能。我相信,在华为云的支持下,本项目的后期将能够不断发展,实现更多项目的创新与发展。华为云提供了一个广阔的学习与实践平台,我们将充分利用其丰富的资源与工具,为本项目增添更多亮点。

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: