运维面试宝典
无引号:把内容输出出来,可能不会键含有空格的字符串,视为一个整体输出,如果内容中有命令、变量等,会先把变量、命令解析出来,然后输出最终内容,如果字符串中带有空格等特殊字符,则不能完整输出,需要改加双引号。文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一特定的用户,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的。但是,在集群环境中存。的
·
【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.ln命令不能对目录创建硬链接,但可以创建软链接。对目录的软链接会经常使用到。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.单机服务器:如8G内存,300G硬盘分区:/boot 100‐200M,swap 16G,内存大小8G*2,/ 80G,/var 20G(也可不分),/data 180G(存放web及db数据)优点:数据盘和系统盘分开,有利于出问题时维护。RAID方案:视数据及性能要求,一般可采用raid5折中。2.负载均衡器(如LVS等)分区:/boot 100‐200M,swap 内存的1‐2倍,/ ,优点:简单方便,只做转发数据量很少。RAID方案:数据量小,重要性高,可采用RAID13.负载均衡下的RS server分区:/boot 100‐200M,swap 内存的1‐2倍,/优点:简单方便,因为有多机,对数据要求低。RAID方案:数据量大,重要性不高,有性能要求,数据要求低,可采用RAID04.数据库服务器mysql及oracle如16/32G内存分区:/boot 100‐200M,swap 16G,内存的1倍,/ 100G,/data 剩余(存放db数据)优点:数据盘和系统盘分开,有利于出问题时维护,及保持数据完整。RAID方案:视数据及性能要求主库可采取raid10/raid5,从库可采用raid0提高性能(读写分离的情况下。)5.存储服务器分区:/boot 100‐200M,swap 内存的1‐2倍,/ 100G,/data(存放数据)优点:此服务器不要分区太多。只做备份,性能要求低。容量要大。RAID方案:可采取sata盘,raid56.共享存储服务器(如NFS)分区:/boot 100‐200M,swap 内存的1‐2倍,/ 100G,/data(存放数据)优点:此服务器不要分区太多。NFS共享比存储多的要求就是性能要求。RAID方案:视性能及访问要求可以raid5,raid10,甚至raid0(要有高可用或双写方案)7.监控服务器cacti,nagios分区:/boot 100‐200M,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/ ‐1R | 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 +100k`;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”%02g” 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最大可以存1G,memcache最大1Mredis应用场景①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大小的数据库该如何做备份?
100G 以上的库,可以考虑用 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 = 2M
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。这种抢占是非常快速的(<1s),以保证服务的连续性,由于安全性考虑,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.LB 负载均衡集群负载均衡集群主要是提高服务的响应能力,如果一组计算机节点(或者一组进程)提供相同的(同质的)服务,那么对服务的请求就应该均匀的分摊到这些节点上。软件级的比较常见的有如下两种: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机制来进行资源隔离。
更多推荐




所有评论(0)