如何零基础快速入门运维?如何成为运维技术大牛?成为运维经理需要什么样的能力?我想很多运维工程师都会有这样的思考和问题。要知道"不想成为将军的士兵,不是好士兵(拿破仑)"。那么从零入门运维,到Linux运维技术老司机,你需要哪些技能武器、注意哪些细节,具备什么样的能力?
运维技能武器库
Bootstrapping: Kickstart、Cobbler、rpmbuild/xen、kvm、lxc、Openstack、 Cloudstack、Opennebula、Eucalyplus、RHEV
配置类工具: Capistrano、Chef、puppet、func、salstack、Ansible、rundeck
监控类工具: Cacti、Nagios(Icinga)、Zabbix、基于时间监控前端Grafana、Mtop、MRTG(网络流量监控图形工具)、Monit
性能监控工具: dstat(多类型资源统计)、atop(htop/top)、nmon(类Unix系统性能监控)、slabtop(内核slab缓存信息)、sar(性能监控和瓶颈检查)、sysdig(系统进程高级视图)、tcpdump(网络抓包)、iftop(类似top的网络连接工具)、iperf(网络性能工具)、smem)(高级内存报表工具)、collectl(性能监控工具)
免费APM工具: mmtrix(见过的最全面的分析工具)、alibench
进程监控: mmonit、Supervisor
日志系统: Logstash、Scribe
绘图工具: RRDtool、Gnuplot
流控系统: Panabit、在线数据包分析工具Pcap Analyzer
安全检查: chrootkit、rkhunter
PaaS: Cloudify、Cloudfoundry、Openshift、Deis (Docker、CoreOS、Atomic、ubuntu core/Snappy)
Troubleshooting:Sysdig 、Systemtap、Perf
持续集成: Go、Jenkins、Gitlab
磁盘压测: fio、iozone、IOMeter(win)
Memcache Mcrouter(scaling memcached)
Redis Dynomite、Twemproxy、codis/SSDB/Aerospike
MySQL 监控: mytop、orzdba、Percona-toolkit、Maatkit、innotop、myawr、SQL级监控mysqlpcap、拓扑可视化工具
MySQL基准测试: mysqlsla、sql-bench、Super Smack、Percona's TPCC-MYSQL Tool、sysbench
MySQL Proxy: SOHU-DBProxy、Altas、cobar、58同城Oceanus
MySQL逻辑备份工具: mysqldump、mysqlhotcopy、mydumper、MySQLDumper 、mk-parallel-dump/mk-parallel-restore
MySQL物理备份工具: Xtrabackup、LVM Snapshot
MongoDB压测:iibench&sysbench
运维工作全括
1. 域名
从买域名开始,要买多个域名,50个甚至100个。分为主域名和推广域名(给推广链接用的)。要从东方网域(east263.com)买域名,因为这里的域名稳定,不会出现被攻击等事情。同时还要买域名保护,这样互联网用户ping这个域名就解析不到真实的服务器地址。
同时域名解析的操作不要在东方网域上进行,要把解析的操作放在cloudflare上或者dnspod上进行操作,也可以放到zndns上(这个dns可以做到一个域名解析多个IP地址,根据就近原则,把最快的IP地址解析给用户。)也可以自己搭建dns服务器,在东方网域上只想到自己搭建的dns服务器就可以了。这样,修改dns指向的时候会更快。
2. CDN
一定要买cdn服务。如果出现部分用户访问不了就使用cdn服务。可以从防御吧购买cdn服务,这样域名解析到cdn上,然后cdn解析到肉盾击还是那个,然后肉盾击指向核心服务器上。Cdn充当一个缓存和转发的作用,大流量攻击的时候他可以防御至少200G的攻击。Cdn是全球缓存的。
3. 图片服务器
在国内租用几台服务器做图片缓存服务器即可,这样提高访问速度。其实nginx本身就是一个图片缓存服务器。
图片服务器和其他服务器要分开,肉盾击可做图片缓存。
4. 服务器机房
选择机房太重要了,要服务质量好的,还要高防好的,还要可靠性高的,还要相应及时的,还要能随时可以查看服务器状态的,最重要还要服务态度好了。
机房要买香港九河(用户核心服务器),美国圣安娜机房(用于肉盾击)(虽然慢,但是安全高防做的真好,大流量攻击的时候,这里的机房还是可以访问,所以,鸡蛋不要放在一个篮子里头,要各个等级都有才叫好的,国内机房快,但是高防效果差,美国机房慢但是高防效果好),同样可以去东方网域购买。
5. 主页
一个主页,就是招商或成为打广告的网站,可以租用云主机,这样被打死就被打死吧。里面可以有一个链接,指向游戏首页,这个链接可以是带端口号的,那就简单了。
也可以是不带端口号的,这时候就一定要用cdn服务器,或者使用免备案机房,把肉盾击放在免备案机房,因为国内搭建网站都是要备案的,博彩这个行业是被禁止的,为了避免域名或者IP地址被和谐了(gwf)所以要用免备案机房。
或者就把肉盾击也放到香港或者台湾或者韩国等等机房。这样用户可以不使用端口号,直接用域名就可以访问咱们的网站。
6. 监控系统
要个网站要有监控系统,实时监控服务器是否有攻击,功过查看日志是否激增,还要把日志放到日志服务器上(syslog服务),使用cacti服务可以把日志放到cacti上。网速是一定要查看的,网速激增则证明一定是有攻击。
每天要看日志,要用日志分析软件,看看访问源是单一访问源还是多个不同的访问源.监控服务器要有报警功能,一旦情况异常就要立刻报警,然后起床处理攻击。
7. 防攻击
攻击一般看情况而定,一般的攻击都是直接攻击域名。小量的攻击可以通过nginx和iptables本身的防御功能就防掉。大量的攻击由于直接把网络带宽占用满了,服务器无法正常相应,只能依靠机房的高防了。
所以要买大量的高防,建议至少200G。如果攻击源是单一IP或者几个IP,那么就让机房把这几个IP给屏蔽就可以了。遇到cc或者ddos攻击,只能靠机房解决。一台服务器被打死后,需要立刻把域名指向另一台服务器,(或者直接把域名指向百度)。
大量的攻击还要使用cdn,让cdn直接指向核心服务器就可以了,这样能快一点,让用户还可以玩。总之大流量攻击是不能完全防止的。
8. 冗余
一个网站一定要有冗余,比如现在是1000人同时访问的并发量,一定要让网站的负载达到2000人的并发量,要不然一搞活动,网站负载不了那么多人就完了。
9. 服务器
服务器的配置,要用三网卡,一个用于用户连接,对外的访问(要好的网卡)。一个用于内网服务器之间的访问使用。一个用于ssh管理,这样大量攻击的时候咱们还可以操作服务器。
每个网卡还要多个IP地址,这样防止某个IP被屏蔽了。国内网络和国外网络经常会有IP不好用的情况。硬盘至少要镜像(raid 1),cpu要两路的,双电源,总之不要有单点故障。至于肉盾击的配置可以低一些,甚至台式机的配置都可以,但是网络一定要好,尤其是和核心服务器之间的网络一定要好。
10. 数据库
数据库要做主从复制,要有异地备份,nginx服务器要做集群,就是upstream。前台(提供用户访问页面)和后台(员工管理界面)要用两台不同的机器,不要互相影响。其余的服务可以使用一台虚拟机完成。
这样可以省钱,邮箱直接买google的gmail企业邮箱就好了,非常好用,最好没人一个。或者公司内部搭建自己的聊天软件(最好还钱买聊天软件)。
11.测试环境
测试环境要三套,开发人员电脑上自己的环境,要局域网一套测试环境,互联网一套测试环境,生产环境。局域网的测试环境一定要稳定,可以买一个机柜等等的网络设备放在一起,不要用普通电脑。局域网要有svn或git的代码管理工具。充分测试后在上传到生产环境。
12. 肉盾击和核心服务器
肉盾击和核心服务器之间一定要可以使用ping命令,这样可以看看那个IP地址不能使用了,网络连通性都可以看出来。
13. 运维人员
至少两个,如果有运维经理一个运维人员就够了。这样所有运维工作必须有操作文档,两个人互相协调工作,不需要倒班,但是24小时待命。网管一个就够了。
普通的运维部门大概就这样,如果是大的网络架构,会有自己的数据中心机房到时候在安排人手。
14. Linux系统优化和安全
要有优化和安全配置,比如说nginx基于cpu的优化,每个程序基于cpu和内存的限制。
所有密码要有3个月就修改一次,尤其是域名的账号和邮箱密码,域名是最重要也是最脆弱的环节。
15. 局域网
局域网一定要稳定,可以买两条网线,至少10M带宽,还要买一个移动wifi,给员工手机上网。
16. 机房
如果是大型网络架构,那得有自己的核心机房,就不是租用机房了,每个岗位都是若干人组成的,包括运维工程师,数据库管理工程师,网络工程师,安全工程师,存储备份系统工程师,运维经历负责协调各个部门间的工作。目前就是一个运维就能完成所有的工作。
17. 运维工具
运维的工具要统一,比如连接数据库使用sqlyog工具,连接服务器使用crt工具,密码管理用keepass,上传服务器代码使用winscp工具,等等。这样运维人员之间工作比较好协调。
另外运维一定要有大量时间学习,每天都要上网找新技术,好的资料,最好要懂英文,因为好的技术文档都是英文写的。这样对运维工作很有帮助,而且运维技术实力会有很大的进步的,为迎接更大的需求做准备。
18. 灾备预案
最后一定要有预案,就是服务器一旦出现重大问题,就是解决不了了,这个时候就不要去解决这台服务器,使用预案,把启用备用方案,尽快让网站可用。
平时多做预案演习,还要多做备份的还原操作,因为有的备份不可用,这是常见现象。别到关键时刻备份不能用,整个网站就完了。
19. 服务器安全
要有一整套的安全配置,包括用户安全,应用安全,系统安全,文件安全等。这样防止服务器被黑客侵入。
20. 高并发测试
一定要做高并发测试,模拟同时在线用户2000人,看服务器的负载情况,要有服务器高并发配置,网络方面是机房的事情,但是得选择最合适的IP地址,最适合的机房,及出口带宽。
高并发是服务器架构的事情,不是单单一台服务器的事情。该花钱的地方一定要花,可以省钱的地方要知道怎么省钱。
21. 运维信息
运维所有信息两个人共享,包括密码和服务器配置步骤,由运维经理带领团队,打造成一个互相学习,技术实力雄厚,目标一致的和谐团队。让每个人在团队中都得到自己想要的。
运维经理的为人就很重要,要不然留不住人,大家心不往一起使劲。运维工作技术不是最重要的,因为这个职位现学现用也来得及,所以工作态度/为人和经验是最重要的。
22. 服务器日志
对服务器建立日志,所有服务器的所有操作都要有记录,并且写清时间操作内容。对生产服务器操作之前一定要做风险评估及解决方案。
23. 运维工作
应用上线后,运维工作才刚开始,具体工作可能包括:升级版本上线工作、服务监控、应用状态统计、日常服务状态巡检、突发故障处理、服务日常变更调整、集群管理、服务性能评估优化、数据库管理优化、随着应用PV增减进行应用架构的伸缩、安全、运维开发工作。
核心运维管理工具箱
重点介绍运维流程管理、运维发布变更、运维监控告警三个方面的具体工具,可作为工作日记使用。
第一类:运维流程管理工具
1.发布变更流程管理工具
做为系统接口与其他角色的工作衔接。并提供审批环节控制发布变更的风险。流程管理工具并不负责具体的业务操作的执行,只是作为单据系统跟踪流程和确保闭环。
2.告警和突发管理工具
体现业务受损的告警自动建单管理。人工确认之后升级为突发单。通过建单管理告警和突发确保流程的闭环,以及每次故障都能够总结出经验,并未度量业务的可用性提供KPI。
第二类:运维发布变更工具
1.版本管理工具(数据库)
所有的发布应该以版本管理为起点。研发给的版本包先入版本管理工具,再从版本管理工具分发到现网发布。杜绝 rsync 一台服务器发布另外一台的做法。
2.配置管理工具(数据库)
版本加配置等于现网每台机器的状态。最粗粒度的配置管理是到 IP 级别,相当于对机器做资产管理,分组到不同的业务,模块和大区等业务概念上。细粒度一点会管理到进程以及进程的相关配置。
3.配置和版本下发工具
把指定的版本,结合配置好的配置下发到现网的机器上。不同的版本和配置方式需要完全不同的下发方式。以 ssh/fabric 为代表的下发方式是以脚本为中心的。以 puppet/chef 为代表的下发方式是以配置为中心的。
4.现网状态同步工具
为了规避现网状态漂移,与管理工具内的记录不一致。需要有一个工具定时上报现网的实际状况。
5.服务调度工具
发布变更经常需要一个串行的流程,先做A模块,再做B模块。很多机器的时候,需要把能并发的操作并发执行,不能并发的操作确保串行执行。同时很多发布变更流程需要操作管理范围外的服务,比如云端的DNS服务器记录等。这就需要有一个服务调度工具统一调度配置和版本下发工具,流程单据工具,以及其他系统的API接口共同组装成一个流程。
6.资源管理和隔离工具
以xen/kvm为代表的工具让运维可以更灵活的切割资源。比如虚拟机的快速起停,ip在idc内的漂移等。以 lxc/docker 为代表的工具让运维可以进一步的切割资源到进程级别。资源隔离代理的细粒度的资源控制可以获得更好的资源利用率,以及更容易进行可伸缩的资源配置。
7.发布变更统一界面
包装所有的下层工具,提供简单的界面完成标准化的发布变更操作。
第三类:运维监控告警工具
1.采集工具
一般是采集日志文件,也可以是定时轮询 DB 或者其他系统的接口。流行的开源方案是 logstash。
2.收集工具
采集工具上报给收集工具。或者由开发直接修改代码上报指标给收集工具。流程的开源方案还是 logstash。
3.统计入库工具
上报可能是每次调用就上报一次,统计工具负责统计出一分钟内的次数。上报也可能是每5秒上报一次数值,统计工具负责统计出一分钟内的最大值。统计工具的存在是为了上报的方便。流行的开源方案是 statsd,也有大公司基于 storm 来做二次开发的。
4.时间序列数据库
所有定时指标会落地到数据库里。监控告警所需要的数据库需要能够支撑非常大的数据量,但是并没有很严格的 ACID 要求。
5.运维事件数据库
记录所有的告警。包括从其他系统获得告警,以及对现网的所有变更操作记录。这些数据用于支撑告警的原因定位。
6.指标异常检测工具
基于数学模型发现指标是否与过去的稳定模式背离,而推测出现网状态的变化。
7.拨测工具
定时 PING 或者 HTTP GET,模拟实际用户发现服务是否中断,产生告警。同时也产生指标上报给收集系统。拨测又分为本地拨测,和远程拨测。本地拨测可以用于发现磁盘只读等本机告警。远程拨测可以模拟用户的地理分布,把网络的链路状况也包含在拨测覆盖的范围内。
8.告警收敛工具
综合所有来源的告警,进行频率收敛,根源分析。统一汇总成报告催促人工修复。
9.告警自动修复工具
接受告警进行自动化的处理。帮运维完成固定的故障机下架退库等操作。或者在业务本身没有做高可用的情况下,做故障机替换,ip漂移等现网修复操作,一定程度地提高业务可用性。
10.告警通知工具
重要的告警需要升级为电话。需要有高可用的电话,短信,微信等通知接口。
11.监控告警统一界面
屏蔽下层各种工具,提供统一的agent安装,指标采集设置,指标曲线展示,告警查询的界面。一个地方知道现网的所有的问题。
优秀运维大牛应具备的能力
1、系统架构的设计和规划能力。
做为一个技术工程师,你关注更多的是具体的技术和问题分析、故障处理等细节,而做为一名运维经理,则需要你站在全局的高度,把控各环节的应用来规划和设计系统架构,以实现高效稳定的IT系统。
2、量化和问题管理的能力。
熟悉ITIL以及相关运维工具,通过运维管理工具,跟踪事件的流程,实现整个IT系统的统一与协调;通过运维管理工具,帮助运维人员监控和定位问题根源;通过知识库的积累可以有效解决人员变更后的管理问题。可以说,IT系统不仅仅需要人的运维,为了发挥IT系统的最大作用,利用工具来量化、标准化管理更是有必要的。我们可以运用自动化的一些工具来采集输出更为全面的监控预警信息,化被动运维为主动运维;通过自动化的运维工具把多点的管理集中减少到一点都能更好的简化运维工作量和提高运维的效率。标准的流程清晰明确了,这样当问题出现时,就不会出现A部门找B部门反馈,B部门又找C部门处理,C可能说是D部门的问题,这样导致很简单的问题无法得到及时有效的处理,影响的不仅仅是业务本身,部门之间也会怨声载道。
3、管理团队和协调能力。
大多数时候,运维人员都在进行着简单重复的工作,且很难得到最终用户的肯定。曾有一个词“穷忙族”形容运维工程师,工位上不见人影,一坐下电话不断,是不是你该解决的问题都有人来找你。这样的场景,大家应该都有体会。标准化流程的制定非常重要,不仅方便问题的梳理而且能让对应的问题找到对应的人,这对运维是很重要的,同时有利于团队的协作。作为运维经理还要关心团队中的每一个成员,协调每名工程师的工作时间和CASE,合理安排工作任务。另外肯定每个工程师的付出,对他们优秀完成的工作给予积极肯定和表扬,这些都有助于凝聚人心和培养团队的荣誉感。
4、资产管理与审计能力。
准确了解公司现有的IT资产和设备,对设备进行清查,明确每一个设备的损耗和维保信息。当公司需要购置新机时,都会有明确的数据来支撑你的采购申请。当设备出故障或发生变更时,通过前期的数据都可以做到实时掌握第一手准确数据。而且随着公司的业务发展,分支机构和员工的增多,资产管理与审计都会变得更重要,对IT运维支持的意义就更大了。
5、组建运维梯队,合理搭配运维资源的能力。
人员管理问题,在运维当中是比较重要的。很多时候由于运维工作分配不合理,业绩无法准确考核。若将运维人员分成一、二、三线支持,不同运维人员各司其职,就能使有限的运维力量得到合理利用,整体工作效率将明显提升;同时也方便对各自的工作业绩进行评估。再据此制定相应奖惩措施,或针对不同岗位提供不同服务技能培训,亦能提高员工工作积极性。比如:将所有IT问题统一汇总到技术服务台,对于绝大多数(80%以上)问题,服务台可直接解决;服务台解决不了的,再按照问题处理优先级,统一分配不同级的运维力量,来确保不同问题的处理,同时运维人员也不会错过需要及时处理的重大问题。
6、技术创新与积累能力。
运维经理本身需要有过硬的技术能力,需要熟悉各种设备、不同的操作系统、各环节应用、数据库、存储、备份与灾难恢复、调优、安全等。但是在具体的问题和重大的问题处理上,需要听取团队的意见,这样方案会因大家的补充和建议更加完善。多数时候在具体的细节处理上还会有技术创新,同时对大家都是一个学习和积累。对每个处理过的重大问题和典型问题编写技术文档,日积月累形成知识库,不仅方便自己总结学习也方便技术的传承和积累。
7、开会与分享能力。
开会有时是个很好的沟通方式,也许很多时候你可能比较反感开会。那可能是因为它的 形式化、一言堂或跑题、不能解决实际问题。其实开会的作用在于:
归一化:让大家在项目、任务、工作的理解、反馈、描述、执行等层面达到一致性。减少内部沟通成本,提高团队效率。
可视化:追求项目的可视化是项目管理的最高境界。逐层分解下来,就要求各级管理者对项目、任务的进度、风险、问题做到一目了然的管理。
项目管理:通过对团队各维度进行管理、项目管控,人员工作安排,团队学习提升,工作方向调整等等。
理念贯彻和方向:贯彻公司文化和团队文化,统一大家的思路和模式。传达上面领导的指示和部署,同时明确下一步工作重点和方向。
具体问题解决:针对疑难点,进行指导或头脑风暴,集思广益群策群力。
最后,说一点如何成为优秀的运维经理。什么是优秀的运维经理,是不是具备了以上七大能力就是优秀呢,很多人心中或许有不同的定义,我认为优秀的管理者所需要具备的一大品质,就是带领自己的团队不断进取和拥有永不止步的精神。
看一看,这么多能力你还差什么?