Split分离解析 (常常配合CDN使用)
Content Delivery Network,内容分发网络
购票用户:===》CDN服务商的缓存服务器
铁道部成本降低
CDN服务商赚钱
用户访问速度块
CDN服务商需要做的事情:
当用户查询www.12306.cn时,把客户机引导到最近/最快的那一台缓存服务器上
配置关键步骤:
1)建立2份地址库
/var/named/tedu.cn.zone.1 【www ==》192.168.4.100】
/var/named/tedu.cn.zone.2 【www ==》1.2.3.4】
2)在 /etc/named.conf 创建2个视图
options {
directory "/var/named";
};
view "mylan" { //第1个视图设置
match-clients { 192.168.4.207; 192.168.7.0/24; }; #匹配哪些IP地址
zone "tedu.cn" {
type master;
file "tedu.cn.zone.1";
};
};
view "other" { //第2个视图设置
match-clients { any; };
zone "tedu.cn" {
type master;
file "tedu.cn.zone.2";
};
};
3)编写地址库文件
vim /var/named/tedu.cn.zone.1
....... # cp /var/named/named.localhost
@ NS svr7.tedu.cn.
www A 192.168.4.100
vim /var/named/tedu.cn.zone.2
@ NS svr7.tedu.cn.
www A 1.2.3.4
4)重启named服务
systemctl restart named
DNS配置常见问题:
1)有冲突的服务 (pkill -9 dnsmasq)
2)地址库文件的权限 (复制模板文件,要加-p选项)
RAID阵列
RAID —— 把一堆便宜磁盘整合成一块大磁盘
RAID0,条带模式,提高速度 (同一个文档分散存放在不同的磁盘,并行写入提高效率)
RAID1,镜像模式,提高可靠性
RAID10,条带+镜像模式,提高速度和可靠性
RAID10和RAID01的比较
RAID10是先做镜象,然后再做条带。
RAID01则是先做条带,然后再做镜象。
比如以6个盘为例,RAID10就是先将盘分成3组镜象,然后再对这3个RAID1做条带。RAID01则是先利用3块盘做RAID0,然后将另外3块盘做为RAID0的镜象。
下面以4块盘为例来介绍安全性方面的差别:
1、RAID10的情况
这种情况中,我们假设当DISK0损坏时,在剩下的3块盘中,只有当DISK1一个盘发生故障时,才会导致整个RAID失效,我们可简单计算故障率为1/3。
2、RAID01的情况
这种情况下,我们仍然假设DISK0损坏,这时左边的条带将无法读取。在剩下的3块盘中,只要DISK2,DISK3两个盘中任何一个损坏,都会导致整个RAID失效,我们可简单计算故障率为2/3。
因此RAID10比RAID01在安全性方面要强。
从数据存储的逻辑位置来看,在正常的情况下RAID01和RAID10是完全一样的,而且每一个读写操作所产生的IO数量也是一样的,所以在读写性能上两者没什么区别。而当有磁盘出现故障时,比如前面假设的DISK0损坏时,我们也可以发现,这两种情况下,在读的性能上面也将不同,RAID10的读性能将优于RAID01。
RAID5,均衡模式,可以提高速度和可靠性,使用1块容错盘.坏了一块磁盘,其他两个磁盘可以根据校验数据恢复损坏的数据
RAID6,优化版的RAID5,稳定性更好,使用2块容错盘
主要实现两个目标
1)提高磁盘读写速度
2)提供硬件备份
其他好处:
拥有更大容量的磁盘、性价比更高
阵列如何实现(RAID级别)?
500GB X 6块 构建 RAID5 阵列
==》2.5TB
500GB X 6块 构建 RAID6 阵列
==》2TB
500GB X 6块 构建 RAID0 阵列
==》3TB
500GB X 6块 构建 RAID1 阵列
==》500GB
500GB X 6块 构建 RAID10 阵列
==》3块组条带 x2 镜像 1.5TB
==》2块组条带 x3 镜像 1.0TB
进程管理
查看进程信息
查看进程的主要命令工具:
- ps aux、ps –elf:查看进程静态快照
- top:查看进程动态排名
- pstree:查看进程与进程之间的树型关系结构
- pgrep:根据指定的名称或条件检索进程
Process,进程(内存中正在进行的程序)
整个Linux操作系统是由大量的进程(每一个进程都由一个编号PID)一起提供服务的
系统开机 ==》内核 ==》系统管理器(PID 1) ==》其他程序。。。
pstree 看进程树,为了更好的掌握系统的状态
练习:
1)查看Linux系统的整个进程树结构,显示各进程的PID号
# pstree -p
2)从上述结果中找出sshd进程的PID值 (-p)
# pstree -p | grep sshd
3)根据sshd进程的PID值查看进程树,列出各进程的命令行 ( - a )
# pstree -ap 937
ps 进程快照,用来为系统中所有进程拍照
练习:
1)安装并启用httpd服务
# yum -y install httpd
# systemctl restart httpd
2)列出系统中所有的httpd进程,比较每个进程属于哪个用户
# ps aux | grep httpd
3)列出系统中所有httpd进程的父进程号,观测差别
# ps -elf | grep httpd
4)查看前一步结果中PID编号最小(辈分最大)的httpd进程的进程树
# pstree -p 9634
关于httpd网站服务器:
第1个httpd进程由root运行,不面向Web用户
第2个及以后的httpd进程是以apache用户身份运行,面向Web用户
知道一个进程的父进程有什么作用?
比如病毒进程
如果一个进程被杀死,这个进程会自动把所有子进程都终止
top 查看进程资源占用情况,动态展示(实时录像)
# top
top - 15:53:09 up 6:23, 3 users, load average: 0.00, 0.01, 0.05
Tasks: 150 total, 2 running, 148 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2049108 total, 1267212 free, 303156 used, 478740 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 1556160 avail Mem
排名信息。。。
CPU处理器的平均负载:最近1分钟,5分钟,15分钟
load average: 0.00, 0.01, 0.05
%Cpu(s): 99.7 id 空闲
按数字1切换多核模式
按q键退出
练习:
1)查看当前主机的CPU负载情况
2)查看当前主机开启了多长时间、有几个用户登录、运行的进程数
3)查看当前主机的CPU、内存、交换分区空闲比率
4)观测当前占用CPU资源最多的进程叫什么名
pgrep 检索进程信息
练习:
1)查看用户mike开启的进程名、PID号
# pgrep -l -U mike
2)统计当前主机运行的进程的数量
# pgrep . | wc -l
3)检查网站服务进程httpd是否已经开启
# pgrep -l httpd (检查进程是否运行)
4)找出名字为 gdm 的进程的PID号
# pgrep -x gdm
pgrep 关键词 ==》只要进程名包括这个关键词,就符合条件
pgrep -x 关键词 ==》必须进程名等于这个关键词,才符合条件
进程调度及终止
进程调度及终止的主要命令工具:
- 命令行 &:将命令行在后台运行
- Ctrl + z 组合键:挂起当前进程(暂停并转入后台)
- jobs:列出当前用户当前终端的后台任务
- bg 编号:启动指定编号的后台任务
- fg 编号:将指定编号的后台任务调入前台运行
- kill [-9] PID...:杀死指定PID值的进程
- kill [-9] %n:杀死第n个后台任务
- killall [-9] 进程名...:杀死指定名称的所有进程
- pkill:根据指定的名称或条件杀死进程 (pkill -U 用户名)
!!! 不带信号 -9 表示正常杀死进程
!!! 带信号 -9 表示强制杀死
图形桌面下的点杀工具 xkill ——
按 Alt F2 调出运行命令的工具,输入 xkill 并回车
练习:进程调度及终止
1)运行“sleep 600”命令
[root@svr7 ~]# sleep 600
2)另开一个终端,查出sleep程序的PID并杀死
[root@svr7 ~]# ps aux | grep sleep
[root@svr7 ~]# kill -9 7699
3)运行多个vim程序并分别都放入后台
[root@svr7 ~]# vim 1.txt &
[1] 8068
[root@svr7 ~]# vim 2.txt &4)杀死所有vim进程
[root@svr7 ~]# pkill -9 vim
5)su切换为zhsan用户
[root@svr7 ~]# su zhansan
[tom@svr7 root]$
6)另开一个终端,强制踢出zhsan用户
[root@svr7 ~]# pkill -9 -U zhansan
4 案例:系统日志分析
4.1 问题
本例要求熟悉Linux系统中的常见日志文件,使用必要的命令工具完成下列任务:
- 列出所有包含关键词8909的系统日志消息
- 查看启动时识别的鼠标设备信息
- 列出最近2条成功/不成功的用户登录消息
- 列出最近10条重要程度在 ERR 及以上的日志消息
- 列出所有与服务httpd相关的消息
- 列出前4个小时内新记录的日志
4.2 方案
常见的系统日志及各自用途:
- /var/log/messages,记录内核消息、各种服务的公共消息
- /var/log/dmesg,记录系统启动过程的各种消息
- /var/log/cron,记录与cron计划任务相关的消息
- /var/log/maillog,记录邮件收发相关的消息
- /var/log/secure,记录与访问限制相关的安全消息
日志消息的优先级(高-->低):
- EMERG(紧急):级别0,系统不可用的情况
- ALERT(警报):级别1,必须马上采取措施的情况
- CRIT(严重):级别2,严重情形
- ERR(错误):级别3,出现错误
- WARNING(警告):级别4,值得警告的情形
- NOTICE(注意):级别5,普通但值得引起注意的事件
- INFO(信息):级别6,一般信息
- DEBUG(调试):级别7,程序/服务调试消息
RHEL7提供的journalctl日志工具的常见用法:
- journalctl | grep 关键词
- journalctl -u 服务名 -p 优先级
- journalctl -n 消息条数
- journalctl --since="yyyy-mm-dd HH:MM:SS" --until="yyyy-mm-dd HH:MM:SS"
4.3 步骤
实现此案例需要按照如下步骤进行。
步骤一:分析系统日志及用户日志
1)列出所有包含关键词8909的系统日志消息
简单模拟一个故障(SELinux阻止Web开放8909端口):
1. [root@svr7 ~]# vim /etc/httpd/conf.d/8909.conf //添加开8909端口配置
2. Listen 8909
3. [root@svr7 ~]# setenforce 1 //开启强制模式
4. [root@svr7 ~]# systemctl restart httpd //起服务失败
5. Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
从日志文件/var/log/messages中检索信息:
1. [root@svr7 ~]# grep 8909 /var/log/messages
2. Jan 6 17:53:48 svr7 setroubleshoot: SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port 8909. For complete SELinux messages. run sealert -l 6d37b8f0-ab8a-4082-9295-c784f4f57190
3. Jan 6 17:53:48 svr7 python: SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port 8909.#012#012***** Plugin bind_ports (92.2 confidence) suggests ************************#012#012If you want to allow /usr/sbin/httpd to bind to network port 8909#012Then you need to modify the port type.#012Do#012# semanage port -a -t PORT_TYPE -p tcp 8909#012 where PORT_TYPE is one of the following: http_cache_port_t, http_port_t, jboss_management_port_t, jboss_messaging_port_t, ntop_port_t, puppet_port_t.#012#012***** Plugin catchall_boolean (7.83 confidence) suggests ******************#012#012If you want to allow nis to enabled#012Then you must tell SELinux about this by enabling the 'nis_enabled' boolean.#012#012Do#012setsebool -P nis_enabled 1#012#012***** Plugin catchall (1.41 confidence) suggests **************************#012#012If you believe that httpd should be allowed name_bind access on the port 8909 tcp_socket by default.#012Then you should report this as a bug.#012You can generate a local policy module to allow this access.#012Do#012allow this access for now by executing:#012# grep httpd /var/log/audit/audit.log | audit2allow -M mypol#012# semodule -i mypol.pp#012
- .. ..
使用完毕记得删除测试配置文件:
1. [root@svr7 ~]# rm -rf /etc/httpd/conf.d/8909.conf
2. [root@svr7 ~]# systemctl restart httpd
2)查看启动时识别的鼠标设备信息
1. [root@svr7 ~]# dmesg | grep -i mouse
2. [ 1.020385] mousedev: PS/2 mouse device common for all mice
3. [ 1.249422] input: ImPS/2 Generic Wheel Mouse as /devices/platform/i8042/serio1/input/input2
4. [ 2.279665] usb 2-1: Product: VMware Virtual USB Mouse
5. [ 2.603999] input: VMware VMware Virtual USB Mouse as /devices/pci0000:00/0000:00:11.0/0000:02:00.0/usb2/2-1/2-1:1.0/input/input3
6. [ 2.604222] hid-generic 0003:0E0F:0003.0001: input,hidraw0: USB HID v1.10 Mouse [VMware VMware Virtual USB Mouse] on usb-0000:02:00.0-1/input0
3)列出最近2条成功/不成功的用户登录消息
查看成功登录的事件消息:
1. [root@svr7 ~]# last -2
2. zhsan pts/2 192.168.4.207 Fri Jan 6 18:00 - 18:00 (00:00)
3. root pts/2 192.168.4.110 Fri Jan 6 17:26 - 17:59 (00:33)
4.
5. wtmp begins Thu Aug 4 00:10:16 2016
查看失败登录的事件消息:
1. [root@svr7 ~]# lastb -2
2. anonymou ssh:notty 192.168.4.207 Fri Jan 6 18:00 - 18:00 (00:00)
3. anonymou ssh:notty 192.168.4.207 Fri Jan 6 18:00 - 18:00 (00:00)
4.
5. btmp begins Fri Jan 6 18:00:34 2017
步骤二:使用journalctl日志提取工具
1)列出最近10条重要程度在 ERR 及以上的日志消息
1. [root@svr7 ~]# journalctl -p err -n 10
2. -- Logs begin at Thu 2017-01-05 15:50:08 CST, end at Fri 2017-01-06 18:01:01 CST. --
3. Jan 06 14:56:57 svr7 setroubleshoot[23702]: SELinux is preventing /usr/sbin/vsftpd from getattr access on the file /rhel7/repodata/repomd.xml. For complete SELinux mes
4. Jan 06 14:56:57 svr7 setroubleshoot[23702]: SELinux is preventing /usr/sbin/vsftpd from read access on the file repomd.xml. For complete SELinux messages. run sealert
5. Jan 06 14:56:57 svr7 setroubleshoot[23702]: SELinux is preventing /usr/sbin/vsftpd from read access on the file repomd.xml. For complete SELinux messages. run sealert
6. Jan 06 14:56:57 svr7 setroubleshoot[23702]: SELinux is preventing /usr/sbin/vsftpd from lock access on the file /rhel7/repodata/repomd.xml. For complete SELinux messag
7. Jan 06 17:53:48 svr7 setroubleshoot[33743]: Plugin Exception restorecon_source
8. Jan 06 17:53:48 svr7 setroubleshoot[33743]: SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port 8909. For complete SELinux messages. run
9. Jan 06 17:53:53 svr7 setroubleshoot[33743]: SELinux is preventing /usr/sbin/httpd from name_connect access on the tcp_socket port 8909. For complete SELinux messages.
10. Jan 06 17:53:54 svr7 systemd[1]: Failed to start The Apache HTTP Server.
11. .. ..
12. lines 1-11/11 (END)
2)列出所有与服务httpd相关的消息
1. [root@svr7 ~]# journalctl -u httpd
2. -- Logs begin at Thu 2017-01-05 15:50:08 CST, end at Fri 2017-01-06 18:01:01 CST. --
3. Jan 06 14:57:16 svr7 systemd[1]: Starting The Apache HTTP Server...
4. Jan 06 14:57:16 svr7 httpd[23812]: AH00557: httpd: apr_sockaddr_info_get() failed for svr7
5. Jan 06 14:57:16 svr7 httpd[23812]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directi
6. Jan 06 14:57:16 svr7 systemd[1]: Started The Apache HTTP Server.
7. Jan 06 17:53:44 svr7 systemd[1]: Stopping The Apache HTTP Server...
8. Jan 06 17:53:46 svr7 systemd[1]: Starting The Apache HTTP Server...
9. Jan 06 17:53:46 svr7 httpd[33741]: AH00557: httpd: apr_sockaddr_info_get() failed for svr7
10. .. ..
3)列出前4个小时内新记录的日志
根据当前日期时间往前推4个小时,确定--since起始和--until结束时刻:
1. [root@svr7 ~]# journalctl --since "2017-01-06 14:11" --until "2017-01-06 18:11"
2. -- Logs begin at Thu 2017-01-05 15:50:08 CST, end at Fri 2017-01-06 18:10:01 CST. --
3. Jan 06 14:20:01 svr7 systemd[1]: Started Session 160 of user root.
4. Jan 06 14:20:01 svr7 CROND[22869]: (root) CMD (/usr/lib64/sa/sa1 1 1)
5. Jan 06 14:20:01 svr7 systemd[1]: Starting Session 160 of user root.
6. Jan 06 14:30:01 svr7 systemd[1]: Started Session 161 of user root.
7. Jan 06 14:30:01 svr7 CROND[23028]: (root) CMD (/usr/lib64/sa/sa1 1 1)
8. Jan 06 14:31:39 svr7 systemd[1]: Starting Session 162 of user root.
9. Jan 06 14:32:17 svr7 sshd[23046]: pam_unix(sshd:session): session closed for user root
10. Jan 06 14:31:39 svr7 systemd[1]: Started Session 162 of user root.
11. Jan 06 14:31:39 svr7 sshd[23046]: pam_unix(sshd:session): session opened for user root by (uid=0)
12. Jan 06 14:31:39 svr7 systemd-logind[985]: New session 162 of user root.
13. .. .