【Linux基础篇】
1.描述Linux运行级别0-6的各自含义
0 :关机模式1 :单用户模式 <== 破解 root 密码2 :无网络支持的多用户模式3 :有网络支持的多用户模式(文本模式,工作中最常用的模式)4 :保留,未使用5 :有网络支持的 X‐windows 支持多用户模式(桌面)6 : 重新引导系统,即重启
2.描述Linux系统从开机到登陆界面的启动过程
1. 开机 BIOS 自检,加载硬盘。2. 读取 MBR,MBR 引导。3. grub 引导菜单 (Boot Loader) 。4. 加载内核 kernel 。5. 启动 init 进程,依据 inittab 文件设定运行级别6. init 进程,执行 rc.sysinit 文件。7. 启动内核模块,执行不同级别的脚本程序。8. 执行 / etc / rc.d / rc.local9. 启动 mingetty ,进入系统登陆界面。
3.描述Linux下软链接和硬链接的区别
在 Linux 系统中,链接分为两种,一种是硬链接( Hard link ),另一种称为符号链接或软链接( Symbolic Link )。1. 默认不带参数的情况下, ln 创建的是硬链接,带 ‐ s 参数的 ln 命令创建的是软链接。2. 硬链接文件与源文件的 inode 节点号相同,而软链接文件的 inode 节点号,与源文件不同,3.l n 命令不能对目录创建硬链接,但可以创建软链接。对目录的软链接会经常使用到。4. 删除软链接文件,对源文件和硬链接文件无任何影响。5. 删除文件的硬链接文件,对源文件及软链接文件无任何影响。6. 删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状)。7. 同时删除源文件及其硬链接文件,整个文件才会被真正的删除。8. 很多硬件设备的快照功能,使用的就是类似硬链接的原理。9. 软链接可以跨文件系统,硬链接不可以跨文件系统。
4.如果一台办公室内主机无法上网(打不开网站),请给出你的排查步骤?
1. 首先确定物理链路是否联通正常。2. 查看本机 IP ,路由, DNS 的设置情况是否达标。3. telnet 检查服务器的 WEB 有没有开启以及防火墙是否阻拦。4. ping 一下网关,进行最基础的检查,通了,表示能够到达服务器。5. 测试到网关或路由器的通常情况,先测网关,然后再测路由器一级一级的测试。6. 测试 ping 公网 ip 的通常情况(记住几个外部 IP ),7. 测试 DNS 的通畅。 ping 出对应 IP 。8. 通过以上检查后,还在网管的路由器上进行检查。
5.网站打开慢,请给出排查方法,如是数据库慢导致,如何排查并解决,请分析并举例?
1 、可以使用 top free 等命令分析系统性能等方面的问题2 、如是因为数据库的原因造成的,就需要查看慢查询日志去查找并分析问题所在
6.如何选择Linux操作系统版本?
一般来讲,桌面用户首选 Ubuntu ;服务器首选 RHEL 或 CentOS ,两者中首选 CentOS 。根据具体要求:1. 安全性要求较高,则选择 Debian 或者 FreeBSD 。2. 需要使用数据库高级服务和电子邮件网络应用的用户可以选择 SUSE 。3. 想要新技术新功能功能可以选择 Feddora , Feddora 是 RHEL 和 CentOS 的一个测试版和预发布版本。4. 根据现有状况,绝大多数互联网公司选择 CentOS 。现在比较常用的是 6 系列,现在市场占有大概一半左右。另外的原因是 CentOS 更侧重服 务器领域,并且无版权约束。
7.生产场景如何对linux系统进行合理规划分区?
分区的根本原则是简单、易用、方便批量管理。根据服务器角色定位建议如下:1. 单机服务器:如 8 G 内存, 300 G 硬盘分区: / boot 100 ‐ 200 M , swap 16 G ,内存大小 8 G * 2 , / 80 G , / var 20 G (也可不分), / data 180 G (存放 web 及 db 数据)优点:数据盘和系统盘分开,有利于出问题时维护。RAID 方案:视数据及性能要求,一般可采用 raid5 折中。2. 负载均衡器(如 LVS 等)分区: / boot 100 ‐ 200 M , swap 内存的 1 ‐ 2 倍, / ,优点:简单方便,只做转发数据量很少。RAID 方案:数据量小,重要性高,可采用 RAID13. 负载均衡下的 RS server分区: / boot 100 ‐ 200 M , swap 内存的 1 ‐ 2 倍, /优点:简单方便,因为有多机,对数据要求低。RAID 方案:数据量大,重要性不高,有性能要求,数据要求低,可采用 RAID04. 数据库服务器 mysql 及 oracle 如 16 / 32 G 内存分区: / boot 100 ‐ 200 M , swap 16 G ,内存的 1 倍, / 100 G , / data 剩余(存放 db 数据)优点:数据盘和系统盘分开,有利于出问题时维护 , 及保持数据完整。RAID 方案:视数据及性能要求主库可采取 raid10 / raid5 ,从库可采用 raid0 提高性能(读写分离的情况下。)5. 存储服务器分区: / boot 100 ‐ 200 M , swap 内存的 1 ‐ 2 倍, / 100 G , / data ( 存放数据 )优点:此服务器不要分区太多。只做备份,性能要求低。容量要大。RAID 方案:可采取 sata 盘, raid56. 共享存储服务器(如 NFS )分区: / boot 100 ‐ 200 M , swap 内存的 1 ‐ 2 倍, / 100 G , / data ( 存放数据 )优点:此服务器不要分区太多。 NFS 共享比存储多的要求就是性能要求。RAID 方案:视性能及访问要求可以 raid5,raid10, 甚至 raid0 (要有高可用或双写方案)7. 监控服务器 cacti,nagios分区: / boot 100 ‐ 200 M , swap 内存的 1 ‐ 2 倍, /优点:重要性一般,数据要求也一般。RAID 方案:单盘或双盘 raid1 即可。三盘就 RAID5 ,看容量要求加盘即可。
8.如何查看当前的Linux服务器的运行级别?
‘ who ‐ r ’ 和 ‘ runlevel ’ 命令可以用来查看当前的 Linux 服务器的运行级别。
9.请简述如何查看Linux的系统版本
uname ‐ a
10.查看Linux运行多少时间
uptime
11.某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
( 1 )在下午 4 : 50 删除 / abc 目录下的全部子目录和全部文件;( 2 )从早 8 : 00 ~下午 6 : 00 每小时读取 / xyz 目录下 x1 文件中每行第一个域的全部数据加入到 / backup 目录下的 bak01.txt 文件内;( 3 )每逢星期一下午 5 : 50 将 / data 目录下的所有目录和文件归档并压缩为文件: backup.tar.gz ;( 1 ) crontab ‐ e 50 16 * * * rm ‐ rf / abc /( 2 ) * 8 ‐ 18 / 1 * * * awk '{print $1 > "/backup/bak01.txt"}' / xyz / x1( 3 ) 50 17 * * 1 tar ‐ czf backup.tar.gz / data
12.请在3月23号21点18分的时候,重启服务器
crontab ‐ e 18 21 23 3 * init 6
13.如何查看Linux的默认网关?
用 “ route ‐ n ” 和 “ netstat ‐ nr ” 命令,我们可以查看默认网关。除了默认的网关信息,这两个命令还可以显示当前的路由表。
14.如何查看一个文件夹inode节点数有多少?
find / ‐ xdev ‐ printf '%h\n' | sort | uniq ‐ c | sort ‐ k 1 ‐ n
15.写一个脚本查找最后创建时间是3天前,后缀是*.log的文件并删除
find / ‐ name “ * .log ” ‐ ctime + 3 ‐ exec rm ‐f {} \ ;
16.如果某文件夹下文件太多无法ls该如何解决?
ls ‐f
17.如何用tcpdump嗅探80端口的访问看看谁最高?
tcpdump ‐ i eth0 ‐ tnn dst port 80 ‐ c 1000 | awk ‐F ” . ” ‘ {print $1 ″ . ” $2 ″ . ” $3 ″ . ” $4 ″ . ” } ’ | sort | uniq‐ c | sort ‐ nr | head‐5
18.如何查看/var/log目录下的文件数?
ls / var / log / ‐ 1 R | grep “ ‐ ” | wc ‐ l
19.如何查看Linux系统每个ip的连接数?
netstat ‐ n | awk ‘ /^ tcp / {print $5 } ’ | awk ‐F: ‘ {print $1 } ’ | sort | uniq ‐ c | sort ‐ rn
20.shell下生成32位随机密码
cat / dev / urandom | head ‐ 1 | md5sum | head ‐ c 32 >> / pass
21.统计出apache的access.log中访问量最多的5个ip
cat access.log | awk ‘ {print $1 } ’ | sort | uniq ‐ c | sort ‐ n ‐ r | head ‐ 5
22.请用多种方式在linux系统中设置环境变量,并指出各种方式的区别。
1 、控制台中设置,不赞成这种方式,因为他只对当前的 shell 起作用,换一个 shell 设置就无效了: PATH = "PATH" :/ NEW_PATH ( 关闭 shell Path 会还原为原来的 path)2 、修改 / etc / profile 文件,如果你的计算机仅仅作为开发使用时推存使用这种方法,因为所有用户的 shell 都有权使用这个环境变量,可能会给系统带来安全性问题。这里是针对所有的用户的,所有的 shell 在 / etc / profile 的最下面添 加: export PATH = " $PATH: /NEW_PATH"3 、修改 bashrc 文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的 .bashrc 文件就可以了。 在下 面添加: Export PATH = " $PATH: /NEW_PATH"
【基础服务篇】
23.写一个防火墙配置脚本,只允许远程主机访问本机的80端口。
iptables ‐ P INPUT ACCEPTiptables ‐ P OUTPUT ACCEPTiptables ‐ P FORWARD ACCEPTiptables ‐Fiptables ‐ Xiptables ‐ A INPUT ‐ i eth0 ‐ p tcp – dport 80 ‐ j ACCEPTiptables ‐ P INPUT DROP
24.如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.2.1
/ sbin / iptables ‐ t nat ‐ A PREROUTING ‐ p tcp ‐‐ dport 80 ‐ j DNAT‐‐to 192.168.2.1 : 8080/ sbin / iptables ‐ t nat ‐ A PREROUTING ‐ p tcp‐‐dport 80 ‐ j REDIRECT ‐‐ to 8080
25.说出5个以上常用的服务端口
21 ‐‐‐‐‐‐ ftp 22 ‐‐‐‐‐‐ ssh 23 ‐‐‐‐‐‐ telnet25 ‐‐‐‐‐‐ snmp 110 ‐‐‐‐‐ ppop3 143 ‐‐‐‐‐ IMAP873 ‐‐‐‐‐ rsync 80 ‐‐‐‐‐‐ http 3306 ‐‐‐‐‐‐ mysql
26.FTP的主动模式和被动模式
FTP 协议有两种工作方式: PORT 方式和 PASV 方式,中文意思为主动式和被动式。‐ 主动模式1. 客户端打开大于 1023 的随机命令端口和大于 1023 的随机数据端口向服务的的 21 号端口发起请求2. == 服务端 == 的 21 号命令端口响应客户端的随机命令端口3. == 服务端 == 的 20 号端口 == 主动 == 请求连接客户端的随机数据端口4. 客户端的随机数据端口进行确认‐ 被动模式1. 客户端打开大于 1023 的随机命令端口和大于 1023 的随机数据端口向服务的的 21 号端口发起请求2. 服务端的 21 号命令端口响应客户端的随机命令端口3. == 客户端主动 == 连接服务端打开的大于 1023 的随机端口4. 服务端进行确认
27.请简要说明ssh免密登陆过程
1. 在 server A 上生成公钥私钥。2. 将公钥拷贝给 server B ,要重命名成 authorized_keys3. Server A 向 Server B 发送一个连接请求。4. Server B 得到 Server A 的信息后,在 authorized_key 中进行比对,如果有相应的用户名和 IP ,则随机生成一个字符串,并用 Server A 的公钥加密,发送给 Server A 。5. Server A 得到 Server B 发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给 Server B 。 Server B 进行和生成的对比,如果一致,则允许免登录。
28.tcp的3次握手和4次挥手的全进程
( 1 )第一次握手: Client 将标志位 SYN 置为 1 ,随机产生一个值 seq = J ,并将该数据包发送给 Server , Client 进 入 SYN_SENT 状态,等待 Server 确认。( 2 )第二次握手: Server 收到数据包后由标志位 SYN = 1 知道 Client 请求建立连接, Server 将标志位 SYN 和 ACK 都置为 1 , ack = J + 1 ,随机产生一个值 seq = K ,并将该数据包发送给 Client 以确认连接请求, Server 进入 SYN_RCVD 状态。( 3 )第三次握手: Client 收到确认后,检查 ack 是否为 J + 1 , ACK 是否为 1 ,如果正确则将标志位 ACK 置为 1 , ack = K + 1 ,并将该数据包发送给 Server , Server 检查 ack 是否为 K + 1 , ACK 是否为 1 ,如果正确则连接建立成功, Client 和 Server 进 入 ESTABLISHED 状态,完成三次握手,随后 Client 与 Server 之间可以开始传输数据了。
( 1 )第一次挥手: Client 发送一个 FIN ,用来关闭 Client 到 Server 的数据传送, Client 进入 FIN_WAIT_1 状态。( 2 )第二次挥手: Server 收到 FIN 后,发送一个 ACK 给 Client ,确认序号为收到序号 + 1 (与 SYN 相同,一个 FIN 占用一个序号), Server 进入 CLOSE_WAIT 状态。( 3 )第三次挥手: Server 发送一个 FIN ,用来关闭 Server 到 Client 的数据传送, Server 进入 LAST_ACK 状态。( 4 )第四次挥手: Client 收到 FIN 后, Client 进入 TIME_WAIT 状态,接着发送一个 ACK 给 Server ,确认序号为收到序号 + 1 , Server 进入 CLOSED 状态,完成四次挥手。
29.请写出http和https请求的区别,并写出遇到过的响应状态码
1. https 协议需要到 ca 申请证书,一般免费证书很少,需要交费。2. http 是超文本传输协议,信息是明文传输, https 则是具有安全性的 ssl 加密传输协议。3. http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80 ,后者是 443 。4. http 的连接很简单,是无状态的; HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。状态码常用:301 永久重定向403 服务器已经理解请求,但是拒绝执行404 页面丢失500 服务器错误
30.操作系统内存调度方式有哪几种并简单说明
OPT :最佳替换算法( optional replacement )。替换下次访问距当前时间最长的页。 opt 算法需要知道操作系统将来的 事件,显然不可能实现,只作为一种衡量其他算法的标准。LRU : 最近最少使用 (Least Recently Used). 替换上次使用距离当前最远的页。根据局部性原理:替换最近最不可能访 问到的页。性能最接近 OPT ,但难以实现。可以维护一个关于访问页的栈或者给每个页添加最后访问的时间标签,但开销 都很大。FIFO : 先进先出 (First In First Out), 将页面看做一个循环缓冲区,按循环方式替换。Clock :时钟替换算法( Clock ) , 给每个页帧关联一个使用位。当该页第一次装入内存或者被重新访问到时,将使用位置为 1 。每次需要替换时,查找使用位被置为 0 的第一个帧进行替换。
31.简述DNS进行域名解析的过程?
用户要访问 www.baidu.com ,会先找本机的 host 文件,再找本地设置的 DNS 服务器,如果也没有的话,就去网络中找根服 务器,根服务器反馈结果,说只能提供一级域名服务器 .cn ,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器 .com.cn, 就去找二级域名服务器,二级域服务器只能提供三级域名服务器 .baidu.com.cn ,就去找三级域名服务器,三级域名服务器正好有这个网 www.baidu.com ,然后发给请求的服务器,保存一份之后,再发给客户端
【shell编程篇】
32.描述Linux shell中单引号、双引号及不加引号的简单区别
单引号:所见即所得,即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就输出什么。双引号:把双引号里面的内容给输出出来,如果内容中有命令、变量等,会先把,变来那个、命令解析出结果,然后输出最终内容。无引号:把内容输出出来,可能不会键含有空格的字符串,视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出来,然后输出最终内容,如果字符串中带有空格等特殊字符,则不能完整输出,需要改加双引号。一般连续的字符串,数字,路径等可以用,不过最好用双引号,替代之。
33.写一个脚本将某目录下大于100k的文件移动至/tmp下
for i in `find / test ‐ type f ‐ size + 100 k`; do cd / test && mv $i / tmp;done
34.写一个脚本进行nginx日志统计,得到访问ip最多的前10个(nginx日志路径:/home/logs/nginx/default/access.log
awk ‘ {a[ $1 ] ++ } END { for (j in a) print a[j],j} ’ / home / logs / nginx / default / access.log | sort ‐ nr | head‐ 10
35.写一个脚本把指定文件里的/usr/local替换为别的目录
sed ‘ s: / user / local :/ tmp : g ’ filename
36.写一个脚本,实现批量添加20个用户,用户名为user01-20,密码为user后面跟5个随机字符
#!/bin/bash#description: useraddfor i in `seq ‐f ” % 02 g ” 1 20 `; douseradd user $iecho “ user $i‐ ` echo $RANDOM | md5sum | cut ‐ c 1 ‐ 5 ` ” | passwd – stdinuser $i >/ dev / null 2 >& 1done
37.写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线
#!/bin/bashfor ip in `seq 1 255 `doping ‐ c 1 192.168.1 . $ip > / dev / null 2 >& 1if [ $? ‐eq 0 ]; thenecho 192.168.1 . $ip UPelseecho 192.168.1 . $ip DOWNfi} &donewait
38.写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出其它任何键可以通过vim打开这个指定的脚本
#!/bin/bashread ‐ p “ please input check script ‐> ” fileif [ ‐f $file ]; thensh ‐ n $file > / dev / null 2 >& 1if [ $? ‐ne 0 ]; thenread ‐ p “ You input $file syntax error,[ Type q to exit or Type vim to edit] ” answercase $answer inq | Q)exit 0;;vim )vim $file;;* )exit 0;;esacfielseecho “ $file not exist ”exit 1fi
39.写脚本将当前目录所有文件扩展名改为log
for file in ` ls . / | grep ‐ P "(.*)(\..*)" `;doecho $file | mv $file ` echo ${file%.**} `.log;done
【数据库服务篇】
40.写一个脚本将数据库备份并打包至远程服务器192.168.1.1/backup目录下
mount 192.168.1.1 :/ backup / mntcd / mnt/ usr / local / mysql / bin / mysqldump ‐ hlocalhost ‐ uroot test > test.sqltar czf test.sql.tar.gz test.sqlrm ‐f test.sql
41.请写mysql数据库中的SQL查询,查找customer表中uid列内大于100的记录并以uid排序,正序输出前10条记录
select * from customer where uid > 100 order by uid asc limit 10
42.数据库读写分离有什么好处
1. 将读操作和写操作分离到不同的数据库上,减轻了数据访问的压力,避免出现性能瓶颈;2. 主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发;3. 数据拥有多个容灾副本,提高数据安全性,同时当主服务器故障时,可立即切换到其他服务器,提高系统可用性;
43.MongoDB与mysql有什么区别
① MongoDB 在不指定 _id 的情况下插入速度很快,对系统内存利用率很高,适合那些读作业任务很重的任务模型,但是稳定 性不如 mysql 。② 适合数据具体格式不明确的(弱数据结构)的情况下,对开发者友好。但是事务关系支持薄弱( nosql 通病)③ 自带分布式文件系统,可以很方便的部署到集群上。④ shard (数据实际存储)概念,每增加一个 shard ,插入性能会以接近倍数的方式增长,磁盘容量也可以方便的扩充。⑤ shard 划分 包括: mongos (接收 client 需求, shard 集群接口) config (元数据或者配置信息,如每一个切片的片键范围, mongos 会根据 config 信息去取数据)
44.redis与memcache区别以及应用场景
① redis 支持更丰富的数据类型,共有 5 种(字符串,列表, hash ,集合,有序集合), memcache 只支持简单的字符串② redis 可以数据持久化,它不仅会将数据放在内存中,还可以存到磁盘里部分, memcache 会将数据存在内存中,最大存储量即内存大小③ redis 可以做主从④ redis 最大可以存 1 G , memcache 最大 1 Mredis 应用场景① session :可以做持久化② 全页缓存( FPC ):持久化,重启后,用户看到的网页速度依然不会变慢③ list 和 set 可以让 redis 用来做消息队列⑤ 排行榜, set 和 zset 可以很好地进行数字排序⑥ 发布 / 订阅功能redis 注意事项:① redis 的主最好不要做持久化,可以对从机做( AOF )持久化,策略为每秒一次② 为了主从稳定,最好主从在同一个网段内③ 尽量避免在压力过大的 redis 主上添加从机④ 主从复制,不要用图形结构,用单链表更加稳定,这样方便解决单点故障问题,如果主挂了,直接将 slave1 提升为主
45.redis的数据结构
string ‐‐‐‐ 字符串类型,使用场景:做缓存,计数器,共享 sessionhash ‐‐‐‐ 哈希类型,使用场景:用户信息存储list ‐‐‐‐ 列表类型,使用场景:消息队列,微博 TimeLineset ‐‐‐‐ 集合类型,使用场景:好友推荐Sorted Set ‐‐‐‐ 有序集合类型,使用场景:排行榜
46.生产环境redis的开源高可用方案有哪些?
1. Twemproxy ,大概概念是,它类似于一个代理方式,使用方法和普通 redis 无任何区别,设置好它下属的多个 redis 实 例后,使用时在本需要连接 redis 的地方改为连接 twemproxy ,它会以一个代理的身份接收请求并使用一致性 hash 算法, 将请求转接到具体 redis ,将结果再返回 twemproxy 。使用方式简便 ( 相对 redis 只需修改连接端口 ) ,对旧项目扩展的首选。 问题: twemproxy 自身单端口实例的压力,使用一致性 hash 后,对 redis 节点数量改变时候的计算值的改变,数据 无法自动移动到新的节点。2. Codis ,目前用的最多的集群方案,基本和 twemproxy 一致的效果,但它支持在 节点数量改变情况下,旧节点数据可恢复到新 hash 节点。3. Redis cluster3 .0 自带的集群,特点在于他的分布式算法不是一致性 hash ,而是 hash 槽的概念,以及自身支持节点设置从节点。具体看官方文档介绍。4. 在业务代码层实现,起几个毫无关联的 redis 实例,在代码层,对 key 进行 hash 计算,然后去对应的 redis 实例操作数据。 这种方式对 hash 层代码要求比较高,考虑部分包括,节点失效后的替代算法方案,数据震荡后的自动脚本恢复,实 例的监控,等等。5. Redis 哨兵, Redis Sentinal 着眼于高可用,在 master 宕机时会自动将 slave 提升为 master ,继续提供服务。
47.Redis是单线程的,如何提高多核CPU的利用率?
可以在同一个服务器部署多个 Redis 的实例,并把他们当作不同的服务器来使用,在某些时候,无论如何一个服务器是不够的, 所以,如果你想使用多个 CPU ,你可以考虑一下分片( shard )。
48.Redis常见性能问题和解决方案?
1. Master 最好不要做任何持久化工作,如 RDB 内存快照和 AOF 日志文件2. 如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步一次3. 为了主从复制的速度和连接的稳定性, Master 和 Slave 最好在同一个局域网内4. 尽量避免在压力很大的主库上增加从库5. 主从复制不要用图状结构,用单向链表结构更为稳定,即: Master <‐ Slave1 <‐ Slave2 <‐ Slave3 .. .这样的结构方便解决单点故障问题,实现 Slave 对 Master 的替换。如果 Master 挂了,可以立刻启用 Slave1 做 Master ,其他不变
49.Redis提供了哪几种持久化方式?
RDB 持久化方式能够在指定的时间间隔能对你的数据进行快照存储 .AOF 持久化方式记录每次对服务器写的操作 , 当服务器重启的时候会重新执行这些命令来恢复原始的数据 ,AOF 命令以 redis 协议追加保存每次写的操作到文件末尾 .Redis 还能对 AOF 文件进行后台重写 , 使得 AOF 文件的体积不至于过大 .如果你只希望你的数据在服务器运行的时候存在 , 你也可以不使用任何持久化方式 .你也可以同时开启两种持久化方式 , 在这种情况下 , 当 redis 重启的时候会优先载入 AOF 文件来恢复原始的数据 , 因为在通常情况下 AOF 文件保存的数据集要比 RDB 文件保存的数据集要完整 .最重要的事情是了解 RDB 和 AOF 持久化方式的不同 , 让我们以 RDB 持久化方式开始。
50.修改配置不重启Redis会实时生效吗?
针对运行实例,有许多配置选项可以通过 CONFIG SET 命令进行修改,而无需执行任何形式的重启。 从 Redis 2.2 开 始,可以从 AOF 切换到 RDB 的快照持久性或其他方式而不需要重启 Redis 。检索 ‘ CONFIG GET * ’ 命令获取更多信 息。但偶尔重新启动是必须的,如为升级 Redis 程序到新的版本,或者当你需要修改某些目前 CONFIG 命令还不支持的配置参数的时候。
51.Redis集群会有写操作丢失吗?为什么?
Redis 并不能保证数据的强一致性,这意味这在实际中集群在特定的条件下可能会丢失写操作。
52.查看Redis使用情况及状态信息用什么命令?
info
53.Mongodb熟悉吗,一般部署几台?
一般 mongodb 部署主从、或者 mongodb 分片集群;建议 3 台或 5 台服务器来部署。 MongoDB 分片的基本思想就是将集合切分 成小块。这些块分散到若干片里面,每个片只负责总数据的一部分。 对于客户端来说,无需知道数据被拆分了,也无需 知道服务端哪个分片对应哪些数据。数据在分片之前需要运行一个路由进程,进程名为 mongos 。这个路由器知道所有数据的存放位置,知道数据和片的对应关系。对客户端来说,它仅知道连接了一个普通的 mongod ,在请求数据的过程中,通过 路由器上的数据和片的对应关系,路由到目标数据所在的片上,如果请求有了回应,路由器将其收集起来回送给客户端。
54.Rabbitmq和kafka有什么区别?
1 ) 在架构模型方面,RabbitMQ 遵循 AMQP 协议, RabbitMQ 的 broker 由 Exchange,Binding,queue 组成,其中 exchange 和 binding 组成了消息的路由键;客户端 Producer 通过连接 channel 和 server 进行通信, Consumer 从 queue 获取消息进行消费(长连 接, queue 有消息会推送到 consumer 端, consumer 循环从输入流读取数据)。 rabbitMQ 以 broker 为中心;有消息的确认机制。kafka 遵从一般的 MQ 结构, producer , broker , consumer ,以 consumer 为中心,消息的消费信息保存的客户端 consumer 上, consumer 根据消费的点,从 broker 上批量 pull 数据;无消息确认机制。2 ) 在吞吐量,kafka 具有高的吞吐量,内部采用消息的批量处理, zero‐copy 机制,数据的存储和获取是本地磁盘顺序批量操作,具有 O( 1 ) 的复杂度,消息处理的效率很高。rabbitMQ 在吞吐量方面稍逊于 kafka ,他们的出发点不一样, rabbitMQ 支持对消息的可靠的传递,支持事务,不支持批量的操作;基于存储的可靠性的要求存储可以采用内存或者硬盘。3 ) 在可用性方面,rabbitMQ 支持 miror 的 queue ,主 queue 失效, miror queue 接管。kafka 的 broker 支持主备模式。4 ) 在集群负载均衡方面,kafka 采用 zookeeper 对集群中的 broker 、 consumer 进行管理,可以注册 topic 到 zookeeper 上;通过 zookeeper 的协调机制, producer 保存对应 topic 的 broker 信息,可以随机或者轮询发送到 broker 上;并且 producer 可以基于语义指定分 片,消息发送到 broker 的某分片上。rabbitMQ 的负载均衡需要单独的 loadbalancer 进行支持。
55.备份的分类有哪些?
系统备份:针对整个操作系统进行备份;当操作系统损坏或者无法启动时,能通过备份快速恢复。数据备份:针对用户的数据文件、应用软件、数据库进行备份;当这些数据丢失或损坏时,也能通过备份恢复。
56.什么是冷/热备份?他们各自有什么优点和缺点?
冷备份:需要备份的文档先关闭停止使用,再执行备份的方式;优点是简单快速、容易恢复到某个时间点、方便维护;缺点是只能恢复到某个时间点、备份期间数据不便正常使用。热备份:指执行备份时不影响备份文档正常使用的方式;优点是备份速度快、不影响数据使用;缺点是所有操作都会同步,包括删除。
57.如果有一个100G大小的数据库该如何做备份?
100 G 以上的库,可以考虑用 xtranbackup 来做,备份速度明显要比 mysqldump 要快。一般是选择一周一个全备,其余每天进行增量备份,备份时间为业务低峰期。
58.备份恢复失败如何处理?
首先在恢复之前就应该做足准备工作,避免恢复的时候出错。比如说备份之后的有效性检查、权限检查、空间检查等。如 果万一报错,再根据报错的提示来进行相应的调整。
59.mysqldump备份的本质、优点和缺点?
本质:导出的是 sql 语句文件优点:无论是什么存储引擎,都可以用 mysqldump 备成 sql 语句缺点:速度较慢 , 导入时可能会出现格式不兼容的突发状况 . 无法直接做增量备份 .
60.逻辑备份是什么?
备份的是建表、建库、插入等操作所执行 SQL 语句( DDL DML DCL )。适用于中小型数据库,效率相对较低。 一般在数据库正常提供服务的前提下进行,如: mysqldump 、 mydumper 、 into、outfile (表的导出导入)等。
61.物理备份是什么?
直接复制数据库文件 dbfile binary log my.cnf适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的 MySQL 版本。
62.什么是存储引擎?最常用的存储引擎有哪些?
1. 存储引擎说白了就是如何管理操作数据(存储数据、如何更新、查询数据等)的 == 一种方法和机制 == 。2. 在 MySql 数据库中提供了多种存储引擎,各个存储引擎的优势各不一样。3. 用户可以根据不同的需求为数据表选择不同的存储引擎,也可以根据自己的需要编写自己的存储引擎。4. 甚至一个库中不同的表使用不同的存储引擎,这些都是允许的。最常用的存储引擎是 MyISAM 和 InnoDB 。
63.什么是mysql的二进制日志(binary log)?
二进制日志记录数据库的所有更改操作( DDL / DML / DCL ),不包含 select 或者 show 这类语句。用于主从复制中, master 主服务器将二进制日志中的更改操作发送给 slave 从服务器,从服务器执行这些更改操作是的和主服务器的更改相同。用于数据的恢复操作。默认二进制日志是关闭的,可以使用 log‐bin = xxx 参数开启
64.Binlog工作模式有哪些?各什么特点,企业如何选择?
1. Row( 行模式 ) ;日志中会记录成每一行数据被修改的形式,然后在 slave 端再对相同的数据进行修改2. Statement( 语句模式 )每一条修改的数据都会完整的记录到主库 master 的 binlog 里面,在 slave 上完整执行在 master 执行的 sql 语句3. mixed( 混合模式 )结合前面的两种模式,如果在工作中有使用函数 或者触发器等特殊功能需求的时候,使用混合模式数据量达到比较高时候,它就会选择 statement 模式,而不会选择 Row Level 行模式
65.如何在线正确清理MySQL binlog?
MySQL 中的 binlog 日志记录了数据中的数据变动,便于对数据的基于时间点和基于位置的恢复 但日志文件的大小会越来越大,点用大量的磁盘空间,因此需要定时清理一部分日志信息手工删除:首先查看主从库正在使用的 binlog 文件名称show master(slave) status \ G删除之前一定要备份,删除指定时间前的日志:purge master logs before ’ 2017 ‐ 09 ‐ 01 00 : 00 : 00 ’ ;删除指定的日志文件:purge master logs to ’ mysql‐bin .000001 ’ ;自动删除:通过设置 binlog 的过期时间让系统自动删除日志,查看过期时间与设置过期时间show variables like ‘ expire_logs_days ’ ;set global expire_logs_days = 30 ;
66.什么是mysql的中继日志?
用于主从复制, master 主服务器将自己的二进制日志发送给 slave 从服务器, slave 先保存在自己的中继日志中,然后再 执行自己本地的 relay log 里的 sql 达到数据库更改和 master 保持一致。默认中继日志没有开启,可以使用 `relay‐log` 参数开启
67.数据库和数据库实例之间的关系是什么?
通常情况下,数据库实例和数据库是一一对应的关系,也就是一个数据库实例对应一个数据库; 但是,在集群环境中存在多个数据库实例共同使用一个数据库。比如: oracle RAC
68.什么叫mysql事务?
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员 的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!一般来 说,事务是必须满足 4 个条( ACID ):原子性( Atomicity ,或称不可分割性)、一致性( Consistency )、隔离性( Isolation ,又称独立性)、持久性( Durability )。
69.MySQL密码丢了,请找回?
mysqld_safe ‐‐ skip‐grant‐tables & # 启动数据库服务mysql ‐ uroot ‐ ppassowrd ‐ e "use mysql;update user set passowrd = PASSWORD('newpassword') whereuser = 'root';flush privileges;"
70.请说出非关系型数据库的典型产品、特点及应用场景?
1. memecached 纯内存2. redis 持久化缓存3. mongodb 面向文档如果需要短时间相应的查询操作,没有良好模式定义的数据存储,或者模式更改频繁的数据存储还是用 NoSQL
71.什么是MySQL多实例,如何配置MySQL多实例?
mysql 多实例就是在同一台服务器上启用多个 mysql 服务,它们监听不同的端口,运行多个服务进程,它们相互独立,互 不影响的对外提供服务,便于节约服务器资源与后期架构扩展多实例的配置方法有两种:1 、一个实例一个配置文件,不同端口2 、同一配置文件 (my.cnf) 下配置不同实例,基于 mysqld_multi 工具
72.如何加强MySQL安全,请给出可行的具体措施?
1 、删除数据库不使用的默认用户2 、配置相应的权限(包括远程连接)3 、不可在命令行界面下输入数据库的密码4 、定期修改密码与加强密码的复杂度
73.MySQL Sleep线程过多如何解决?
1 、可以杀掉 sleep 进程, kill PID2 、修改配置,重启服务[mysqld]wait_timeout = 600interactive_timeout = 30注意:如果生产服务器不可随便重启也可以使用下面的方法解决set global wait_timeout = 600set global interactive_timeout = 30 ;
74.sort_buffer_size参数作用?如何在线修改生效?
在每个 connection(session) 第一次连接时需要使用到,来提访问性能set global sort_buffer_size = 2 M
75.MySQL中myisam与innodb的区别?
1. InnoDB 支持事物,而 MyISAM 不支持事物2. InnoDB 支持行级锁,而 MyISAM 支持表级锁3. InnoDB 支持 MVCC, 而 MyISAM 不支持4. InnoDB 支持外键,而 MyISAM 不支持5. InnoDB 不支持全文索引,而 MyISAM 支持。
76.如何调整生产线中MySQL数据库的字符集?
1 、首先导出库的表结构 ‐ d 只导出表结构,然后批量替换2 、导出库中的所有数据(在不产生新数据的前提下)3 、然后全局替换 set names = xxxxx4 、删除原有库与表,并新创建出来,再导入建库与建表语句与所有数据
77.请描述MySQL里中文数据乱码原理,如何防止乱码?
服务器系统、数据库、客户端三方字符集不一致导致,需要统一字符
78.企业生产MySQL如何优化(请多角度描述)?
1 、提升服务器硬件资源与网络带宽2 、优化 mysql 服务配置文件3 、开启慢查询日志然后分析问题所在
79.生产中误操作执行了一个drop库SQL语句,如何完整恢复?
1 、停止主从复制,在主库上执行锁表并刷新 binlog 操作,接着恢复之前的全备文件(比如 0 点的全备)2 、将 0 点时的 binlog 文件与全备到故障期间的 binlog 文件合并导出成 sql 语句mysqlbinlog – no‐defaults mysql‐bin .000011 mysql‐bin .000012 > bin.sql3 、将导出的 sql 语句中 drop 语句删除,恢复到数据库中mysql ‐ uroot ‐ pmysql123 < bin.sql
80.工作中遇到过哪些数据库故障,请描述2个例子?
1 、开发使用 root 用户在从库上写入数据造成主从数据不一致,并且前端没有展示需要修改的内容(仍旧是老数据)2 、内网测试环境服务器突然断电造成主从同步故障
【服务器架构篇】
81.常见的MySQL架构?
主从机构 主主架构 主主主架构
82.mysql复制基本原理流程
1. 主: binlog 线程 —— 记录下所有改变了数据库数据的语句,放进 master 上的 binlog 中;2. 从: io 线程 —— 在使用 start slave 之后,负责从 master 上拉取 binlog 内容,放进自己的 relay log 中;3. 从: sql 执行线程 —— 执行 relay log 中的语句;
83.MySQL复制的线程有几个及之间的关联
MySQL 的复制是基于如下 3 个线程的交互:1. Master 上面的 binlog dump 线程,该线程负责将 master 的 binlog event 传到 slave ;2. Slave 上面的 IO 线程,该线程负责接收 Master 传过来的 binlog ,并写入 relay log ;3. Slave 上面的 SQL 线程,该线程负责读取 relay log 并执行;
84.如何检测出mysql主从有哪些数据不一致?如何修复?
1 、可以使用 Percana‐Toolkit 工具组件的 pt‐table‐checksum 校验出来2 、然后在用 pt‐check‐sync 进行同步更新(根据实际情况使用)
85.线上MySQL主从复制故障如何解决?
登陆从库1 、执行 stop slave; 停止主从同步2 、然后 set global sql_slave_skip_counter = 1 ; 跳过一步错误3 、最后执行 start slave; 并查看主从同步状态需要重新进行主从同步操作步骤如下进入主库1 、进行全备数据库并刷新 binlog, 查看主库此的状态2 、恢复全备文件到从库,然后执行 change master3 、开启主从同步 start slave; 并查看主从同步状态
86.如何监控主从复制是否故障?(或者zabbix监控mysql主从复制状态是否正常的脚本思路是?)
mysql ‐ uroot ‐ ppassowrd ‐ e "show slave status\G" | grep ‐ E"Slave_IO_Running|Slave_SQL_Running" | awk '{print $2}' | grep ‐ c Yes通过判断 Yes 的个数来监控主从复制状态,正常情况等于 2
87.生产一主多从从库宕机,如何手工恢复?
1 、执行 stop slave 或者停止服务2 、修复好从库数据库3 、然后重新操作主库同步
88.生产一主多从主库宕机,如何手工恢复?
1 、登陆各个从库停止同步,并查看谁的数据最新,将它设置为新主库让其它从库同步其数据2 、修复好主库之后,生新操作主从同步的步骤就可以了# 需要注意的新的主库如果之前是只读,需要关闭此功能让其可写# 需要在新从库创建与之前主库相同的同步的用户与权限# 其它从库执行 change master to master_port= 新主库的端口, start slave
89.MySQL出现复制延迟有哪些原因?如何解决?
1 、需要同步的从库数据太多2 、从库的硬件资源较差,需要提升3 、网络问题,需要提升网络带宽4 、主库的数据写入量较大,需要优配置和硬件资源5 、 sql 语句执行过长导致,需要优化6.5.6 之前是单线程复制,之后是多线程,也可采用 5.7 以上版本
90.给出企业生产大型MySQL集群架构可行备份方案?
1 、双主多从,主从同步的架构,然后实行某个从库专业做为备份服务器2 、编写脚本实行分库分表进行备份,并加入定时任务3 、最终将备份服务推送至内网专业服务器,数据库服务器本地保留一周4 、备份服务器根据实际情况来保留备份数据(一般 30 天)
91.讲述一下Tomcat8005、8009、8080三个端口的含义?
8005 ‐‐‐‐‐‐‐ 关闭时使用8009 ‐‐‐‐‐‐‐ 为 AJP 端口,即容器使用,如 Apache 能通过 AJP 协议访问 Tomcat 的 8009 端口8080 ‐‐‐‐‐‐‐ 一般应用使用
92.Tomcat有三种工作模式:Bio、Nio和Apr,他们工作原理是?
Bio(Blocking I / O) :默认工作模式,阻塞式 I / O 操作,没有任何优化技术处理,性能比较低。Nio(New I / O or Non‐Blocking) :非阻塞式 I / O 操作,有 Bio 有更好的并发处理性能。Apr(Apache Portable Runtime , Apache 可移植运行库 ) :首选工作模式,主要为上层的应用程序提供一个可以跨越多操作系统平台使用的底层支持接口库。tomcat 利用基于 Apr 库 tomcat‐native 来实现操作系统级别控制,提供一种优化技术和非阻塞式 I / O 操作,大大提高并发处理能力。但是需要安装 apr 和 tomcat‐native 库。
93.请解释 Tomcat 中使用的连接器是什么 ?
在 Tomcat 中,使用了两种类型的连接器:HTTP 连接器 : 它有许多可以更改的属性,以确定它的工作方式和访问功能,如重定向和代理转发AJP 连接器 : 它以与 HTTP 连接器相同的方式工作,但是他们使用的是 HTTP 的 AJP 协议。 AJP 连接器通常通过插件技术 mod_jk 在 Tomcat 中实现
94.Tomcat调优大概有哪些思路?
1 、增加最大连接数2 、调整工作模式3 、启用 gzip 压缩4 、调整 JVM 内存大小5 、与 Apache 或 Nginx 整合,实现动静分离6 、合理选择垃圾回收算法7 、尽量使用较新 JDK 版本
95.请写下命令检查nginx的当前配置文件,然后平滑重启
1. 确认 nginx 配置文件的语法是否正确nginx ‐ t2. 平滑重启kill ‐ HUP nginx 进程号kill ‐ HUP / 路径 / nginx.pid
96.请简单描述nginx与php-fpm的两种连接方式及其优缺点
在 linux 中, nginx 服务器和 php‐fpm 可以通过 tcp socket 和 unix socket 两种方式实现。unix socket 是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要再 nginx 配置文件中填写 php‐fpm 的 pid 文件位置,效率要比 tcp socket 高。tcp socket 这种通信方式,需要在 nginx 配置文件中填写 php‐fpm 运行的 ip 地址和端口号。这种方式的优点是可以跨服务器,当 nginx 和 php‐fpm 不在同一台机器上时,只能使用这种方式。
97.你常用的Nginx模块,用来做什么
rewrite 模块,实现重写功能access 模块:来源控制ssl 模块:安全加密ngx_http_gzip_module :网络传输压缩模块ngx_http_proxy_module 模块实现代理ngx_http_upstream_module 模块实现定义后端服务器列表ngx_cache_purge 实现缓存清除功能
98.指出Nginx支持哪几种负载均衡模式,并指出各模式的应用场景
1. roundrobin 轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式。 适用于后台机器性能一致的情 况。 挂掉的机器可以自动从服务列表中剔除。2. weight 根据权重来分发请求到不同的机器中,适用于后台机器性能不一样的情况。3. ip_hash 根据请求者 ip 的 hash 值将请求发送到后台服务器中,可以保证来自同一 ip 的请求被打到固定的机器上,可以解决 session 问题。4. url_hash 根据请求的 url 的 hash 值将请求分到不同的机器中,当后台服务器为缓存的时候效率高。5. fair 根据后台响应时间来分发请求,响应时间短的分发的请求多。
99.讲一下Keepalived的工作原理?
在一个虚拟路由器中,只有作为 MASTER 的 VRRP 路由器会一直发送 VRRP 通告信息 ,BACKUP 不会抢占 MASTER ,除非它的优先 级更高。当 MASTER 不可用时 (BACKUP 收不到通告信息 ), 多台 BACKUP 中优先级最高的这台会被抢占为 MASTER 。这种抢占是 非常快速的 ( < 1 s) ,以保证服务的连续性 , 由于安全性考虑, VRRP 包使用了加密协议进行加密。 BACKUP 不会发送通告信 息,只会接收通告信息
100.keepalived的主要模块有哪些?
keepalived 主要有三个模块,分别是 core 、 check 和 vrrp 。core 模块为 keepalived 的核心,负责主进程的启动、维护及全局配置文件的加载和解析。check 负责健康检查,包括常见的各种检查方式vrrp 模块是来实现 VRRP 协议的
101.keepalived如何做到健康检查?
Keepalived 健康检查方式配置HTTP_GET | SSL_GETHTTP_GET | SSL_GET{url {path / # HTTP/SSL 检查的 url 可以是多个digest < STRING > # HTTP/SSL 检查后的摘要信息用工具 genhash 生成status_code 200 # HTTP/SSL 检查返回的状态码}connect_port 80 # 连接端口bindto < IPADD >connect_timeout 3 # 连接超时时间nb_get_retry 3 # 重连次数delay_before_retry 2 # 连接间隔时间}
102.Keepalived怎么实现高可用?
Keepalived 高可用服务对之间的故障切换转移,是通过 VRRP 协议来实现的。在 Keepalived 服务正常工作时,主 Master 节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备 Backup 节点自己还活看,当主 Master 节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master 节 点的心跳了,于是调用自身的接管程序,接管主 Master 节点的 IP 资源及服务。而当主 Master 节点恢复时,备 Backup 节 点又会释放主节点故障时自身接管的 IP 资源及服务,恢复到原来的备用角色。
103.Linux集群主要有哪几类?
1.L B 负载均衡集群负载均衡集群主要是提高服务的响应能力,如果一组计算机节点(或者一组进程)提供相同的(同质的)服务,那么对服务的请求就应该均匀的分摊到这些节点上。软件级的比较常见的有如下两种 : LVS 、 Haproxy2. HA 高可用性集群高可用性集群主要是提供 7 * 24 小时不间断服务的 , 如果某台宕机了 , 会自动的切换到其他计算机上面工作 , 从而达到高可用的效果。 HA 高可用集群的解决方案常见的有以下几种 heartbeat 、 corosync + openais RHCS 、 ultramokey 、 keepalived3. HP 高性能集群高性能集群主要是用于需要大量 CPU 运算的场景中 , 比如说天气预报 , 国外 3D 大片的特效制作 , 等等一系列需要做大量运算的应用 , HP 高性能集群的解决方案常见的有 bowerful
104.常见几种负载均衡方式的比较?
一、 LVS 的特点1 、工作在网络 4 层上,抗负载能力强,作分发之用;2 、配置性比较低;3 、工作稳定,自身具备的双机热备方案;4 、应用范围比较广,可以对所有应用做负载均衡;二、 NGINX 的特点1 、工作在网络的 7 层之上;2 、对网络的依赖比较小;3 、安装和配置比较简单,测试起来比较方便;4 、可以承担高的负载压力且稳定;5 、可以通过端口检测到服务器内部的故障,6 、对请求的异步处理可以帮助节点服务器减轻负载;7 、能支持 http 和 Email ;8 、默认的只有 Round‐robin 和 IP‐hash 两种负载均衡算法;三、 Haproxy 的特点1 、工作在网络 7 层之上。2 、能够补充 Nginx 的一些缺点比如 Session 的保持, Cookie 的引导等工作3 、支持 url 检测后端的服务器出问题的检测4 、更多的负载均衡策略5 、有更出色的负载均衡速度6 、 HAProxy 可以对 Mysql 进行负载均衡,对后端的 DB 节点进行检测和负载均衡
105.lvs调度算法中的最小连接数算法原理是什么
最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器 的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到 某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时, 我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。
106.简单介绍lvs的三种工作模型
1 、 NAT 模型NAT 模型是通过网络地址转换来实现的 , 工作方式是 , 首先用户请求到达前端的负载均衡器,然后负载均衡器根据事先定义好的调度算法将用户请求的目标地址修改为后端的应用服务器,应用程序服务器处理好请求之后将结果返回给用户 , 期间 必须要经过负载均衡器 , 负载均衡器将报文的源地址 改为用户请求的目标地址 , 再转发给用户 , 从而完成整个负载均衡的过 程 ,2 、 DR 模型DR 模型是通过路由技术实现的负载均衡技术 , 这种模型与 NAT 模型不同的地方是 , 负载均衡器通过改写用户请求报文中的 MAC 地址 , 将请求发送到 Real Server, 而 Real Server 直接响应用户 , 这样就大大的减少负载均衡器的压力 ,DR 模型也是 用的最多的一种。3 、 TUN 模型TUN 模型是通过 IP 隧道技术实现的 ,TUN 模型跟 DR 模型有点类似 , 不同的地方是负载均衡器 (Director Server) 跟应用服务器 (Real Server) 通信的机制是通过 IP 隧道技术将用户的请求转发到某个 Real Server, 而 Real Server 也是直接响应 用户的
107.集群中资源隔离的解决方案?
1 、当集群分裂成两个小集群时会发生资源争用的情况,为避免争用后端存储系统而造成灾难性的系统崩溃,集群系统引入了投票机制,只有拥有半数以上合法票数的集群才能存活,否则就推出集群系统。2 、当集群为偶数时,如果分裂,两边可能都掌握相等的票数;因此,集群系统不应该为偶数,如果是偶数则需要一个额外的 ping 节点参与投票。3 、票数不足的集群退出集群服务后,为了保证它不会争用资源需要 STONITH 机制来进行资源隔离。