运维⼯程师主要⼯作是做什么?
总结两句话:
1、保障业务长期稳定运⾏(如⽹站服务器、游戏服务器等)。
2、保障数据安全可靠(如⽤户名密码、游戏数据、博客⽂章、交易数据等)。
由这两句话推演运维⼯程师要学些什么?
⼀、保障业务长期稳定运⾏
出⼀点点差错,⽤户就要投诉了。
1、业务跑在什么上⾯?
⽹站服务器⼀般是apache,nginx,tomcat等。但是真正跑通流程还需要Mysql数据库来存储⽤户密码及其它。很多程序都要php的解析,所以LNMP、LAMP(即nginx、apache、mysql、php)环境部署是必须掌握的技能。
2、业务出了问题怎么及时知道?
这就需要监控软件来邮件或短信来通知你,常⽤的有zabbix,nagios等。报警发邮件,也得⼀个邮件程序呀,sendmail或postfix。
3、在家⾥收到报警,但服务器是内⽹IP,怎么也得解决问题吧?
在公司搭建openvpn或pptp或openswan,在家⾥通过VPN拨⼊内⽹,24⼩时解决问题…唉,半夜爬起来解决问题也没⼯资。
⼆、保障数据安全可靠
出⼀点点差错,领导要你喝茶了。
1、有时需要⼿动改数据库内容?
所以要会基本的Mysql数据库增删查改命令。
2、万⼀数据库服务器硬件坏了怎么办?
需要有个备库以备不时之需,所以需要Mysql主从复制。
3、数据库要还原怎么办?
所以需要在crond中定期全备Mysql数据,以便还原使⽤。如果要还原到指定时间点,还要学会Mysql增量备份与恢复。
4、如果是⽤户上传的图⽚或⽂件服务器坏了怎么办?
定时备份可能还不够,需要使⽤rsync加inotify来实时备份。以便任⼀时刻主服务器坏掉,也能保障所有图⽚有备份可以⽤来恢复。
5、⼩⼼⿊客,要增加服务器安全性?
ssh轻易不能让外⼈访问,那么就设置只允许公司的IP或跳板机IP访问,这些都通过iptables来控制。
三、⼤性能
1、越来越多的⽤户来访问我们的⽹站,⼀台web服务器抗不住了怎么办?
那就需要多台web服务器来负担,但多台服务器之间怎么进⾏负载均衡呢,这就需要⽤到nginx反向代理或LVS+keepalived或
haproxy+heartbeat了。
2、⽤户注册发表的⽂章与评论太多,⼀台数据库抗不住了怎么办?
数据库压⼒分为读和写,如果写抗不住,需要进⾏分表分库到多个服务器上。如果是读压⼒不够了,可以使⽤mysql-proxy读写分离,来分担读的压⼒。更简单⽅便的⽅法,把数据库⾥的内容放到内存上,这就⽤上memcache或redis了。
3、N多⽤户上传下载⽂件,磁盘抗不住了怎么办?
把多块磁盘做成raid,或者使⽤分布式存储⽂件系统如MFS,GlusterFS来提⾼磁盘的读写能⼒。
4、⽹站上好多图⽚,总有⽤户反应⽹站加载太慢,怎么办?
这时可以把⽹站上的图⽚通过squid或varnish缓存到⽹站前端,尽可能的增加访问速度,当然,最好是购买商业的CDN加速。
5、运营商是个⼤难题,他们之间的带宽好像很⼩,联通IP访问我电信⽹站怎么就这么慢呢?
这时可以使⽤bind⾃建⼀个DNS服务器,把⽹站的DNS记录指向⾃建DNS服务器上,配置好解析规则,以后联通IP解析到联通⽹站上,电信IP解析到电信⽹站上,体验就会好很多啦。
四、⾃动化
终极⽬标:跑死机器,闲死⼈。
1、公司新买100台服务器,公司竟然就1个移动光驱,这装系统得到什么时候?
使⽤kickstart或cobbler来⽹络远程⾃动安装系统吧。
2、每次装完机要优化很多内容,什么⽂件描述符、端⼝、软件安装啊,⼿动操作不累死去?
赶紧学会shell,将解放⾮常多的⼯作量。
3、系统装完后登陆要输⼊密码,这么多台啊?
使⽤expect吧,⾃动读取提⽰来输⼊密码,并执⾏命令。
4、要批量把新代码发布到线上服务器,怎么办?
使⽤saltstack或puppet或ansible吧,绝对爽歪歪。
五、其他
1、搭整套测试环境需要5台服务器,但公司穷的只有⼀台空闲服务器?
学会xen或kvm或docker吧,虚拟出多台服务器,就能解决资源问题了。特别是docker,强烈推荐,以后某个研发⼈员让你部署⼀套新环境,分分钟帮他解决。
2、研发⼈员的代码控制,权限控制,总要运维⼈员管呀?
如何搭建git服务器
svn或git,这个是肯定要有的。
结尾:
现在我们在回过头来思考,运维⼯程师平时⼲些啥呢?
1、随时解决报警故障。
2、业务程序更新。
3、编写⼀些脚本,监控或完成其他可⾃动完成功能。
4、运维架构完善,部署⼀些⽤起来更⽅便更可靠或性能更好的开源⼯具以及制定运维流程规范。
5、打杂,如调交换机,装系统,部署新环境等。