描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787111669814丛书名: Linux/Unix技术丛书
高级运维架构师、资深系统运维工程师十余年工作经验总结。
基于实际生产环境,从云原生平台集群的高可用技术、传统技术的高可用Linux集群构建、MySQL高可用架构设计等角度展现Linux集群之美!
【本书的主要内容和特色】
*基于真实的电子商务系统和CDN系统着重介绍了Nginx/HAProxy Keepalived、LVS Keepalived/DR及DNS轮询等常见的Web集群负载均衡高可用技术,除此之外,还介绍了ZooKeeper集群在分布式系统中的应用。
*MySQL高可用架构目前主要是以MySQL 5.7为主,书中针对DRBD Heartbeat、MySQL MHA及基于GTID的MySQL主从复制工具mysql-utilities进行了详细说明。
*基于笔者目前维护的容器云平台(包括Kubernetes和Mesos集群)介绍云原生环境下的负载均衡技术的具体实现,例如HAProxy、IPVS及Ingress-Controller等,重点介绍了Nginx/Traefik Ingress-Controller在Kubernetes集群系统中的部署和应用。
*以笔者维护过的千万级/亿级PV高并发高流量网站架构为例来说明网站的系统架构设计,并且分享了秒杀系统的架构设计思想。
【读者对象】
本书的读者对象如下:
*系统工程师或运维工程师
*DevOps工程师
*网络管理员或企业网管
*系统开发工程师
*运维架构师
随着云原生技术的流行和普及,除了传统的Linux高可用集群技术,云原生的负载均衡技术在产品或系统中的比重也越来越大,因此本书基于这两方面讲解Linux集群的实现。
书中内容除了介绍传统的Linux集群和分布式系统以外,还介绍了微服务环境(包括Kubernetes和Mesos)下各组件(如Kong和Istio)的用法,以及如何在复杂的项目环境中保证Linux集群服务的高可用。
在实际工作中,系统架构设计绝不轻松,成熟的架构实现都是经过生产环境逐渐演变完善的。
本书也以笔者维护过的高并发、高流量网站架构与秒杀系统说明了网站的系统架构设计思想。书中内容都是基于项目实践或工作内容提炼而来的,相信对读者会有一定的启发!
1.1 Linux集群涉及的核心概念及常用软件 2
1.1.1 什么是负载均衡高可用 2
1.1.2 什么是服务发现 3
1.1.3 以LVS作为负载均衡器 4
1.1.4 以Nginx作为负载均衡器 9
1.1.5 以HAProxy作为负载均衡器 10
1.1.6 高可用软件Keepalived 10
1.1.7 高可用软件Heartbeat 11
1.1.8 高可用块设备DRBD 11
1.2 负载均衡关键技术 13
1.2.1 负载均衡算法 13
1.2.2 Session共享和会话保持 17
1.3 负载均衡器的会话保持机制 19
1.3.1 负载均衡器的会话保持处理机制 19
1.3.2 LVS的持久连接机制 20
1.3.3 Nginx负载均衡器的ip_hash算法 24
1.3.4 HAProxy负载均衡器的source算法 25
1.3.5 基于cookie的会话保持处理机制 29
1.4 服务器健康检测 33
1.5 L4和L7负载均衡器对比 34
1.6 集群内(外)负载均衡 34
1.7 软件级负载均衡器的特点介绍与对比 35
1.8 小结 36
第2章 Python的基础概念及进阶知识 37
2.1 Python语言的应用领域 37
2.2 选择Python的原因 39
2.3 Python的版本说明 40
2.4 如何高效地进行Python开发工作 40
2.4.1 IPython的功能介绍 40
2.4.2 利用virtualenv隔离项目 46
2.4.3 PyCharm简介 47
2.5 Python基础知识介绍 51
2.5.1 正则表达式的应用 51
2.5.2 Python程序的构成 58
2.5.3 Python的编码问题 60
2.5.4 使用Python解析JSON 63
2.5.5 Python异常处理与程序调试异常 64
2.5.6 Python函数 67
2.5.7 Python的面向对象 79
2.5.8 Python的多进程和多线程 91
2.5.9 Python协程 105
2.6 小结 109
第3章 Python在Linux集群中的实践应用 110
3.1 Python经常用到的第三方类库 110
3.2 工作中常用的Python脚本 111
3.2.1 利用Python比较应用 111
3.2.2 利用Python获取数据库证书并替换成文件字符串 112
3.2.3 利用Python处理JSON式文件 113
3.3 利用Flask Web框架设计RESTful API 114
3.3.1 后端开发工作中为什么要使用RESTful API 114
3.3.2 项目实战 117
3.4 利用Nginx Gunicorn Flask部署Python项目 119
3.5 利用Flask Gevent搭建webssh 128
3.6 小结 137
第4章 轻量级自动化运维工具Fabric介绍 138
4.1 Vagrant简介 139
4.1.1 Vagrant的安装 139
4.1.2 使用Vagrant配置本地开发环境 141
4.1.3 使用Vagrant搭建本地开发环境 148
4.1.4 使用Vagrant搭建分布式环境 153
4.2 轻量级自动化运维工具Fabric 162
4.2.1 Paramiko版本库简介 162
4.2.2 Fabric的安装 164
4.2.3 Fabric的命令行入口fab命令详解 165
4.2.4 Fabric的环境变量设置 166
4.2.5 Fabric的核心API 167
4.2.6 Fabric的执行逻辑 171
4.3 Fabric在工作中的应用实例 173
4.3.1 开发环境中的Fabric应用实例 173
4.3.2 工作场景中常见的Fabric应用实例 174
4.4 Fabric在性能方面的不足 180
4.5 小结 180
第5章 Linux集群项目案例 181
5.1 Linux集群的项目案例详解 181
5.1.1 项目案例一:LVS在项目中的优化设计思路 181
5.1.2 项目案例二:用Nginx Keepalived实现在线票务系统 184
5.1.3 项目案例三:企业级Web负载均衡高可用之Nginx Keepalived 188
5.1.4 项目案例四:HAProxy双机高可用方案HAProxy Keepalived 198
5.2 利用HAProxy代理WebSocket集群 203
5.3 巧用DNS轮询进行负载均衡 206
5.4 利用ZooKeeper集群来搭建分布式系统 211
5.5 小结 218
第6章 云原生环境下的负载均衡实现 219
6.1 私有化部署Kubernetes集群 220
6.1.1 部署Kubernetes集群环境的准备工作 220
6.1.2 Nexus3私有仓库在集群内的暴露使用 221
6.1.3 部署Kubernetes集群 222
6.1.4 Kubernetes集群数据如何持久化 228
6.2 负载均衡的具体实现 232
6.2.1 以iptables作为集群的负载均衡 232
6.2.2 以IPVS作为集群的负载均衡 241
6.2.3 服务发现 243
6.2.4 Ingress-Controller的介绍 245
6.3 小结 264
第7章 MySQL高可用集群项目案例 265
7.1 MySQL数据库的安装 265
7.2 服务器物理硬件的选择 267
7.3 MySQL数据库的优化 267
7.4 MySQL主从复制流程与原理 270
7.5 MySQL主从复制的搭建 271
7.5.1 MySQL主从复制环境介绍 271
7.5.2 影响MySQL主从复制的配置选项 272
7.5.3 MySQL主从复制的实现过程 273
7.6 MySQL MHA集群案例 274
7.6.1 MHA安装前的准备工作 275
7.6.2 源码安装MHA程序 276
7.6.3 MHA的实际安装和部署流程 277
7.6.4 MHA manager的压测 284
7.6.5 设置MHA manager为守护进程 290
7.7 MySQL DRBD高可用案例 291
7.7.1 MySQL DRBD相关组件原理介绍 292
7.7.2 MySQL DRBD的具体搭建过程 293
7.7.3 MySQL SysBench的基准测试 308
7.8 利用mysql-utilities工具自动切换主从复制 308
7.8.1 基于GTID的主从复制 308
7.8.2 mysql-utilities工具的二次开发 318
7.9 用XtraBackup工具备份和恢复数据库 319
7.9.1 XtraBackup的安装过程 319
7.9.2 XtraBackup的运行原理 319
7.9.3 XtraBackup备份及恢复过程 321
7.10 小结 322
第8章 高可用高并发系统架构设计 323
8.1 系统性能评估指标 323
8.2 网站架构设计规划预案 324
8.2.1 合理设计与规划 324
8.2.2 核心系统的开发设计 325
8.2.3 规划好网站未来的发展 325
8.2.4 合理选用开源软件方案 326
8.2.5 机房及CDN选型 326
8.2.6 CI/CD及蓝绿部署发布 327
8.2.7 系统安全问题 327
8.3 千万级PV、高性能、高并发网站的架构设计 328
8.4 亿级PV、高性能、高并发网站的架构设计 332
8.5 秒杀系统的架构设计 339
8.6 小结 343
第9章 Linux集群的总结和思考 344
9.1 集群与分布式系统的区别 344
9.2 了解微服务及其组件 346
9.3 现阶段如何保证高可用 349
9.4 小结 351
附录A Docker进阶操作总结 352
附录B 利用Nexus3配置CI/CD的私有仓库 358
附录C XtraBackup备份工具的详细测试 365
【系统架构师之路】
自2006年接触Linux系统以来,我从Linux系统工程师一步步晋升为项目实施工程师、高级Linux系统工程师、运维架构师,直至今日的高级运维开发工程师、系统架构师,这一路走来,深感开源技术和Linux集群的强大。其中印象最为深刻的还是担任项目实施工程师、高级Linux系统工程师期间,因为要设计和实施网站(尤其是电子商务网站)架构,负责开发语言和开发框架的选型,感觉能力提升特别快,成长十分迅速。
在担任运维架构师的这段工作时间里,我主要负责维护公司的电子商务网站。有些平台核心网站的并发量并不是太大,但比较重要,所以公司都要求部署Linux集群,有时指定要部署LVS或HAProxy负载均衡器。在实际设计和安装的过程中,我发现LVS/HAProxy的负载均衡确实非常强大,可以与硬件级的F5负载均衡器相媲美。很快我就被Linux集群这门艺术迷住了,工作之余自己也研究了Nginx/HAProxy Keepalived(动静分离)这种负载均衡高可用架构,并且在许多项目中成功实施,客户反映效果不错,所以我也在很多开源社区推广Linux集群技术。
现阶段我的职务是高级运维开发工程师、系统架构师,主要负责设计、实施及维护公司的电子商务网站以及产品核心功能的代码开发。相对于CDN分布式系统而言,网站应用没有节点冗余,所以对Linux集群技术的要求更高。前期我将所有网站应用都做了双机高可用,即LVS/HAProxy Keepalived和Nginx Keepalived,还有DRBD Heartbeat NFS文件高可用,MySQL数据库用的是MHA一主多从架构。其间,随着特殊业务的需求越来越多(比如定点抢红包活动),我也在网站的架构设计中引入了RabbitMQ消息队列集群。后期基于商业推广,网站流量、UV及并发日益增大,新机器上线也日益频繁,所以我采用了Fabric和Ansbile自动化运维来管理线上机器,帮助运维同事避免重复劳动。另外,由于电子商务网站会牵涉支付问题,所以对安全性的要求也非常高,我们平时都会从网络安全(包括硬件防火墙、Linux系统防火墙和WAF应用防火墙)、系统安全、代码安全和数据库安全等方面着手,尽力避免一切影响网站安全的行为。工作虽然辛苦,但看着自己设计的网站顺利运行,心里还是很有成就感的,这也是我目前工作的主要动力。
【撰写本书的目的】
从事系统集成、运维开发、架构设计方面的工作已经有十余年,我曾经有幸担任过RHCE讲师,到武汉各高校推广红帽Linux系统。在教学过程中我发现,很多学生在进入企业后都无法胜任自己的工作,更谈不上正确地规划自己的职业道路了。一方面是因为企业的生产环境具有一定的复杂性和危险性,另一方面市场上入门书居多,缺乏能真正指导读者解决实际问题的书籍。例如,很多书都只是给出了比较基础的操作及理论,而相对于线上环境,根本没有涉及安全操作以避免误操作的内容,更没有PV、UV和并发以及数据库压力和高并发环境下的消息队列或任务队列的设计等相关话题。
我写这本书,一方面是想对自己这些年的工作经验和心得进行一次系统的梳理和总结;另一方面是想将自己的经验分享给大家,希望帮助大家少走弯路,希望书中的项目实践(包括Linux传统集群技术及云原生下的负载均衡技术、MySQL的高可用方案及Python自动化运维工具的使用)和线上环境的Python脚本,有助于读者迅速进入工作状态。书中提供的Python程序均来自真实项目,可以直接借用。关于Linux集群的项目实践和MySQL的高可用方案,大家也可以根据实际项目的需求直接用于公司的网站架构。希望大家能通过本书掌握Linux集群的精髓,领会Linux集群的魅力,通过Python程序实现自动化运维和编程,从而轻松愉快地工作。
【读者对象】
本书的读者对象如下:
*系统工程师或运维工程师
*DevOps工程师
*网络管理员或企业网管
*系统开发工程师
*运维架构师
【如何阅读本书】
本书是对实际工作经验的总结,涉及大量的知识点和专业术语,建议经验还不是很丰富的读者先了解第1~2章的内容,如果大家在学习过程中根据这两章的讲解进行操作,定会达到事半功倍的效果。
系统工程师和运维工程师可以重点关注第4~7章的内容,这些都是与运维工作息息相关的,建议大家多花些精力和时间,从线上环境去考虑学习。
DevOps工程师可以重点关注第2~8章的内容,想在企业运维开发工作中开发高效的运维工具并不是一件很容易的事情,建议大家多学习,拓宽自己的知识面。
运维架构师可以重点关注第4~5章和第7~8章的内容,这些都跟系统/网站架构技术息息相关,而且基本上都出自真实项目经验,具备一定的参考意义。
对于开发人员来说,由于已具备很强的编程开发能力,可以重点关注第2章和第3章之外的章节,以提升自己的技术。
余洪春是一位资深的Linux专家,也是我的多年好友,出版过多本畅销书籍,影响了国内不少Linux爱好者。在云原生大浪潮之下,他又奉献了这本《Linux集群之美》。本书从经典的企业级应用入手,结合Python运维自动化技术,总结提炼出多个非常实用的实践案例。无论你是一名Linux新手还是有一定经验的实践者,相信都可以从中受益。
——刘天斯 腾讯技术总监
评论
还没有评论。