Linux系统运维与架构设计之Linux概述

Posted ittimeline

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统运维与架构设计之Linux概述相关的知识,希望对你有一定的参考价值。

Linux系统运维与架构设计之Linux概述

1.1 浅谈计算机系统

1.1.1 计算机硬件系统

现代计算机是基于冯·诺依曼体系结构,由运算器、控制器、存储器、输入设备、输出设备五大部分组成,如下图所示
冯·诺依曼体系结构
它们各司其职,完成了数据的计算、存储、传输任务。
下面是它们各个组件的功能介绍:

CPU:也被称为中央处理器,由运算器和控制器组成,其主要作用是数据计算(从内存中获取指令并执行后将结果返回给内存或者写入到磁盘)和控制其他设备(声卡显卡,鼠标键盘)协同工作。

内存:采用编址存储,其主要作用是用来作为程序的工作区,程序运行时其数据和指令会被加载到内存,断电后数据会丢失。

硬盘:其主要作用是永久性存储海量数据(TB/PB级别),分为机械式硬盘和固态硬盘两大类。

IO设备:其主要作用是用来数据的输入输出,常见的输入设备包括鼠标键盘,常见的输出设备包含声卡,显卡,打印机等等。网卡主要是负责在网络上的传输数据。

在后期运维排除故障时除了考虑程序本身的错误之外还要考虑计算机硬件故障(例如磁盘被写满,网络不通)等问题。

1.1.2 计算机软件系统

软件出现的作用是实现了人和计算机更好的交互,它是由开发人员采用某种编程语言来编写一系列的指令以及产生的数据组成。

不同平台的软件有不同的交互方式:

服务器端:运维开发人员基于命令行的字符界面实现人机交互。
PC桌面端:开发人员、普通用户通常是基于图形化界面实现人机交互。
移动端:用户通常是通过语音,手势触控实现人机交互。

而软件通常被分为系统软件和应用软件

系统软件:系统软件有操作系统、编译器、数据库等等。
应用软件:应用软件有淘宝、京东、微信、支付宝等等。

1.1.3 操作系统

操作系统(Operating System)是实现通用目的的程序,其内核(Kernel)负责和底层硬件交互,应用软件运行在操作系统之上。因此操作系统起着承上启下的作用,操作系统提供的功能如下

  • 硬件驱动
  • 进程管理
  • 内存管理
  • 网络管理
  • 安全管理
  • 文件管理

操作系统分类:

  • 桌面:Windows10,macOS10.14,Ubuntu18.04
  • 服务器:CentOS7.6, RHEL,Ubuntu Server
  • 移动设备:android,ios

ABI(Application Binary Interface)描述了应用程序与OS之间的底层接口,允许编译好的目标代码在使用兼容ABI的系统中无需改动就能运行

API(Application Programming Interface)定义了源代码和库之间的接口,因此同样的源代码可以在支持这个API的任何系统中编译

开发人员在编写应用程序时,通常都是借助API接口实现通用目的的功能,而应用程序编译后,通过ABI接口编译链接后运行。

1.1.4 计算机常用应用的软硬件协作实现

计算机运行的功能流程如下图所示
计算机运行流程

聊天:应用程序监听键盘输入的数据,放到内存,然后传给网卡,通过网络传递给另外一个网卡,再从网卡传到内存,显示在显示器上。
听音乐:应用程序将音乐数据加载到内存之后,然后写到声卡上。
看视频:应用程序将视频数据加载到内存,然后写到显卡上。
读文档: 应用程序将磁盘中的文档数据加载到内存后显示到屏幕上。
写文档: 应用程序将内存中的数据写入到磁盘上。

1.1.5 计算机信息存储

1.1.5.1 计算机常用存储单位

在计算机最底层,数据都是以二进制(01010)的补码方式存储,而计算机中最小的存储单位是位(bit),用来表示0或者1。
计算机中最基本的存储单位是字节(Byte),1个字节对应8个位(bit)。
而日常应用中常使用的基本存储单位包括KB,MB,GB,TB。它们之间都是以1024换算的,如下所示

1TB=1024GB
1GB=1024MB
1MB=1024KB
1KB=1024B
1B=8bit

1.1.5.2 计算机内存存储

现在通常笔记本的内存通常是8G,16G,32G,64G等等,而运行在笔记本之上的操作系统普遍都是64位的,因为32位系统只能使用4G内存,下面是4G的内存换算

4G=2^2 * 2^10 * 2^10 * 2^10 =4*1024*1024*1024=2^32

1.1.5.3 计算机网速换算

使用迅雷下载某些资源时的网速就是KB或者MB,而网络运营提供商(例如长城宽带、移)声称的百兆带宽实际上是100Mb(bit),但是网络下载速度是以字节(KB)为单位的,因此真实的网速(下载速度)理论上只有100Mb/8=12.5MB

1.1.5.4 计算机磁盘容量换算

在购买内存或者买移动硬盘时,通常使用的存储单位就是GB或者是TB,
但是在买4T的移动硬盘时,实际的可用容量却只有3T多,因为计算机的存储单位是以2的10次方(即1024)换算,而硬盘厂商们是以1000为换算单位。

4T的硬盘换算成位如下所示

4T=4*1024GB*1024MB*1024KB*1024B*8bit

而硬盘厂商的实际容量

4T=1000*1000*1000*1000*8

因此实际的可用容量是

4*1000*1000*1000*1000/1024/1024/1024/10243.63T

而在一些互联网巨头(例如国内的BAT,国外的亚马逊、苹果、微软、谷歌,脸书)公司中,可能使用到比TB更大的海量数据,也就是PB或者EB,ZB,它们的换算单位如下所示。

1PB=1024TB
1EB=1024PB
1ZB=1024EB
1YB=1024ZB
1BB=1024YB
1NB=1024BB
1DB=1024NB

1.2 服务器及其硬件概述

1.2.1常用服务器介绍

DELL,HP和IBM是互联网公司中使用最常用的服务器品牌。
其中互联网公司中使用最广泛的品牌DELL常见的服务器型号按照不同的用途分为2u的R730/R830和4U的R930,其中1U表示高度为4.45cm,其结构类型是机架式,如下图所示。
Dell R730

1.2.2 服务器硬件选型

服务器中重要的组件包含电源(如果是单台服务器通常都是双路电源,集群场景不需要使用双路电源),主板(作用类似于人体的骨架),CPU,内存和磁盘,网卡(集成在主板上)等等。

而系统运维人员需要重点关注服务器的CPU、内存、磁盘三大核心组件!

CPU :服务器常用的CPU是基于X86指令集的英特尔至强Xeon( E3, E5, E7系类),根据用途不同服务器的CPU通常是2-4颗,单颗CPU是4-8核,如果是做虚拟化宿主机则需要4-8颗CPU,虚拟6-10个虚拟机。

内存:服务器的内存区间通常是16-256G(32G-64G更多),如果是做虚拟化的宿主机,内存总量一般是48-128G,用来虚拟6-10个虚拟机。
32位系统最多寻址2的32次方也就是4G个内存空间,64位系统最高寻址内存可以达到2的64次方也就是4G*4G内存空间,但是由于其他组件限制,实际使用不了那么多,64位Linux支持内存为16EB。

磁盘:服务器的磁盘接口类型通常分为SATA(转速7200转/分),SAS(转速10000-15000转/分),SSD三种。
通常不对外访问的业务(例如线下数据备份)采用SATA,STAT的特点是容量大,价格便宜但是速度比较慢。
而常规正式的工作场景选用SAS硬盘,机械磁盘转速高的性能好。
高并发,小数据量(TB)时选用SSD。
考虑到经济效益,互联网公司通常根据不同的应用场景都是SATA,SAS和SSD混合使用。

每个计算机组件的IO性能也各不相同,核心组件(CPU,内存,磁盘)都遵循容量越大,IO性能越差,如下图所示,汇总了它们的IO性能。
IO各层次性能汇总

在后期系统优化和架构设计时,通常需要注意各个硬件组件的瓶颈,尤其是磁盘

1.3 初识Unix系统

1.3.1 Unix历史

  • 1969年,贝尔实验室的Ken Thompson使用汇编语言和B语言开发和改进了UNICS
  • 1973年,贝尔实验室的Dennis Ritchie使用C语言重新编写实现,并正式命名Unix
  • 1977年,伯克利大学开发基于Unix的BSD系统,自此以后各大公司针对自身硬件架构开发了互不兼容的各种版本的Uinx,例如SUN公司的Solaris,HP公司的HP UNIX以及IBM公司的AIX
  • 1979年贝尔实验室发表了System V架构 版权声明,HP UNIX,IBM AIX宣布“不对学生提供源码” 并且收回版权
  • 1984年 Andrew S. Tanenbaum荷兰阿姆斯特丹自由大学计算机科学的教授开发了可运行在x86 PC平台的Minix操作系统用于教学。

Unix的发展路线以及各个分支可以参考如下图所示
Unix Timeline

1.3.2 Unix系统的特点

  • 技术成熟、可靠性高:通常超大型银行、金融公司等可靠性要求性极高的公司会采用Unix作为服务器操作系统,但是Unix通常是随着硬件捆绑销售的,例如IBM的小型机。
  • 支持主流CPU的架构:Intel/AMD,PowerPC,UltraSPARC
  • 支持主流的数据库:Oracle,DB2,Informix
  • 强大的开发功能:Unix促使C语言的诞生,而TCP/IP,XML,WWW都是诞生在Unix之上

1.3.3 GUN与开源软件

GUN概述
由于Unix面临商业化版权制约以及源码面临闭源的问题,1984年Ritchard Stallman发起了开发自由软件的运动,并成立自由软件基金会(Free Software Foundation)和GNU(GUN is Not Unix)项目以及GPL(GNU General Public License)协议,目标是编写大量兼容于Unix系统的自由软件。GNU项目最终产出了Linux系统的重要组件,包括GCC编译器,Emacs编辑器,bash命令解释程序和编程语言以及gawk。

自由不代表免费,例如RedHat的RHEL是自由但是不免费的操作系统,提供的服务收费。
GPL是保证任何人有共享和修改自由软件的自由,任何人有权获取、修改、发布自由软件的源代码的权利,但同时给出具体的修改的源码。LGPL(Lesser General Public License)相对于GPL较为宽松,允许不公开全部源代码。

开源软件
开源指的是软件和源码提供给所有人,同时能够自由分发软件和源代码,能够自由的修改和创建其衍生品。
而目前软件类型可以分为商业软件,共享软件以及自由软件。

  • 商业软件就是使用收费,例如Window10企业版,Office2016,Edraw Max等等都是商业软件,其特点就是收费并且不开放源代码。
  • 共享软件就是免费,但是不开放源码,功能会有所局限,相当于免费版
  • 自由软件是开放源码,并且能够自由修改、分发,但是自由不一定意味着免费,典型的RedHat公司发行的REHL就是自由,但是提供的服务是收费的。

目前世界上开源软件有不同的开源许可证,常见的有Apache,MIT,LGPL等等。

  • 其中Apache协议指的是他人修改源码后能够闭源,但是每一个修改过的文件,必须要放置版权说明
  • MIT协议在Apache协议的基础之上,每个修改的文件不需要放置版权说明,并且衍生软件的广告,还可以用你的名字促销,应该是最宽松的开源许可协议。
  • LGPL协议指的是他人修改软件的源码之后不能闭源,同时新增的代码也不能采用同样的许可证,但是修改源码的地方不需要提供说明文档,而Mozila协议是需要提供说明文档。

CentOS系列都是遵守GPLV2协议,可以使用rpm -qi kernel命令查看

CentOS6.10的版权声明

[root@centOS6 ~]# rpm -qi kernel
Name        : kernel                       Relocations: (not relocatable)
Version     : 2.6.32                            Vendor: CentOS
Release     : 754.el6                       Build Date: Wed 20 Jun 2018 05:43:27 AM CST
Install Date: Sat 26 Jan 2019 12:32:12 AM CST      Build Host: x86-01.bsys.centos.org
Group       : System Environment/Kernel     Source RPM: kernel-2.6.32-754.el6.src.rpm
Size        : 139595110                        License: GPLv2
Signature   : RSA/SHA1, Wed 20 Jun 2018 07:38:57 PM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.kernel.org/
Summary     : The Linux kernel
Description :
The kernel package contains the Linux kernel (vmlinuz), the core of any
Linux operating system.  The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
input and output, etc.

CentOS7.6的版权声明

[root@centos7 ~]# rpm -qi kernel
Name        : kernel
Version     : 3.10.0
Release     : 957.el7
Architecture: x86_64
Install Date: Fri 25 Jan 2019 12:48:59 PM CST
Group       : System Environment/Kernel
Size        : 66192729
License     : GPLv2
Signature   : RSA/SHA256, Mon 12 Nov 2018 10:30:44 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : kernel-3.10.0-957.el7.src.rpm
Build Date  : Fri 09 Nov 2018 08:08:59 AM CST
Build Host  : kbuilder.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.kernel.org/
Summary     : The Linux kernel
Description :
The kernel package contains the Linux kernel (vmlinuz), the core of any
Linux operating system.  The kernel handles the basic functions
of the operating system: memory allocation, process allocation, device
input and output, etc.

1.4 初识Linux

1.4.1 Linux概述

我们通常所说的Linux通常指的是内核(kernel),而如果只有内核,就不是一个完整的操作系统,还需要许多能够解决实际问题的应用程序。

而最早期的Linux内核是由Linus Torvalds在大学教授Andrew Tanenbaum开发的Minix基础之上开发的,1991年年底发布了Linux内核的0.02版本,自那以后全世界的开源爱好者们共同推进着Linux系统的发展,使其在服务器端,嵌入式和PC桌面得到了广泛的运用。

Linux系统=Linux内核+GNU项目组件+各种应用程序(Apache,nginx,Zabbix)

完整的Linux系统架构图如下图所示
Linux系统架构图

内核主要是实现系统内存管理,软件程序管理,硬件设备管理,文件系统管理

GNU组件主要包含处理文件(gawk)、操作文本、管理进程的工具以及shell,gcc等等

常见的应用程序包含不同的图形化界面(KDE,GNOME,XFace),运行于桌面端的Firefox,Chrome和运行于服务端Nginx,Apache等等。

1.4.2 Linux系统的特点

Linux系统的特点(继承Unix之外的)

  • 开放源代码、自由传播的类Unix
  • 基于Intel X86系列CPU
  • 支持多任务、多线程、多CPU、多用户
  • 完善的图形用户界面:GNOME,KDE
  • 完善的开发平台:Java/C/C++/Pythton
  • 支持主流数据库:mysql,Oracle,PostgreSQL
  • 完善的网络服务:HTTP、WWW,SFTP,DNS,SSH等等

1.4.3 Linux主流发行版

为了便于Linux系统的安装和使用,诞生了诸如RedHat公司的Linux发行商,将Linux内核和各种系统组件以及应用组件组合成一个完整的操作系统。
目前主流的Linux发行版主要由三个,分别是RedHat,Debian和Slackware,后续主流的RHEL,Ubuntu,Open SUSE都是基于前面三个分支演进而来的。
如下列表展示出了目前主流的Linux分支以及发行版本

  • Debian
    • Ubuntu
    • Mint
  • Slackware
    • SUSE Linux Enterprise Server
    • Open SUSE
  • RedHat
    • RHEL
    • CentOS

关于RHEL和CentOS的关系:CentOS是基于RHEL源码编译而来,仅仅去除了RHEL源码的商标以及非自由软件部分。

面对如此多的发行版该如何选择呢?
如果你想从事Linux系统运维与架构设计的工作,推荐使用CentOS6.10版本或者CentOS7.6。
如果是想尝试下Linux的桌面版,推荐可以使用Open SUSE LEAP 42.3或者Ubuntu18.04。

如果以上的发行版无法满足你的需求,可以访问下面的连接,获取所有的Linux发行版信息。
https://upload.wikimedia.org/wikipedia/commons/1/1b/Linux_Distribution_Timeline.svg

1.4.4 Linux系统的应用领域

经过20多年的发展,如今的Linux在服务器领域、桌面领域、移动嵌入式领域和云计算、大数据领域占据了广阔的市场。
其中服务器领域在全球占据了75%的市场份额
而Ubuntu也作为最流行的桌面版Linux,基本可以满足日常办公需要,但是普及远远不及Windows。
通过Linux系统架构图可以得知手机操作系统Android的内核就是基于Linux修改而来的。

1.4.5 Unix/Linux哲学思想

  1. 一切皆文件:普通的文件,目录、字符设备、块设备、 套接字等在 Unix/Linux 中都是以文件被对待;它们虽然类型不同,但是对其提供的却是同一套操作界面。
  2. 小型,单一用途的程序:程序和可执行文件不要太复杂,这样才能保证了linux内核的高效运行。
  3. 链接程序,共同完成复杂的任务:复杂的任务可以通过连接多个简单的程序实现复杂的功能。对于复杂的功能linux通过许多简单程序的组合等方式实现,在保证简单功能的高效性的同时,复杂的程序也必然是高效性的。
  4. 避免令人困惑的用户界面:如Windows那样出了问题一般人选择的会是重启,实在是不行的话就是重新安装系统了,因为对于Windows那样不是开源的,并且用户界面比较复杂操作系统出了问题,一般的人是根本没有办法解决的。但是linux就不一样了,第一linux是开源的,无论什么问题都可以通过简洁的命令行实现排错,修改系统的配置,一切都是简洁明了为基础。
  5. 配置数据存储在文本中:linux所有的配置文件都存放在文本配置文件当中,无论什么配置修改都只需修改其配置文件即可,配置文件时文本形式的只需任意一款文本编辑器修改即可而不是类似于Windows那样将保存在注册表中,并且Windows的注册表需要专门的二进制或十六进制的编辑器才可编辑,修改比较复杂。

以上是关于Linux系统运维与架构设计之Linux概述的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统运维与架构设计

运维与自动化运维

参加「楼+ linux运维与DevOps实战」是种什么样的体验?

最新linux运维高级架构课13期 架构师课程

云社区 | 如何评估自动化运维的收益?超融合环境下的运维与传统架构有什么不同?

[ Linux运维学习 ] 路径及实战项目合集