IT运维工程师主要工作是做什么?

总结两句话

  • 保障业务的长期稳定运行(如网站服务器,游戏服务器等) 
  • 保障数据安全可靠(如用户名密码,游戏数据,博客文章,交易数据等)

这两句话看似简单,其实要会的东西很多很多。今天我们就推演运维工程师要学些什么

一、保障业务长期稳定运行

1 、业务跑在什么上面? 
网站服务器一般是apache,nginx,tomcat等。但是真正跑通流程还需要mysql数据库来存储用户密码和其他。很多程序都要php的解析,所以,LNMP、LAMP环境部署是必须掌握的技能。 
2、 业务出了问题怎么及时知道? 
这就需要监控软件配合邮件或短信来通知你,常用的监控软件有zabbix,nagiox等,报警发邮件也需要一个程序,sendmail或postfix。 
3 、在家收到报警,但服务器是内网IP,再怎么也得解决问题 
在公司搭建openvpn或pptp或openswan,在家通过vpn拨入内网,24小时解决问题

二、保障数据安全可靠 

1、有时需要手动改数据库内容 

所以要会基本的数据库增删改查命令 

2、万一数据库服务器的硬件坏了怎么办? 

需要有一个备库以备不时之需,所以要需要mysql主从复制 

3、数据库还原怎么办? 

所以要在crond中定期全备mysql数据,以便还原使用,如果还原到指定的时间点,还需要学会mysql增量备份与恢复。 

4、如果是用户上传的图片或文件服务器坏了怎么办? 

定时备份还不够,需要使用rsync加inotify来实时备份,一遍任意时刻主服务器坏掉,也能保障所有的图片有备份可以用来恢复。 

5、小心黑客,要增加服务器的安全性 

ssh轻易不能让外外人访问,那么就设置只允许公司的IP或跳板机IP访问,这些都需要iptables来控制。

三、大性能 

1、越来越多的用户来访问我们的网站,一台服务器扛不住怎么办? 

那就需要多台web服务器来负担,但多台服务器之间怎么进行负载均衡呢,这就需要nginx反向代理或者LVS+keepalive或haproxy+heartbeat 

2、用户注册发表的文章与评论太多,一台数据库扛不住怎么办? 

数据库的压力分为读和写,如果写扛不住,需要进行分库分表到多台服务器上,如果是读压力不够了,可以使用mysql-proxy读写分离,来分担读的压力,更简单的方法,把数据库里的内容放到内存上,这就用上memcache或redis了 

3、N多用户上传下载文件,磁盘扛不住怎么办? 

把多块磁盘做成raid,或者使用分布式存储文件系统如MFA,GlusterFS来提高磁盘的读写能力 

4、网上好多图片,总有用户反映网站加载太慢,怎么办? 

这时可以把网站上的图片通过squid或varnish缓存到网站前端,尽可能的增加访问速度,当然,最好购买商业的CDN加速 

5、运营商是一个大难题,他们之间的宽带好像很小,联通IP访问我电信网站怎么就这么慢呢? 

这时可以使用bind自建一个DNS服务器,把网站的DNS记录指向自建DNS服务器上,配置好电信IP解析到电信网站上,体验就会好很多

四、自动化 

终极目标:跑死机,闲死人 

1、公司购买100台服务器,公司竟然就一个移动光驱,这装系统得到什么时候 

使用kickstart或cobbler来网络远程安装 

2 、每次装玩机都要优化很多内容,什么文件描述符,端口,软件安装,手动操作得累死 

赶紧学会shell,将解放非常多的工作量 

3、 系统装完后登陆需要输入密码,这么多台怎么办? 

使用expect,自动读取提示来输入密码,并执行命令 

4 、要批量把代码发布到线上服务器,怎么办? 

使用saltstack或puppet或ansible

五、其他 

1 、搭建整套测试环境需要五台服务器,但公司穷的只剩一台怎么办? 
学会xen或kvm或docker,虚拟出多台服务器,就能解决资源问题,特别是docker,在以后需要这样的环境时,分分钟就能搞定 
2 、研发人员的代码控制,权限控制,总要运维人员管理 
svn或git,一定要有

结尾 

现在回过头来思考,运维工程师平时都干些啥? 

  • 随时解决报警故障 
  • 业务程序更新 
  • 编写一些脚本,监控完成其他可自动完成功能 
  • 运维架构完善,部署一些用起来更方便更可靠或性能更好的开源工具以及制定运维流程规范 
  • 打杂,如调交换机,装系统,部署新环境等