【运维实践项目|002】:服务器集群优化与监控项目

目录

项目名称

项目背景

项目目标

项目成果

我的角色与职责

我主要完成的工作内容

本次项目涉及的技术

本次项目遇到的问题与解决方法

本次项目中可能被面试官问到的问题

1、你是如何选择和部署监控系统的?

2、你是怎样优化服务器资源配置的?

3、你在本次项目有没有写一些shell脚本?

4、你们所使用的zabbix版本是哪一个,zabbix官方最新版本更新到哪一版本了?

5、本次项目中你们通过Zabbix主要监控了哪些指标?

5、本次项目中你们通过Prometheus主要监控了哪些指标?

6、你们对于故障告警一般通过那种媒介通知?

7、zabbix的监控流程是什么?

经验教训与自我提升

展望未来


项目名称

项目全名:服务器集群优化与监控项目

项目背景

随着公司业务的迅速扩展,服务器集群的规模日益庞大,运维复杂度不断增加。原有的监控和管理系统已无法满足需求,导致服务器故障响应慢、资源利用率低等问题频发。为了提升运维效率,确保系统稳定运行,公司决定开展此次运维项目。

项目目标

  1. 搭建高效稳定的监控系统,实时监控服务器集群状态。

  2. 优化服务器资源配置,提高资源利用率。

  3. 实现自动化运维,减少人工干预。

  4. 完善故障预警和快速响应机制,确保系统稳定性。

项目成果

  1. 成功部署了全新的监控系统,实现了对服务器集群的全面监控。

  2. 通过资源优化,服务器资源利用率提高了60%。

  3. 实现了多个运维流程的自动化,减少了运维人员的工作量。

  4. 故障预警和快速响应机制得到完善,系统故障率降低了40%。

我的角色与职责

  • 角色:运维工程师

  • 职责

    • 负责监控系统的搭建与配置。

    • 监控服务器集群状态,分析并处理异常。

    • 优化服务器资源配置,提高资源利用率。

    • 编写自动化运维脚本,减少人工干预。

我主要完成的工作内容

  1. 对市场上的监控系统进行了调研,选择了适合公司需求的监控系统,并完成了部署与配置。

  2. 编写并部署了自动化监控脚本,实现了对服务器集群的实时监控和异常告警。

  3. 对服务器集群的资源使用情况进行了深入分析,通过调整配置和迁移应用等方式,提高了资源利用率。

  4. 编写了多个自动化运维脚本,如自动备份、服务器初始化等,减少了运维人员的工作量。

本次项目涉及的技术

  • 监控系统:Zabbix、Prometheus

  • 自动化工具:Ansible、Shell脚本

  • 脚本编写:shell

本次项目遇到的问题与解决方法

  1. 问题:监控系统在初期运行时,部分服务器数据收集不全。 解决方法:检查监控代理的配置,确保所有服务器都已正确安装并配置。同时,针对特定服务器的特性,调整监控策略。

  2. 问题:自动化运维脚本在某些环境下运行失败。 解决方法:对脚本进行兼容性测试,找出问题所在并进行修复。同时,增加脚本的日志输出,便于故障排查。

本次项目中可能被面试官问到的问题

1、你是如何选择和部署监控系统的?

答:

  1. 需求分析

    • 首先,明确需要监控什么。这可能包括服务器、网络设备、应用程序、数据库、存储等。

    • 确定监控的目标,如性能优化、故障预防、安全监控等。

    • 考虑是否需要监控实时数据或历史数据。

  2. 市场调研

    • 研究市场上的监控系统,了解各种产品的特点、优势和劣势。

    • 考虑与现有基础设施和工具的兼容性。

    • 评估成本效益,包括购买成本、维护成本、升级成本等。

  3. 选择监控系统

    • 选择一个或多个符合需求的监控系统。

    • 考虑系统的可扩展性、易用性、稳定性和安全性。

    • 选择有良好技术支持和社区支持的产品。

  4. 规划和设计

    • 设计监控架构,包括数据源、数据收集、数据存储、数据分析和警报通知等组件。

    • 确定监控频率和粒度,以满足需求。

    • 规划警报策略,确保在出现问题时能够及时通知相关人员。

  5. 部署和配置

    • 安装和配置监控系统及其相关组件。

    • 配置数据源,确保监控系统能够收集到所需的数据。

    • 设置警报阈值和通知方式。

  6. 测试和优化

    • 对监控系统进行测试,确保其能够正常工作并收集到准确的数据。

    • 根据测试结果进行优化,调整配置和警报策略。

  7. 集成和自动化

    • 将监控系统与现有的IT基础设施和工具集成,如CMDB(配置管理数据库)、自动化运维工具等。

    • 实现自动化监控,包括自动发现新设备、自动配置监控参数等。

  8. 持续监控和维护

    • 定期检查监控系统的状态和性能。

    • 根据需要进行升级和维护,以确保系统的稳定性和安全性。

    • 监控和分析警报数据,以发现潜在的问题并采取相应的措施。

  9. 培训和文档

    • 为相关人员提供培训,确保他们能够熟练使用监控系统并理解其工作原理。

    • 编写和维护相关的文档,包括安装指南、配置手册、用户手册等。

2、你是怎样优化服务器资源配置的?

答:

一、硬件优化

  1. CPU优化

    • 根据服务器的工作负载选择适当的CPU。对于需要处理大量并发任务的服务器,选择多核、多线程的CPU。

    • 考虑CPU的主频和缓存大小,以满足处理复杂计算任务的需求。

  2. 内存优化

    • 根据服务器的运行需求和预期负载增加内存容量,确保服务器可以同时处理更多的任务。

    • 考虑使用更快的内存,以提高数据读写速度。

  3. 存储优化

    • 选择高性能的硬盘或固态硬盘(SSD),以加快数据读写速度。

    • 使用RAID技术(如RAID 5或RAID 10)来提高数据冗余和读写性能。

    • 定期清理和压缩存储的数据,释放存储空间,提高磁盘性能。

  4. 网络优化

    • 根据业务需求选择适当的网络带宽和接口类型,确保数据传输速度足够快。

    • 使用负载均衡技术将请求分发到多个服务器上,提高整体性能和可靠性。

二、软件优化

  1. 操作系统优化

    • 关闭不必要的服务和进程,释放系统资源。

    • 调整系统参数和缓冲区大小,以提高系统性能。

    • 定期进行系统更新和补丁安装,确保服务器操作系统的安全性和稳定性。

  2. 数据库优化

    • 对数据库进行索引优化、查询优化和存储优化,提高数据库读写性能。

    • 定期清理和归档旧数据,释放存储空间。

  3. 应用程序优化

    • 优化应用程序的代码和算法,减少不必要的计算和I/O操作。

    • 使用缓存技术(如Redis、Memcached等)来缓存常用数据和计算结果,减少数据库访问次数。

3、你在本次项目有没有写一些shell脚本?

答:有

1、写了两个服务器初始化优化shell脚本

脚本内容如下:

#/bin/bash
# 设置时区并同步时间
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
if ! crontab -l |grep ntpdate &>/dev/null ; then(echo "* 1 * * * ntpdate time.windows.com >/dev/null 2>&1";crontab -l) |crontab
fi# 禁用selinux
sed -i '/SELINUX/{s/permissive/disabled/}' /etc/selinux/config# 关闭防火墙
if egrep "7.[0-9]" /etc/redhat-release &>/dev/null; thensystemctl stop firewalldsystemctl disable firewalld
elif egrep "6.[0-9]" /etc/redhat-release &>/dev/null; thenservice iptables stopchkconfig iptables off
fi# 历史命令显示操作时间
if ! grep HISTTIMEFORMAT /etc/bashrc; thenecho 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/bashrc
fi# SSH超时时间
if ! grep "TMOUT=600" /etc/profile &>/dev/null; thenecho "export TMOUT=600" >> /etc/profile
fi# 禁止root远程登录
sed -i 's/#PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config# 禁止定时任务向发送邮件
sed -i 's/^MAILTO=root/MAILTO=""/' /etc/crontab# 设置最大打开文件数
if ! grep "* soft nofile 65535" /etc/security/limits.conf &>/dev/null; thencat >> /etc/security/limits.conf << EOF* soft nofile 65535* hard nofile 65535
EOF
fi# 系统内核优化
cat >> /etc/sysctl.conf << EOF
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_tw_buckets = 20480
net.ipv4.tcp_max_syn_backlog = 20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout = 20
EOF# 减少SWAP使用
echo "0" > /proc/sys/vm/swappiness# 安装系统性能分析工具及其他
yum install gcc make autoconf vim sysstat net-tools iostat if
#包含安装epel源、yum源配置、清除缓存、新建缓存、关闭防火墙和selinux、安装vim、wget、lsfo常用工具等
#!/usr/bin/bash
echo "欢迎使用初始化jio本"
read -p "是否安装epel源?Y/N:" an1
if [ $an1 = 'y' ] || [ $an1 = 'Y' ];then
#安装epel源echo "正在安装epel源,请耐心等待..."yum -y install epel-release &> /dev/null
elsebreak
fi
{
read -p "是否需要配置base源?Y/N:" an2
if [ $an2 = 'y' ] || [ $an2 = 'Y' ];then
#配置yum源
/bin/cp  /etc/yum.repos.d/CentOS-Base.repo  /etc/yum.repos.d/CentOS-Base.repo.bak
sed -ri "s/\(mirrorlist=\)/#1/g" /etc/yum.repos.d/CentOS-Base.repo
sed -ri "s/#\(baseurl=\)/1/g" /etc/yum.repos.d/CentOS-Base.repo
elsebreak
fi
}
{
read -p "是否需要配置epel源?Y/N:" an3
if [ $an3 = 'y' ] || [ $an3 = 'Y' ];then/bin/cp /etc/yum.repos.d/epel.repo  /etc/yum.repos.d/epel.repo.baksed -ri "s/\(mirrorlist=\)/#1/g" /etc/yum.repos.d/epel.reposed -ri "s/.*\(baseurl=\)/1/g" /etc/yum.repos.d/epel.repo
elsebreak
fi
}
read -p "是否清楚缓存并建立新的缓存?Y/N:" an4
if [ $an4 = 'y' ] || [ $an4 = 'Y' ];thenecho "正在清理缓存并建立新的缓存,请稍后..."#清除缓存yum clean all  &> /dev/null#新建缓存yum makecache &> /dev/nullif [ $? -eq 0 ];thenecho "缓存建立完成!"else echo "缓存建立失败,请检查网络或者日志文件!"fi
elsebreak
fi
#关闭防火墙
systemctl stop firewalld  &> /dev/null
systemctl disable firewalld &> /dev/null
​
#关闭selinux
setenforce 0 &> /dev/null
sed -ri 's/\(SELINUX=\)enforcing/\1disabled' /etc/selinux/config &> /dev/null
yum -y install vim wget lsfo   &> /dev/null
if [ $? -eq 0 ];thenecho "常用工具安装完成,祝您使用愉快!"
elseecho "常用工具安装失败,请检查网络或日志"
fi

2、写了两个数据库备份脚本

脚本内容如下:

# 数据库全量备份
#!/bin/bash
# ##mysql用户
user="root"
# ##mysql密码
userPWD="xiaopeng@126.com"
# ##需要定时备份的数据库列表
dbNames=(pemass mysql)
# ##备份数据以日期创建文件夹存放,同时删除过期备份
DATE=`date -d "now" +%Y%m%d-%H%M%S`
ODATE=`date -d "-7day" +%Y%m%d-%H%M%S`
newdir=/opt/db_bak/mysql/$DATE
olddir=/opt/db_bak/mysql/$ODATE
# ##删除过期备份数据
if [ -d $olddir ];thenrm -rf $olddir
fi
# ##创建新备份文件夹
mkdir $newdir
# ##对备份数据库列表的所以数据库备份
for dbName in ${dbNames[*]}
dodumpFile=$dbName-$DATE.sql.gz/usr/bin/mysqldump -u$user -p$userPWD $dbName | gzip > $newdir/$dumpFile
done
# 数据库增量备份
​
#!/bin/bash
#增量备份时复制mysql--bin.00000*的目标目录
backupDir=/opt/db_bak/mysql/bakdir_add
#mysql的数据目录
mysqlDir=/var/lib/mysql
#mysql的index文件路径,,放在数据目录下的
logFile=/opt/db_bak/mysql/bakdir_add.log
BinFile=/var/lib/mysql/mysql-bin.index
​
#生产新的mysql--bin.00000*文件
mysqladmin -uroot -pxiaopeng@126.com flush-logs
#awk切片并统计行数
Counter=`wc -l $BinFile |awk '{print $1}'`
NextNum=0
#这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的
for file in `cat $BinFile`
dobase=`basename $file`echo $base#basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./NextNum=`expr $NextNum + 1`if [ $NextNum -eq $Counter ]thenecho $base skip! >> $logFileelsedest=$backupDir/$baseif (test -e $dest)#test -e用于检测目标文件是否存在,存在就写exist!到$logFile去thenecho $base exist! >> $logFileelsecp $mysqlDir/$base $backupDirecho $base copying >> $logFilefifi
done
echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup succ! >> $logFile

4、你们所使用的zabbix版本是哪一个,zabbix官方最新版本更新到哪一版本了?

我们公司使用的是5.0版本,最新版本为zabbix 6.4。(截至2024年5月份)

5、本次项目中你们通过Zabbix主要监控了哪些指标?

端口占用情况

CPU使用率

内存使用率

磁盘使用率

网络状况

5、本次项目中你们通过Prometheus主要监控了哪些指标?

CPU使用率

内存使用率

磁盘使用率

网络上传和下载速度

kafka数据消费和积压情况

6、你们对于故障告警一般通过那种媒介通知?

我们的故障主要分为几个等级:一级、二级、三级

三级告警通过钉钉机器人在监控群内发消息通知

二级告警通过邮箱、微信消息、手机短信等消息通知

一级告警通过手机拨号进行通知并启动应急响应警报

7、zabbix的监控流程是什么?

  1. zabbix server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据都由它组织进行

  2. database storage:专用于存储所有配置信息,以及由zabbix收集的数据;

  3. web interface:zabbix的GUI接口

  4. proxy:可选组件,常用于监控节点很多的分布式环境中,代理server收集部分数据转发到server,可以减轻server的压力

  5. agent:部署在被监控的主机上,负责收集主机本地数据如cpu、内存、数据库等数据发往server端或proxy端

经验教训与自我提升

  1. 经验教训:在项目实施过程中,我发现与业务部门的沟通非常关键。在未来的工作中,我将加强与业务部门的沟通,确保运维工作更加贴合业务需求。

  2. 自我提升:通过此次项目,我深刻认识到了自动化运维的重要性。我将继续学习并掌握更多的自动化运维工具和技术,提高自己的工作效率和质量。

展望未来

随着云计算、大数据等技术的不断发展,运维工作将面临更多的挑战和机遇。我将保持对新技术的关注和学习,不断提升自己的技术水平。同时,我也将关注行业动态,为公司的发展贡献自己的力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12180.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(Vue3+TS+Volar) 全局组件配置类型声明的最佳实践

实践方案 问题原因&#xff1a;Vue3并没有对自定义全局组件做TS类型支持处理&#xff0c;而是把这个功能转交Volar实现实现原理&#xff1a;利用TypeScript模块扩充技术&#xff0c;对全局组件的类型进行扩充&#xff0c;从而实现对新注册全局组件的类型保护实现步骤&#xff…

java中switch枚举类型enum的用法

目录 一、Java 中 switch 语句和枚举类型的使用 1. 定义枚举类型 2. 使用枚举类型 3. 类型安全和易读性 4. 扩展性和可维护性 总结 数组 &#xff1a; java中的数组是用来存储多个相同类型数据的数据机构&#xff1b;下标从0开始 根据下标查询&#xff1a;数组名[下标] 集…

Vue3组件库开发项目实战——02项目搭建(配置Eslint/Prettier/Sass/Tailwind CSS/VitePress/Vitest)

摘要&#xff1a;在现代前端开发中&#xff0c;构建一个高效、可维护且易于协作的开发环境至关重要。特别是在开发Vue3组件库时&#xff0c;我们需要确保代码的质量、一致性和文档的完整性。本文将带你从0搭建vue3组件库开发环境&#xff0c;以下是配置代码规范、格式化、CSS样…

335_C++_传入自定义数量参数,通过位移,生成唯一标识符key,通过函数返回值,看是占据32位还是64位

quint32 makeKey(int w, int h, quint8 quality, bool equalRatio) : 用于生成一个唯一的键(key) static inline quint32 makeKey(int w, int h, quint8 quality, bool equalRatio){return (w << 20)

通配符正则表达式(RegEXP)

通配符 Linux中通配符是一种特殊字符&#xff0c;用于匹配一组文件名中的某些部分。通配符可以用于文件名的前缀、后缀、中间的一部分等。Linux中常见的通配符包括星号&#xff08;*&#xff09;、问号&#xff08;?&#xff09;和方括号&#xff08;[]&#xff09;&#xff0…

扩散模型diffusion model

一 什么是扩散模型 1.1 现有生成模型 已经有大量的方法证明深度生成模型能够模拟人类的想象思维&#xff0c;生成人类难以分辨真伪的内容&#xff0c;主要方法如下&#xff1a; 1、GAN&#xff1a;用神经网络训练生成器和判别器 GAN 的主要思想&#xff1a; GAN 就是一个互搏的…

49.乐理基础-拍号的类型-单拍子、复拍子

当前写的东西&#xff0c;如果只是想要看懂乐谱的话&#xff0c;它是没什么意义的&#xff0c;就像我们要把 0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5。。。称为自然数&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5称为正整…

H5 云商城 file.php 文件上传致RCE漏洞复现

0x01 产品简介 H5 云商城是一个基于 H5 技术的电子商务平台,旨在为用户提供方便快捷的在线购物体验。多平台适配:H5 云商城采用 H5 技术开发,具有良好的跨平台适配性。无论是在电脑、手机还是平板等设备上,用户都可以通过网页浏览器访问和使用云商城,无需安装额外的应用程…

销量?模糊销量?精准销量?如何获取淘宝商品销量数据接口

淘宝爬虫商品销量数据采集通常涉及以下几个步骤&#xff1a; 1、确定采集目标&#xff1a;需要明确要采集的商品类别、筛选条件&#xff08;如天猫、价格区间&#xff09;、销量和金额等数据。例如&#xff0c;如果您想了解“小鱼零食”的销量和金额&#xff0c;您需要设定好价…

vueday1

1.作用&#xff1a;利用表达式进行插值&#xff0c;渲染到页面中 三元表达式、点语法、数组对应项&#xff0c;方法、点语法方法 1.使用的时候需要存在&#xff0c;需要在data里面声明&#xff0c;如果没有声明会报错 2.ifelse不能用 3.不能在标签属性中使用{{}}插值 <!DO…

【前端】打砖块游戏:实现细节介绍

打砖块游戏:实现细节介绍 在本文中,我将详细介绍如何使用HTML、CSS和JavaScript技术构建一个简单的打砖块游戏。我们将重点讨论游戏的三个核心技术方面:碰撞检测、画图和事件监听。 完整代码我放在:github可以直接拉取代码测试。 游戏概览 打砖块游戏中,玩家通过控制底…

静态住宅IP优缺点总结

在进行海外 IP 代理时&#xff0c;了解动态住宅 IP 和静态住宅 IP 的区别以及如何选择合适的类型非常重要。本文将介绍精态住宅 IP 特点和&#xff0c;并提供选择建议&#xff0c;帮助您根据需求做出明智的决策。 静态住宅 IP 的特点 静态住宅 IP 是指 IP 地址在一段时间内保…

深入解析Apache Flink核心概念:事件流、状态、事件时间和快照

Apache Flink树立了流处理领域的标杆&#xff0c;其核心支柱——事件流、状态管理、事件时间处理&#xff0c;以及快照机制&#xff0c;共同构成了一个强大而灵活的框架&#xff0c;专为应对大数据的实时和历史分析挑战而设计。以下是关于 Apache Flink 四个核心概念的详细介绍…

涨点神器:即插即用特征融合模块!超低参数,性能依旧SOTA

在写论文时&#xff0c;一些通用性模块可以在不同的网络结构中重复使用&#xff0c;这简化了模型设计的过程&#xff0c;帮助我们加快了实验的迭代速度。 比如在视觉任务中&#xff0c;即插即用的特征融合模块可以无缝集成到现有网络中&#xff0c;以灵活、简单的方式提升神经…

7.STL中string的一些超常用函数 (附习题)

目录 1.find 2.atoi 3.to_string 4.getline 【leetcode 习题】 387.字符串中的第一个唯一字符 125. 验证回文串 1.find 1.查找第一次出现的目标字符串&#xff1a;说明&#xff1a;如果查找成功则输出查找到的第一个位置&#xff0c;否则返回-1&#xff1b; s1.find(s2…

宇宙(科普)

宇宙&#xff08;Universe&#xff09;在物理意义上被定义为所有的空间和时间&#xff08;统称为时空&#xff09;及其内涵&#xff0c;包括各种形式的所有能量&#xff0c;比如电磁辐射、普通物质、暗物质、暗能量等&#xff0c;其中普通物质包括行星、卫星、恒星、星系、星系…

【目标检测】YOLOv5|YOLOv8模型QT界面可视化部署

YOLO-Deploy-QT_Interface 最近笔者做了YOLO系列算法的部署工作,现做一个总结。主要工作是做了用于部署YOLOv5和YOLOv8的可视化QT界面,可实现图片、文件夹、视频、摄像头的ONNX与OpenVino部署,具体效果如下: 代码链接:https://github.com/Zency-Sun/YOLO-Deploy-QT_Inte…

Centos7 配置 DNS服务器

Centos 7 配置DNS服务器 环境描述&#xff1a; 一台服务器和一台用于测试的客户机 服务器IP&#xff1a;192.168.200.132 客户机IP&#xff1a;192.168.200.143 服务器配置 yum install bind bind-utils -y #安装软件包vim /etc/named.conf //编辑named主配置文件listen-on p…

【Linux】解析键盘组合键产生信号的完整过程:从硬件中断到信号发送

前言 每一个了解Linux的都知道这样一个知识&#xff0c;CtrlC组合键能够终止一个进程。 个人了解进程相关知识之后知道&#xff0c;一个进程被终止只会有有三种情况&#xff1a; 代码运行完毕&#xff0c;结果正确代码运行完毕&#xff0c;结果不正确代码运行异常&#xff…

huggingface 笔记:pipeline

1 介绍 pipeline() 是使用预训练模型进行推理的最简单和最快速的方式。可以针对不同模态的许多任务直接使用 pipeline() 2 举例&#xff1a;情感分析 2.1 创建pipeline实例 from transformers import pipelineclassifier pipeline("sentiment-analysis") #首先创…