您的位置:首页 > 运维架构 > 网站架构

如果你是12306网站架构师,你会如何设计网站的软件架构和硬件系统架构?

2012-09-19 17:20 921 查看
POST(加电自检)-->bootsequence(引导次序,BIOS)-->Boot Loader(MBR)-->Kernel+ramdisk(临时根,initrd,initramfs)-->mount rootfs(根切换)-->/sbin/init(配置文件,CentOS 5:/etc/inittab, CentOS6 /etc/init/*.conf)设置默认运行级别-->指定系统初始化脚本-->初始化额外的硬件设备并加载驱动程序-->启动(关闭)服务(/etc/rc.d/rc#.d,/etc/rc.d/init.d/)-->/etc/rc.d/rc.local-->设置CtrlAltDel组合的功能-->启动终端(mingetty),并在终端附加登录程序(login)-->如果级别为5,则要启动X server;一、POST加电自检:当我们打开计算机电源,计算机首先会读取BIOS信息,BIOS中记录了CPU、内存、设备启动序列、硬盘等信息;然后对系统启动关键硬件设备进行检测,如果出现严重故障则停机;如果是一般故障,会发出报警提示,等待故障清楚;如果没有故障,加电自检完成。BIOS(Basic Input Output System)是保存于主板CMOS芯片中的程序代码;CMOS(ComplementaryMetal Oxide Semiconductor):是主板上的ROM芯片;二、获取引导次序,读取MBR:加电自检完成之后:CPU会读取BIOS信息中的设备启动序列,按照次序引导,按次序找引导设备,第一个有引导程序(MBR)的设备即为启动PC server所用到的设备;可作为启动设备:光驱,便携式移动设备,硬盘,网卡(系统引导,PXE)PXE实现系统引导:DHCP,tftp(kernel+ramdisk)MBR(主引导记录,Master BootRecord):MBR位于磁盘的0磁道0扇区,占用512个字节:446bytes:Boot Loader,主程序;
64bytes:PartitionTable,硬盘分区表,每16bytes标记一个分区,一共4分区;3个主分区,1个扩展分区,扩展分区还可以划分为若干个逻辑分区;
2bytes:MBR有效性标记;三、Boot Loader:操作系统内核运行之前的一段小程序,选择要启动的内核(在当前磁盘的某或某些分区上);1、Boot Loader比较常见的有GRUB和LILO:LILO:LInux Loader
0-1023范围内的柱面构成的分区的内核文件,通常应用与嵌入式计算机;
GRUB:GRand Unified Bootloader
CentOS 5&6:Grub 0.97
CentOS7:Grub2 1.962、GRUB:GRand Unified Bootloader1)、grub程序由两段组成:stage1:位于MBR中(0柱面 0磁道 1扇区);
stage1_5:位于MBR随后的扇区;
stagr2:读取grub.conf配置文件,并实现引导功能的扩展;grub目录和配置文件位置:


2)、grub的功能:1、提供菜单,并提供交互式接口;
e:进入编辑模式;
a:直接修改内核参数;
c:进入grub命令行模式;
2、允许用户选择要启动的内核或系统;
允许传递引导参数给内核;
选择界面可隐藏;
3、为编辑功能提供保护机制;
启用内核文件:选择运行制定的内核需要先输入密码;
传递参数:使用e命令需要先输入密码;在菜单选择倒计时界面按任意键进入grub菜单:


按e键进入编辑菜单可以看到kernel和initrd:


3)、grub命令行接口:>root(DEVICE):指定哪个分区为接下来要启动的系统或内核文件所在的分区;
所有硬盘都识别为hd;
不同的硬盘基于数字标识:如hd0,hd1等;
同一个硬盘上的不同分区,也使用数字标识,如hd0,0 hd1,5;>find(DEVICE)/path/to/file:查找文件>kernel:指定要运行的内核文件;
>initrd:为要运行的内核指定其可用的ramdisk文件;>boot:启动此前配置好的内核或系统;按c键进入grub命令行接口:


4)、配置文件grub.conf:文件位置:/boot/grub/grub.conf


参数:default=:选择第几个title配置的内核或系统,各title从0开始编号;
timeout=#:菜单显示的超时时长;
splashimage=/path/to/some_image_file:指定菜单的背景图片;此图片只能为14bits色,xpm格式,gzip压缩;
hiddenmenu:隐藏菜单
titleTILTE STRING:显示于菜单中的标题;
root:指定引导分区;
kernel:指定kernel位置;
initrd:指定initramfs位置;在grub菜单按a键可在内核加载前编辑内核参数:


常用参数:single:单用户模式启动;5)、grub保护机制:1、生成密码:
#grub-md5-crypt
2、保护编辑功能,则需要title之外的添加:
#password--md5 密码串
3、保护使用某内核,则需要内核对应的title之下添加:
#password--md5 密码串6)、安装grub的方式:使用grub-install命令:
#grub-install [--root-directory=/path/to/somewhere] DEVICE
--root-directory=/path/to/somewhere/path/to/somewhere:内核及initrd文件所在的分区的挂载点的父目录,且此挂载点必须叫boot;例如:/dev/sdb1:/mnt/boot
#grub-install --root-directory=/mnt /dev/sdb四、kernel+ramdisk:根据grub设定的内核映像所在路径,系统读取内核文件,并进行解压缩操作;系统将解压缩后的内核放在内存中,完成内核自身初始化;探测所能识别的硬件设备,并加载驱动程序,完成核心环境建立;


要读取内核文件必须访问根文件系统要加载根文件系统所在的设备,而此时根文件系统没有挂载,要挂载根文件系统需要根文件系统所在设备的驱动程序。为解决这个问题,grub在加载内核同时,也把ramdisk加载到内存中并运行;展开ramdisk镜像文件:


ramdisk在内存中表现为一个虚拟根文件系统initfs,里面有如同Linux根目录下的bin、sbin、dev、etc、lib、proc、usr、var、tmp等目录;initfs将内核与真实根建立联系,内核通过initfs加载驱动程序,然后进行根切换,挂载真实根目录;至此内核加载完成;1、kernel:内核的功能:进程管理、文件系统、硬件驱动(在内核模式下运行)、内存管理、安全功能(SELinux)、网络子系统;1)、内核设计流派:单内核体系结构:
linux:支持模块化,模块可以动态装卸载
linux内核:核心+外围模块
核心:/boot/vmlinux-VERSION-release
模块:/lib/modules/VERSION-release
.ko:kernel object
ramdisk:/boot/initramfs-VERSION-release.img
在内核启动过程中装载根文件系统时有用;模块间有可能存在依赖关系;
微内核体系结构:
windows、solaris2)、内核的某些功能:编译进内核本体 [*]
编译成内核模块 [M]
不选择使用 [ ]3)、内核模块管理:#lsmod:显示内核已装载模块动态装卸载模块:
#modprobe -rMOD_NAME:卸载;
#modprobe MOD_NAME:装载;#insmod/path/to/module_file:装载;
#rmmod MOD_NAME:卸载;查看某模块的详细信息:
#modinfo MOD_NAME检查并生成模块间依赖关系的命令:
#depmod2、ramdisk:CentOS 5:SysV,init;/etc/inittab--> /etc/rc.d/rc.sysinit;
CentOS 6:upstart,init;/etc/init/*.conf(/etc/inittab) --> /etc/rc.d/rc.sysinit
#chkconfigCentOS 7:systemd, init;/usr/lib/systemd/system/;借鉴MAC OS X;
#systemctl五、/sbin/init:内核加载完成之后,第一个运行的程序就是/sbin/init,该文件会先读取/etc/init/rcS.conf文件:


设定系统运行级别:0-6:7个运行级别:
0:关机;
1:single usermode,single,s,S,不启动网络功能,不启动用户认证,单用户模式(维护模式);
2:multi usermode,不支持NFS功能;
3:完全多用户模式,文本接口,不启动图形界面;
4:未使用;预留级别;
5:完全多用户模式,图形接口;
6:重启;#init:切换运行级别;六、/etc/rc.d/rc.sysinit:系统初始化脚本查看/etc/rc.d/rc.sysinit文件部分内容:


初始化设置流程:设定主机名:读取/etc/sysconfig/network文件中的HOSTNAME参数,并以之设定主机名;
打印文本欢迎信息:
激活SELinux和udev;
挂载/etc/fstab文件中定义的其他文件系统;
激活swap;
检测根文件系统,并以读写方式重新挂载;
设置系统时钟;
根据/etc/sysctl.conf设置内核参数;
激活LVM和RAID设备;
加载额外设备的驱动程序;
清理操作;七、启动内核模块:依据/etc/modprobe.d/*.conf文件装载内核模块:


八、执行指定运行级别的脚本程序:/etc/rc.d/rc#.d/:启动指定的默认级别的默认为启动的服务,停止指定的级别下默认为关闭的服务;查看/etc/rc.d/rc3.d/目录:


1、目录中为链接文件指向服务脚本:S##:默认启动的服务;
K##:默认停止的服务;
##:01-99,数字越小,越优先启动或关闭;
先启动的后关闭(自动解决依赖关系);2、chkconfig:创建或改变连接文件;#chkconfig --add SRV_SCRIPT:创建;
#chkconfig --del SRV_SCRIPT:删除;
#chkconfig SRV_SCRIPT {on|off}:开机自动{启动|关闭};
默认为2345级别;
--level######脚本如果期望能够被chkconfig命令使用,要在脚本中添加如下行:
#chkconfig:- 85 15
-:当此脚本由chkconfig控制时,默认哪些级别就是开启的;
85:启动优先级;
15:关闭优先级;九、/etc/rc.d/rc.local:是一个脚本,通常为系统启动完成的最后运行一个脚本;定义一些组合键的功能:通常是Ctrl+Alt+Delete;初始化字符终端;如果有需要,启动图形终端;十、/bin/logon:登陆程序:显示登陆提示符,等待用户输入username和passwd;
原文: http://www.lxway.com/400826.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: