系统管理 文件管理 如何退出vim编辑器
如何快速定位catalina.out 日志中最近发生的异常
1 2 使用如下命令查找错误日志信息 # tail -f catalina.out
在使用mkdir命令创建新的目录时,在其父目录不存在时先创建父目录的选项是
hp_unix 删除文件名中含有2017 关键字的文件?
在linux系统中, 用来存放系统所需要的配置文件和子目录的目录是
什么命令是删除文件和目录?
什么命令是移动文件和目录的命令?
Linux 操作系统创建/data/database/oracle (注: /data目录不存在)目录的命令为_;进入/data/database/oracle目录的命令为_;
1 2 # mkdir -pv /data/database/oracle # cd /data/database/oracle
创建目录gpowe命令
删除目录gpowe命令
什么命令可以移动文件和目录,还可以为文件和目录重命名。
在vi编辑器中的命令模式下,键入()可在光标当前所在行下添加一新行。
存放linux基本命令的目录是什么?
删除文件的命令是?
使用命令”vi /etc/inittab” 查看文件的内容,你不小心改动了一些内容,为了防止系统出问题,你不想保存所修改的内容,你应该如何操作?
在linux中,要查看文件内容,可用什么命令?
1 2 # cat filename # vim filename
cd命令可以改变用户的当前目录,当用户键入命令cd并按Enter键后 3
1 2 3 4 1.当前目录改为根目录 2.当前目录不变,屏幕显示当前目录 3.当前目录为用户主目录 4.当前目录为上一级目录
Linux操作系统查看/etc/passwd文件前10行的命令为
将文件/etc/passwd前10行追加到/etc/passwd_new文件结尾的命令是
1 # head -10 /etc/passwd >>/etc/passwd_new
用户权限 怎么给文件/etc/passwd加上不可更改属性,从而防止非授权用户获得
新增一个禁止登录的用户
1 2 使用-s指定登录shell # useradd -s /sbin/nologin <username>
Linux 文件权限一共10位长度, 分成四段,第三段表示的内容是(C)
1 2 3 4 A 文件类型 B 文件所有者的权限 C 文件所有者所在组的权限 D 其他用户
改变文件所有者的命令? 3
1 2 3 4 1.chmod 2.touch 3.chown 4.cat
将普通用户user加入到root组
1 2 # gpasswd -a user root # usermod -g root user
编写shell程序运行前赋予该脚本什么权限?
唯一标识每个用户得是?
在linux系统添加新用户的命令是?
添加用户时使用()可以指定用户目录
linux操作系统新建一个用户为oracle命令是码的命令为()为oracle 用户设置密码()
1 2 useradd oracle echo '密码' | passwd --stdin oracle
修改用户自身的密码可使用?
1 2 root : password user 其他用户: passwd
以下文件中,只有root用户才能存取的是? 2
1 2 3 4 1.passwd 2.shadow 3.group 4.password
用于文件系统直接修改文件权限管理命令为?
创建一个用户,用户名为user02,所属组为stef,用户家目录为/home/user2,用户登录shell为/bin/bash
1 useradd -s /bin/bash -d /home/user2 -G sthff
赋予所有用户读和写backup.tar.gz文件的权限
打包压缩 解压acces.gz文件至access.log,保持源文件不删除解压:
1 2 3 4 5 6 # cp access.gz /access.log/access1.gz # cd /access.log # gzip -d access1.gz centos stream9系统上支持-k选项可以做到不删除源文件 # gzip -k -d app.py.gz
列出Linux常见打包工具并写相应解压缩参数(至少三种)
1 2 3 4 5 6 7 8 9 10 11 压缩打包命令: tar -cvzf file name.tar.gz dirname zip filename.zip dirname gzip filename bzip2 filename 解压包命令: # tar -xf filename.tar.gz # unzip filename.zip # gzip -d filename.gz # bzip2 -d filename.bz2
有关归档和压缩命令,下面描述正确的是(C)
1 2 3 4 A. 用 uncompress 命令解压缩由 compress 命令生成的后缀为.zip的压缩文件 B. unzip 命令和 gzip 命令 可以压缩相同类型的文件 C. tar 归档且压缩的文件可以由 gzip命令压缩 D. tar 命令归档后的文件也是一种压缩文件
下列哪个命令建立在一个tar归档文件的啥时候列出详细列表(3 )
1 2 3 4 1.tar -l 2.tar -cv 3.tar -cvf 4.tar -r
在linux中压缩文件后生成后缀为.gz文件的命令是?
一个文件名字为test.tar.gz, 可以用来解压的命令是(B)
1 2 3 4 A. tar B. gzip C. compress D. uncompress
将test.tar.gz文件解压缩
若要将当前目录中的myfile.txt问价压缩成myfile.txt.tar.gz,则实现的命令为?
文件查找 如何删除当前目录(包含子目录)下所有30天以前创建的文件名后缀为.log的文件?
1 # find ./ -mtime -30 -name '*.log' -exec rm -rf {} \;
找出/usr/local/apache2/logs中三天前以sd-360开头并以日期结尾的log并删除。
1 # find / -mtime +3 -type f -a -name "sd-360*"" -exec rm {} -f \;
快速定位当前目录下size最大的文件,命令行为()
1 # find . -type f | xargs -i ls -Sl {} | sort -t ' ' -k 5 -n | tail -1
/code/java 目录下有一份java工程,里面有一系列各种深度的子目录,其中有一个中包含HellWord这个字符,现需要通过一行命令找到该文件,请写下命令行。
1 # find /code/java -name '*HellWord*'
将/usr/local/test目录下大于100k小于500k的文件转移到/tmp目录下
1 # find /usr/local/test -size +100k -a -size -500k -exec mv -r {} /tmp \;
使用find命令删除/data/web下的所有.svn结尾的文件
1 # find /data/web -name '*.svn' -exec rm -rf {} \;
由于磁盘空间紧张,如何找出哪些文件占用了大量的磁盘空间?
搜索文件命令
Linux查询某文件的路径,指令为?
1 # find / -name 'filename'
找出/home下所有7天以前,以.ok结尾的文件列
在/home目录下查找文件名为.Profile的文件,找到后删除
进程管理 找出系统中父进程号为105的所有进程,并将其结束
1 2 3 4 5 6 7 8 9 10 查看:ps -ef |awk '$3==105{print $0} 结束方法一:kill 105 只适用于守护进程,守护进程的会话,因为没有控制终端,所以就没有前后台进程组之分,会话首进程同时也是进程组组长.它被KILL掉会向该组每个进程发送SIGHUP,导致组中进程被中止. 结束方法二 for pid in `ps -ef |awk '$3==105{print $2}'` do kill -9 $pid done
如何查看当前系统都有哪些进程
1 2 3 4 本题方法比较多 可以使用如下3种方法任意一种 ps top lsof
获取tomcat pid 并杀掉进程
1 2 3 4 ps aux|grep tomcat 获取进程id kill -9 进程id 或 pkill -9 tomcat
查看某一端口的连接客户端IP,比如3306端口
请写出在Linux操作系统中查看进程中含有oracle关键字的进程信息的命令(); 杀死PID为29231的进程的命令为()
1 2 ps aux | grep oracle kill -9 29231
进程查看和调度分别使用什么命令?
1 2 进程查看的命令是ps和top。 进程调度的命令有at,crontab,kill
如何查看系统都开启了哪些端口
1 2 3 4 本题方法比较多 可以使用如下3种方法任意一种 # ss -anpt # netstat auntpl # lsof
若使pid进程无条件终止使用的命令是?
linux系统中结束后台进程的命令
1 2 通过ps命令查看进程号PID,然后执行 kill %PID 通过jobs命令查看jobnum,然后执行 kill %jobnum
结束后台进程命令?
在超级用户下显示linux 系统中正在运行的全部进程,应使用的命令及参数?
1 2 3 4 ps -ef ps aux top -bn1 htop
终止一个前台进程可能用到的命令和操作(A,B)
1 2 3 4 A. kill B. <ctrl>+c C. shut down D. halt
ps aux中的VSZ代表什么意思?RSS代表什么意思?
1 2 VSZ:虚拟内存集,进程占用的虚拟内存空间 RSS:物理内存集,进程占用实际物理内存空间
列出当前系统中所有的网络连接(包含进程名),请写出完整操作命令
1 2 3 4 5 6 7 # netstat -anputl -t TCP -l 监听 -a 所有 -u UDP -n 显示端口号和IP -p pid
存储管理 有两分区sda2和sda3(都已使用过,未挂载),sda2做成交换分区并激活,sda3做成xfs文件系统,挂在/tmp/sda3上,请写出详细步骤
1 2 3 4 5 6 7 8 9 # mkswap /dev/sda2 # mkfs.xfs -f /dev/sda3 # vim /etc/fstab /dev/sda2 swap swap default 0 0 /dev/sda3 /tmp/sda3 xfs defaults 0 0 # mount -a # swapon -a df -Th和swapon -s 查看
快速生成一个10G的文件
1 # dd if=/dev/zero of=test bs=10M count=1024
根据服务器硬件配置,安装Linux操做系统时如何分区? (硬件配置1:硬盘2T. 内存32G)、(硬件件配置2:硬盘6T. 内在128G)
1 2 1: boot 500M swap 32G / 1TG /home 500G /var 剩余 2: boot 500M swap 32G / 5T /home 500G /var 500G
磁盘空间满了,删除一部分Nginx access日志,但是,发现磁盘空间还是满的,为什么?
1 2 3 4 在Linux系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink).然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。而我删除的是nginx的log文件删除的时候文件应该正在被使用 解决:查看进程,kill掉进程,然后再删除 如果服务器被植入恶意代码一直产生新的inode号,也会导致磁盘空间不可用
描述raid0、1、5的特点和优点?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 raid0: 生产环境最少需要两块磁盘 数据条带式分布,假如磁盘有N块,每块磁盘存1/N的数据 没有冗余,其中任何一块损坏,整个raid失效,不能应用于对数据安全性要求高的场合 性能最佳(不存储镜像、校验信息),读写速度相对较快 raid1: 生产环境最少需要2块磁盘 提供数据块冗余,安全 好读相对较快,写相对慢 raid5: 生产环境最少4块磁盘,其中一块做冗余,其他做数据盘 数据条带形式分布 以奇偶校验作冗余 适合多读少写的情景,是性能与数据冗余最佳的折中方案
在/etc/fstab 文件中指定的文件系统加载参数中,(D) 参数般用于CDROM
1 2 3 4 5 6 A defaults B rw C rw和ro D noauto cdrom文件系统 iso9660
若一台计算机的内存为 128MB 则交换分区的大小通常是 (C)
1 2 3 4 A 64MB B 128MB C 256MB D 512MB
将光盘CD-ROM(hdc) 挂在到文件系统的/mnt/cdrom 目录下的命令是 (C)
1 2 3 4 A. mount /mnt/cdrom B. mount /mnt/cdrom /dev/hdc C. mount /dev/hdc /mnt/cdrom D. mount /dev/hdc
显示已经挂载的文件系统磁盘inode使用状况的命令是?
设计用户所使用的计算机系统上有两块IDE硬盘,linux系统位于第一块硬盘上,查询第二块硬盘的分区情况命令是?
统计磁盘空间或文件系统使用情况的命令是?
在/etc/fatab文件中指定的文件系统加载参数块,什么参数一般用于CD-ROM等移动设备
安装linux系统时,swap分区应该设置多少?
1 物理内存在8G以下,则swap设置为与物理内存一样大,也可以设置为物理内存的2倍。如果物理内存在8G以上,swap空间设置为8G即可。
请写出查看Linux操作系统的磁盘空间装载以及占用情况的命令();请写出将/dev/sdb文件系统挂载到/data2目录下的命令为__
1 2 df -Th mount /dev/sdb /data2
假设服务器有6块900G本地磁盘,单盘io约为150M/S, 现对磁盘进行RAID划分,6块磁盘做成RAID5级别后实际存储大小、理论实际io为多少。
1 2 理论上6块硬盘做raid5 ;其中有一块盘做冗余;因为有校验位;所以实际大小是 900 * (6-2)= 3600G 实际IO 是:150m/s*4=600m/s
*保存当前磁盘分区的分区表,dd命令是个强大的命令,在复制的同时进行转换,请写出具体命令
1 Dd if=/dev/sda of=./mbr.txt bs=1M count=512
6块300G的硬盘做raid5,新的设备容量是多大?
1 由于RAID5磁盘阵列兼顾了安全性和速度,所以有一块磁盘是要被用作安全备份区的,一块存储空间存储校验位,所以6块300G的磁盘实际使用到的只有4块4*300=1200G
假设服务器具有6块900G本地磁盘,单块磁盘IO约为150M/S,现对磁盘进行RAID划分,简述理论上6块盘做成RAID5级别后实际存储大小、实际IO为多少?
1 2 3 4 5 6 7 8 9 150*4 理论上6块硬盘做raid5;其中有一块盘做冗余;因为有校验位;所以 实际大小是900*(6-2)=3600G 实际IO是:写的速率150m/s(小于。理论上写过程中,RAID5会进行校验耗费时间)*4=600m/s 因为读取数据的时候校验位的盘是需要读取的所以实际:读的速率是(6-2)*150=600m/s
如何关闭swap分区
保存当前磁盘分区的分区表
怎么理解存储?
1 存储就是根据不同的应用环境通过采取合理、安全、有效的方式将数据保存到某些介质上并能保证有效的访问,总的来讲可以包含两个方面的含义: 它是数据临时或长期驻留的物理媒介; 它是保证数据完整安全存放的方式或行为。
/etc/fstab文件的作用是什么?
1 这个文件描述系统中各种文件系统的信息,应用程序读取这个文件,然后根据其内容进行自动挂载的工作
文件系统 如何在/data/www_logs目录下找出大于10M且在90天之前被修改过的log文件,并将文件移动到/usr/local/src目录下?
1 find /data/www_logs -size +10M -mtime +90 -exec mv {} /usr/local/src \;
对文件系统进行检查的命令是
1 fsck-text4/dev/sda1-r(这样它会检查文件系统完整性,如果有什么问题,它会提示问你要不要修复的,如果你懒得理它,想让它自己修复,那就在末尾加上-y参数。)
在linux中links分类?
软链接和硬链接的区别?
1 2 3 4 硬链接不会创建新的inode,只是给源文件多加了一个文件名,软链接创建新的inode,相当于重新创建了一个文件 硬链接不能跨分区,软链接可以跨分区 硬链接删除源文件后,另一个文件还能用,软链接删除源文件后,链接文件不能再使用 硬链接不能给目录做,软链接可以
linux操作系统支持的文件系统类型是?
1 2 3 Linux支持的文件系统较多,常见的文件系统类型如下 ext4 xfs
linux通过VFS支持多种不同的文件系统。linux缺省的文件系统是
1 2 3 4 1.VFAT 2.ISO9660 3.EXT系列 4.NTFS
linux服务器发生可故障,使用df命令查看到某目录下有剩余空间,但是无法创建文件,可能的原因是什么?
1 可能由于磁盘的inode分配完了,导致提示磁盘满
假设文件fileA的符号链接为fileB,那么删除fileA后,下面描述正确的是(2 )
1 2 3 4 1.fileB也随之删除 2.fileB仍存在,但是属于无效的文件 3.因为fileB未被删除,所以fileA会被系统自动重新新建立 4.fileB会随fileA的删除而被系统自动删除
软件管理 yum命令和rpm命令的区别,如何使用rpm安装一个有依赖的包?
1 2 3 4 5 6 区别:rpm 命令安装时,不检查软件包依赖性的问题,yum 命令安装时,可以自动处理依赖性关系,并且一次安装所有依赖的软体包。 rpm安装一个有依赖的包: 先用rpm安装这个有依赖的包,按照错误提示,如果是缺少某个依赖包也是去网上下载该包,然后用rpm命令安装所下载的依赖包。另外也可以去网上查找该包的依赖包,并将它们下载并安装。等所需依赖包安装完成后,在安装此包。 如何使用rpm安装一个有依赖的包? 先用rpm安装这个有依赖的包,按照错误提示,如果是缺少某个依赖包也是去网上下载该包,然后用rpm命令安装所下载的依赖包。另外也可以去网上查找该包的依赖包,并将它们下载并安装。等所需依赖包安装完成后,在安装此包。
查询已安装软件dhcp内所含文件信息的命令是?
使用rpm命令安装、卸载ntp-0.7.12.x86_64.rpm这个包。
1 2 rpm -ivh ntp-0.7.12.x86_64.rpm rpm -e ntp-0.7.12.x86_64.rpm
如何安装软件
1 2 3 4 1、使用yum安装 2、用rpm安装 3、二进制方式安装 4、编译安装
请简要描述Linux系统下源代码编译方式安装软件的大致步骤
1 2 3 4 5 1.部署基础环境:关闭防火墙;关闭selinux;安装编译器 2.下载、解压软件包 3、配置 4、编译 5、安装
基础服务 服务管理 设置系统当前运行级别中test服务状态为启动时自动加载,请写出完整操作命令
Linux操作系统启动服务名为kstoredb_NODEDBd的命令为
1 systemctl start kstoredb_NODEDBd
Windows系统启动服务名为kstoredb_NODEDBd的命>令为
1 net start kstoredb_NODEDBd
分别在CentOS6和CentOS7下,查看nginx服务的工作状态,并设置为开启自动启动:
1 2 3 4 5 6 7 Centos6 # service nginx status # chkconfig -l 5 nginx on Centos7 # systemctl status nginx,6的方法也适用 # systemctl enable nginx
SSH 修改ssh服务端端口
Linux 操作系统从ip为10.0.4.100远程主机复制/root/script.sh文件到/database/oracle的命令为
1 scp 10.0.4.100:/root/script.sh /database/oracle
使用rsync同步/var/log目录下的多个文件到test的log模块下,并记录log
1 rsync -avz user@ip:/var/log /test/log
请解释下Telnet和SSH的区别
1 2 3 Telnet:不安全,没有对传输的数据进行加密,容易被监听还有遭受中间人攻击,telnet不能压缩传输数据,所以传输慢; ssh:对数据进行了RSA加密,安全性高,ssh传输数据是经过压缩的,所以数据传输速度比较快
从本机复制文件、文件夹到服务器并替换同名文件的写法有哪几种?
1 有两种:1.scp-r源文件路径目标文件ip:目标文件路径2.rsync-avr源文件路径目标文件ip:目标文件路径
FTP 如何修改ftp用户目录路径,以及修改时应当注意的事项?
1 2 3 登录Linux主机后,运行命令:”useradd ftpadmin -s /sbin/nologin “。该账户路径默认指向/home/ftpadmin目录;如果需要将用户指向其他目录,请运行命令:useradd ftpadmin -s /sbin/nologin –d /www(其他目录) 注意事项:权限等
ftp常用的两种模式
1 2 3 4 5 主动模式 FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。 被动模式: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,
配置一台匿名ftp服务,应该修改那个文件
FTP传输中使用哪两个端口?
升级安装vsftpd
FTP单独修改某一个账户的配置?
1 2 3 4 user_config_dir=/etc/vsftpd/userconf #vim /etc/vsftpd/userconf/zhanghu local_root=/zhanghu
我们都知道FTP协议有两种工作模式,说说他们的大概的一个工作流程?(简略回答)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 模式:主动模式(ActiveFTP)和被动模式(PassiveFTP) 1在主动模式下:FTP客户端随机开启一个大于1024的端口N,向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORTN+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。 客户端使用1024以上的端口连接服务器的21号端口,并且会事先开启一个1024+N的端口准备让服务器来连接,服务器得知客户端准备的端口后,用20号端口与客户端连接,创建数据链路时server端处于主动去连接客户端的状态固称为主动传输模式 2在被动模式下:FTP客户端随机开启一个大于1024的端口N,向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORTP命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。 客户端使用1024以上的端口连接服务器的21号端口,服务器接到连接请求后,开启一个1024+M的端口等待客户端来连接,再通知客户端这个等待连接的端口号是1024+M,客户端接到服务器端的信息后,开启新的一个1024+N的端口与1024+M进行连接,创建数据连接时,server端处于被客户端连接的状态,固称为被动传输模式 vsftp默认是根据客户端不同而使用不同模式,windows客户端则使用主动,linux客户端则使用被动 可以用pasv_enable=NO来强制使用主动 总的来说,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。 被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTp服务器的情况,因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防
NFS 如何让nfs服务在运行状态5下开启而在其他运行级下关闭?
AB网络是通的,最少列出三种传输文件服务?
简述网络文件系统NFS,并说明其作用
1 2 3 (1)网络文件系统是应用层的一种应用服务,它主要应用于Linux系统之间的文件或目录的共享,现在也支持linux和window系统之间。 (2)对于用户而言可以通过 NFS方便的访问远地的文件系统,使之成为本地文件系统的一部分。 (3)采用NFS之后省去了登录的过程,方便了用户访问系统资源。
Crontab 使用crontab每两个小时执行/data/scripts/back.sh脚本的语句
1 2 crontab -e 0 */2 * * * /data/scripts/back.sh
解释下列含义:*/2 10 1 6 1 /usr/sbin/ntpdate ntp.api.bz
1 6月1号或周一的时候10点每隔两分钟 向ntp.api.bz 同步一次时间
如何实现每周一下午三点将/tmp/logs目录下后缀为*.log的所有文件打包成 ‘年月日-log-back.tar.gz’,并rsync同步到备份服务器192.168.1.100中同样的目录下面?
1 2 3 4 5 6 tar -cvzf /tmp/logs/*.log `date +%Y%m%d`-log-back.tar.gz rsync -avR /tmp/logs/*.log root@192.168.1.100:/tmp/logs 0 15 * * 1 /usr/bin/bash /cron/task.sh
linux系统在今晚23:00关机
创建一个每周三1:00-4:00每三分钟执行一次的crontab指令。
1 2 # crontab -e 3/* 1-4 * * 3 命令
有一个普通用户想在每日凌晨零点零分定期备份/user/backup到目录下,该用户应如何做?
1 0 24 * * * cp filename /user/backup
请写出linux系统查看定时任务命令
Linux默认的定时任务,一般写入/etc/下的哪个文件?
凌晨1:59删除/bt目录下的全部子目录和子文件用crontab计划任务写
计划每星期天早上8点服务器定时重启,如何实现?
计划任务在11月份,每天早上6点到12点钟,每隔2小时执行一次/usr/bin/httpd.sh怎么实现?
1 0 06-12/2 * 11 * bash /usr/bin/httpd.sh
请写下Linux系统中cron定时任务,每天07至23点,每隔半小时执行apache重启
1 2 # crontab-e */3 07-23 * * * systemctl restart httpd>/dev/null 2>&1
以下字段可能和哪个服务有关?表示什么意思?
1 */5 * * * * ping -c 100 www.wanmel.com >/root/network.log 2>&1
/var/www/html/是网站的发布目录,如何每天凌晨0点30分对其进行自动备份,每次备份按时间生成不同的备份包,写出操作步骤?
1 30 0 * * * tar -zcf `date +%Y%m%d`.html.tar.gz /var/www/html
计划每星期天早8点服务器定时重启,如何实现?
每天中午12点使用tcpdump命令抓取目的端口为tcp80的1000个包输出到当前目录,以当前时间命名。请写出定时任务及脚本内容
1 2 3 4 0 12 * * * bash tcpdump.sh tcpdump -c 1000 tcp dst port 80 -w ./`date +%Y%m%d`
DNS 系统中在/etc/resolv.conf配置dns服务器地址,但后期会被清除什么原因
1 2 可能是NetworkManager的原因 网卡配置文件的dns配置会覆盖resolve.conf文件内的内容
关于DNS,下列说法错误的是( C) A、DNS,全称Domain Name System,即域名解析系统 B、DNS协议运行在UDP协议之上。 C、只有基于类Linux, Unix操作系统的服务器,才可以安装DNS服务器端软件 D、域名的最终指向是IP地址。
列举你所知道的域名解析记录类型
1 2 3 4 5 6 A记录 正向解析 PTR记录 反向解析 CNAME记录 别名 MX记录 邮件解析 NS记录 指定权威dns服务器地址 SOA记录 授权
简述DNS进行域名解析的过程。
1 2 3 4 5 6 7 8 1、当客户机提出查询请求时,首先在本地计算机的缓存中查找。如果在本地无法获得查询信息,则将查询请求发给DNS服务器。 2、首先客户机将域名查询请求发送到本地DNS服务器,当本地DNS服务器接到查询后,首先在该服务器管理的区域的记录中查找,如果找到该记录,则利用此记录进行解析;如果没有区域信息可以满足查询要求,服务器在本地的缓存中查找。 3、如果本地服务器不能在本地找到客户机查询的信息,将客户机请求发送到根域名DNS服务器。 4、根域名服务器负责解析客户机请求的根域部分,它将包含下一级域名信息的DNS服务器地址返回给客户机的DNS服务器地址。 5、客户机的DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域我的DNS服务器地址。 6、按照上述递归方法逐级接近查询目标,最后在有目标域名的DNS服务器上找到相应IP地址信息。 7、客户机的本地DNS服务器将递归查询结果返回客户机。 8、客户机利用从本地DNS服务器查询得到的IP访问目标主机,就完成了一个解析过程。
简述DNS和DHCP的功能
1 2 DNS提供域名解析服务 DHCP提供动态ip分配
关于DNS服务器,叙述错误的是(C)
1 2 3 4 A、DNS服务器配置不需要配置客户端 B、建立某个分区的DNS服务器时只需要建立一个主DNS服务器 C、主DNS服务器需要启动named进程,而辅DNS服务器不需要 D、DNS服务器的root.cache文件包含了根名字服务器的有关信息
当内网内没有条件建立dns服务器,又不想用IP访同网站,应配置什么文件。(A)
1 2 3 4 A.hosts B.sysconfig C.network D.hostname
DNS域名系统主要负责主机名和(A)之间的解析
1 2 3 4 A、IP地址 B、MAC地址 C、网络游戏 D、主机别名
权威DNS和递归DNS、迭代DNS的不同
1 2 3 4 5 6 7 8 9 一、主机向本地域名服务器的查询一般都是采用递归查询。 所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。 因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。 二、本地域名服务器向根域名服务器的查询的迭代查询。 迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。 然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。 顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。 最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机
Linux系统中DNS服务进程名为(A)
1 2 3 4 A、named B、httpd C、ftpd D、SysLog
当用户在浏览器当中输入一个网站,说说DNS解释经过哪些流程?
1 2 3 4 5 6 7 a.用户输入网址到浏览器; b.浏览器发出DNS请求信息; c.计算机首先查询本机HOST文件,看是否存在,存在直接返回结果,不存在,继续下一步; d.计算机按照本地DNS的顺序,向合法dns服务器查询IP结果; e.合法dns返回dns结果给本地dns,本地dns并缓存本结果,直到TTL过期,才再次查询此结果; f.返回IP结果给浏览器; g.浏览器根据IP信息,获取页面;
当你在浏览器输入一个网址,如http://www.baidu.com,按回车之后发生了什么?请从技术角度描述,如浏览器、网络、服务器等各种参与对象由此引发的一系列活动,请尽说出可能涉及到所有的关键技术点。
1 2 3 4 我们输入一个域名: www.taobao.com ,浏览器查找浏览器缓存,如果有域名的 IP 地址则返回,如果没有继续查找; 系统查找系统缓存,如果有域名的 IP 地址则返回,如果没有继续查找;路由器查找路由器缓存,如果有域名的 IP 地址则返回,如果没有继续查找;本地域名服务器采用迭代查询,它先向一个根域名服务器查询;根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器 dns.com 的 IP 地址;本地域名服务器向顶级域名服务器 dns.com 进行查询; 顶级域名服务器 dns.com 告诉本地域名服务器,下一次应查询的权限域名服务器 dns.taobao.com 的 IP 地址;本地域名服务器向权限域名服务器 dns.taobao.com 进行查询;权限域名服务器 dns.taobao.com 告诉本地域名服务器,所查询的主机 www.taobao.com 的 IP 地址;本地域名服务器最后把查询结果告诉主机;主机浏览器获取到 Web 服务器的 IP 地址后,与服务器建立 TCP 连接;浏览器所在的客户机向服务器发出连接请求报文; 服务器接收报文后,同意建立连接,向客户机发出确认报文,客户机接收到确认报文后,再次向服务器发出报文,确认已接收到确认报文;此处客户机与服务器之间的 TCP 连接建立完成,开始通信;浏览器发出取文件命令: GET ;服务器给出响应,将指定文件发送给浏览器; 浏览器释放 TCP 连接;浏览器所在主机向服务器发出连接释放报文,然后停止发送数据;服务器接收到释放报文后发出确认报文,然后将服务器上未传送完的数据发送完;服务器数据传输完毕后,向客户机发送连接释放报文;客户机接收到报文后,发出确认,然后等待一段时间后,释放 TCP 连接;浏览器显示页面中所有文本。
linux系统中DNS服务的进程名为?
1 2 3 软件名为:bind 进程名为:named 启动服务:service named start
DNS服务器的特点
1 DNS服务器重新对配置了静态地址的客户端进行重新配置
权威DNS和递归DNS、迭代DNS的不同?
1 2 3 递归解析”(或叫“递归查询”,其实意思是一样的)是最常见,也是默认的解析方式。在这种解析方式中,如果客户端配置的本地名称服务器不能解析的话,则后面的查询全由本地名称服务器代替DNS客户端进行查询,直到本地名称服务器从权威名称服务器得到了正确的解析结果,然后由本地名称服务器告诉DNS客户端查询的结果。 迭代DNS所有查询工作全部是DNS客户端自己进行(以“DNS客户端”自己为中心)。
我们都知道dns既采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么时候采用udp协议?为什么要这么设计?
1 2 3 4 5 6 7 dns有两个情况,一种是区域传输,一种是域名解析 1.区域传输时,一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息,传输协议是tcp。问:tcp 2.域名解析时,首选的通讯协议是udp 使用udp传输,不用经过TCP三次握手,这样DNS服务器负载更低,响应更快 但是当域名解析的反馈报文的长度超过512字节时,将不能使用udp协议进行解析,此时必须使用tcp回:udp
当用户在浏览器当中输入一个网站,说说计算机对dns解释结果哪些流程?注:本机跟本地DNS还没有缓存
www.baidu.com .
1 2 3 4 5 6 1.用户输入网址到浏览器; 2.浏览器发出DNS请求信息; 3.计算机首先查询本机HOST文件,不存在,继续下一步; 4.计算机按照本地DNS的顺序,向区域dns服务器查询IP结果;区域dns服务器查询不到时会从根域开始,按照DNS层次结构向下搜索,直至对于信息具有权威性; 5.将返回dns结果给本地dns和本机,本机和本地dns并缓存本结果,直到TTL过期,才再次查询此结果; 6.返回IP结果给浏览器;并给本地的DNS一份结果;7.浏览器根据IP信息,获取页面;
在nslookup使用中请问如何查询test.com域中的MX记录
1 2 3 4 5 6 7 8 9 10 11 非交互式 # nslookup -querytype=MX test.com 交互式 # nslookup > set type=mx > test.com # host -t mx test.com # dig -t mx test.com
DHCP 简要说明客户机使用DHCP获取IP地址的过程
1 2 3 4 5 1、终端以广播的形式向网络内广播DISCOVER发现报文,报文中携带相关的参数列表。 2、网络内的服务器,从可用地址池中分配一个ip地址给客户机,向这个地址广播offer报文,报文中携带终端请求的参数。 3、终端从响应offer的服务器中选择一个,并在request报文中携带选择的服务器的ip和服务器分配给自己的ip地址。并进行广播,把终端选择的地址和服务器通知网络内所有主机服务器。 4、网络内的服务器收到终端的request请求后,如果是终端选择的服务器,根据的是上面request报文中是否携带自身的信息,比如IP地址。则发送一个广播ACK,确定分配地址等信息;如果不是终端选择的服务,则不响应,并收回分配的地址到可用地址池中。 5、终端收到ack后就把ip地址等信息跟网卡绑定。
dhcp客户端是哪个地址来申请一个新的ip地址的?
1 2 3 dhcp客户端是使用广播地址来向全网发送广播包来寻找dhcp服务器的 源地址是0.0.0.0广播地址是:255.255.255.255客户端没有IP地址才需要申请,所以它只能用0.0.0.0来代替它的ip,向服务器端申请ip地址。
DHCP(动态主机配置协议)
1 2 3 4 5 主要目的是为了方便我们的主机IP地址的配置,如果网络中存在大量的主机时,可通过部署DHCP协议,由DHCP服务器分配可用地址给主机。 客户端启用了DHCP,开机后,它会发布一个的广播报文,广播报文经过网关时会带上相应标记,要使路由可达,当DHCP服务器收到这个报文后,DHCP服务器会根据报文标记,分配一个网关所在网段IP地址给客户端,如果所有客户端未划分网关,DHCP会在地址池内随机分配IP给客户端 地址池:在用户定义了DHCP范围及排除范围后,剩余的地址构成了一个地址池,地址池中的地址可以动态的分配给网络中的客户机使用。地址池仅对自动获取IP的方式有效,手动设置IP只要符合规则可无视此项。
数据库 MySql 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 如何校验mysql主从数据不一致?出现不一致时如何处理? 答: 1.人为原因导致从库与主库数据不一致(从库写入) 2.主从复制过程中,从库异常宕机 3.设置了ignore/do/rewrite等replication等规则 4.binlog非row格式 5.异步复制本身不保证,半同步存在提交读的问题,增强半同步起来比较完美。 但对于异常重启(Replication Crash Safe),从库写数据(GTID)的防范,还需要策略来保证。 6.从库中断很久,binlog应用不连续,监控并及时修复主从 7.从库启用了诸如存储过程,从库禁用存储过程等 8.数据库大小版本/分支版本导致数据不一致?,主从版本统一 9.备份的时候没有指定参数 例如mysqldump --master-data=2 等 10.主从sql_mode 不一致 11.一主二从环境,二从的server id一致。 12.MySQL自增列 主从不一致 13.主从信息保存在文件里面,文件本身的刷新是非事务的,导致从库重启后开始执行点大于实际执行点 为了实现主从复制数据一致性校验和修复,我们首先推荐两个热门工具,分别是percona公司的pt-table-checksum和pt-table-sync,前者用来实现主从复制数据一致性的校验,后者实现数据修复,将数据修复到一致。 主从数据校验 主从数据校验使用pt-table-checksum实现,要在主库上执行,执行校验通过参数控制校验全库全表还是只校验核心表。 校验指令举例: ./pt-table-checksum--nocheck-binlog-format --nocheck-plan --nocheck-replication-filters--replicate=test.checksums --databases=db1--tables=tb1 -h 192.168.XXX.XX -P 3306-u'hangxing' -p'PASSOWRD' --recursion-method="processlist" 解析: --no-check-binlog-format 不检查复制的binlog模式。 --nocheck-replication-filters 不检查复制过滤器,建议启用。 --replicate=test.checksums 检查结果写入test库的checksums表里。 --databases=db1 --tables=tb1 校验db1库里的tb1表,若无参数则校验全库全表。 -h 192.168.XXX.XX -P 3306 主库IP地址和3306端口。 -u'hangxing' -p'PASSOWRD' 校验账号密码。 --recursion-method="processlist" 用processlist的方法来发现从库。 执行后的输出结果: TS ERRORS DIFFS ROWS CHUNKS SKIPPED TIME TABLE 03-23T15:29:17 0 1 30000 1 0 1.270 testhx1.testhx1 解析: TS :完成检查的时间。 ERRORS :检查时候发生错误和警告的数量。 DIFFS :0表示一致,大于0表示不一致。主要看这一列有无不一致数据。 ROWS :表的行数。 CHUNKS :被划分到表中的块的数目。 SKIPPED :由于错误或警告或过大,则跳过块的数目。 TIME :执行的时间。 TABLE :被检查的表名。 上述输出关键看DIFFS列,结果为0说明数据一致,无需进行数据修复,如果不为0则需要继续开展数据一致性修复工作。上述语句执行后也会将详细的内容会写入test库的checksums表中,可以查看这个库表得到详细的数据校验信息。 主从数据修复
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 以下分别是关于在 MySQL 的 InnoDB 中定位锁问题以及减少主从复制延迟的方法: 一、InnoDB 中定位锁问题 查看锁等待信息:通过查询INFORMATION_SCHEMA.INNODB_LOCK_WAITS表,可以获取当前正在等待锁的事务以及它们所等待的锁相关信息。例如: SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS; 这个表会显示出等待锁的事务 ID(REQUESTING_TRX_ID)、持有锁的事务 ID(BLOCKING_TRX_ID)、等待的锁模式等关键信息,从而帮助确定哪些事务之间存在锁等待情况。 分析事务状态:查询INFORMATION_SCHEMA.INNODB_TRX表来查看当前正在运行的事务的详细状态。例如: SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; 可以了解到事务的启动时间、事务是否处于等待状态、正在执行的 SQL 语句等内容。如果某个事务的状态显示为等待,结合锁等待信息,就可以进一步分析是否是因为锁的原因导致该事务无法继续执行。 使用性能监控工具:MySQL 自带的性能监控工具如SHOW ENGINE INNODB STATUS命令,它会输出关于 InnoDB 存储引擎的详细状态信息,其中包含了有关锁的部分。例如: SHOW ENGINE INNODB STATUS\G; 在输出内容中,会有专门关于锁的段落,描述了当前锁的总体情况,如锁的类型、数量、以及是否存在严重的锁冲突等,这有助于从宏观层面了解锁的状况并定位问题所在。 二、减少 MySQL 主从复制延迟的方法 优化网络环境:确保主从服务器之间有稳定、高速的网络连接。可以通过升级网络设备、增加网络带宽等方式来降低网络延迟和减少丢包情况。例如,将主从服务器部署在同一数据中心的高速网络区域内,或者使用专线网络进行连接。 定期监测网络性能,及时发现并解决网络故障,如网络中断、高延迟等问题,可使用网络监测工具如 Ping、Traceroute 等进行检测。 合理配置主从服务器:保证主从服务器的硬件配置均衡且足够强大。如果主服务器的处理能力远强于从服务器,可能会导致从服务器在处理大量同步数据时出现延迟。例如,确保从服务器的 CPU、内存、硬盘等硬件资源能够满足同步任务的需求。 配置相同的服务器参数,如字符集、存储引擎等,避免因参数差异导致的同步问题。同时,合理设置主从同步相关参数,比如根据业务需求选择合适的二进制日志格式(如 ROW 格式在很多情况下能更准确地同步数据但占用更多日志空间,需合理权衡),以及设置合理的同步线程参数(如适当提高从库 SQL 线程和 IO 线程的优先级)。 优化数据库操作:在主库上尽量减少大事务的执行。大事务会导致二进制日志文件变大,增加从库同步的时间和难度。可以将大事务拆分成多个小事务进行执行,这样能使从库更及时地同步数据。 避免在主库上进行复杂的、长时间运行的 SQL 操作,尤其是那些涉及到大量数据查询、更新等操作。如果不可避免,尽量安排在业务低谷期进行,以减少对主从同步的影响。 采用并行复制技术:启用 MySQL 的并行复制功能(从 MySQL 5.6 版本开始支持部分并行复制,5.7 及以后版本不断完善)。并行复制可以让从库同时处理多个事务的同步,而不是传统的一个接一个地处理,大大提高了从库同步的效率,从而有效减少复制延迟。例如,在配置文件中设置相关参数开启并行复制功能(具体参数设置因版本而异)。 及时处理从库积压事务:定期查看从库的同步状态,了解是否存在事务积压情况。如果发现从库的 SQL 线程或 IO 线程出现停滞或处理速度缓慢,导致事务积压,要及时采取措施。 可以通过重启相关线程(在确保安全的情况下)、优化从库的配置等方式来解决积压问题,使从库能够尽快跟上主库的同步进度。
MySQL创建数据库的命令,创建表的命令,插入语句的命令
1 2 3 create database dbname character set 'utf8'; create table tname(id int); insert into tname values(1);
系统启动后,不能连接数据库,可能是哪些方面的原因?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 已知表: Create Table Department (dept_ id varchar(2) not null, --部门编号 dept_ name varchar(20) not null, -- 部门名称 dept_ leader varchar(10) - 部门经理 Create Table Personnel (id varchar(4) not null, --员工号 name varchar(10) not null, -姓名 dept id varchar(2) not null, -部门编号 age integer, -- 年龄 gzsj date, -- 参加工作时间 technical post varchar(10), 一职称 salary integer - 薪水 ) (1)Department 增加一列字段notes,长度为10的字符串,默认值为‘0’ ,请写出相关SQL语句 alter Department add notes varchar(10) not null default 0; (2)查找工资大于2000元的员工记录,并按员工号id升序排列 select * from Personnel where salary > 2000 order by id; (3)查找工资大于2000元的员工所在部门、部门编号、部门经理、员工名称 select D.dept_name,D.dept_leader,D.dept_id,P.name from Personnel P left join Department D on D.dept_id = P.dept_id where P.salary > 2000;
数据库表和视图的区别?存储过程和函数的区别?
1 2 3 4 5 6 7 表 是真实存在的,它占内存空间 视图 是虚拟表,不存储数据,存储的是sql,检索他的时候实际上是执行定义它的sql语句,不占任何内存 存储过程在编译后可以生成执行计划,这使得每次执行存储过程的时候效率将会更高,这是存储过程,另外台提交参数的时候,使用存储过程将会减少网络带宽流量,这是存储过程相对于普通的sql语句在性能上的最大的优势 函数:只能返回一个变量的限制。而存储过程可以返回多个。 函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行 执行的本质都一样。 函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少
简述drop, truncate, delete操作的异同( 假设delete不带where语句)
1 2 3 drop 彻底删除 truncate 清除表内容 delete 不加where 删除表内容 加where 指定条件
sql优化的过程
1 2 3 4 5 1.通过show status 了解各种SQL的执行频率 2.定位执行效率低的SQL语句 3.通过explain分析低效SQL执行计划 4.通过show profile分析SQL 5.通过trace分析优化器如何选择执行计划
表t1数据有1000w,求表t1中字段id的最大值和最小值,如何查询速度更快?
1 2 select max(id) from t1 select min(id) from t1
表t2中数据有1000w,其中tel字段创建了索引.找出所有137开头的手机号。
1 select * from t2 where left(tel,3) = '137';
分别写出Mysql, Sql serer,Oracle 数据库的客户端管理工具。
1 2 3 mysql: mysql phpmyadmin sql server: SSMS oracle: oracle client
写出mysql数据库备份数据使用的命令
写出备份和恢复Oracle数据库的方法
1 Oracle数据库有三种常用的备份方法,分别是导出/导入(EXP/IMP)、热备份和冷备份。导出/导入备份是一种逻辑备份,相对于导出/导入来说,热备份、冷备份是一种物理备份。
要清空一个几百万数据的表A里的数据,通常我们用的SQL语句为?
1 2 delete from a truncate table a
从A表中查询出字段B等于1的集合总数,通常我们用的SQL语句为?
1 select count(*) from a where b = 1;
MySQL创建数据库的命令,创建表的命令,插入语句的命令
1 2 3 create database dbname character set 'utf8'; create table tname(id int); insert into tname values(1);
如何做服务器的安全、容灾、以数据库为例
1 2 3 1、每天定时备份数据库 2、mysql按需求进行主从复制、主主复制、读写分离等保证数据即时备份 3、利用keepalived等工具使数据库进行高可用
请详细描述mysql主从复制原理
1 2 3 4 5 6 主节点: 开启二进制日志,主库上的数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。 dump线程:读取主库二进制日志事件用来响应从库的请求 从节点: I/O 线程 :从master 请求二进制日志事件,并保存于中继日志中 SQL thread: 从中继日志中读取日志事件,在本地完成重放
mysql一主多从,主库宕机,如何合理切换到从库,其他的从库有如何处理
1 2 3 4 5 6 7 8 9 10 11 1、首先停业务 2、查看SQL线程的执行状态: show slave status\G; 查看Slave_SQL_Running_State项是否为Slave has read all relay log; waiting for more updates,如下: Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates 或执行show processlist; 如果有Slave has read all relay log; waitingfor more updates 则表示从库都同步完成了。 3、所有从库执行show slave status\G; 对比所有从库的Relay_Master_Log_File,Exec_Master_Log_Pos两个参数的值,数值最大的作为新的主库,如果所有从库的值都相同,都没有落后于主库,选择哪个从库都可以做为新主库. 4、选好准主库后,执行stop slave;reset slave ;reset master; 5、在准主库上用户授权,其他从库上change master指向主库,配置主从复制。
请举一个生产中你实际遇到网站打开慢由于访问mysql数据库慢导致的
1 2 3 4 5 6 7 8 9 一次调用后台数据特别慢,经查询是mysql前期插入数据未加上有效的索引 检查 :首先show full processlist 查看数据库中的线程是否有都是有用的线程或者是否有线程卡住,经检查是一个查询语句的线程时间过长。 explain select *** 语句,发现该查询语句查询的是原始数据,没找索引。 最初发现直接插入索引,执行一个小时没反应,并且会导致锁表。 解决: 导出原表数据 创建新表与原表结构保持一致,在该表上执行alter语句添加索引; 将表数据导入创建的新表; 修改新建的表名为原表名。
mysql通过()作为媒介来实现主从数据同步
是否有数据库维护工作,列出高可用方案,备份及还原方案
1 2 备份:每天定时用mysqldumo 备份数据库 高可用 :keepalived + mysql主从,当主库宕掉后,会有脚本将从库只读改为读写并将其提升为主库,保证服务的不中断。
写出mysql备份Db_test,Db_test2这两个库命令
1 mysqldump -uroot -proot --databases Db_test,Db_test2 >/tmp/user.sql
写出mysql更改root用户密码命令
1 set password for root@localhost = password('新密码');
mysql给新用户newuser赋予select\insert\delete 权限访问new_test库,只允许192.168.0.0/24网段访问,然后回收delete权限。
1 2 grant select,insert,delete ON new_test to newuser@‘192.168.0.*’; revoke delete ON new_test to newuser@‘192.168.0.*’;
mysql数据库有每日备份和binlog,简述恢复数据库到指定时间的思路。
1 2 3 4 查看位置点 mysqlbinlog查看详细位置 mysqlbinlog 命令把截取的pos点导出sql语句:eg:mysqlbinlog --start-position=214 --stop-position=1257 /data/3307/mysql-bin.000006 > /tmp/binlog.sql source sql语句
mysql数据库如何实现读写分离
1 2 1、可以在配置文件中设置一台mysql 只读,另一台可以读写 2、利用软件mycat实现
在mysql客户端查询中,如何获取当前所有连接的进程信息。
mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
1 2 3 4 5 6 7 8 9 10 11 1、show engine innode status ;查看锁问题 2、使用多台slave来分摊读请求; 配置参数,eg:–slave-net-timeout=seconds 单位为秒 默认设置为 3600秒,\#参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据; –master-connect-retry=seconds 单位为秒 默认设置为 60秒 #参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试; 修改配置文件,尽量让主库的DDL快速执行 比如 sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也 可以设置为0来提高sql的执行效率 架构上实行读写分离等;
mysql实现级联同步,需要修改那些参数?
mysql如何查看某一用户的权限?
如何定位执行时间过长的sql语句?
1 2 1、开启慢日志 2、show full processlist ; 通过state time command 查看连接时间超长的进程
mysql如何查看正在执行的查询语句?
1 show full processlist ; 通过command、state列 查看
mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1、show engine innode status ;查看锁问题 2、使用多台slave来分摊读请求; 配置有用的参数, eg:–slave-net-timeout=seconds 单位为秒 默认设置为 3600秒,\#参数含义:当slave从主数据库读取log数据失败后,等待多久重新建立连接并获取数据; –master-connect-retry=seconds 单位为秒 默认设置为 60秒 #参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试; 修改配置文件,尽量让主库的DDL快速执行 比如 sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也 可以设置为0来提高sql的执行效率 架构上实行读写分离,半同步等;
如何产看mysql当前支持的存储引擎?
系统启动后,不能连接数据库,可能是哪方面的原因?
1 2 3 4 5 1、检查数据库是否启动 2、检查数据库是否正常可以被连接 3、检查磁盘是否正常
写出备份恢复mysql中gpower数据库的命令
1 2 3 备份:mysqldump -u root -p pass gpower > gpower.sql 恢复:进库 mysql > source gpower.sql
mysql索引 调优 索引对性能的影响 建立五个索引和六个的区别 索引实现原理 索引的数据结构 39、mysql表分区 mysql数据量超过1000w怎么实现性能优化(加缓存,分表分库)
79. 如何用mysql命令进行备份和恢复?以test库为例,创建一个备份,并再用此备份恢复备份:
mysqldump-u用户名-p’123’-Btest>/mysql_backup/date+%F-%H-mysql-test.sql
备份之后可用mysqlbinlog查看:#mysqlbinlog/mysql_backup/2018-09-26-20-mysql-test.sql
恢复:mysql-uroot-p’123’-Dtest</mysql_backup/2018-09-26-20-mysql-test.sql
80. MySQL:主从复制集群,高可用,具体配置,关系型数据库原则,怎么在集群中实现分库分>表,锁机制
主从复制集群:
1、mysql主
①开启二进制文件:#vim/etc/my.cnf(写入如下内容)
[mysqld] log_bin server-id=1 gtid_mode=ON enforce_gtid_consistency=1
②重启服务:#systemctlrestartmysqld
③进入数据库,为从服务器授权
#mysql-uroot-p’123’
mysql>grantreplicationslave,replicationclienton*.*to‘rep‘@’IP或网段’identifiedby’123’;
mysql>flushprivileges;
2、mysql从
①测试rep用户是否可用:#mysql-h’mysql主IP’-urep-p’123’
②启动服务序:#vim/etc/my.cnf
[mysqld] log_bin server-id=2 gtid_mode=ON enforce_gtid_consistency=1
③重启服务:#systemctlrestartmysqld ④再次测试rep用户是否可用:#mysql-h’mysql主IP’-urep-p’123’ ⑤从设备上设置主服务
mysql>changemastertomaster_host=’mysql主IP’,master_user=’rep’,master_password=’123’,master_auto_position=1;(自动获取)
3、主主、多从
高可用:
①mysql主主同步
②在两台mysql上安装keepalived:#yum-yinstallkeepalived
③keepalived主备配置文件:#vim/etc/keepalived/keepalived.conf
!ConfigurationFileforkeepalived
global_defs{
router_idmysql1}
vrrp_scriptcheck_run{//定义配置健康检查脚本的配置名称check_run
script”python/root/keepalived_check_mysql.sh”
interval5//执行健康检查的时间间隔单位s(每5秒钟检查一次)}
vrrp_instanceVI_1{
stateMASTER
interfaceens33
virtual_router_id88
priority100
advert_int1//检查keepalived本身服务的时间间隔
authentication{
auth_typePASS
auth_pass1111
}
track_script{
check_run//名字必须和上面的脚本配置名称一致
}
virtual_ipaddress{
192.168.122.100devens33
} }
④编写mysql状态检测脚本(主主):
#vim/root/bin/keepalived_check_mysql.sh
#chmod755/root/keepalived_check_mysql.sh
#/etc/init.d/keepalivedstart
⑤测试及诊断
关系型数据库原则:ACID(注:数据库事务通常指对数据库进行读或写的一个操作序列)
1、A(Atomicity)原子性是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
2、C(Consistency)一致性是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。如完整性约束a存款+b存款=2000。
3、I(Isolation)隔离性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
4、D(Durability)持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失
分库:垂直拆分:按照业务垂直划分,将系统中不存在关联关系或者需要join的表可以放在不同的数据库不同的服务器中
84. 水平拆分:按照规则划分,一般水平分库是在垂直分库之后的。比如每天处理的订单数量是海量的,可以按照一定的规则水平划分
85. 读写分离:对于时效性不高的数据,可以通过读写分离缓解数据库压力
86. 分表:指将一张表按一定的规则分解成N个具有独立存储空间的实体表。
87. 常见的分表策略:1.Range(范围)2.Hash(哈希)3.按照时间拆分4.Hash之后按照分表个数取模5.在认证库中保存数据库配置,就是建立一个DB,这个DB单独保存user_id到DB的映射关系
88. 锁机制:用于保护数据的完整性,当并发事务同时访问一个资源时,有可能导致数据不一致,因此需要一种机制来将数据访问顺序化,以保证数据库数据的一致性,锁是其中的一种。
89. 请写MYSQL数据库中的SQL查询,查找customer表中uid列内大于100的记录并以uid排序,正序输出前10条记录
select * from customer where uid>100 order by uid asc limit 10;
90. 使用sql语句创建、删除数据库db_test?查询数据库列表的sql语句
创建:mysql>createdatabasedb_test;
查询:mysql>usedb_test;
mysql>showtables;
mysql>select*from表名;查内容
删除:mysql>dropdatabasedb_test;
91. 如何实现对Mysql数据库进行分库加分表备份,请用脚本实现
#!/bin/bash
user=root
pass=test
database=mysql-u$user-p"$pass"-e"showdatabases;"|sed1d|grep-v'schema'
mkdir/mysql_backup
mysql-u$user-p”$pass”-e”showdatabases;”&>/dev/null
if[$?-ne0];then
read-p”Mysqldonotrunning,startit?(yes/no):”choice
if[[“$choice”-eq”yes”]];then
systemctlstartmysqld&>/dev/null
else
echo-e”\033[31m请开启mysql服务,以过滤库、表\033[0m”
exit2
else
echo-e”\033[33m==================backupstart=====================\033[0m”
foriin$database
do
tables=mysql-u$user-p"$pass"-e"use$i;showtables;"|sed1d
forjin$tables
do
mysqldump-u$user-p”$pass”-B–databases$i–tables$j>/mysql_backup/${i}-${j}-date+%F.sql
[$?-eq0]&&echo$i-$jok>>/mysql_backup/table.log||echo$i-$jfailed>>/mysql_backup/table.log
[$?-eq0]&&echo-e”$i-$j\033[32mok!\033[0m”||echo-e”$i-$j\033[31mfailed!\033[0m”
done
done
echo-e”\033[32m==================backupcomplete===================\033[0m”
92. 如何监控MySQL主从同步是否异常?
#!/bin/bash
#Date:2018-9-27
#Author:zz(1608843551@qq.com )
#version1.0
whiletrue
do
array=($(mysql-uroot-p’123’-e”showslavestatus\G”|egrep’_Running|Behind_Master|Last_SQL_Errno’|awk’{print$NF}’))
if[“${array[0]}”==”Yes”-a”${array[1]}”==”Yes”-a”${array[2]}”==”0”]
then
echo”MySQLisslaveisok”
else
if[“${array[3]}”-ne0];then
mysql-uroot-p’123’-e”stopslave&&setglobalsql_slave_skip_counter=1;startslave;”
echo”错误代码${array[3]}”
fi
char=”MySQLslaveisnotok,错误代码${array[3]}”
echo”$char”
echo”$char”|mail-s”$char”1608843551@qq.com
fi
sleep60
done
93. Mysql备份命令是什么?Mysql如何让给用户daxiang对库daxiang授权网段为192.168.96.0/24远程访问权限,密码为daxiang@123,请写出命令
备份:物理备份:
完整备份:innobackupex--user=daxiang--password=‘daxiang@123’/xtrabackup/full
增量备份:innobackupex--user=daxiang--password=‘daxiang@123’–incremental/xtrabackup/–incremental-basedir=/xtrabackup/date+%Y-%m-%d-%H
逻辑备份:mysqldump-p‘daxiang@123’-A>/mysql_backup/date+%F-%H-mysql.sql
授权:mysql>grantallondaxiang.*todaxiang@‘192.168.96.0/24‘identifiedby‘daxiang@123’withgrantoption;
94. 数据库用于事务回滚和提交的SQL语句分别是___ROLLBACK________,COMMIT _____________。
95. 创建表空间neuspace,数据文件命名为neudata.dbf,存放在d:\data目录下,文件大小为200MB设为自动增长,增量5MB,文>件最大为500MB的SQL为_____________________。
createtablespaceneuspacedatafile‘d:\data\neudata.dbf’size200mautoextendonnext5mmaxsize500m
96. SQL语言支持数据库三级模式结构,在SQL中外模式、模式对应于_基本表全体_,内模式对应于_存储文件或数据文件_____
97. 简述数据库中索引的用法及原理
索引在mysql中也叫键,是存储引擎用于快速找到记录的一种数据结构
用法:与查阅图书是一个道理:先定位到章,然后定位到章下的一个小节,再定位到页。
原理:通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件。
98. 请写出数据库事务的ACID特性并简述唯一(UNIQUE)约束和主键(PRIMARYKEY)约束的异同点
每个表可以有多个UNIQUE约束,而只能有一个PRIMARYKEY
主键:PRIMARYKEY
约束唯一标识数据库表中的每条记录
主键必须包含唯一的值;主键不能包含NULL值
每个表都应该有一个主键,并且每个表只能有一个主键
唯一:UNIQUE
约束唯一标识数据库表中的每条记录
UNIQUE和PRIMARYKEY约束均为列或列集合提供了唯一性的保证。
PRIMARYKEY约束拥有自动定义的UNIQUE约束。
99. 解释冷备份和热备份的不同点以及各自的优点
热备份针对归档模式的数据库,再数据库仍旧处于工作状态时进行备份。而冷备份指数据库关闭后进行备份,适用于所有数据库。
不同点:
热备份:备份时数据库仍旧处于运行状态
冷备份:备份时数据处于关闭状态
优点:
热备份:在备份时,数据库仍可以使用并且可以将数据库恢复到任意一个时间点
冷备份:它的备份和恢复操作相当简单,并且冷备份可以工作在非归档模式下,数据库性能会比归档模式稍好
100. 列举三种表连接算法以及各自高性能的场景
三种连接算法:①嵌套循环连接 ②合并连接 ③Hash连接
嵌套循环连接:通常在小数据量并且语句比较简单的场景中使用
合并连接:在SQL数据库中,如果查询优化器,发现要连接的两张对象表,在连接上都已经排序并包含索引,那么优化器将会极大
可能选择“合并”连接策略。条件是:两个表都是排序的,并且两个表连接条件中至少有一个等号连接,查询分析器会去选择合并连接
Hash连接:当我们尝试将两张数据量较大,没有排序和索引的两张表进行连接时,SQLServer的查询优化器会尝试使用HashJoin
101. Mysql客户端工具中,请问如何让查询当前所有的连接进程信息
showprocesslist;
102. mysql主从,主库宕机,主从切换步骤?
主机故障或者宕机:
在salve执行:
stopslave;
resetmaster;
103. 查看是否只读模式:showvariableslike’read_only’;
104. 只读模式需要修改my.cnf文件,注释read-only=1并重启mysql服务。
105. 或者不重启使用命令关闭只读,但下次重启后失效:setglobalread_only=off;
查看showslavestatus\G;
查看showmasterstatus\G;
106. 将从库IP地址改为主库IP地址,测试应用连接是否正常。
正常切换
1、检查slave同步状态
在开始切换之前先对主库进行锁表:
flushtableswithreadlock
flushdata
切换完成后可以释放锁
2、在master执行:showprocesslist;
3、在slave执行:showprocesslist;
检查IO及SQL线程是否正常,如果为NO表明同步不一致,需要重新将slave同步保持主从数据一致。
4、停止slaveio线程
在slave执行:mysql>STOPSLAVEIO_THREAD
mysql>SHOWPROCESSLIST;
确保状态为:hasreadallrelaylog
以上都执行完成后可以把slave提升为master:
5、提升slave为master
Stopslave;
Resetmaster;
Resetslaveall;在5.6.3版本之后
Resetslave;在5.6.3版本之前
查看slave是否只读模式:showvariableslike’read_only’;
只读模式需要修改my.cnf文件,注释read-only=1并重启mysql服务。
或者不重启使用命令关闭只读,但下次重启后失效:setglobalread_only=off;
6、将原来master变为slave
在新的master上创建同步用户:
grantreplicationslaveon*.*repl@’IPofslave’identifiedby’replpwd’;
在新的slave上重置binlog:
Resetmaster;
changemastertomaster_host=’192.168.0.104’,//Master服务器Ip
master_port=3306,
master_user=’repl’,
master_password=’replpwd’,
master_log_file=’master-bin.000001’,//Master服务器产生的日志
master_log_pos=?;//masterbinlogpos
以上最后两步可以在master执行:showmasterstatus
启动slave:startslave;并查看slave状态:showslavestatus\G;
107. 如何让校验主从数据不一致?出现不一致时如何处理?
pt-table-check#监测主从一致
数据库不支持emoji表情,如何操作让数据库支持?
修改库级别的字符集:更换字符集utf8–>utf8mb4
utf8与utf8mb4说明:
UTF-8:UnicodeTransformationFormat-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。
UTF8MB4:MySQL在5.5.3之后增加了utf8mb4的编码,mb4就是mostbytes4的意思,专门用来兼容四字节的unicode。
表中有大字段X(例如:text类型),且字段X不会经常更新,以读写为主,请问:
(1)您是选择拆成子表,还是继续放在一起;
(2)写出您这样选择的理由
拆成字表
理由:避免大数据被频繁的从buffer重换进换出,影响其他数据的缓存;
108. MySQLbinlog的几种日志录入格式以及区别
(1)binlog的日志格式的种类和分别
(2)适用场景
(3)结合第一个问题,每一种日志格式在复制中的优劣
109. 三种日志格式:StatementMiXEDROW
1.Statement:每一条会修改数据的sql都会记录在binlog中。
优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。(相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该跟据应用的实际情况,其所产生的日志量会增加多少,以及带来的IO性能问题。)
缺点:由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同的结果。另外mysql的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数,last_insert_id(),以及user-definedfunctions(udf)会出现问题).
2.Row:不记录sql语句上下文相关信息,仅保存哪条记录被修改。
优点:binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以rowlevel的日志内容会非常清楚的记录下每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题
缺点:所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行altertable之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中。
3.Mixedlevel:是以上两种level的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种.新版本的MySQL中队rowlevel模式也被做了优化,并不是所有的修改都会以rowlevel来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。
https://blog.csdn.net/vhomes/article/details/8082734
110. MySQL数据库cpu飙升到500%的话他怎么处理?
(1)多实例的服务器,先top查看是那一个进程,哪个端口占用CPU多;
(2)showprocesseslist查看是否由于大量并发,锁引起的负载问题;
(3)否则,查看慢查询,找出执行时间长的sql;explain分析sql是否走索引,sql优化;
(4)再查看是否缓存失效引起,需要查看buffer命中率;
111. SQL优化中explain各字段的含义
table:显示这一行的数据是关于哪张表
type:这是重要的列,显示连接使用了何种类型。
possible_keys:显示可能应用在这张表的索引
key:实际使用的索引
key_len:使用的索引的长度
ref:显示索引的哪一列被使用了
rows:mysql认为必须检查的用来返回请求数据的行数
extra:关于mysql如何解析查询的额外信息
Distinct:一旦mysql找到了与行相匹配的行,就不再搜索
Notexists:MYSQL优化了LEFTJOIN,一旦它找到了匹配LEFTJOIN标准的行,就不再搜索了
RangecheckedforeachRecord(indexmap:#):没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
Usingfilesort:看到这个的时候,查询就需要优化了。
Usingindex:列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候
Usingtemporary看到这个的时候,查询需要优化了
const:表中的一个记录的最大值能够匹配这个查询
range:这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况
index:这个连接类型对前面的表中的每一个记录联合进行完全扫描
ALL:这个连接类型对于前面的每一个记录联合进行完全扫描
https://blog.csdn.net/u012888052/article/details/79499796
112. 请写下命令在MYSQL数据库中检查当前从库的同步状态,然后将同步配置修改为binlog文件”mysql-bin.000001”,偏移量为”4”。
检查状态:
mysql>showslavestatus
Slave_IO_RunningI/O线程是否被启动并成功地连接到主服务器上。(状态信息为YesNo)
Slave_SQL_RunningSQL线程是否被启动(状态信息为YesNo)
Seconds_Behind_Master测量SQL线程和I/O线程的时间差(即延迟,单位为秒)
mysql通过mysqldump命令如何做全量和增量备份
全量备份:
mysqldump-u用户名-p密码数据库名>备份文件.sql
增量备份:
每日定时使用MySQLadminflush-logs来创建新日志,恢复增量备份时恢复全量备份之后的binlog
例如: mysqlMySql-bin.000002|MySQL-uroot-p密码
113. 如何用mysql命令进程备份和恢复?以test库为例,创建一个备份,并再用此备份进行恢复
备份:
mysqldump-uroot-p密码test>备份文件.sql
恢复: mysql-uroot-p密码<备份文件.sql
Mysql创建数据库的命令,创建表的命令,插入语句的命令?
创建库的命令: createdatabase库名;
创建表的命令: createtable表名;
插入表的语句: insertinto表名(记录); 数据库中有一个6亿的表a,一个3亿的表b,通过外键tid进行关联。
114. 你如何最快的查询出:满足条件的第50000到第50200中的这200条数据记录?
select*froma,bwherea.tid=b.tidanda.tidBETWEEN50000AND50200;
115. 对于数据库备份正确的做法是什么?
同时使用多个备份设备,使得备份可以同时写入所有设备。同样,也可以同时从多个设备还原备份。
使用数据库备份、差异数据库备份和事务日志备份的组合,使得将数据库恢复到故障点所用的备份数量减到最少
使用文件和文件组备份以及事务日志备份,使得可以只备份或还原那些包含相关数据的文件,而不用备份整个数据库。
使用快照备份将备份和还原时间减到最少。
有如下表的结构:
emp员工表(empno员工号/ename员工姓名/job工作/mgr上级编号/hiredate受雇日期
/sal薪金/comm佣金/deptno部门编号)
dept部门表(deptno部门编号/dname部门名称/loc地点)
建表语句为:
CREATETABLEDEPT–部门表
(DEPTNOintCONSTRAINTPKDEPTPRIMARYKEY,–部门编号
DNAMEVARCHAR(14),–部门名称
LOCVARCHAR(13) –所在地点
);
CREATETABLEEMP –员工表
(EMPNOintCONSTRAINTPKEMPPRIMARYKEY, –员工号
ENAMEVARCHAR(10), –员工姓名
JOBVARCHAR(9), –工作
MGRint, –上级编号
HIREDATEDATE, –受雇日期
SALfloat , –薪金
COMMfloat, –佣金
DEPTNOintCONSTRAINTFKDEPTNOREFERENCESDEPT –部门编号
);
完成下面的SQL语句:
116. 1.列出至少有一个员工的所有部门
selectdistinctEMP.DEPTNO,DEPT.DNAMEfromEMP,DEPTwhereEMP.DEPTNO=DEPT.DEPTNO
2.列出所有员工的姓名及其上级的姓名
selectename,(selectenamefromempwhereempnoin(emp.mgr))fromemp;
3.列出受雇日期晚于其直接上级的所有员工
selectempno,enamefromempawherehiredate>(selecthiredatefromempwhereempno=a.mgr);
4.列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门
selectdname,emp.*fromdept,empwheredept.deptno=emp.deptno;
5.列出薪金高于公司平均薪金的所有员工
selectempnofromempwheresal>(avg(sal));
6.列出与“SCOTT”从事相同工作的所有员工
selectenamefromempwherejob=(selectjobformempwhereename=SCOTT)andenamenotin(SCOTT);
7.列出所有员工的姓名、部门名称和工资
selectename,dname,(sal+nvl(comm,0))fromemp,deptwhereemp.deptno=dept.deptno
8.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金
select*fromempwheresal>all(selectsalfromempwheredeptno=30);
9.列出所有部门的详细信息(包括部门表的所有字段)和部门人数
selectfromdeptaleftjoin(selectdeptno,count( )fromempgroupbydeptno)bona.deptno=b.deptno;
10.列出各种工作的最低工资
selectjobmin(sal+nvl(comm,0))fromempgroupbyjob
117. 事务有几大特性?分别代表什么意思?
事务的四种隔离级别
1.原子性(atomicity):事务是一个完整的操作。事务的各步操作是不可分的;要么都执行、要么都不执行。
2.一致性(consistency):当事务完成时,数据必须处于一致状态。
3.隔离性(isolation):对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务。
4.持久性(durability):事务完成后,它对数据库的修改被永久保存,事务日志能保持事务的永久性。
事务的四种隔离级别?
隔离级别分为:
ReadUncommitted(读未提交)、ReadCommitted(读提交)、RepeatableRead(可以重复读)、Serializable(序列化)
事务是如何让通过日志来实现的(Redo)?
在Innodb存储引擎中,事务日志是通过redo和innodb的存储引擎日志缓冲(Innodblogbuffer)来实现的,当开始一个事务的时候,会记录该事务的lsn(logsequencenumber)号;当事务执行时,会往InnoDB存储引擎的日志的日志缓存里面插入事务日志;当事务提交时,必须将存储引擎的日志缓冲写入磁盘(通过innodb_flush_log_at_trx_commit来控制),也就是写数据前,需要先写日志。这种方式称为“预写日志方式”,
innodb通过此方式来保证事务的完整性。也就意味着磁盘上存储的数据页和内存缓冲池上面的页是不同步的,是先写入redolog,然后写入datafile,因此是一种异步的方式。通过showengineinnodbstatus\G来观察之间的差距
118. 为100G的MySQL的数据库制定备份计划,简述mysqldump以及xtranbackup的实现
原理
(1)备份计划:
(2)xtrabackup实现原理
mysqldump属于逻辑备份。加入–single-transaction选项可以进行一致性备份。后台进程会先设置session的事务隔离级别为RR(SETSESSIONTRANSACTIONISOLATIONLEVELREPEATABLEREAD),之后显式开启一个事务(STARTTRANSACTION/!40100WITHCONSISTENTSNAPSHOT /),这样就保证了该事务里读到的数据都是事务事务时候的快照。之后再把表的数据读取出来。如果加上–master-data=1的话,在刚开始的时候还会加一个数据库的读锁(FLUSHTABLESWITHREADLOCK),等开启事务后,再记录下数据库此时binlog的位置(showmasterstatus),马上解锁,再读取表的数据。等所
有的数据都已经导完,就可以结束事务。
xtrabackup属于物理备份,直接拷贝表空间文件,同时不断扫描产生的redo日志并保存下来。最后完成innodb的备份后,会做一个flushenginelogs的操作(老版本在有bug,在5.6上不做此操作会丢数据),确保所有的redolog都已经落盘(涉及到事务的两阶段提交概念,因为xtrabackup并不拷贝binlog,所以必须保证所有的redolog都落盘,否则可能会丢最后一组提交事务的数据)。这个时间点就是innodb完成备份的时间点,数据文件虽然不是一致性的,但是有这段时间的redo就可以让数据文件达到一致性(恢复的时候做的事情)。然后还需要flushtableswithreadlock,把myisam等其他引擎的表给备份出来,备份完后解锁。这样就做到了完美的热备。
备份计划:视库的大小来定,一般来说100G内的库,可以考虑使用mysqldump来做,因为mysqldump更加轻巧灵活,备份时间选在业务低峰期,可以每天进行都进行全量备份(mysqldump备份出来的文件比较小,压缩之后更小)。
100G以上的库,可以考虑用xtranbackup来做,备份速度明显要比mysqldump要快。一般是选择一周一个全备,其余每天进行增量备份,备份时间为业务低峰期。
备份恢复时间:物理备份恢复快,逻辑备份恢复慢
备份恢复失败如何处理
1 首先在恢复之前就应该做足准备工作,避免恢复的时候出错。比如说备份之后的有效性检查、权限检查、空间检查等。如果万一报错,再根据报错的提示来进行相应的调整。
Mysql的复制原理以及流程,简述基本原理流程,3个线程以及之间的关联
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 mysql主从复制原理: 从库有两个线程IO线程和SQL线程 1.从库的IO线程向主库的主进程发送请求,主库验证从库,交给主库IO线程负责数据传输; 2.主库IO线程对比从库发送过来的master.info里的信息,将binlog文件信息,偏移量和binlog文件名等发送给从库 3.从库接收到信息后,将binlog信息保存到relay-bin中,同时更新master.info的偏移量和binlog文件名 4.从库的SQL线程不断的读取relay-bin的信息,同时将读到的偏移量和文件名写道relay-log.info文件,binlog信息写进自己的数据库,一次同步操作完成。 5.完成上次同步后,从库IO线程不断的向主库IO线程要binlog信息 6.从库如果也要做主库,也要打开log_bin和log-slave-update参数
配置读写mysql主从复制的步骤
1 2 3 4 5 6 7 8 9 10 11 1.在主库与从库都安装mysql数据库 2.在主库的配置文件(/etc/my.cnf)中配置server-id和log-bin 3.在登陆主库后创建认证用户并做授权。 4.在从库的配置文件(/etc/my.cnf)中配置server-id 5.登陆从库后,指定master并开启同步开关。 需要注意的是server-id主从库的配置是不一样的。
Server-id存在作用:
1 2 3 mysql同步的数据中是包含server-id的,而server-id用于标识该语句最初是从哪个server写入的。因此server-id一定要有的 Server-id不能相同的原因:每一个同步中的slave在master上都对应一个master线程,该线程就是通过slave的server-id来标识的;每个slave在master端最多有一个master线程,如果两个slave的server-id相同,则后一个连接成功时,slave主动连接master之后,如果slave上面执行了slavestop;则连接断开,但是master上对应的线程并没有退出;当slavestart之后,master不能再创建一个线程而保留原来的线程,那样同步就可能有问题;
MySQL中myisam与innodb的区别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 (1)不同点有哪些? 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC,而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。 1、存储结构 MyISAM:每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件的扩展名为.MYD(MYData)。索引文件的扩展名是.MYI(MYIndex) InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。 2、存储空间 MyISAM:可被压缩,存储空间较小。支持三种不同的存储格式:静态表(默认,但是注意数据末尾不能有空格,会被去掉)、动态表、压缩表。 InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 3、可移植性、备份及恢复 MyISAM:数据是以文件的形式存储,所以在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进行操作。 InnoDB:免费的方案可以是拷贝数据文件、备份binlog,或者用mysqldump,在数据量达到几十G的时候就相对痛苦了。 4、事务支持 MyISAM:强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持。 InnoDB:提供事务支持事务,外部键等高级数据库功能。具有事务(commit)、回滚(rollback)和崩溃修复能力(crashrecoverycapabilities)的事务安全(transaction-safe(ACIDcompliant))型表。 5、AUTO_INCREMENT MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。 InnoDB:InnoDB中必须包含只有该字段的索引。引擎的自动增长列必须是索引,如果是组合索引也必须是组合索引的第一列。 6、表锁差异 MyISAM:只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。 InnoDB:支持事务和行级锁,是innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有效的,非主键的WHERE都会锁全表的。 7、全文索引 MyISAM:支持FULLTEXT类型的全文索引 InnoDB:不支持FULLTEXT类型的全文索引,但是innodb可以使用sphinx插件支持全文索引,并且效果更好。 8、表主键 MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。 InnoDB:如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。 9、表的具体行数 MyISAM:保存有表的总行数,如果selectcount(*)fromtable;会直接取出出该值。 InnoDB:没有保存表的总行数,如果使用selectcount(*)fromtable;就会遍历整个表,消耗相当大,但是在加了wehre条件后,myisam和innodb处理的方式都一样。 10、CURD操作 MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。 InnoDB:如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE从性能上InnoDB更优,但DELETEFROMtable时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用truncatetable这个命令。 11、外键 MyISAM:不支持 InnoDB:支持 (2)两种引擎者selectcount(*)哪个更快,为什么? innodb引擎的表在使用selectcount的时候,如果表的总行数在1-2万条以内,速度应该不是瓶颈,但是一旦超过了这个值,随着行数的增多,selectcount查询效率会迅速的下降。 测试表大约4.3万行 Myisam引擎: SELECTSQL_NO_CACHECOUNT(*)FROM`roundmember2` 耗费105微秒 innodb引擎: 耗费10335微秒 可以看出innodb引擎耗时是myisam引擎的98倍!这还是仅仅是4万多行的数据下测试的差距,随着记录行的增加,这个差距会越来越大。 MyISAM会保存表的总行数,这段代码在MyISAM存储引擎中执行,MyISAM只要简单地读出保存好的行数即可。因此,如果表中没有使用事务之类的操作,这是最好的优化方案。然而,innodb表不像myisam有个内置的计数器,InnoDB存储引擎不会保存表的具体行数,因此,在InnoDB存储引擎中执行这段代码,InnoDB要扫描一遍整个表来计算有多少行。 http://www.piaoyi.org/database/MySQL-INNODB-SELECT-COUNT.html
MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义
1 2 3 4 5 6 7 8 9 10 11 (1)varchar与char的区别 CHAR(char):固定长度,最多255个字符 VARCHAR(varchar):固定长度,最多65535个字符 CHAR的长度是固定的 VARCHAR长度是可以变化的 固定与可变是针对存储介质(硬盘)来说的 (2)varchar(50)中50的涵义 ----- 设置表里的最多字符是50 (3)int(9)中9的涵义 ----- 设置表里整数的最多数字是9个字节
mysqldump中备份出来的sql,如果我想sql文件中,一行只有一个insert…value()的话,怎么办?如果备份需要带上master的复制点信息怎么办?
1 2 1).--skip-extended-insert 2).--master-date=1
mysql的架构,怎么保证它的安全性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1、避免从互联网访问MySQL数据库,确保特定主机才拥有访问特权 2、禁用或限制远程访问 3、定期备份数据库 4、设置root用户的口令并改变其登录名 5、移除测试(test)数据库 6、禁用LOCALINFILE 7、移除匿名账户和废弃的账户 8、降低系统特权 9、降低用户的数据库特权 10、移除和禁用.mysql_history文件 11、保持数据库为最新稳定版本,因为攻击者可以利用上一个版本的已知漏洞来访问企业的数据库。 12、启用日志 13、改变root目 14、禁用LOCALINFILE命令 http://dev.yesky.com/429/35432929.shtml
Redis 你配置过哪些redis的参数,作用是什么?
1 2 3 4 5 6 port 6379 Redis默认监听端口 指定日志输出的文件名,可设为/dev/null屏蔽日志 logfile "" 保存数据到disk的策略:900 秒有 1 条改变保存到disk save 900 1 300 秒有 10 条改变保存到disk save 300 10 60 秒有 10000 条改变保存到disk save 60 10000 本地数据库存放路径,默认值为 ./ dir ./
redis有几种高可用方案,每个方案的优缺点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Redis多副本(主从) 优点: 1、高可靠性,一方面,采用双机主备架构,能够在主库出现故障时自动进行主备切换,从库提升为主库提供服务,保证服务平稳运行。另一方面,开启数据持久化功能和配置合理的备份策略,能有效的解决数据误操作和数据异常丢失的问题。 2、读写分离策略,从节点可以扩展主库节点的读能力,有效应对大并发量的读操作。 RedisSentinel: 1、RedisSentinel集群部署简单 2、能够解决Redis主从模式下的高可用切换问题 3、很方便实现Redis数据节点的线形扩展,轻松突破Redis自身单线程瓶颈,可极大满足对Redis大容量或高性能的业务需求。 4、可以实现一套Sentinel监控一组Redis数据节点或多组数据节点 RedisCluster 1、无中心架构 2、数据按照slot存储分布在多个节点,节点间数据共享,可动态调整数据分布。 3、可扩展性,可线性扩展到1000多个节点,节点可动态添加或删除。 4、高可用性,部分节点不可用时,集群仍可用。通过增加Slave做standby数据副本,能够实现故障自动failover,节点之间通过gossip协议交换状态信息,用投票机制完成Slave到Master的角色提升。 5、降低运维成本,提高系统的扩展性和可用性。
redis的备份方式,有没有做过redis集群
1 2 3 RDB(RedisDataBase)是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上; AOF(AppendOnlyFile)则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令(每秒钟)记录在日志中,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。
redis有几种持久化存储化的方式?工作原理?两者是否能够共存?
1 2 3 4 5 6 7 8 9 有2种:AOF和RDB RDB方式原理:当redis需要做持久化时(执行SAVA或者BGSAVA命令,或者是达到配置条件时执行),redis会fork一个子进程,子进程将数据写到磁盘上一个临时RDB文件中,当子进程完成写临时文件后,将原来的RDB替换掉(默认文件名为dump.rdb) AOF方式原理:AOF可以做到全程持久化,Redis每执行一个修改数据的命令,都会把这个命令添加到AOF文件中,当Redis重启时,将会读取AOF文件进行“重放”以恢复到Redis关闭前的最后时刻。由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。这样aof方式的持久化也还是有可能会丢失部分修改。不过我们可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。 可以共存 redis两种存储的文件格式 rdb /aof
redis主从集群的配置 AB / mysql-cluster / galera
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 主从配置 master: bind0.0.0.0//监控本地所有网卡IP protected-modeno 客户端连到服务器查看复制信息: >inforeplication slave1: bind0.0.0.0 slaveofmaster_ipmaster_port//修改master_ip和port protected-modeno 客户端连到服务器查看复制信息: >inforeplication slave2: bind0.0.0.0 slaveofmaster_ipmaster_port protected-modeno 客户端连到服务器查看复制信息: >inforeplication -------------------- 哨兵模式:1主2从做好最少3台机器 配置哨兵模式: 每台机器上修改redis主配置文件设置:bind0.0.0.0 每台机器上修改sentinel.conf配置文件:添加如下配置 sentinelmonitormymaster10.0.0.13763791 sentineldown-after-millisecondsmymaster3000 sentinelfailover-timeoutmymaster10000 protected-modeno 每台机器启动服务: #./src/redis-sentinelsentinel.conf 注意:每台机器的防火墙 配置解析: sentinelmonitormymaster10.0.0.13763792 这一行代表sentinel监控的master的名字叫做mymaster,地址为10.0.0.137,行尾最后的一个2代表什么意思呢?我们知道,网络是不可靠的,有时候一个sentinel会因为网络堵塞而误以为一个masterredis已经死掉了,当sentinel集群式,解决这个问题的方法就变得很简单,只需要多个sentinel互相沟通来确认某个master是否真的死了,这个2代表,当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。(sentinel集群中各个sentinel也有互相通信,通过gossip协议)。 sentineldown-after-millisecondsmymaster3000 sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了(subjectivelydown,也简称为SDOWN)。而这个down-after-milliseconds就是用来指定这个“一定时间范围”的,单位是毫秒。
1、什么是redis?
redis是一个高性能的key-value数据库,它是完全开源免费的,而且redis是一个NOSQL类型数据库,是为了解决高并发、高扩展,大数据存储等一系列的问题而产生的数据库解决方案,是一个非关系型的数据库。
2、Reids的特点
Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。
Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此外单个value的最大限制是1GB,不像 memcached只能保存1MB的数据,因此Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现一个轻量级的高性 能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存入的Key-Value设置expire时间,因此也可以被当作一 个功能加强版的memcached来用。
Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
3、使用redis有哪些好处?
1)速度快,因为数据存在内存中,不需要读取硬盘
2)支持丰富数据类型,支持string,list,set,sorted set,hash
4、redis相比memcached有哪些优势?
1)memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
2)redis的速度比memcached快很多
3)redis可以持久化其数据
4、Memcache与Redis的区别都有哪些?
1)存储方式 Memecache把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小。Redis有部份存在硬盘上,这样能保证数据的持久性。
2)数据支持类型 Memcache对数据类型支持相对简单。Redis有复杂的数据类型。
3)使用底层模型不同 它们之间底层实现方式 以及与客户端之间通信的应用协议不一样。Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
5、redis常见性能问题和解决方案
1)Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。
2)Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志文件,特别是不要启用内存快照做持久
化,如果数据比较关键,某个Slave开启AOF备份数据,策略为每秒同步一次。
3)Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,导致服务load过高,出现短暂服务暂停现象。
4)Redis主从复制的性能问题,为了主从复制的速度和连接的稳定性,Slave和Master最好在同一个局域网内。
6、redis的并发竞争问题如何解决?
Redis为单进程单线程模式,采用队列模式将并发访问变为串行访问。Redis本身没有锁的概念,Redis对于多个客户端连接并不存在竞争,但是在Jedis客户端对Redis进行并发访问时会发生连接超时、数据转换错误、阻塞、客户端关闭连接等问题,这些问题均是
由于客户端连接混乱造成。对此有2种解决方法:
1)客户端角度,为保证每个客户端间正常有序与Redis进行通信,对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized。
2)服务器角度,利用setnx实现锁。注:对于第一种,需要应用程序自己处理资源的同步,可以使用的方法比较通俗,可以使用synchronized也可以使用lock;第二种需要用到Redis的setnx命令,但是需要注意一些问题。
假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如果将它们全部找出来?
使用keys指令可以扫出指定模式的key列表。
*对方接着追问:如果这个redis正在给线上的业务提供服务,那使用keys指令会有什么问题?*
因为redis是单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时候可以使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间会比直接用keys指令长。
使用过Redis做异步队列么,你是怎么用的?
一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。
*对方追问可不可以不用sleep呢?*
ist还有个指令叫blpop,在没有消息的时候,它会阻塞住直到消息到来。
*对方追问能不能生产一次消费多次呢?*
使用pub/sub主题订阅者模式,可以实现1:N的消息队列。
*对方追问pub/sub有什么缺点?*
在消费者下线的情况下,生产的消息会丢失,得使用专业的消息队列如rabbitmq等。
*对方追问redis如何实现延时队列?*
使用sortedset,拿时间戳作为score,消息内容作为key调用zadd来生产消息,消费者用zrangebyscore指令获取N秒之前的数据轮询进行处理。
如果有大量的key需要设置同一时间过期,一般需要注意什么?
如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。
Redis如何做持久化的?
bgsave做镜像全量持久化,aof做增量持久化。因为bgsave会耗费较长时间,不够实时,在停机的时候会导致大量丢失数据,所以需要aof来配合使用。在redis实例重启时,会使用bgsave持久化文件重新构建内存,再使用aof重放近期的操作指令来实现完整恢复重启之前的状态。
*对方追问那如果突然机器掉电会怎样?*
取决于aof日志sync属性的配置,如果不要求性能,在每条写指令时都sync一下磁盘,就不会丢失数据。但是在高性能的要求下每次都sync是不现实的,一般都使用定时sync,比如1s1次,这个时候最多就会丢失1s的数据。
*对方追问bgsave的原理是什么?*
给出两个词汇就可以了,fork和cow。
fork是指redis通过创建子进程来进行bgsave操作,cow指的是copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。
Redis的同步机制了解么?
Redis可以使用主从同步,从从同步。第一次同步时,主节点做一次bgsave,并同时将后续修改操作记录到内存buffer,待完成后将rdb文件全量同步到复制节点,复制节点接受完成后将rdb镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。
是否使用过Redis集群,集群的原理是什么?
Redis Sentinal着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。
Redis Cluster着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。
MongoDB mongdb的储存引擎,查库查表,查看数据,怎么将库里面的数据导出来
在2015/3/17以前,MongoDB只有一个存储引擎,叫做MMAP,MongoDB3.0的推出使得MongoDB有了两个引擎:MMAPv1和WiredTiger。
>db.stats()
{
“db”:”demo”,
“collections”:3,
“objects”:5,
“avgObjSize”:55.2,
“dataSize”:276,
“storageSize”:16384,
“numExtents”:3,
“indexes”:1,
“indexSize”:8176,
“fileSize”:50331648,
“nsSizeMB”:16,
“ok”:1
}
2、查看数据库表
>db.system.users.stats()
{
“ns”:”demo.system.users”,
“count”:1,
“size”:92,
“avgObjSize”:92,
“storageSize”:8192,
“numExtents”:1,
“nindexes”:1,
“lastExtentSize”:8192,
“paddingFactor”:1,
“systemFlags”:1,
“userFlags”:0,
“totalIndexSize”:8176,
“indexSizes”:{
“id “:8176
},
“ok”:1
}
db的帮助文档
输入:db.help();
db.AddUser(username,password[,readOnly=false])添加用户
db.auth(usrename,password)设置数据库连接验证
db.cloneDataBase(fromhost)从目标服务器克隆一个数据库
db.commandHelp(name)returnsthehelpforthecommand
db.copyDatabase(fromdb,todb,fromhost)复制数据库fromdb—源数据库名称,todb—目标数据库名称,fromhost—源数据库服务器地址
db.createCollection(name,{size:3333,capped:333,max:88888})创建一个数据集,相当于一个表
db.currentOp()取消当前库的当前操作
db.dropDataBase()删除当前数据库
db.eval(func,args)runcodeserver-side
db.getCollection(cname)取得一个数据集合,同用法:db[‘cname’]or
db.getCollenctionNames()取得所有数据集合的名称列表
db.getLastError()返回最后一个错误的提示消息
db.getLastErrorObj()返回最后一个错误的对象
db.getMongo()取得当前服务器的连接对象gettheserver
db.getMondo().setSlaveOk()allowthisconnectiontoreadfromthennonmastermembrofareplicapair
db.getName()返回当操作数据库的名称
db.getPrevError()返回上一个错误对象
db.getProfilingLevel()获取profilelevel
db.getReplicationInfo()获得重复的数据
db.getSisterDB(name)getthedbatthesameserverasthisonew
db.killOp()停止(杀死)在当前库的当前操作
db.printCollectionStats()返回当前库的数据集状态
db.printReplicationInfo()打印主数据库的复制状态信息
db.printSlaveReplicationInfo()打印从数据库的复制状态信息
db.printShardingStatus()返回当前数据库是否为共享数据库
db.removeUser(username)删除用户
db.repairDatabase()修复当前数据库
db.resetError()
db.runCommand(cmdObj)runadatabasecommand.ifcmdObjisastring,turnsitinto{cmdObj:1}
db.setProfilingLevel(level)设置profilelevel0=off,1=slow,2=all
db.shutdownServer()关闭当前服务程序
db.stats()返回当前数据库的状态信息
db.version()返回当前程序的版本信息
./mongoexport-dmy_mongodb-cuser-ouser.dat
root@localhostbin]#./mongoexport-dmy_mongodb-cuser-ouser.dat
connectedto:127.0.0.1
exported2records
[root@localhostbin]# catuser.dat
{“_id”:{“$oid”:”4f81a4a1779282ca68fd8a5a”},”uid”:2,”username”:”Jerry”,”age”:100}
{“_id”:{“$oid”:”4f844d1847d25a9ce5f120c4”},”uid”:1,”username”:”Tom”,”age”:25}
参数说明
-d指明使用的库,本例中为”my_mongodb”
-c指明要导出的表,本例中为”user”
-o指明要导出的文件名,本例中为”user.dat”
脚本 在ADMIN管理机上,并发查看APP1和APP2两台主机内存使用情况
列出/etc/init.d/file文件中包含save字段的行
1 cat /etc/init.d/file |grep save
查看文件最后10行内容
实时查看日志文件
针对Linux6、7系统简述常用运维或自动运维巡检的shell、python脚本。
查看内存使用率,CPU负载,I/O,磁盘使用率及这台服务器上的应用监控以Nginx为列查看其端口是否开启
批量修改文件或目录权限最好的办法是什么?
编写一个并发执行查询的shell执行文件exec_sql.sh,有以下要求:第一、实现脚本输入两个参数,第一个参数为存储sql语句的文件(可能存储1000条查询,语句之间用分号隔开),第二个参数为最大并发度,
1 例如:./exec_sql.sh./sql1000.sql8 第二、要求所有语句执行完脚本才可以退出 第三、记录开始时间、结束时间、每条语句的执行结果重定向到一个文件 第四、使用sqlplus命令行工具执行所需查询语句
现有a和b两个文件,将a和b文件的内容输出到c文件里,按要求写入到c文件里.
1 2 3 4 5 6 7 8 9 10 11 12 1 a 2 b 3 c a文件内容 1 2 3 b文件内容 a b c awk '{a[NR]=$0}END{printa[1]"\n"a[4]"\n"a[2]"\n"a[5]"\n"a[3]"\n"a[6]}' ab >>c
现有两个文件里面分别有3行内容,现将两个文件里面的内容放到第三个文件里,要求是交叉放到两个文件里,一条命令如何解决?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 一个比较粗糙的答案: #awk'NR==1{a=$0};NR==2{b=$0};NR==3{c=$0};NR==4{d=$0};NR==5{e=$0};NR==6{f=$0}END{printa,"\n"d,"\n"b,"\n"e,"\n"c,"\n"f}'a.txtb.txtaaa 111 bbb 222 ccc 333 用数组处理: #awk'{a[NR]=$0}END{printa[1]"\n"a[4]"\n"a[2]"\n"a[5]"\n"a[3]"\n"a[6]}'a.txtb.txt Aaa 111 bbb 222 ccc 333
查看http并发请求数及连接状态的命令关键字分别是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@web1~]#netstat-nt ActiveInternetconnections(w/oservers) ProtoRecv-QSend-QLocalAddressForeignAddressState tcp0010.18.45.108:8010.18.45.47:63136SYN_RECV tcp05210.18.45.108:2210.18.45.47:52455ESTABLISHED tcp60010.18.45.108:8010.18.45.47:63133ESTABLISHED tcp60010.18.45.108:8010.18.45.47:63135ESTABLISHED netstat-nt|awk'/^tcp/{++S[$NF]}END{for(ainS)printS[a],a}' 1SYN_RECV 3ESTABLISHED 2TIME_WAIT SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。 状态:描述 CLOSED:无连接是活动的或正在进行 LISTEN:服务器在等待进入呼叫 SYN_RECV:一个连接请求已经到达,等待确认 SYN_SENT:应用已经开始,打开一个连接 ESTABLISHED:正常数据传输状态 FIN_WAIT1:应用说它已经完成 FIN_WAIT2:另一边已同意释放 ITMED_WAIT:等待所有分组死掉 CLOSING:两边同时尝试关闭 TIME_WAIT:另一边已初始化一个释放 LAST_ACK:等待所有分组死掉
Linux系统统计服务器服务连接数命令?
1 2 3 4 5 netstat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}' 或是 netstat-nat|grepESTABLISHED|wc-l
每五分钟ping www.wanmel.com 100次,将错误和正确的输出覆盖到/root/network.log
linux系统中如何获取pid为1000的进程所监听的tcp端口,请写出详细命令?
1 ss -anpt|grep 1000|awk '{print $4}'|awk -F":" '{print $2}'
请使用awk,sed,grep三个命令,举例写出命令语句
1 2 3 awk -F':' '{print $1}' filename sed -i.bak 's/a/A/' filename grep 'hello world' filename
使用sed将文件file.txt中test替换为abc.com写出命令
1 sed -i 's/test/abc.com/g' file.txt
写一个脚本查找最后创建时间是3天前,后缀是*.log的文件并删除。
1 2 # vim t.sh find / -name '*.log' -and -mtime +3 -exec rm -rf {} \;
通过访问日志access. log统计每个ip地址的访问次数,按访问量列出前10名。日志格式样例如下
192.167.1.250 [02/Ju1/2010:23:44:59 +0800] “GET / HTTP/1.1”200 19
192.167.1.247 [02/Ju1/2010:23:44:59 +0800] “GET / HTTP/1.1”200 19
192.167.1.247 [02/Ju1/2010:23:44:59 +0800] “GET / HTTP/1.1”200 19
192.167.1.247 [02/Ju1/2010:23:44:59 +0800] “GET / HTTP/1.1”200 19
1 awk '{print $1}' access.log | sort |uniq -c |sort -r
下列对shell 变量 FRUIT 操作,正确的是:(C) A. 为变量赋值: $FRUIT=apple B. 显示变量的值: FRUIT=apple C. 显示变量的值: echo $FRUIT D. 判断变量是否有值:[ -f ‘$FRUIT’ ]
写出输出数字0到100中3的倍数(0 3 6 9…) 的命令?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 for i in {1..100}do if [ $[i % 3] -eq 0 ];then echo $i fi done 3 6 9 3 6 9
Linux系统统计务器服务连接数命令?
1 2 本题答案以tcp连接数为例 # netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c
1、写一个脚本实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符
1 2 3 4 5 6 7 8 9 #!/bin/bash #description: useradd for i in seq 1 20 do pwd=$(cat /dev/urandom | head -1 | md5sum | head -c 5) useradd user$i echo "user$i$pwd" | passwd --stdin user$i echo user$i user$i$pwd" >> userinfo.txt done
2、请试着写出一个杀死进程http的shell脚本
1 2 3 4 5 pid=`pgrep httpd` for i in $pid do kill -9 $i done
3、请利用shell开发一个rsync服务的启动停止脚本并通过chkconfig进行开关机管理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 说明: A:rsync服务的PID文件路径为:/var/run/rsyncd.pid B:rsync服务的启动命令为:rsync --daemon C:rsync服务的停止命令为:kill -USR2 `cat /var/run/rsyncd.pid` && rm -f /var/run/rsyncd.pid 启动脚本 RETVAL=0 Pid=/var/run/rsyncd.pid if [ $UID -ne $RETVAL ];then echo "Must be root to run scripts" exit 1 fi [ -f /etc/init.d/functions ] && source /etc/init.d/functions start (){ if [ ! -f "$Pid " ];then rsync --daemon RETVAL=$? if [ $RETVAL -eq 0 ];then action "Start rsync service" /bin/true else action "Start rsync service" /bin/false fi else echo "Rsync is running" exit 1 fi return $RETVAL } stop (){ if [ -f "$Pid " ];then kill -USR2 $(cat $Pid ) find /var/run -maxdepth 1 -type f -name "rsyncd.pid" |xargs rm -f RETVAL=$? if [ $RETVAL -eq 0 ];then action "Stop rsync service" /bin/true else action "Stop rsync service" /bin/false fi else echo "Rsync is not running" exit 1 fi return $RETVAL } status (){ if [ -f "$Pid " ];then echo "Rsync is running" else echo "Rsync is not running" fi return $RETVAL } case "$1 " in start) start RETVAL=$? ;; stop) stop RETVAL=$? ;; restart) stop sleep 2 start RETVAL=$? ;; status) status RETVAL=$? ;; *) echo "USAGE:$0 {start|stop|restart|status}" exit 1 esac exit $RETVAL
4、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的ip有哪些。
1 2 3 4 5 6 7 8 9 10 11 12 13 #!/bin/bash for ip in `seq 1 255` do { ping -c 1 192.168.1.$ip > /dev/null 2>&1 if [ $? -eq 0 ]; then echo 192.168.1.$ip UP else echo 192.168.1.$ip DOWN fi }& done wait
5、列举你所熟悉的脚本语言,并选一种脚本语言编写一个脚本解决你所遇到的问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 shell 分割Tomcat日志, log_path=/opt/tomcat/logs namelog=/opt/tomcat/logs/name_log d=`date +%Y-%m-%d` d7=`date -d'7 day ago' +%Y-%m-%d` cd ${log_path} && cp catalina.out catalina.$d.log echo > catalina.out cd ${namelog} && cp name name.$d.log echo > name rm -rf $log_path/catalina.${d7}.log rm -rf $namelog/name_log/name.${d7}.log
6、写shell实现输出top10的IP地址
1 2 3 4 #!/bin/bash cat url.log | sort | uniq -c |sort -n -r -k 1 -t ' ' | awk -F '//' '{print $2}' | head -10 > ip10.txt
7、写一个脚本将数据库备份并打包至远程服务器192.169.1.1/backup目录下
1 2 3 #!/bin/bash /opt/mysql/bin/mysqldump -uroot -p***** -R --routines --events --triggers 库名 >/mysqlbackup/库名+日期.sql scp /mysqlbackup/库名+日期.sql 129.169.1.1:/backup
8、你公司中将/var/www/html/data的文件,定期备份到192.168.90.11(centos系统)下的/var/backup下目录,请用简单的shell实现。
1 2 crontab -e scp /var/www/html/data 192.168.90.11/var/backup
9、如何监控某个网站最近1天的访问ip及其访问量,并对单日单个ip访问量超过10000次的ip进行报警
1 2 3 4 5 6 7 8 #!/bin/bash cat access.log | sort | uniq -c |sort -n -r -k 1 -t ' ' | awk -F '//' '{print $2}' > ip.txt for i in `cat ip.txt` do if [ i > 10000 ];than echo "waring ,i> 100000" > waring.txt done
10、只写一个命令,修改/tmp/input.txt文件内容要求:
删除所有空行
如果一行中包含‘11111’ ,则在前面插入‘AAA’,在后面插入‘BBB’如: 000AAA1111111BBB2222.
1 2 1、sed -ri '/^[ \t]*$/d' /tmp/input.txt 2、sed -ri s/1111/AAA&/;s/1111/&BBB/' /tmp/input.txt
11、在bash shell 中 $0,$1,$?,$#,$*,$@分别代表什么?
1 2 3 4 5 6 7 8 $0 脚本名 $1 第一个参数 $* 所有的参数 $@ 所有的参数 $# 参数的个数 $$ 当前进程的PID $! 上一个后台进程的PID $? 上一个命令的返回值 0表示成功
12、
1 正则表达式^d+[^d]+ 能匹配下列哪个字符:
1 2 3 4 5 12 dd12s d123 d12d 答:d12d
13、在shell中变量的赋值有四种方法,其中name=12的方法称?
直接赋值
14、写一个脚本(shell、python)实现nginx日志按天分割,并将前一天的日志进行压缩,总共保留10天的备份?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #!/bin/bash nginxpid=`/usr/bin/ps aux|grep nginx|grep nginx|awk '/master/{print$2}'` #找出nginx服务的master进程并取出它的pid accesslog=`/usr/sbin/lsof -p $nginxpid|awk '/access.log/{print $9}'` #找出pid文件的路径 log_path=`/usr/bin/dirname $accesslog` #取出它的目录 YESTERDAY=$(date -d "yesterday" +%Y%m%d) #找出昨天的日期例如:20190422 new_path=/usr/bin/new if [ ! -d $new_path ];then mkdir $new_path fi #在每天的0点切割日志 mv ${log_path}/access.log ${new_path}/access_${YESTERDAY}.log #将前一天的日志移到新目录下面 kill -USR1 `ps axu | grep "nginx: master process" | grep -v grep | awk '{print $2}'` #发送USR1信号,重新打开日志文件,否则会往mv后的文件写日志 #原因在于:linux系统中,内核是根据文件描述符来找文件的。如果不这样操作导致日志切割失败。 tar -zcf ${new_path}/access_${YESTERDAY}.tar.gz ${new_path}/access_${YESTERDAY}.log #将这个日志压缩 if [ $? != 0 ];then echo "命令执行错误";exit 1;fi #压缩出问题则退出 rm -f ${new_path}/access_${YESTERDAY}.log #没问题则删除原文件 #总共保留10天的压缩文件,那么就要删除11天前的文件,因为当前时间点还没有压缩文件 find ${new_path} -type f -mtime +11 -exec rm -f {} \;
15、一个bash shell脚本的第一行是什么?
16、批量检查多个网站地址是否正常?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #!/bin/bash web_array=( http://blog.oldboyedu.com ####多个网站地址 http://blog.etiantian.org http://oldboy.blog.51cto.com http://10.0.0.7 ) while true do for ((i=0;i<${#web_array[*]};i++)) do wget -T 10 --tries=2 --spider ${web_array[$i]} >/dev/null 2>&1 if [ $? -eq 0 ] then echo "${web_array[$i]} is ok" else echo "${web_array[$i]} is bad" fi sleep 3 done done
17、grep -E ‘[Hh]enr(y|ietta)’ file 的功能是?
1 匹配file中 Henry Henrietta henry henrietta
18、文件A.txt内容为‘12:34:56’ ,只输出A.txt中的34
1 awk -F":" '{print $2}' A.txt
19、用sed修改test.txt的23行test为tset
1 sed –i ‘23s/test/tset/g’ test.txt
/usr/local/nginx/bin/nginx
怎么样不打开文件 删掉空格和注释
63.Linux shell中单引号,双引号及不加引号的简单区别
单引强引硬引取消引号内特殊字符的意义
双引弱引软引取消部分引号内特殊字符的意义让多个以空格为分隔符的字符串形成一个整体字符串
64.** 如何实现对MySQL数据库进行分库逻辑备份,请用脚本实现
Mysqldump
#vim mysqldump.sh
mysqldump -u root -p‘QianFeng@123’
\ -A–single-transaction\
–routines–triggers–master-data=2\ –flush-logs\ >/backup/date+%F-%H-mysql-all.sql
65. 设计一个shell程序,每5分钟执行一次获取当前服务器的基本情况(内存使用率,CPU负载,I/O,磁盘使用率),保存到120.20.20.20数据库上数据库帐号aaa密码bbb库名test表名host,表结构自行设计
#crontab -e
*/5 * * * * bash /serverstatus.sh
mysql -h 120.20.20.20 -u aaa -p ‘bbb’ -e’createtest.host(cipanvarchar(20),memvarchar(20),loadaver1varchar(20),loadaver2varchar(20),loadaver3varchar(20),ioaveragevarchar(20))’ #vim/serverstatus.sh
1mem_used=free-m|awk'NR==2{print$3}' 2mem_total=free-m|awk'NR==2{print$2}'
3a=df-Th|awk'NR==2{print$6}'|awk-F%'{print$1}' 4mem_average=$((mem_used*100/mem_total))
5load_average1=uptime|awk-F':|+|,''{print$(NF-4)}' 6load_average1=uptime|awk-F':|+|,''{print$(NF-2)}'
7load_average1=uptime|awk-F':|+|,''{print$(NF)}' 8io_average=iostat-x|awk'NR==4{print$4}'
9mysql-h120.20.20.20-uaaa-p’bbb’-e’insetintotest.hostvalues($a,$mem_average,$mem_average1,$mem_average2,$load_average3,$io_average)’
66. 写一个脚本,实现tomcat的web服务监控
监控tomcat的开启和关闭;或是端口8005,8009; http与tomcat连接是8080端口;与nginx是不需要端口
1.可以写脚本+计划任务2.可以使用nagios 3.可以使用zabbix在agent的配置文件内定义key: #vim/etc/zabbix/zabbix_agentd.conf
UserParameter=tomcat_port[*]:/tomcat_monitor.sh$ 编写脚本:
#vim/tomcat_monitor.sh
if[$1-eq8080];then lsof-i:8080 return$? elif[$1-eq8005];then lsof-i:8005
return$? else return8 fi
67. 写一个脚本实现nginx服务的管理
文件锁:编译安装时需要写此脚本;笔记上有答案5nginx安装7小步设置开机启动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #vim /etc/init.d/nginx #!/bin/bash #chkconfig: - 99 20 #description: Oooothisismynginxstartupscript PROG="/usr/local/nginx/sbin/nginx" PIDF="/usr/local/nginx/logs/nginx.pid" case "$1" in start) $PROG;; stop) kill -s QUIT $(cat $PIDF);; restart) $0 stop $0 start;; reload) kill -s HUP $(cat$PIDF);; *) echo "Usage:$0{start|stop|restart|reload}" exit 1 esac exit 0 # chmod +x /etc/init.d/nginx # chkconfig --add nginx
很重要:写一个防火墙配置脚本,只允许远程主机访问本机的80端口
1 2 3 # vim iptables.sh Iptables -t filte r-I INPUT -p tcp! --dport80 -j DROP
编写shell脚本,清理/var/logs/目录下的一个持续增长的conn.log文件,以日为单位形成一个新的压缩文件,并删除30天前的日志压缩文件
#vimcleanlog.sh #清理日志脚本
tar -czf/log_backup/conn_date+%y年%m月%d号-%H:%M:%S.log.tar.gz/var/logs/conn.log
wait$$ rm-rf/var/logs/conn.log find/log_backup/-mtime+30-execrm{};
70. 1)备份并压缩/data目录的所有内容,存放在/backup目录里,且文件名为如下形式
yymmdd_data,yy为年,mm为月,dd为日
2)读取/app/app.log文件中每行第一个域的全部数据加入到/backup/yymmdd_app_am.log,yy为年,mm为月,dd为日
3)删除/app/app.log文件
shell程序appbak存放在/usr/bin目录下。(最少写一个循环)
1 2 3 4 5 6 7 8 9 10 11 #crontab -e 59 23 1 * * /usr/bin/appbak # chmod +x /usr/bin/appbak # vim /usr/bin/appbak abc=`date+%Y%b%d`_data tar -czf /usr/bin/backup/$abc/data wait cat /app/app.log | awk'{print$1}' >>/usr/bin/backup/$abc rm-rf/app/app.log
71. 请使用awk、sed、grep三个命令,请举写出命令语句。
grep‘root’/etc/passwd sed-ri‘/SELINUX=/cSELINUX=disabled’/etc/selinux/conf
cat/etc/passwd|awk‘NR==1{print$1}’
72. 请用shell脚本实现:批量添加5个用户,用户名为:user1-5,密码为:user名+3个随机字符
For I in{1..5} ;do ;useradduser$i ;suijishu=opensslrand-hex2|sed-r"s/(...)(.)/\1:\2/g"|awk-F:'{print$1}'
echouser$i$suijishu|passwd–stdinuser$i ;done
73. 请说出以下符号在bashshell中的意义:
$0、$n、$#、$?、$*、$$、$(#aa)
$0当前读取内容$n位置变量$#参数个数上一语句的返回值$$pid$*所有参数
74. 请用自己熟悉的脚本语言,快速替换notic服务下config.properties配置文件中所有变量值为jdbc.username,jdbc.password的值为blue和pass1234
sed-ri‘s/jdbc.username/blue/g’config.properties
sedri‘s/jdbc.password/pass1234/g’config.properties
echo”ABCDEFGabtdefg”|sed-is/c/t/g这条命令是否正确?如若正确会显示什么结果?
在系统中添加100个用户,用户名为user001到user100
请使用脚本实现批量创建10个系统账号sj_user01-sj_user10并设置密码(密码为随机8位字符串)
在shell编程时,使用方括号表示测试条件的规则是?
用shell写一段启动脚本服务
编写shell脚本,能够生成32位随机密码
计算1加到100的值
75. 统计/var/log下文件(非目录)的个数
Find /var/log -type f | wc-l
76. 统计出yum安装的apache的访问日志access_log中访问量最多的5个IP
1 # cat /var/log/httpd/access_log | awk ‘{ips[$1]++} END{for(i in ips){print $i ips[i]}}’ | sort -rn -k2 | head -5 ssss
77. 编写SHELL脚本,查找linux系统下以txt结尾,30天没有修改的文件大小大于20K同时具有执行权限的文件并备份到/data/backup/目录下,某一天没有文件在/data/backup下生产一个当时日志的文件,内容为”缺失文件”.
PYTHON
给出程序运行结果
defextendList(val,list=[]):
list.append(val)
returnlist
list1=extendList(10)
list2=extendList(123,[])
list3=extendList(‘a’)
print”list1=%s”%list1
print”list2=%s”%list2
print”list3=%s”%list3
实现用户输入用户名和密码,当用户名为yes或ok且密码为123时,显示登陆成功,否则登陆失败,失败时允许重复输入三次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 foriinrange(3): u=input("user>:") p=input("pwd>:") ifu=="yg"oru=="sk"andp=="123": print("登陆成功") break else: print("登陆失败")
如何查看Linux系统每个IP的连接数
1 netstat-n|awk'/^tcp/{print$5}'|awk-F:'{print$1}'|sort|uniq-c|sort-rn
修改oracle环境变量/etc/profile文件并使之生效的命令。
1 2 3 #vi /etc/profile 定义oracle 环境变量 #source /etc/profile
在给定文件中查找与设定条件相符字符串的命令为( 1 )
1 2 3 4 1.grep 2.gzip 3.find 4.sort
进行字符串查找,使用什么命令?
1 2 3 4 字符串查找工具很多,常见的有 grep sed awk
Python 简述一下,以下语句的意思?
foriinrange(1,5): forjinrange(1,5): forkinrange(1,5): if(i!=k)and(i!=j)and(j!=k): printi,j,k
函数原型:range(start,end,scan):参数含义:start:计数从start开始。默认是从0开始。
例如:range(1, 5) 是[1, 2, 3, 4]没有5
①②③ :表示有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
从数据结构角度看,堆栈和队列都是线性表,堆栈的特性 队列是先进先出, 堆栈是先进后出 。
队列的特性先进先出。
面向对象的主要特征:封装 、继承、多态。
Python写过什么脚本
答:python脚本实现excel和mysql数据库表的导入导出
excel到mysql数据库表(仅支持.xlsx格式导入):
#!/usr/bin/env python
#coding=utf-8
import xlrd
import MySQLdb
#读取EXCEL中内容到数据库中
wb = xlrd.open_workbook(‘/×.xlsx’)
sh = wb.sheet_by_index(0)
dfun=[]
nrows = sh.nrows #行数
ncols = sh.ncols #列数
fo=[]
fo.append(sh.row_values(0))
for i in range(1,nrows):
dfun.append(sh.row_values(i))
conn=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’××××××’,db=’db’)
cursor=conn.cursor()
#创建table
cursor.execute(“create table test4(“+fo[0][0]+” varchar(100));”)
#创建table属性
for i in range(1,ncols):
cursor.execute(“alter table test4 add “+fo[0][i]+” varchar(100);”)
val=’’
for i in range(0,ncols):
val = val+’%s,’
print dfun
cursor.executemany(“insert into resources_networkdevice values(“+val[:-1]+”);” ,dfun)
conn.commit()
mysql数据库表到excel(仅支持.xlsx格式导出):
#!/usr/bin/env python
#coding=utf-8
import xlwt
import MySQLdb
conn=MySQLdb.connect(host=’localhost’,user=’root’,passwd=’××××’,db=’test’)
cursor=conn.cursor()
count = cursor.execute(‘select * from test1’)
print ‘has %s record’ % count
#重置游标位置
cursor.scroll(0,mode=’absolute’)
#搜取所有结果
results = cursor.fetchall()
#测试代码,print results
#获取MYSQL里的数据字段
fields = cursor.description
#将字段写入到EXCEL新表的第一行
wbk = xlwt.Workbook()
sheet = wbk.add_sheet(‘test1’,cell_overwrite_ok=True)
for ifs in range(0,len(fields)):
sheet.write(0,ifs,fields[ifs][0])
ics=1
jcs=0
for ics in range(1,len(results)+1):
for jcs in range(0,len(fields)):
sheet.write(ics,jcs,results[ics-1][jcs])
wbk.save(‘×××××/Desktop/test4.xlsx’)
高级服务 Web 进程和线程的区别
1 2 3 线程:线程来源与进程 线程模式需要事先开启进程 线程模式并发量高 进程:进程稳定性高;线程稳定性低 进程独占内存;线程共享进程的内存 一个进程可以有多个线程;
查看WEB服务器当前的连接数、并发数、进程数。
1 netstat -n|grep ^tcp|awk '{print $NF}'|sort -nr|uniq -c
简述当用户输入login.lanxin.cn到这个页面显示在浏览器上,这个过程中都发生了?
1 2 3 1.浏览器输入域名回车 2.查询本地的DNS缓存,以找到域名对应的主机IP地址,如果本地没有 3.查询远程域名根DNS,找到IP地址 4.查询到后,向远程IP地址的服务器发送请求 5.服务器响应请求,向用户发送数据 6.浏览器对返回的数据进行处理(浏览器渲染) 7.显示
请简述C/S、B/S的含义。
1 2 3 C/S表示客户端/服务器的模式C是client,S是server。c/s中需要另外开发客户端程序 B/S表示浏览器/服务器的模式B是browser,S是server。b/s是基于浏览器来实现的。
描述lvs,nginx负载均衡的五种调度算法
Apache如何修改配置参数,将默认端口改为非默认端口
1 2 vim /etc/httpd/conf/httpd.conf Listen port
如何实现nginx代理的节点访问日志记录客户的ip而不是代理的ip
1 2 修改nignx负载均衡器的/usr/local/nginx/conf/nginx.conf; 在location / 添加 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
linux系统nginxphp环境,发现php-fpm进程高,请说明可能原因以及如何解决
1 2 3 1)php的插件程序与现有的PHP版本存在不兼容情况,解决方法从php.ini中禁止相关插件 2)php程序存在死循环现象,使用服务器负载过高,解决方法使用top命令查看 3)php-fpm服务池开启了太多子进程,通过配置 pm.max_children 属性,控制php-fpm子进程数量
Nginx禁止访问test目录
1 2 3 location =/test{ return 404; }
如何实现系统接入层nginx灰度发布?
1 2 3 nginx 做反向代理+负载均衡 如果是内部IP,则反向代理到预发布环境;如果不是则反向代理到生产环境。
列出你常用的nginx模块,用来做什么
1 2 3 4 5 6 7 8 9 ngx_http_access_module模块 :访问控制的模块 ngx_http_auth_basic_module模块 :使用basic机制进行用户验证 ngx_http_stub_status_module模块 :用来查看http的状态信息 ngx_http_log_module模块 :nginx的日志模块 ngx_http_gzip_module模块 :对传输的数据进行压缩 ngx_http_ssl_module模块 :设置https连接的模块 ngx_http_rewrite_module模块 :对用户的uri请求进行匹配,然后替换成指定的uri ngx_http_referer_module模块 :做防盗链的模块,
Tomcat调整JVM内存大小需要修改那些配置文件
1 2 3 4 在catalina.sh文件中,找到cygwin=false,在这一行的前面加入参数,具体如下 # vi TOMCAT_HOME/bin/catalina.sh JAVA_OPTS="-server -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m"
Tomcat服务器配置为2核4G,CATALINA.OUT日志目前6.2G,我们需要打开文件并搜索一些关键词,并分析上下文。用什么命令查看比较合适,为什么?
1 vi catalina.out 进入后 /关键词
tomcat jvm内存参数,在物理内存充足的情况下,是否越大越好,为什么?
1 2 不是,1、如果系统上不止有tomcat,那么会影响其他服务的运行 2、tomcat得GC垃圾回收机制
优化tomcat你会如何操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 一、有富余物理内存的情况,加大tomcat使用的jvm的内存 二、服务器资源 服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。 (1) 对于高并发情况下会有大量的运算,那么CPU的速度会直接影响到处理速度。 (2) 内存在大量数据处理的情况下,将会有较大的内存容量需求,可以用-Xmx -Xms -XX:MaxPermSize等参数对内存不同功能块进行划分。我们之前就遇到过内存分配不足,导致虚拟机一直处于full GC,从而导致处理能力严重下降。 (3) 硬盘主要问题就是读写性能,当大量文件进行读写时,磁盘极容易成为性能瓶颈。最好的办法还是利用下面提到的缓存。 三、利用缓存和压缩 对于静态页面最好是能够缓存起来,这样就不必每次从磁盘上读。这里我们采用了Nginx作为缓存服务器,将图片、css、js文件都进行了缓存,有效的减少了后端tomcat的访问。 另外,为了能加快网络传输速度,开启gzip压缩也是必不可少的。但考虑到tomcat已经需要处理很多东西了,所以把这个压缩的工作就交给前端的Nginx来完成。 除了文本可以用gzip压缩,其实很多图片也可以用图像处理工具预先进行压缩,找到一个平衡点可以让画质损失很小而文件可以减小很多。曾经我就见过一个图片从300多kb压缩到几十kb,自己几乎看不出来区别。 四、采用集群 单个服务器性能总是有限的,最好的办法自然是实现横向扩展,那么组建tomcat集群是有效提升性能的手段。我们还是采用了Nginx来作为请求分流的服务器,后端多个tomcat共享session来协同工作。 五、 优化tomcat参数 这里以tomcat7的参数配置为例,需要修改conf/server.xml文件,主要是优化连接配置,关闭客户端dns查询。 <Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="20000" redirectPort="8443" maxThreads="500" minSpareThreads="20" acceptCount="100" disableUploadTimeout="true" enableLookups="false" URIEncoding="UTF-8" />
Http的错误代码含义(404、410、504、502)?
1 2 3 4 5 6 7 404(未找到)服务器找不到请求的网页。 410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。 504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。 502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。
apache如何修改配置参数,将默认端口改为非默认端口。
如何改变Apache端口:
找到Apache安装目录下conf目录下的httpd.conf文件。打开它,找到“Listen”,紧接着Listen的数字就是端口号,默认状态下为“Listen80”。在之前的PHP专题中提到过关于在安装配置Apache时会遇到端口与IISHTTP端口冲突的问题,因为IISHTTP端口默认也为80。那么我们就可以在这里改变Apache的端口,从而避免冲突,比如可以改成:Listen8011。改好之后别忘重起Apache服务使得配置生效。
vim /etc/httpd/conf/httpd.conf
apache有几种工作模式,分别介绍下其特点,并说明什么情况下采用不同的工作模式?
apache有三种工作模式:分别是prefork,worker和event
1.prefork:是一种进程、与派生的工作模式,用的是进程去处理请求,所以比较容易消耗内存,但是稳定性好,某个进程出现问题不会影响到其他请求。要求稳定的时候使用
2.worker:是使用多个子进程、每个子进程有多个线程、由于使用的是线程去处理请求,消耗内存小,适合高流量的请求,但是如果某个进程出现问题,那么这个进程下的线程都会出现问题,即稳定性不是很好。这种模式不能php要测试一下在访问量多的时候使用
3.event模式:是为解决keep-alive保持长连接出现的一种工作模式,使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等到超时才会被释放,所以这个时候就出现了event的工作模式就出现了。在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。这增强了在高并发场景下的请求处理。另外,event模式是不支持用在https上的。
46. apache的工作模式,如何执行php代码
进程模式prefork 线程模式work 事件模式event 安装apache的php模块libphp5.so apache做代理—-后端服务器安装php-fpm
47. 进程和线程的区别?
线程:线程来源与进程,线程模式需要事先开启 线程模式并发量高 相对与进程模式来说没有进程模式稳定 共享内存 不支持php
进程:进程稳定性高;线程稳定性低 进程独占内存;线程共享进程的内存一个进程可以有多个线程;
133. 请简单描述nginx与php-fpm的两种连接方式及其优缺点
nginx服务器和php-fpm可以通过端口和unixsocket两种方式实现
tcpsocket的优点是可以跨服务器,当nginx和php-fpm不在同一台机器上时,只能使用这种方式
TCP是使用TCP端口连接127.0.0.1:9000Socket是使用unixdomainsocket连接套接字/dev/shm/php-cgi.sock
请写下命令检查nginx的当前配置文件,然后平滑重启
nginx-t-c指定配置文件
kill-HUP住进称号或进程号文件路径
134. nginx如何配置能够获取用户的真实ip?
当多层代理或使用CDN时,如果代理服务器不把用户的真实IP传递下去,那么业务服务器将永远不可能获取到用户的真实IP
nginx反向代理及cdn:•proxy_set_headerHost$http_host;
proxy_set_headerX-Real-IP$remote_addr;针对首层代理
proxy_set_headerX-Forwarded-F$proxy_add_x_forwarded_for;针对非首层代理
使用nginx自带模块realip获取用户IP地址:nginxrealip_module模块需要在编译nginx的时候加上参数–with-http_realip_module
#setuserrealiptoremoteaddr
set_real_ip_fromip段或地址
set_real_ip_fromip段或地址
real_ip_headerX-Forwarded-For;
real_ip_recursiveon;
需要知道所有CDN节点的ip地址或者ip段
135. 下面nginx配置文件中的一段配置,请写出输出结果,并说明为什么?
location/test{
set $a 32;
echo $a;
set $a 56;
echo $a;
}
理论:输出3256实际:nginx配置文件不识别echo命令服务起不来
客户端发起请求,需要Web代理服务器根据请求(GET和POST)的参数代理到不同的后端服务器,请选择Web代理软件并简述实现的过程?
我们是用nginx做的代理软件
只需在nginx的location块下配置相应请求的路由
列如:location/{
root/usr/share/nginx/html;
indexindex.htmlindex.htm;
if($request_uri~*.html$){
proxy_passhttp://htmlserver ;
}
再在nginx的相应子配置文件中配置upstream
如:upstreamhtmlserver{
server192.168.122.10;
server192.168.122.20;
}
编写nginx rewrite规则,http://192.168.1.1/ops/index.php/admin/idc转化成http://192.168.1.1/ops/index.php?act=admin&arg=idc?
location~/ops/index.php/admin/(. )${
rewrite/ops/index.php/admin/(.*)/ops/index.php?act=admin&arg=$1last;
}
136. 线上访问的WEB页面出现504,如何处理?
504表示超时,也就是客户端所发出的请求没有到达网关,请求没有到可以执行的php-fpm。
与nginx.conf的配置也有关系
fastcgi_connect_timeout60 fastcgi_send_timeout60
fastcgi_read_timeout60
设置更久的nginx连接超时时间
nginx遇到盗链怎么解决的,Nginx的几种算法,反向代理,跨网访问
nginx遇到盗链怎么解决的:
模块:ngx_http_referer_module Syntax: valid_referersnone|blocked|server_names|string…;
Default: —
Context:server,location
列子:
location~*.(gif|jpg|png|bmp)${
valid_referersnoneblocked*.qfcloud.topserver_namestianyun.google.~.baidu.;
if($invalid_referer){
return403;
#rewrite.*http://qfcloud.top/403.jpg ;
}
}
Nginx的几种算法:
轮询、ip_hash、weight、fair(第三方)、url_hash(第三方)
反向代理:笔记
跨域访问:
add_header’Access-Control-Allow-Origin’’*’;
add_header’Access-Control-Allow-Credentials’’true’;
nginx怎么控制一个ip访问的次数?
请求数限制模块:
Syntax: limit_req_zonekeyzone=name:sizerate=rate;
Default:p
—
Context:http
列子:limit_req_zone$binary_remote_addrzone=allips:10mrate=20r/s;
链接数限制模块:
Syntax: limit_conn_zonekeyzone=name:size;
Default:p
—
Context:http
137. nginx:实现负载均衡和反向代理,503,502,504报错从哪几个方面去考虑
使用nginx代理,而后端服务器发生故障;或者php-cgi进程数不够用;php执行时间长,或者是php-cgi进程死掉;已经执行fastCGI使用情况等都会导致502、504错误
502:调整php-fpm.conf的相关设置进程数不够max_children增加request_terminate_timeout也可以相应增加
503:用limit_conn_zone和limit_req指令配合使用来达到限制。一旦并发连接超过指定数量,就会返回503错误
nginx后端有2台PHP服务器A和B,匹配url开头为Login的请求转发到服务器A8080端口;匹配以png和jpg结尾的请求转发到服务器B的80端口,并指定的根目录为/appe/webroot/static/下,请简单编写nginx匹配转发规则
location/{
root/appe/webroot/static/;
if($request_uri~*.(png|jpg)$){
proxy_passhttp://phpb:80/ ;
}
if($request_uri^~/login){
proxy_passhttp://phpa:8080/ ;
}
}
145.** 您用过的几种中间件/Web应用服务器软件产品,各是什么?
中间件:php:php-fpmphp-mysqlphp-gdphp-cli
jsp:Tomcat,Resin,JBOSS,WebSphere(IBM),Weblogic(Oracle)
Web应用服务器软件产品:
Apache,由于其跨平台和安全性被广泛使用,是最行流行的web服务器端软件之一;
tomcat服务器是一个免费的开放源代码的Web应用服务器nginx
Tomcat调整JVM内存的大小需要修改哪些配置文件。
在tomcat的启动脚本catalina.sh添加如下:
#OSspecificsupport.$var_must_besettoeithertrueorfalse.
JAVA_OPTS=”-server-Xms800m-Xmx800m-XX:PermSize=64M-XX:MaxNewSize=256m-XX:MaxPermSize=128m-Djava.awt.headless=true” 常见的Java虚拟机有:J9VM、HotSpotVM、ZingVM。
请写出Tomcat程序的主配置文件名 在conf目录下:server.xml
Tomcat:调优工作模式基于什么协议
并发优化:在TOMCAT_HOME/bin/catalina.sh增加如下语句,
JAVA_OPTS=”-Xms1024m-Xmx1024m-Xss1024K-XX:PermSize=64m-XX:MaxPermSize=128m”
建议和注意事项:
-Xms和-Xmx选项设置为相同堆内存分配,以避免在每次GC后调整堆的大小,堆内存建议占内存的60%~80%;非堆内存是不可回收内存,大小视项目而定;线程栈大小推荐256k.
tomcat的运行模式有3种,即BIO、NIO和APR。 tomcat基于HTTP协议
Tomcat服务的配置文件是哪个? tomcat服务的配置文件是server.xml
后端Java,客户端访问慢,从哪几点考虑?服务器内存java虚拟机内存分配问题并发设置进程设置
邮件服务器
网络管理员对www服务器可以进行访问,控制存取和运行等控制,这些控制可在(1)文件中体现?
1 2 3 4 1.httpd.conf 2.lilo.conf 3.inerd.conf 4.resolv.conf
http的错误代码含义(404,410, 502, 504).
1 2 3 4 5 6 7 8 9 200 访问成功 301 永久重定向 302 临时重定向 304 缓存 403 访问被拒绝 404 找不到页面 410 被请求的资源在服务器上已经不再可用 502 网关错误 504 网关超时
我们想将/usr/local/nginx/logs中的log前一天做压缩,归档到 backup文件夹中,并保留7天的内容,你有什么好办法?如果我们还想将log收集走并分析,使用什么工具?如果收集走并加以分析,你主要关注哪些指标?
1 使用find命令查找,前一天的日志,或者在每天晚上12点将日志备份,打包压缩,使用shell脚本判断7天之前的文件删除。分析日志可以使用elk或者通过python、shell脚本进行分析。
http 1.0和http 1.1下有何区别? http 2.0的主要变化或优势有哪些?
1 2 3 4 5 6 http1.0-1.1: 1、http 1.0需要使用keep-alive参数来告知服务器端要建立一个长连接,而http1.1默认支持长连接。 2、http1.0是没有host域的,http1.1才支持这个参数。 3、http1.1更加节约带宽 http2.0:相比于http 1.x,大幅度的提升了web性能。在与http/1.1完全语义兼容的基础上,进一步减少了网络延迟
简述一下apache和nginx的异同点。
1 两者最核心的区别在于apache是同步多进程模型,一个连接对应一个进程,而nginx是异步的,多个连接(万级别)可以对应一个进程。一般来说,需要性能的web服务,用nginx。如果不需要性能只求稳定,更考虑apache,apache的各种功能模块实现比nginx好,例如ssl的模块就比nginx好,可配置项多。epoll(freebsd上是kqueue)网络IO模型是nginx处理性能高的根本理由,但并不是所有的情况下都是epoll大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache的select模型或许比epoll更高性能。当然,这只是根据网络IO模型的原理作的一个假设,真正的应用还是需要实测。更为通用的方案是,前端nginx抗并发,后端apache集群,配合起来会更好。
apache如何修改配置参数,将默认端口改为非默认端口。
7、网络管理员对www服务器可进行访问、控制存取和运行等控制,这些控制可在(A )文件中体现。 A.httpd.conf
B.lilo.conf
C.inetd.conf
D.resolv.conf
8、某网站页面上的应展示图片和一些动态内容的一个展示框变为黑色,网站其他部分正常,可能的原因是什么?
9、某日志路径 是/data/logs/a.txt. 如何跟踪该日志,以查看当时的运行状况?
10、HTTP协议默认使用的端口号为( ) ,FTP 协议默认使用的端口号为(),Microsoft SQL Server数据库默认使用的端口号为( ),Windows操作系统远程桌面应用使用的默认端口号是()。
11、HTML语言中,用于加入一个层的标签是(),用于加入图片的标签是(),用于链接外部样式的标签是()
12、apache和nginx的主配置文件是什么?
1 2 3 apache: /etc/httpd/conf/httpd.conf nginx: /etc/nginx/nginx.conf /usr/local/nginx/n
13、apache有几种工作模式,分别简述两种工作模式及其优缺点?
1 2 3 4 5 6 7 8 9 10 11 Prefork MPM: 优点:成熟,兼容所有新老模块。进程之间完全独立,使得它非常稳定。同时,不需要担心线程安全的问题。(我们常用的mod_php,PHP的拓展不需要支持线程安全) 缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。 Worker MPM: 优点:占据更少的内存,高并发下表现更优秀。 缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,也许中间几乎没有请求,这时就会发生阻塞,线程被挂起,需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生) Event MPM
14、http和https有什么区别?
1 2 3 http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息。 https协议:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。
15、有一web服务器,某天某用户投诉上某个网站速度很慢,如果你是服务器的管理员,请问你如何查找原因。假设服务器有任意操作系统和软件。
1 2 3 1.检查网站的在线用户量,根据用户的并发量来做初步判断是不是因为并发量过大引起的数据库连接负荷原因。 2.检查数据库连接是否满负荷。 3.通过浏览器自带的检测请求发送到返回的时间来判断是否是因为用户带宽原因。
16、已知apache服务的访问日志按天记录在服务器本地目录/app/logs下, 由于磁盘空间紧张,现在要求以后只能保留最近7天访问日志!请问如何解决?
1 2 find /app/logs -type f -name "access*.log" -mtime +7 exec rm –f {} \; 日志轮转
17、aptget remove httpd和apt-get purge httpd的区别是什么?
1 2 apt-get remove 只删除软件包,不删除配置文件 apt-get purge 删除软件包并删除配置文件
18、http状态码有哪些? 分别表示什么意思?
1 2 3 4 5 6 200 - 请求成功 301 - 资源(网页等)被永久转移到其它URL 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求 404 - 请求的资源(网页等)不存在 500 - 内部服务器错误 502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
19、介绍一下哪些可以优化加速用户访问网站体验的技术措施?
1 2 3 4 5 1、使用固态硬盘存储静态资源,扩大带宽 2、压缩或精简代码 3、降低HTTP请求 4、服务器端开启gzip压缩功能 5、使用cdn加速
当你在浏览器输入一个网址,如http://www.baidu.com , 按回车之后发生了什么?请从技术的角度描述,如浏览器、网络、服务器等各种参与对象上由此引发的一系列活动,请尽说出可能的涉及到所有的关键技术点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 1.DNS解析 DNS解析的过程就是寻找哪台机器上有你需要资源的过程,寻找的过程遵循就近原则。 输入一个网址并按回车的时候浏览器会根据输入的URL去查找对应的IP,具体过程如下: (1)首先是查找浏览器缓存,浏览器会保存一段时间内访问过的一些网址的DNS信息,不同浏览器保存的时常不等。 (2)如果没有找到对应的记录,这个时候浏览器会尝试调用操作系统缓存来继续查找这个网址的对应DNS信息。 (3)如果还是没找到对应的IP,那么接着会发送一个请求到路由器上,然后路由器在自己的路由器缓存上查找记录,路由器一般也存有DNS信息。 (4)如果还是没有,这个请求就会被发送到ISP(注:Internet Service Provider,互联网服务提供商,就是网络运营商,中国电信中国移动等),ISP也会有相应的ISP DNS服务器,就是本地DNS服务器,请求的域名基本上都能在这里找得到。 (5)如果还是没有的话, ISP的DNS服务器会将请求发向根域名服务器进行搜索。根域名服务器就是面向全球的顶级DNS服务器,共有13台逻辑上的服务器,从A到M命名,真正的实体服务器则有几百台,分布于全球各大洲。 (6)如果到了这里还是找不到域名的对应信息,那只能说明一个问题:这个域名本来就不存在,它没有在网上正式注册过。或者域名过期了。 这也就是为什么有时候打开一个新页面会有点慢,因为如果本地没什么缓存,查找域名的过程要这样递归地查询下去,查找完还要一层层的向上返回。例如"mp3.baidu.com",域名先是解析出这是个.com的域名,然后跑到管理.com域的服务器上进行进一步查询,然后是.baidu,最后是mp3, 所以域名结构为:三级域名.二级域名.一级域名。 所以DNS根据域名查询IP地址的过程为:浏览器缓存 --> 操作系统缓存 --> 路由器缓存-->本地(ISP)域名服务器缓存 --> 根域名服务器。 2.进行TCP连接 浏览器终于得到了IP以后,向服务器发送TCP连接,TCP连接经过三次握手。 3.浏览器发送HTTP请求 浏览器和服务器建立连接以后,浏览器接着给这个IP地址给服务器发送一个http请求,方式为get,例如访问www.baidu.com。其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。 这个get请求包含了主机(Host)、用户代理(User-Agent),用户代理就是自己的浏览器,它是你的"代理人",Connection(连接属性)中的keep-alive表示浏览器告诉对方服务器在传输完现在请求的内容后不要断开连接,不断开的话下次继续连接速度就很快了。可能还会有Cookies,Cookies保存了用户的登陆信息,一般保存的是用户的JSESSIONID,在每次向服务器发送请求的时候会重复发送给服务器。 在建立连接发送请求时每个服务端需要和客户端保持通信,有很多客户端都会和服务器进行通信。服务器为了识别是哪个客户端与它通信,就必须用一个标识记录客户端的信息。客户端首次访问服务器,服务端返回响应时通过附带一个记录的客户端信息的标识来返回给客户端,这个标识就是JSESSIONID,JSESSIONID就放在了客户端的Cookies里。当客户端再次向服务器发送请求时上就使用上次记录的Cookies里面的JSESSIONID,这样服务器就知道是哪个浏览器了。这样他们之间就能保持通信了。 发送完请求接下来就是等待回应了,如下图: 4.服务器处理请求 发送完请求接下来就是等待回应了,如下图: 服务器收到浏览器的请求以后),会解析这个请求(读请求头),然后生成一个响应头和具体响应内容。接着服务器会传回来一个响应头和一个响应,响应头告诉了浏览器一些必要的信息,例如重要的Status Code,2开头如200表示一切正常,3开头表示重定向,4开头是客户端错误,如404表示请求的资源不存在,5开头表示服务器端错误。响应就是具体的要请求的页面内容。 5.浏览器解析渲染页面 (1)浏览器显示HTML 当服务器返回响应之后,浏览器读取关于这个响应的说明书(响应头),然后开始解析这个响应并在页面上显示出来。 浏览器打开一个网址的时候会慢慢加载这个页面,一部分一部分的显示,直到完全显示,知道最后的旋转进度条停止。因此在浏览器没有完整接受全部HTML文档时,它就已经开始显示这个页面了。 (2)浏览器向服务器发送请求获取嵌入在HTML中的对象 在浏览器显示HTML时,打开一个网页的过程中,主页(index)页面框架传送过来以后,浏览器还会因页面上的静态资源多次发起连接请求,需要获取嵌入在HTML中的其他地址的资源。这时,浏览器会发送一些请求来获取这些文件。这些内容也要一点点地请求过来,所以标签栏转啊转,内容刷啊刷,最后全部请求并加载好了就终于好了。 这时请求的内容是主页里面包含的一些资源,如图片,视频,css样式,JavaScript文件等等。 这在文件属于静态文件,首次访问会留在浏览器的缓存中,过期才会从服务器去取。缓存的内容通常不会保存很久,因为难保网站不会被改动。 静态的文件一般会从CDN中去取,CDN根据请求获取资源的时候可能还会用到负载均衡。 (3)浏览器发送异步(AJAX)请求 对于那些动态的请求,动态网页等就必须要从服务器获取了。对于静态的页面内容,浏览器通常会进行缓存,而对于动态的内容,浏览器通常不会进行缓存。对于这些动态请求,Nginx可能会专门设置一些服务器用来处理这些访问动态页面的请求。 6.关闭TCP连接 当数据完成请求到返回的过程之后,根据Connection的Keep-Alive属性可以选择是否断开TCP连接,HTTP/1.1一般支持同一个TCP多个请求,而不是1.0版本下的完成一次请求就发生断开。TCP的断开与连接不一样,断开可以分为主动关闭和被动关闭,需要经过4次握手。 当浏览器需要的全部数据都已经加载完毕,一个页面就显示完了。
网站出现200,302,400,403.404,500,502,503都是什么意思?
1 2 3 4 5 6 7 8 200 OK 请求成功。一般用于GET与POST请求 302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI 400 Bad Request 客户端请求的语法错误,服务器无法理解 403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求 404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 500 Internal Server Error 服务器内部错误,无法完成请求 502 Bad Gateway 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
配置Apache服务器需要修改的配置文件为( A) A. httpd.conf B. access.conf C. srm.conf D. named.conf
当用户反映访问你所维护的WEB服务器速度慢,访问其它网站都很流畅时.你的排查思路是什么?
1 2 1.检查网站的在线用户量,根据用户的并发量来做初步判断是不是因为并发量过大引起的数据库连接负荷原因。 2.检查数据库连接是否满负荷。
apache在linux系统上安装的步骤和命令
1 2 yum install -y httpd systemctl start httpd
网站打开慢,请给出排查方法,如果是数据库慢导致,如何排查并解决。
1 2 3 1、是否后端服务有问题,例如php-fpm tomcat 2、进库explian 检查语句是否有进程问题 3、看看查询语句是否有索引
nginx服务器的配置文件是?
2、请写出190.5.27.13/16网段的网络地址和广播地址。
1 2 网络地址:190.5.0.0 广播地址:192.5.255.255
4、手动安装grub
1 2 3 1、使用 grul-install 命令在要启动的分区中安装 GRUB 相关文件 2、修改GRUB的配置文件 3、安装GRUB到/dev/sdb1分区的启动扇区中
5、修改内核参数
1 2 vim /etc/sysctl.conf sysctl -p
6.在1-39内取随机数
Ansible 1、请写出saltstack或者ansible中你常用的5个管理模块。
1 2 3 4 saltstack: cmd acl cloud cp cron ansible: shell copy yum service cron
2、你对自动化运维的理解,以及自动化运维需要掌握哪些技能?
1 2 3 4 1、项目部署维护能力 2、脚本开发能力 3、运维方案制定,业务架构关联分析 4、shell、python使用能力,应用架构设计能力
3、如何用ansible获取远程服务器10.10.125.125的时间(环境配置已完成)
1 ansible 10.10.125.125 -m shell -a 'date'
4、ansible你用过它的哪些模块,ansbile同时分发多台服务器的过程很慢,你想过怎么解决吗?
1 2 通过ansible的异步和并发设置:async和poll 或者在配置文件中设置forks,并发进程数。
5、ansible用过没有,熟不熟,问对四百台服务器设置IP和不同的网关怎么做?
1 先确定机器和新ip、网关的对应关系,然后通过shell模块执行shell脚本完成配置
6、一台新装的 Centos操作系统机器,要开始部署业务服务之前需要做什么操作?如果有二十台了,要怎么做?
1 2 1、需要先进行环境初始化,根据业务需求,调整防火墙,selinux的配置,修改内核参数,以满足业务需求。 2、如果需要操作的服务器较多,可以使用自动化运维工具完成配置,如ansible等。
7、常用的运维自动化工具写出两种:
ansible怎么用的,版本发布用ansible吗? Ansible有哪些优点怎么优化ansible去推新的更新包(整个推送过程最多10秒 )
使用ansible-playbook创建一个abc用户并赋予644权限,host为all
-hosts:all
user:root
tasts:
-name:useraddabc
user:name=abcpassword=1group=root
-name:privileges
shell:chmod-R644/home/abc
** **
131. 请写出saltstack或者ansible中你常用的5个管理模块
文件模块:copy,file,blockinfile,lineinfile,find,replace
包管理模块:yum_repository,yum
命令模块:command,shell,script
系统类模块:cron,service,user,group
收集模块:setup
Linux下使用ansible实现批量修改50台机器上面的test用户密码。请写出实现方法
方法一:
-–
-hosts:test
注释:对迭代项的引用,固定变量名为”item”,使用with_item属性给定要迭代的元素;
方法二:
/etc/ansible/hosts
test
132. ansible都用来做什么
实现了批量系统配置;批量程序部署;批量运行命令;自动化运维工具
负载均衡高可用 简述keepalived实现高可用部署的原理
1 虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用
请详细说明LVS DR模式的原理以及Keepalived高可用服务工作原理?
1 2 LVS DR:客户端向目标vip发出请求,lvs接收 ,LVS根据负载均衡算法选择一台活跃的的节点,将此节点的ip所在网卡的mac地址作为目标mac地址,发送到局域网里,节点在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文.随后重新封装报文,发送到局域网.此时IP包的目标ip是客户端,源ip是自己的vip地址。 Keepalived高可用:keepalived通过vrrp协议来实现故障切换转移。在主节点正常工作的时候,会不断地向备节点广播心跳消息,用以告诉备节点自己还活着,当主节点发生故障的时候,备节点就无法收到主节点广播的消息,即可判定主节点发生故障,进而调用自身的接管程序,接管主节点的IP资源及服务。而而当主节点被修复时,备节点会释放主节点故障时自己所接管的IP资源和服务,恢复到原来备用的角色。
LVS支持几种模式,工作过程是什么?
1 2 3 4 5 6 7 8 9 10 11 NAT模式 原理 这个是通过网络地址转换的方法来实现调度的。首先调度器(LB)接收到客户的请求数据包时(请求的目的IP为VIP),根据调度算法决定将请求发送给哪个后端的真实服务器(RS)。然后调度就把客户端发送的请求数据包的目标IP地址及端口改成后端真实服务器的IP地址(RIP),这样真实服务器(RS)就能够接收到客户的请求数据包了。真实服务器响应完请求后,查看默认路由(NAT模式下我们需要把RS的默认路由设置为LB服务器。)把响应后的数据包发送给LB,LB再接收到响应包后,把包的源地址改成虚拟地址(VIP)然后发送回给客户端。 TUN模式(隧道模式) 原理 v采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求的报文通过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,集群系统的最大吞吐量可以提高10倍。 DR模式(直接路由模式) 原理 DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。 LVS-FULLNAT转发模式 FULLNAT转发数据包是类似NAT模式,IN和OUT数据包都是经过LVS;唯一的区别:后端RealServer 或者交换机不需要做任何配置。FULLNAT的主要原理是引入local address(内网ip地址),cip-vip转换为lip->rip,而 lip和rip均为IDC内网ip,可以跨vlan通讯
在一个系统架构中,我们为了避免单点故障会怎么做?请写出至少2中方案及优点。
1 做集群 比如nginx 会做反向代理、利用nginx 或lvs 做负载均衡 ,利用keepalived做高可用
LVS、nginx、HAproxy有什么区别?工作中你怎么选择?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 LVS的优点: 1、抗负载能力强、工作在第4层仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的;无流量,同时保证了均衡器IO的性能不会受到大流量的影响; 2、工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat; 3、应用范围比较广,可以对所有应用做负载均衡; 4、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西,所以并不需要太多接触,大大减少了人为出错的几率; LVS的缺点: 1、软件本身不支持正则处理,不能做动静分离,这就凸显了Nginx/HAProxy+Keepalived的优势。 2、如果网站应用比较庞大,LVS/DR+Keepalived就比较复杂了,特别是后面有Windows Server应用的机器,实施及配置还有维护过程就比较麻烦,相对而言,Nginx/HAProxy+Keepalived就简单多了。 Nginx的优点: 1、工作在OSI第7层,可以针对http应用做一些分流的策略。比如针对域名、目录结构。它的正则比HAProxy更为强大和灵活; 2、Nginx对网络的依赖非常小,理论上能ping通就就能进行负载功能,这个也是它的优势所在; 3、Nginx安装和配置比较简单,测试起来比较方便; 4、可以承担高的负载压力且稳定,一般能支撑超过几万次的并发量; 5、Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个节点; 6、Nginx不仅仅是一款优秀的负载均衡器/反向代理软件,它同时也是功能强大的Web应用服务器。LNMP现在也是非常流行的web环境,大有和LAMP环境分庭抗礼之势,Nginx在处理静态页面、特别是抗高并发方面相对apache有优势; 7、Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,有需求的朋友可以考虑用其作为反向代理加速器; Nginx的缺点: 1、Nginx不支持url来检测。 2、Nginx仅能支持http和Email,这个它的弱势。 3、Nginx的Session的保持,Cookie的引导能力相对欠缺。 HAProxy的优点: 1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段); 2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作; 3、支持url检测后端的服务器; 4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的; 5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS; 6、HAProxy的算法较多,达到8种; LVS: 是基于四层的转发 HAproxy: 是基于四层和七层的转发,是专业的代理服务器 Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发 区别: LVS由于是基于四层的转发所以只能做端口的转发 而基于URL的、基于目录的这种转发LVS就做不了 工作选择: HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做 在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大 选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器 配置简单,所以中小型企业推荐使用HAproxy
lvs模式 数据包封包解包 源mac和目标MAC
请简单阐述keepalived的故障切换工作原理
1 2 3 4 5 6 7 keepalived是以VRRP协议为实现基础的VRRP,全称VirtualRouterRedundancyProtocol,中文名为虚拟路由冗余协议,VRRP的出现就是为了解决静态路由的单点故障问题,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。 在两个负载均衡调度器上安装Keepalived以实现高可用的目的。 两个调度器之间通过VRRP协议来保证高可用性,当一台调度器宕机时,另一台备用的立即接替原主机服务,当主机被修复之后又将服务返还给主机。 在主节点正常工作的时候,会不断地向备节点广播心跳消息,用以告诉备节点自己还活着,当主节点发生故障的时候,备节点就无法收到主节点广播的消息,即可判定主节点发生故障,进而调用自身的接管程序,接管主节点的IP资源及服务。而而当主节点被修复时,备节点会释放主节点故障时自己所接管的IP资源和服务,恢复到原来备用的角色。
描述Lvs、Nginx负载均衡的五种调度算法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 nginx负载均衡的5种策略 一,Lvs: 1、静态算法:rr(轮询调度算法),wrr(权重调度算法),sh(源地址散列),dh(目标地址散列,把同一个ip地址的请求,发送给同一个server) 2、动态调度算法:LC(最少连接),wlc(加权最少连接),sed(最短延迟调度),nq(永不排队,改进的sed) 二、nginx: 1、rr:轮询算法(依次将用户的访问请求,平均的分配到后端的web集群中每个节点,此种算法不会考虑每个节点的性能,所以比较适用于所有节点的性能一致的情况) 2、wrr:权重算法(根据设定的权重值,权重值越大,被配到的请求次数也就越多,有效的解决了rr算法的缺点) 3、ip_hash算法(根据用户访问的真实ip生成一个hash表,此后,同一个ip地址的访问请求都将会分配到这个节点上,可以解决session会话共享的问题) 4、url_hash(根据用户访问的url的hash结果,使每个url定向到同一个后端服务器上) 5、fair(更加智能的负载均衡算法,可以根据页面大小的和加载时间长短智能的进行负载均衡)
采用四层负载均衡的可以用哪种方式?
1 2 lvs haproxy 硬件负载均衡器(F5-BigIp Redware)
RabbitMQ 描述rabbitmq集群搭建步骤
通过Erlang的分布式特性(通过magiccookie认证节点)进行RabbitMQ集群,各RabbitMQ服务为对等节点,即每个节点都提供服务给客户端连接,进行消息发送与接收。
这些节点通过RabbitMQHA队列(镜像队列)进行消息队列结构复制。本方案中搭建3个节点,并且都是磁盘节点(所有节点状态保持一致,节点完全对等),只要有任何一个节点能够工作,RabbitMQ集群对外就能提供服务。
RabbitMQ集群安装在3个节点上:192.168.1.1、192.168.1.2、192.168.1.3;
HAProxy安装在192.168.1.1上,用于对外提供RabbitMQ均衡
监控 zabbix监控的优缺点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 zabbix优点: 1、数据采集:可用性和性能检测,自动发现,支持agent、snmp、JMX、telnet等多种采集方式,支持主动和被动模式数据传输、支持用户自定义插件,自定义间隔收集数据 2、高可用:server对设备性能要求低,支持proxy分布式监控,分布式集中管理,有自动发现功能,可以实现自动化监控;开放式接口,扩展性强,插件编写容易 3、告警管理:支持多条件告警,支持多种告警方式,支持多组模板,模板继承。 4、告警设置:告警周期,告警级别,告警恢复通知、告警暂停,时段阈值、支持维护周期、支持单机停用 5、图形化展示:允许自定义创建多监控项视图,网络拓扑,自定义面板展示,自定义IT服务可用性 6、历史数据:历史数据查询可配置,内置housekeeping数据清理机制 7、安全审计:具备安全的用户审计日志,权限认证,用户可以限制允许维护的列表。 zabbix缺点: 1、性能瓶颈,监控系统没有低估高峰期,具有持续性和周期性,机器量越大,数据的增大会使数据库的写入成为一定的瓶颈,官网给出的单机上限5000台,届时就需要增加proxy,增加成本。 2、Zabbix采集数据有pull方式,也就是server主动模式,当目标机器量大之后,pull任务会出现积压。采集数据会延迟 3、项目二次开发,需要分析MySQL表结构,表结构比较复杂,通过API开发对开发能力有要求。 4、内置housekeeping在执行过程中会对数据库增加压力,需要对数据库进行优化
服务器系统状态监控指标
说说你使用过得监控软件的各自的特点。
1 2 zabbix :图像化,可以自定义模板,功能强大 Prometheus:支持在多层监控,业务、应用、系统层都可监控,可以集成其他监控,经常与k8S一起用
服务器监控有哪些方法
1 2 1、利用脚本定时检查服务,系统性能 2、利用第三方监控软件
zabbix怎么监控的 监控项都有哪些
zabbix 怎么维护的
写下之前工作中在生产环境配置使用过的监控系统?针对网络或服务配置过哪些监控项?使用什么方法进行报警通知
答:zabbix监控:服务器启动分区剩余空间服务器网络接口进出流量服务器服务状态服务器进程数量服务器CPU状态磁盘IO情况文件修改磁盘总和报警方式:邮件报警,微信报警,
使用何种工具监控的数据库?监控哪些指标?
zabbix
使用mysql自带的模板
监控:QPS(增删改查)、mysql请求流量带宽,mysql响应流量带宽,监控主从(showslavestatus\G);TPS(每秒事务的处理数量);监控缓冲池使用情况;缓存碎片;慢查询数量;当前连接数;吞吐量;端口和服务状态;mysql正常运行的时间;
zabbix都监控什么,有自己添加的监控项吗?监控哪些应用程序和服务,怎么监控nginx的日志,怎么监控Tomcat,具体是Tomcat调优的问题,还是后端Java报错socket的问题。监控中具体用到哪些模块,当监控服务出现一些问题怎么处理,比如MySQL的复制状态或者是gps过高,nginx报错的一些日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 1). vm.memory.size[available] 系统中已用内存量vm.memory.size[total] 系统总共内存量 swap空间{system.swap.size[,free] system.swap.size[,pfree] system.swap.size[,total] } CPU { system.cpu.switches 系统文件切换 (bps) (system.cpu.util[,user] system.cpu.util[,nice] system.cpu.util[,system] system.cpu.util[,iowait] system.cpu.util[,idle] system.cpu.util[,interrupt] system.cpu.util[,steal] system.cpu.util[,softirq] )类似于对应系统中top命令查看CPU显示值 system.cpu.load[percpu,avg1] 系统CPU总负载/在线cpu个数平均1min的利用百分比 system.cpu.load[percpu,avg5] 系统CPU总负载/在线cpu个数平均5min的利用百分比 system.cpu.load[percpu,avg15] 系统CPU总负载/在线cpu个数平均15min的利用百分比 vfs.fs.size[{#FSNAME},free] 可用磁盘空间大小vfs.fs.size[{#FSNAME},pfree] 可用磁盘空间大小占分区总磁盘空间的百分比 vfs.fs.size[{#FSNAME},total] 分区总磁盘空间大小vfs.fs.size[{#FSNAME},used] 已使用磁盘空间大小 vfs.fs.inode[{#FSNAME},pfree] 可用磁盘节点数占总节点数的百分比net.if.in[{#IFNAME}] 网络进接口流量 (bps) net.if.out[{#IFNAME}] 网络出接口流量 (bps)proc.num[] 系统中总进程数量,通过top查看 proc.num[,,run] 系统中处于running的进程,通过top查看 system.localtime 系统时间 vfs.file.cksum[/etc/passwd] 系统文件passwd的文件总数 system.boottime 系统启动的时间戳 system.hostname 系统名称 system.cpu.intr 设备中断 kernel.maxfiles 系统支持打开文件的最大数量 kernel.maxproc 系统支持打开进程的最大数量 system.users.num 登陆系统的用户数 agent.ping 检查客户端可用性 agent.version 检查客户端使用版本 system.uname 系统详细信息 system.uptime 系统开启持续时间 agent.hostname 客户端主机名 net.tcp.listen[port] 监控程序端口启用 } 2). 1、Zabbix Server和Zabbix Agent会追踪日志文件的大小和最后修改时间,并且分别记录在字节计数器和最新的时间计数器中。 2、Agent会从上次读取日志的地方开始读取日志。 3、字节计数器和最新时间计数器的数据会被记录在Zabbix数据库,并且发送给Agent,这样能够保证Agent从上次停止的地方开始读取日志。 4、当日志文件大小小于字节计数器中的数字时,字节计数器会变为0,从头开始读取文件。 5、所有符合配置的文件,都会被监控。 6、一个目录下的多个文件如果修改时间相同,会按照字母顺序来读取。 7、到每个Update interval的时间时,Agent会检查一次目录下的文件。 8、Zabbix Agent每秒发送日志量,有一个日志行数上限,防止网络和CPU负载过高,这个数字在zabbix_agentd.conf中的MaxLinePerSecond。 9、在logtr中,正则表达式只对文件名有效,对文件目录无效。 Hostname设定为Server创建主机是填写的Host name,必须一致 ServerActive设定为Server的IP type必须选择zabbix agent(active),因为数据是zabbix被监控的主动提交给server key:log[/var/log/message,error],我们这里是监控的系统日志,打印出带有error的行,大家也可以去监控其他的日志,mysql、nginx等等都是可以的。 log time format:MMpddphh:mm:ss,对应日志的行头Sep 14 07:32:38,y表示年、M表示月、d表示日、p和:一个占位符,h表示小时,m表示分钟,s表示秒。 3).有自己添加的监控项吗 vm.memory.size[available] 系统中已用内存量 vm.memory.size[total] 系统总共内存量 swap空间{system.swap.size[,free] system.swap.size[,pfree] system.swap.size[,total] } CPU { system.cpu.switches 系统文件切换 (bps) (system.cpu.util[,user] system.cpu.util[,nice] system.cpu.util[,system] system.cpu.util[,iowait] system.cpu.util[,idle] system.cpu.util[,interrupt] system.cpu.util[,steal] system.cpu.util[,softirq] )类似于对应系统中top命令查看CPU显示值 system.cpu.load[percpu,avg1] 系统CPU总负载/在线cpu个数平均1min的利用百分比 system.cpu.load[percpu,avg5] 系统CPU总负载/在线cpu个数平均5min的利用百分比 system.cpu.load[percpu,avg15] 系统CPU总负载/在线cpu个数平均15min的利用百分比 vfs.fs.size[{#FSNAME},free] 可用磁盘空间大小vfs.fs.size[{#FSNAME},pfree] 可用磁盘空间大小占分区总磁盘空间的百分比 vfs.fs.size[{#FSNAME},total] 分区总磁盘空间大小vfs.fs.size[{#FSNAME},used] 已使用磁盘空间大小 vfs.fs.inode[{#FSNAME},pfree] 可用磁盘节点数占总节点数的百分比 net.if.in[{#IFNAME}] 网络进接口流量 (bps)net.if.out[{#IFNAME}] 网络出接口流量 (bps)proc.num[] 系统中总进程数量,通过top查看 proc.num[,,run] 系统中处于running的进程,通过top查看system.localtime 系统时间 vfs.file.cksum[/etc/passwd] 系统文件passwd的文件总数 system.boottime 系统启动的时间戳system.hostname 系统名称system.cpu.intr 设备中断 kernel.maxfiles 系统支持打开文件的最大数量kernel.maxproc 系统支持打开进程的最大数量 system.users.num 登陆系统的用户数agent.ping 检查客户端可用性 agent.version 检查客户端使用版本system.uname 系统详细信息 system.uptime 系统开启持续时间agent.hostname 客户端主机名net.tcp.listen[port] 监控程序端口启用 查看内存使用率,CPU负载,I/O,磁盘使用率及这台服务器上的应用监控以Nginx为列查看其端口是否开启。 内存使用率:free -m| awk '/Mem/{print $3/$2*100"%"}' CPU负载:vmstat |awk '{if(NR==3)print $15"%"}' I/O使用率:iostat -xk|awk '/^[vs]/{print $1,"\t"$NF"%"}' 磁盘使用率:df -h|awk '/^\/dev/{print $1"\t"$5}' Nginx端口是否开启:ss -antp |grep nginx
ELK CICD 1、简述集中式版本管理和分布式版本管理的优缺点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 集中式优点: 1、采用集中式,易于管理,保证安全性; 2、管理方便,逻辑明确,理念符合常规思维; 3、代码的一致性高; 4、适合人数不多的项目开发; 5、允许一个文件有任意多的可命名属性,会关注所有的文件类型; 6、支持二进制文件,更容易处理大文件; 集中式缺点: 1、服务器压力太大,数据库容量暴增; 2、必须连接在服务器上,否则基本不能工作、提交、对比、还原等; 3、不适合开源开发。 分布式优点: 1、适合分布式开发,强调个体; 2、公共的服务器压力和数量都不会太大; 3、速度快,成熟的架构,开发灵活; 4、任意两个开发者之间可以很容易的解决冲突; 5、离线工作,管理代码成本低,不需要依赖服务器; 6、部署方便。基本上下个命令就可以用; 7、良好的分支机制,可以让主干代码保持干净。 分布式缺点: 1、资料少,学习成本比较大,学习周期比较长,要求人员素质比较高; 2、不符合常规思维; 3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
Jenkins怎么实现上线?
gitlab怎么备份的?
1 2 3 4 gitlab有自己的备份工具gitlab-rake 备份命令为
什么是配置管理?配置管理目的是什么?
1 2 3 4 配置管理是一种确保系统配置一致性、稳定性和可维护性的技术实践。 其主要目的是提高部署效率、降低配置错误、简化变更管理、支持自动化操作,并保证系统的安全性和可扩展性。在 DevOps 和持续交付的背景下,配置管理变得尤为重要,它能够帮助团队管理复杂的 IT 环境,减少人工干预,提高系统的可靠性和安全性。 配置管理通常使用专门的工具和技术来实现,如 Ansible、Puppet、Chef、SaltStack 等。
简述一个系统的发布流程。
简述软件完整的生命周期,及工作过程中产品从立项到上线的流程。
不考虑环境因素,简述引起编译过程报错的原因。
简述集中式版本管理和分布式版本管理的优缺点。
说一下你了解的配置管理,版本控制,持续集成等工具?
jenkins都用过哪些插件,简单介绍一下?jenkins如何备份?
用命令将test.sh文件发送到OS为Centos的minion 的/usr/local目录下
Jenkins你是怎样使用的,如何发布代码和回滚代码?有结合使用其他软件比如gitlab没有?
Jenkins什么版本 有没有用到pipeline
Jenkins 三种构建方式
什么叫网站灰度发布?如何实现灰度发布?
1 2 3 4 5 6 什么是灰度发布:在一般情况下,升级服务器端应用,需要将应用源码或程序包上传到服务器,然后停止掉老版本服务,再启动新版本。但是这种简单的发布方式存在两个问题,一方面,在新版本升级过程中,服务是暂时中断的,另一方面,如果新版本有BUG,升级失败,回滚起来也非常麻烦,容易造成更长时间的服务不可用。 如何实现灰度发布: Nginx+LUA方式 根据Cookie实现灰度发布 根据来路IP实现灰度发布
虚拟化 虚拟化vSphere,Hyper-V,kvm
1、VMwarevSphere集成容器(VIC)建立了一个在轻量级虚拟机内部署并管理容器的环境。
2、Hyper-V是微软提出的一种系统管理程序虚拟化技术,能够实现桌面虚拟化
3、KVM是一个开源的系统虚拟化模块,自Linux2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM(虚拟机监控器)之一。
Docker 1、如何批量清理临时镜像文件?
2、如何查看镜像支持的环境变量?
3、本地的镜像文件都存放在哪里
1 于Docker相关的本地资源存放在/var/lib/docker/目录下,其中container目录存放容器信息,graph目录存放镜像信息,aufs目录下存放具体的镜像底层文件。
4、构建Docker镜像应该遵循哪些原则?
1 整体远侧上,尽量保持镜像功能的明确和内容的精简,要点包括:# 尽量选取满足需求但较小的基础系统镜像,建议选择debian:wheezy镜像,仅有86MB大小# 清理编译生成文件、安装包的缓存等临时文件# 安装各个软件时候要指定准确的版本号,并避免引入不需要的依赖# 从安全的角度考虑,应用尽量使用系统的库和依赖# 使用Dockerfile创建镜像时候要添加.dockerignore文件或使用干净的工作目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1、容器退出后,通过docker ps 命令查看不到,数据会丢失么? 容器退出后会处于终止(exited)状态,此时可以通过 docker ps -a 查看,其中数据不会丢失,还可以通过docker start 来启动,只有删除容器才会清除数据。 2、如何停止所有正在运行的容器? 使用docker kill $(sudo docker ps -q) 3、如何清理批量后台停止的容器? 使用docker rm $(sudo docker ps -a -q) 4、如何临时退出一个正在交互的容器的终端,而不终止它? 按Ctrl+p,后按Ctrl+q,如果按Ctrl+c会使容器内的应用进程终止,进而会使容器终止。 5、很多应用容器都是默认后台运行的,怎么查看它们的输出和日志信息? 使用docker logs,后面跟容器的名称或者ID信息 6、使用docker port 命令映射容器的端口时,系统报错Error: No public port ‘80’ published for …,是什么意思? 创建镜像时Dockerfile要指定正确的EXPOSE的端口,容器启动时指定PublishAllport=true 7、可以在一个容器中同时运行多个应用进程吗? 一般不推荐在同一个容器内运行多个应用进程,如果有类似需求,可以通过额外的进程管理机制,比如supervisord来管理所运行的进程 8、如何控制容器占用系统资源(CPU,内存)的份额? 在使用docker create命令创建容器或使用docker run 创建并运行容器的时候,可以使用-c|–cpu-shares[=0]参数来调整同期使用CPU的权重,使用-m|–memory参数来调整容器使用内存的大小。
1 2 3 4 5 1、仓库(Repository)、注册服务器(Registry)、注册索引(Index)有何关系? 首先,仓库是存放一组关联镜像的集合,比如同一个应用的不同版本的镜像,注册服务器是存放实际的镜像的地方,注册索引则负责维护用户的账号,权限,搜索,标签等管理。注册服务器利用注册索引来实现认证等管理。 2 、从非官方仓库(如:dl.dockerpool.com)下载镜像的时候,有时候会提示“Error:Invaild registry endpoint [https://dl.docker.com:5000/v1/](https://dl.docker.com:5000/v1/)…”? Docker 自1.3.0版本往后以来,加强了对镜像安全性的验证,需要手动添加对非官方仓库的信任。DOCKER_OPTS=”–insecure-registry dl.dockerpool.com:5000”重启docker服务
1 2 3 4 5 1、Docker的配置文件放在那里。如何修改配置? Ubuntu系统下Docker的配置文件是/etc/default/docker,CentOS系统配置文件存放在/etc/sysconfig/docker 2、如何更改Docker的默认存储设置? Docker的默认存放位置是/var/lib/docker,如果希望将Docker的本地文件存储到其他分区,可以使用Linux软连接的方式来做。
1 2 3 4 5 6 7 8 9 1、Docker与LXC(Linux Container)有何不同? LXC利用Linux上相关技术实现容器,Docker则在如下的几个方面进行了改进: 移植性:通过抽象容器配置,容器可以实现一个平台移植到另一个平台;镜像系统:基于AUFS的镜像系统为容器的分发带来了很多的便利,同时共同的镜像层只需要存储一份,实现高效率的存储;版本管理:类似于GIT的版本管理理念,用户可以更方面的创建、管理镜像文件;仓库系统:仓库系统大大降低了镜像的分发和管理的成本;周边工具:各种现有的工具(配置管理、云平台)对Docker的支持,以及基于Docker的Pass、CI等系统,让Docker的应用更加方便和多样化。 2 、Docker与Vagrant有何不同? 两者的定位完全不同Vagrant类似于Boot2Docker(一款运行Docker的最小内核),是一套虚拟机的管理环境,Vagrant可以在多种系统上和虚拟机软件中运行,可以在Windows。Mac等非Linux平台上为Docker支持,自身具有较好的包装性和移植性。原生Docker自身只能运行在Linux平台上,但启动和运行的性能都比虚拟机要快,往往更适合快速开发和部署应用的场景。 3、开发环境中Docker与Vagrant该如何选择? Docker不是虚拟机,而是进程隔离,对于资源的消耗很少,单一开发环境下Vagrant是虚拟机上的封装,虚拟机本身会消耗资源。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1、Docker能在非Linux平台(Windows+MacOS)上运行吗? 可以 2 、如何将一台宿主机的docker环境迁移到另外一台宿主机? 停止Docker服务,将整个docker存储文件复制到另外一台宿主机上,然后调整另外一台宿主机的配置即可 3、Docker容器创建后,删除了/var/run/netns 目录下的网络名字空间文件,可以手动恢复它: 查看容器进程ID,比如1234 sudo docker inspect --format='{{. State.pid}}' $container_id 1234 到proc目录下,把对应的网络名字空间文件链接到/var/run/netns,然后通过正常的系统命令查看操作容器的名字空间。 4、对docker都知道些什么 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口 5、vmware和docker的区别 VM(VMware)在宿主机器、宿主机器操作系统的基础上创建虚拟层、虚拟化的操作系统、虚拟化的仓库,然后再安装应用; Container(Docker容器),在宿主机器、宿主机器操作系统上创建Docker引擎,在引擎的基础上再安装应用。 6、Docker 和虚拟机有啥不同? Docker 是轻量级的沙盒,在其中运行的只是应用,虚拟机里面还有额外的系统 7、docker 的三大组件是什么?分别的作用? 镜像(Image)、容器(Container)、仓库(Repository)是我们常说的Docker的三大组件 Docker镜像就是一个Linux的文件系统(Root FileSystem),这个文件系统里面包含可以运行在Linux内核的程序以及相应的数据。 容器是通过镜像来创建的,所以必须先有镜像才能创建容器,而生成的容器是一个独立于宿主机的隔离进程,并且有属于容器自己的网络和命名空间 仓库(Repository)是集中存储镜像的地方,这里有个概念要区分一下,那就是仓库与仓库服务器(Registry)是两回事,像我们上面说的Docker Hub,就是Docker官方提供的一个仓库服务器,不过其实有时候我们不太需要太过区分这两个概念。 8、如何将-台宿主机的docker 环境迁移到另外-台宿主机? 停止Docker服务,将整个docker存储文件复制到另外一台宿主机上,然后调整另外一台宿主机的配置即可 9、docker中-v -ps分别是什么
10、使用docker搭建套简 单的LNMP环境要求最终实现能够
1 2 3 4 1.访问: index. php 2.新的网桥IP为: 192. 168.0.100/24 3.PHIP 版本为PHP-7 nginx 版本为NGINX-1.14 4.nginx 配置文件物理机路径:/data/nginxconf/nginx. conf,容器配置文件路径: /etc/nginx/ 5.使用nginx新的容器创建个新的镜像: 镜像名为: local nginx 版本为: tag-V1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 11、docke容器技术有哪些优势和不足? 容器的优点 敏捷环境:容器技术最大的优点是创建容器实例比创建虚拟机示例快得多,容器轻量级的脚本可以从性能和大小方面减少开销。 提高生产力:容器通过移除跨服务依赖和冲突提高了开发者的生产力。每个容器都可以看作是一个不同的微服务,因此可以独立升级,而不用担心同步。 版本控制:每一个容器的镜像都有版本控制,这样就可以追踪不同版本的容器,监控版本之间的差异等等。 运行环境可移植:容器封装了所有运行应用程序所必需的相关的细节比如应用依赖以及操作系统。这就使得镜像从一个环境移植到另外一个环境更加灵活。比如,同一个镜像可以在 Windows 或 Linux 或者 开发、测试或 stage 环境中运行。 标准化: 大多数容器基于开放标准,可以运行在所有主流 Linux 发行版、Microsoft 平台等等。 安全:容器之间的进程是相互隔离的,其中的基础设施亦是如此。这样其中一个容器的升级或者变化不会影响其他容器。 容器的缺点 复杂性增加:随着容器及应用数量的增加,同时也伴随着复杂性的增加。在生产环境中管理如此之多的容器是一个极具挑战性的任务,可以使用 Kubernetes 和 Mesos 等工具管理具有一定规模数量的容器。 原生 Linux 支持:大多数容器技术,比如 Docker,基于 Linux 容器(LXC),相比于在原生 Linux 中运行容器,在Microsoft 环境中运行容器略显笨拙,并且日常使用也会带来复杂性。 不成熟:容器技术在市场上是相对新的技术,需要时间来适应市场。开发者中的可用资源是有限的,如果某个开发者陷入某个问题,可能需要花些时间才能解决问题。 12、清理docker环境已停止的容器? 删除所有已经停止的容器 docker rm `docker ps -a |grep Exited |awk '{print $1}'` 13、查看容器名为rancher-scrvcr的输出日志? docker logs -f -t --tail 行数 容器名 14、Docker常见的网络模式有哪些,区别是什么? Docker网络子系统支持以下网络驱动: bridge:默认网络驱动,用于单宿主机的docker容器和主机通信; overlay:叠加网络,用于连接多个宿主机Docker进程管理的容器和swarm services; macvlan:将容器的虚拟网卡直接连接在主机所在的物理网络上; host:Docker 17.06+ 创建swarm services时支持,容器直接使用docker主机的网卡和网络; none:禁用容器的网络,不连接任何网络,swarm services不支持该类型; Network plugins:安装第三方网络插件,实现自定义的网络类型 15、写出下列操作对应的命令 1)删除pod kubectl delete pod pod名 2)查看 pod kubectl get pod 3)查看 service列表 kubectl get svc 5)查看所有 Docker容器 docker ps -a 6)删除 Docker容器 docker rm -f $(docker ps -a -q) 7)查看Docker镜像 docker images 8)删除 Docker镜像 docker rmi image名 9)获取镜像 docker pull image名 16、下列哪项可以作为集群的管理工具() a.pupper b.pdsh c.cloudera manager d.zookeeper 17、Dockerfile如何优化? 编写.dockerignore 文件 容器只运行单个应用 将多个 RUN 指令合并为一个 基础镜像的标签不要用 latest 每个 RUN 指令后删除多余文件 选择合适的基础镜像(alpine 版本最好) 设置 WORKDIR 和 CMD 使用 ENTRYPOINT (可选) 在 entrypoint 脚本中使用 exec COPY 与 ADD 优先使用前者 合理调整 COPY 与 RUN 的顺序 设置默认的环境变量,映射端口和数据卷 使用 LABEL 设置镜像元数据 添加 HEALTHCHECK
18、描述一下服务器虚拟化技术和容器技术原理,以及各自的优劣
1 2 3 虚拟化的优点:1、资源池化,将硬件资源虚拟化为抽象的资源从而提升了资源利用率;2、具有易拓展性,当物理资源不够时可以增添物理资源再将其抽象成虚拟资源以供使用。3、为云服务的到来打下基础;这时我们发现虚拟化技术并没有解决全部的问题,它也缺点:每一个虚拟机环境都需要在一个完整的OS之上运行,当虚拟机个数较多时就会对物理资源造成很大的占用。同时依旧需要物理服务器的支持,且可移植性的问题依旧没有解决。 在后来就有了容器技术,它将软件及其运行环境打包成一个整体从而主要解决了可移植性、开发和运维环境差异等带来的问题,它和云计算结合更是解决了必须具备物理服务器的问题,随之而来的问题也就迎刃而解了;
19、docker容器其中的命令有哪些,举例说明。
1 2 3 4 5 docker run --name myredis –d redis 运行一个name为myredis的容器 docker ps 查看运行中的容器 docker start container-name/container-id 启动一个容器 docker stop container-name/container-id 停止一个容器 docker rm container-id 删除一个容器
20、容器常用操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 如何批量删除已停止运行的容器? docker ps -a|grep Exited|awk '{print $1}' docker rm `docker ps -a|grep Exited|awk '{print $1}'` 如何查看容器挂载了哪些目录? docker inspect container_name | grep Mounts -A 20 容器有几种网络模式?分别有哪些特点? 三种 Container:这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。 None:该模式关闭了容器的网络功能。 Bridge:此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。 为什么构建镜像要尽量小?哪些措施可以使构建镜像更小? 因为传输和部署体积较小的镜像速度更快。 尽量在同一层运行更多的命令 如果在镜像中通过yum安装软件包,尽量在一行装完,不要多行,同样安装完后运行,clean all后对大小影响很大 docker-compose 启动的一组容器之间可以用localhost互相通信吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 1.什么是Docker Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。 2.Docker与虚拟机有何不同 A 容器不需要引导操作系统内核,因此可以在不到一秒的时间内创建容器。此功能使基于容器的虚拟化比其他虚拟化方法更加独特和可取。 B 由于基于容器的虚拟化为主机增加了很少或没有开销,因此基于容器的虚拟化具有接近本机的性能。 C 对于基于容器的虚拟化,与其他虚拟化不同,不需要其他软件。 D 主机上的所有容器共享主机的调度程序,从而节省了额外资源的需求。 E 与虚拟机映像相比,容器状态(Docker或LXC映像)的大小很小,因此容器映像很容易分发。 F 容器中的资源管理是通过cgroup实现的。Cgroups不允许容器消耗比分配给它们更多的资源。虽然主机的所有资源都在虚拟机中可见,但无法使用。这可以通过在容器和主机上同时运行top或htop来实现。所有环境的输出看起来都很相似。 3.什么是Docker镜像 Docker镜像是Docker容器的源代码,Docker镜像用于创建容器。使用build命令创建镜像。 4.什么是Docker容器 5.Docker容器有几种状态 四种状态:运行、已暂停、重新启动、已退出。 6.Dockerfile中最常见的指令是什么 FROM:指定基础镜像 LABEL:功能是为镜像指定标签 RUN:运行指定的命令 CMD:容器启动时要运行的命令 COPY/ADD 7.docker常用命令 docker pull 拉取或者更新指定镜像 docker push 将镜像推送至远程仓库 docker rm 删除容器 docker rmi 删除镜像 docker images 列出所有镜像 docker ps 列出所有容器
8.容器与主机之间的数据拷贝命令
docker cp 命令用于容器与主机之间的数据拷贝
主机到容器:
容器到主机:
9.启动nginx容器(随机端口映射),并挂载本地文件目录到容器html的命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 10.Docker使用流程 11.如何批量清理临时镜像文件? docker rmi $(docker images -q) 12.如何查看镜像支持的环境变量? docker run IMAGE env 13.本地的镜像文件都存放在哪里? 与Docker相关的本地资源存放在/var/lib/docker/目录下,其中container目录存放容器信息,graph目录存放镜像信息,aufs目录下存放具体的镜像底层文件。 14.构建Docker镜像应该遵循哪些原则? A:整体原则上,尽量保持镜像功能的明确和内容的精简,要点包括: B:尽量选取满足需求但较小的基础系统镜像,建议选择debian:wheezy镜像,仅有86MB大小 C:清理编译生成文件、安装包的缓存等临时文件 D:安装各个软件时候要指定准确的版本号,并避免引入不需要的依赖 E:从安全的角度考虑,应用尽量使用系统的库和依赖 F:使用Dockerfile创建镜像时候要添加.dockerignore文件或使用干净的工作目录 15.容器退出后,通过docker ps 命令查看不到,数据会丢失么? 容器退出后会处于终止(exited)状态,此时可以通过 docker ps -a 查看,其中数据不会丢失,还可以通过docker start 来启动,只有删除容器才会清除数据。
16.如何停止所有正在运行的容器?
17.如何清理批量后台停止的容器?
18.如何获取某个容器的PID信息?
19.如何获取某个容器的IP地址?
20.如何给容器指定一个固定IP地址,而不是每次重启容器IP地址都会变?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 21.如何临时退出一个正在交互的容器的终端,而不终止它? Ctrl+p+q 22.很多应用容器都是默认后台运行的,怎么查看它们的输出和日志信息? docker logs 容器名称或容器id 23.使用docker port 命令映射容器的端口时,系统报错Error: No public port ‘80’ published for …,是什么意思? 创建镜像时Dockerfile要指定正确的EXPOSE的端口 24.可以在一个容器中同时运行多个应用进程吗? 一般不推荐在同一个容器内运行多个应用进程,如果有类似需求,可以通过额外的进程管理机制,比如supervisord来管理所运行的进程 25.如何控制容器占用系统资源(CPU,内存)的份额? 在使用docker create命令创建容器或使用docker run 创建并运行容器的时候,可以使用-c|–cpu-shares[=0]参数来调整同期使用CPU的权重,使用-m|–memory参数来调整容器使用内存的大小。 26.仓库(Repository)、注册服务器(Registry)、注册索引(Index)有何关系? 首先,仓库是存放一组关联镜像的集合,比如同一个应用的不同版本的镜像,注册服务器是存放实际的镜像的地方,注册索引则负责维护用户的账号,权限,搜索,标签等管理。注册服务器利用注册索引来实现认证等管理。 27.从非官方仓库(如:dl.dockerpool.com)下载镜像的时候,有时候会提示“Error:Invaild registry endpoint https://dl.docker.com:5000/v1/…”? Docker 自1.3.0版本往后以来,加强了对镜像安全性的验证,需要手动添加对非官方仓库的信任。DOCKER_OPTS=”–insecure-registry dl.dockerpool.com:5000” 重启docker服务 28.docker pull 某一个镜像很慢,比如说centos. 这种情况是因为docker官方的镜像库是国外,我们应该配置国内的镜像库或者加速器。 加速器可以用阿里云镜像加速器,进入阿里云网站在控制台可以看到,根据提示来即可。配置文件 /etc/docker/daemon.json 添加如下命令 DOCKER_NETWORK_OPTIONS="--registry-mirror=https://....." 地址可以为国内镜像地址,也可为公司内网镜像仓库地址。 29.docker push镜像时碰到的443问题,这是因为docker默认会走ssl加密的。 如果是公司内网的,直接在/etc/sysconfig/docker-network 里面添加如下配合DOCKER_NETWORK_OPTIONS=“--insecure-registry xxx-ip” 30.Docker的配置文件放在那里。如何修改配置? Ubuntu系统下Docker的配置文件是/etc/default/docker,CentOS系统配置文件存放在/etc/sysconfig/docker 31.如何更改Docker的默认存储设置? Docker的默认存放位置是/var/lib/docker,如果希望将Docker的本地文件存储到其他分区,可以使用Linux软连接的方式来做。 32.Docker与LXC(Linux Container)有何不同? LXC利用Linux上相关技术实现容器,Docker则在如下的几个方面进行了改进: 移植性:通过抽象容器配置,容器可以实现一个平台移植到另一个平台; 镜像系统:基于AUFS的镜像系统为容器的分发带来了很多的便利,同时共同的镜像层只需要存储一份,实现高效率的存储; 版本管理:类似于GIT的版本管理理念,用户可以更方面的创建、管理镜像文件; 仓库系统:仓库系统大大降低了镜像的分发和管理的成本; 周边工具:各种现有的工具(配置管理、云平台)对Docker的支持,以及基于Docker的Pass、CI等系统,让Docker的应用更加方便和多样化。
K8S 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 1、什么是kubernetes? 有何优势?怎么安装(说说安装方法、分别的理解) ? Kubernetes一个用于容器集群的自动化部署、扩容以及运维的开源平台。通过Kubernetes,你可以快速有效地响应用户需求;快速而有预期地部署你的应用;极速地扩展你的应用;无缝对接新应用功能;节省资源,优化硬件资源的使用。为容器编排管理提供了完整的开源方案。 优势 快速部署:因为你可以快速的创建并且发布一个小型服务 更容易迭代:因为可以独立的为每个服务添加新功能 更加灵活:就算单个服务(组件)不能使用,其他的服务仍能正常运行。 安装 Kubernetes有用二进制安装包安装的方式,但是比较费劲,所以k8s推出了kubeadm的安装方式,将k8s的各个组件都安装在docker之上,以容器的方式运行,也是官方推荐的方式。 2、 kubernetes怎么做版本回退?谈谈你的理解。 kubernetes的版本回退,因为已经在线上使用挺久的时间了,是利用kubernetes deployment的rollout histrory回退到指定版本。 3、能否通过kubernetes部署一一个简单的web (nginx)? 说说思路。 KubernetesDeployment为Pod 和Replica Set(下一代Replication Controller)提供声明式更新。只需要在 Deployment 中描述想要的目标状态是什么,Deployment Controller 就会帮开发者将 Pod 和 ReplicaSet 的实际状态改变成目标状态。开发者可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。使用Deployment能够更加方便地管理Pod,包括扩容、缩容、暂停、滚动更新、回滚等。在Choerodon中用实例的方式来展现Deployment,同时支持在线升级,停止,删除等多元化功能 4、可以在一个Docker Container中同时运行多个应用进程吗? 可以同时运行,但不建议 5、kubernetes 集群由那些主要组件组成?各个组件的功能是什么,它们之间是如何交互的? Pod 安排在节点上,包含一组容器和卷。同一个Pod里的容器共享同一个网络命名空间,可以使用localhost互相通信。Pod是短暂的,不是持续性实体 Lable 一些Pod有Label(enter image description here)。一个Label是attach到Pod的一对键/值对,用来传递用户定义的属性。上面。 Replication Controller 确保任意时间都有指定数量的Pod“副本”在运行。如果为某个Pod创建了Replication Controller并且指定3个副本,它会创建3个Pod,并且持续监控它们。如果某个Pod不响应,那么Replication Controller会替换它,保持总数为3.如下面的动画所示 如果之前不响应的Pod恢复了,现在就有4个Pod了,那么Replication Controller会将其中一个终止保持总数为3。如果在运行中将副本总数改为5,Replication Controller会立刻启动2个新Pod,保证总数为5。还可以按照这样的方式缩小Pod,这个特性在执行滚动升级时很有用。 当创建Replication Controller时,需要指定两个东西: Pod模板:用来创建Pod副本的模板 Label:Replication Controller需要监控的Pod的标签。 Service Service是定义一系列Pod以及访问这些Pod的策略的一层抽象。Service通过Label找到Pod组。因为Service是抽象的,所 Node 节点(上图橘色方框)是物理或者虚拟机器,作为Kubernetes worker,通常称为Minion。每个节点都运行如下Kubernetes关键组件: Kubelet:是主节点代理。 Kube-proxy:Service使用其将链接路由到Pod,如上文所述。 Docker或Rocket:Kubernetes使用的容器技术来创建容器。 Master 集群拥有一个Kubernetes Master(紫色方框)。Kubernetes Master提供集群的独特视角,并且拥有一系列组件,比如Kubernetes API Server。API Server提供可以用来和集群交互的REST端点。master节点包括用来创建和复制Pod的Replication Controller。 6、kubernetes中的pod内有几个容器它们之间是什么关系? Pod中的容器们运行在一个逻辑“主机”上。他们使用同一个网络命名空间(network namespace,换句话讲,就是同样的IP地址和端口空间),以及同样的IPC(inter-process communication,进程间通信)命名空间,他们还使用共享卷(shared volume)。这些特征使得Pod内的容器能互相高效地通信。同时,Pod使得你可以将多个紧耦合的应用容器当做一个实体来管理。 7. K8s 集群中有一个节点notready.请说明排查该节点故障流程。 检查master到node节点的网络,或者重启一下网络pod, 8. 如何通过kubectl查看某个 label 关联的所有pod。 kubectl get pods -l name=<label-name> 9. 下列是一个示列的yaml,使用kubectl create -f app.yaml 创建这个deployment与svc,使用curl-Lsv svc:port 发现不通, 是什么问题。请回答! apiVersion:v1 kind: Service metadata: name: openapiv1-sVc labels: SVe: openapiv1-svc ver:3.2.0 namespace: aps-os-test spec: type: NodePort ports: - port: 8080 targetPort: 8090 protocol: TCP name: htp nodePort: 32471 selector: app: openapiv1 ver:3.2.1 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: openapiv1 namespace: aps-os-test spec: replicas 1 metadata name: openapiv1 labels: app: openapiv1 ver:3.2.0 spec: name: app-container image: registryaps datanvas.com:5000/ap/service/base/jre-aps:3.2.0 workingDir: /opt/workdir command: [/i/ash,/run.shT ports: containerPort: 8080 name: http 使用下面app.yaml创建后发现Deployment 和svc创建成功,但是pod没有生成是什么原因。请给出分析思路以及可能存在的原因。 apiVersion:v1 kind: Service metadata: name: openapiv1-5VC labels: svc: openapiv1-sVC ver:3.2.0 namespace: aps-os-test spec type: NodePort ports: port: 8080 targetPort: 8080
kubectl get pod的时候某个pod一直处理terminating, 以什么命令可以强制删除。 使用kubectl中的强制删除命令 kubectl delete pod podName -n NAMESPACE –force –grace-period=0
请问你在kubernetes中用过有状态服务吗?有哪些? 有,mysql数据库、kafka、zookeepe
如何从外部(kubernetes集群之外), 访问到kubernetes里创建的service?
1 2 3 4 5 6 7 根据创建Service的type类型不同,可分成4种模式: ClusterIP: 默认方式。根据是否生成ClusterIP又可分为普通Service和Headless Service两类: 普通Service:通过为Kubernetes的Service分配一个集群内部可访问的固定虚拟IP(Cluster IP),实现集群内的访问。为最常见的方式。 Headless Service:该服务不会分配Cluster IP,也不通过kube-proxy做反向代理和负载均衡。而是通过DNS提供稳定的网络ID来访问,DNS会将headless service的后端直接解析为podIP列表。主要供StatefulSet使用。 NodePort:除了使用Cluster IP之外,还通过将service的port映射到集群内每个节点的相同一个端口,实现通过nodeIP:nodePort从集群外访问服务。 LoadBalancer:和nodePort类似,不过除了使用一个Cluster IP和nodePort之外,还会向所使用的公有云申请一个负载均衡器(负载均衡器后端映射到各节点的nodePort),实现从集群外通过LB访问服务。 ExternalName:是 Service 的特例。此模式主要面向运行在集群外部的服务,通过它可以将外部服务映射进k8s集群,且具备k8s内服务的一些特征(如具备namespace等属性),来为集群内部提供服务。此模式要求kube-dns的版本为1.7或以上。这种模式和前三种模式(除headless service)最大的不同是重定向依赖的是dns层次,而不是通过kube-proxy。
Headless服务主要用来干什么。
1 headless service 是将service的发布文件中的clusterip=none ,不让其获取clusterip , DNS解析的时候直接走pod,因为没有ClusterIP,kube-proxy 并不处理此类服务,因为没有load balancing或 proxy 代理设置,在访问服务的时候回返回后端的全部的Pods IP地址,主要用于开发者自己根据pods进行负载均衡器的开发(设置了selector)。
请写出一些你用过的K8s常用命令,并简要说明用途。
1 2 3 kubectl get nodes kubectl get pods --all-namesapces 获取所有pod kubectl get ns
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 kubernetes常见面试题 1.k8s是什么,请说出你的了解? Kubenetes是一个针对容器应用,进行自动部署,弹性伸缩和管理的开源系统。主要功能是生产环境中的容器编排。 K8S是Google公司推出的,它来源于由Google公司内部使用了15年的Borg系统,集结了Borg的精华。 2.K8s架构的组成是什么? 2.1、Master节点(默认不参加实际工作): Kubectl:客户端命令行工具,作为整个K8s集群的操作入口; Api Server:在K8s架构中承担的是“桥梁”的角色,作为资源操作的唯一入口,它提供了认证、授权、访问控制、API注册和发现等机制。客户端与k8s群集及K8s内部组件的通信,都要通过Api Server这个组件; Controller-manager:负责维护群集的状态,比如故障检测、自动扩展、滚动更新等; Scheduler:负责资源的调度,按照预定的调度策略将pod调度到相应的node节点上; Etcd:担任数据中心的角色,保存了整个群集的状态; 2.2、Node节点: Kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理,一般运行在所有的节点,是Node节点的代理,当Scheduler确定某个node上运行pod之后,会将pod的具体信息(image,volume)等发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向master返回运行状态。(自动修复功能:如果某个节点中的容器宕机,它会尝试重启该容器,若重启无效,则会将该pod杀死,然后重新创建一个容器); Kube-proxy:Service在逻辑上代表了后端的多个pod。负责为Service提供cluster内部的服务发现和负载均衡(外界通过Service访问pod提供的服务时,Service接收到的请求后就是通过kube-proxy来转发到pod上的); container-runtime:是负责管理运行容器的软件,比如docker 3.容器和主机部署应用的区别是什么? 容器的中心思想就是秒级启动;一次封装、到处运行;这是主机部署应用无法达到的效果,但同时也更应该注重容器的数据持久化问题。 另外,容器部署可以将各个服务进行隔离,互不影响,这也是容器的另一个核心概念。 4.请你说一下kubenetes针对pod资源对象的健康监测机制? livenessProbe探针 可以根据用户自定义规则来判定pod是否健康,如果livenessProbe探针探测到容器不健康,则kubelet会根据其重启策略来决定是否重启,如果一个容器不包含livenessProbe探针,则kubelet会认为容器的livenessProbe探针的返回值永远成功。 ReadinessProbe探针 同样是可以根据用户自定义规则来判断pod是否健康,如果探测失败,控制器会将此pod从对应service的endpoint列表中移除,从此不再将任何请求调度到此Pod上,直到下次探测成功。 startupProbe探针 启动检查机制,应用一些启动缓慢的业务,避免业务长时间启动而被上面两类探针kill掉,这个问题也可以换另一种方式解决,就是定义上面两类探针机制时,初始化时间定义的长一些即可。 Exec:通过执行命令的方式来检查服务是否正常,比如使用cat命令查看pod中的某个重要配置文件是否存在,若存在,则表示pod健康。反之异常。 Httpget:通过发送http/htps请求检查服务是否正常,返回的状态码为200-399则表示容器健康(注http get类似于命令curl -I)。 tcpSocket:通过容器的IP和Port执行TCP检查,如果能够建立TCP连接,则表明容器健康,这种方式与HTTPget的探测机制有些类似,tcpsocket健康检查适用于TCP业务。 5.K8s中镜像的下载策略是什么? 可通过命令“kubectl explain pod.spec.containers”来查看imagePullPolicy这行的解释。 K8s的镜像下载策略有三种:Always、Never、IFNotPresent; Always:镜像标签为latest时,总是从指定的仓库中获取镜像; Never:禁止从仓库中下载镜像,也就是说只能使用本地镜像; IfNotPresent:仅当本地没有对应镜像时,才从目标仓库中下载。 默认的镜像下载策略是:当镜像标签是latest时,默认策略是Always;当镜像标签是自定义时(也就是标签不是latest),那么默认策略是IfNotPresent。 6.pod的重启策略是什么 可以通过命令“kubectl explain pod.spec”查看pod的重启策略。(restartPolicy字段) Always:但凡pod对象终止就重启,此为默认策略。 OnFailure:仅在pod对象出现错误时才重启 7. Service这种资源对象的作用是什么? 用来给相同的多个pod对象提供一个固定的统一访问接口,常用于服务发现和服务访问。 8.版本回滚相关的命令? 9.标签与标签选择器的作用是什么? 标签:是当相同类型的资源对象越来越多的时候,为了更好的管理,可以按照标签将其分为一个组,为的是提升资源对象的管理效率。 标签选择器:就是标签的查询过滤条件。目前API支持两种标签选择器: 基于等值关系的,如:“=”、“”“==”、“!=”(注:“==”也是等于的意思,yaml文件中的matchLabels字段);基于集合的,如:in、notin、exists(yaml文件中的matchExpressions字段); 注:in:在这个集合中;notin:不在这个集合中;exists:要么全在(exists)这个集合中,要么都不在(notexists); 10.查看标签的方式? kubectl get node --show-labels kubectl get pod --show-labels 11.添加、修改、删除标签的命令? kubectl label node node-1 app=nginx kubectl label node node-1 app=mycat --overwrite kubectl label node node-1 app- 12.描述一下pod的生命周期有哪些状态? Pending:表示pod已经被同意创建,正在等待kube-scheduler选择合适的节点创建,一般是在准备镜像; Running:表示pod中所有的容器已经被创建,并且至少有一个容器正在运行或者是正在启动或者是正在重启; Succeeded:表示所有容器已经成功终止,并且不会再启动; Failed:表示pod中所有容器都是非0(不正常)状态退出; Unknown:表示无法读取Pod状态,通常是kube-controller-manager无法与Pod通信。 13.创建一个pod的流程是什么? 1) 客户端提交Pod的配置信息(可以是yaml文件定义好的信息)到kube-apiserver; 2) Apiserver收到指令后,通知给controller-manager创建一个资源对象; 3) Controller-manager通过api-server将pod的配置信息存储到ETCD数据中心中; 4) Kube-scheduler检测到pod信息会开始调度预选,会先过滤掉不符合Pod资源配置要求的节点,然后开始调度调优,主要是挑选出更适合运行pod的节点,然后将pod的资源配置单发送到node节点上的kubelet组件上。 5) Kubelet根据scheduler发来的资源配置单运行pod,运行成功后,将pod的运行信息返回给scheduler,scheduler将返回的pod运行状况的信息存储到etcd数据中心。 14.删除一个Pod会发生什么事情? Kube-apiserver会接受到用户的删除指令,默认有30秒时间等待优雅退出,超过30秒会被标记为死亡状态,此时Pod的状态Terminating,kubelet看到pod标记为Terminating就开始了关闭Pod的工作; 15.k8s集群外流量怎么访问Pod? 可以通过Service的NodePort方式访问,会在所有节点监听同一个端口,比如:30000,访问节点的流量会被重定向到对应的Service上面。 16.k8s数据持久化的方式有哪些? EmptyDir(空目录):没有指定要挂载宿主机上的某个目录,直接由Pod内保部映射到宿主机上。类似于docker中的manager volume。 Hostpath:将宿主机上已存在的目录或文件挂载到容器内部。类似于docker中的bind mount挂载方式。这种数据持久化方式,运用场景不多,因为它增加了pod与节点之间的耦合。 PersistentVolume(简称PV):基于NFS服务的PV,也可以基于GFS的PV。它的作用是统一数据持久化目录,方便管理。 17.kube-apiserver和kube-scheduler的作用是什么? kube -apiserver遵循横向扩展架构,是主节点控制面板的前端。这将公开Kubernetes主节点组件的所有API,并负责在Kubernetes节点和Kubernetes主组件之间建立通信。 kube-scheduler负责工作节点上工作负载的分配和管理。因此,它根据资源需求选择最合适的节点来运行未调度的pod,并跟踪资源利用率。它确保不在已满的节点上调度工作负载。 18.Replica Set 和 Replication Controller之间有什么区别? Replica Set 和 Replication Controller几乎完全相同。它们都确保在任何给定时间运行指定数量的pod副本。不同之处在于复制pod使用的选择器。Replica Set使用基于集合的选择器,而Replication Controller使用基于权限的选择器。 19.kubernetes 认证 kubernetes 提供了多种认证方式,比如客户端证书,静态token,静态密码文件,ServiceAccountTokens等等。你可以同时使用一种或多种认证方式。只要通过任何一个都被认作是认证通过。 20.kube-scheduler工作原理,多少节点对外提供服务 根据各种调度算法将 Pod 绑定到最合适的工作节点 预选(Predicates):输入是所有节点,输出是满足预选条件的节点。kube-scheduler根据预选策略过滤掉不满足策略的Nodes。例如,如果某节点的资源不足或者不满足预选策略的条件如“Node的label必须与Pod的Selector一致”时则无法通过预选。 优选(Priorities):输入是预选阶段筛选出的节点,优选会根据优先策略为通过预选的Nodes进行打分排名,选择得分最高的Node。例如,资源越富裕、负载越小的Node可能具有越高的排名。 21.集群使用的网络方案,pod如何和node网络通信的 Flannel:使用vxlan技术为各节点创建一个可以互通的Pod网络,使用的端口为UDP 8472(需要开放该端口,如公有云AWS等)。flanneld第一次启动时,从etcd获取配置的Pod网段信息,为本节点分配一个未使用的地址段,然后创建flannedl.1网络接口(也可能是其它名称,如flannel1等)。flannel将分配给自己的Pod网段信息写入 /run/flannel/subnet.env文件,docker后续使用这个文件中的环境变量设置docker0网桥,从而从这个地址段为本节点的所有Pod容器分配IP。 22.k8s集群节点需要关机维护,需要怎么操作 23.生产中碰到过什么问题,故障排查思路,如何解决的 Pod 故障归类 Pod状态 一直处于 Pending Pod状态 一直处于 Waiting Pod状态 一直处于 ContainerCreating Pod状态 处于 ImagePullBackOff Pod状态 处于 CrashLoopBackOff Pod状态 处于 Error Pod状态 一直处于 Terminating Pod状态 处于 Unknown Pod 排查故障命令 # 查看 Pod 配置是否正确 # 查看 Pod 详细事件信息 # 查看容器日志 Pod 故障问题与排查方法 Pod 一直处于 Pending状态 Pending状态,这个状态意味着,Pod 的 YAML 文件已经提交给 Kubernetes,API 对象已经被创建并保存在 Etcd 当中。但是,这个 Pod 里有些容器因为某种原因而不能被顺利创建。比如,调度不成功(可以通过 kubectl describe pod命令查看到当前 Pod 的事件,进而判断为什么没有调度)。可能原因: 资源不足(集群内所有的 Node 都不满足该 Pod 请求的 CPU、内存、GPU 等资源);HostPort 已被占用(通常推荐使用 Service 对外开放服务端口)。 Pod 一直处于 Waiting或 ContainerCreating状态 首先还是通过 kubectl describe pod命令查看到当前Pod的事件。可能的原因包括: 1、镜像拉取失败比如,镜像地址配置错误、拉取不了国外镜像源(gcr.io)、私有镜像密钥配置错误、镜像太大导致拉取超时(可以适当调整 kubelet 的 --image-pull-progress-deadline 和 --runtime-request-timeout 选项)等。 2、CNI 网络错误,一般需要检查 CNI 网络插件的配置,比如:无法配置 Pod 网络、无法分配 IP 地址。 3、容器无法启动,需要检查是否打包了正确的镜像或者是否配置了正确的容器参数。 4、Failed create pod sandbox,查看kubelet日志,原因可能是磁盘坏道(input/output error)。 Pod 一直处于 ImagePullBackOff状态 通常是镜像名称配置错误或者私有镜像的密钥配置错误导致。这种情况可以使用 docker pull来验证镜像是否可以正常拉取。 如果私有镜像密钥配置错误或者没有配置,按下面检查: 1、查询 docker-registry 类型的 Secret 2、创建 docker-registry 类型的 Secret Pod 一直处于 CrashLoopBackOff 状态 CrashLoopBackOff 状态说明容器曾经启动了,但又异常退出。此时可以先查看一下容器的日志。 通过命令 kubectl logs 和 kubectl logs --previous 可以发现一些容器退出的原因,比如:容器进程退出、健康检查失败退出、此时如果还未发现线索,还可以到容器内执行命令来进一步查看退出原因(kubectl exec cassandra – cat /var/log/cassandra/system.log),如果还是没有线索,那就需要 SSH 登录该 Pod 所在的 Node 上,查看 Kubelet 或者 Docker 的日志进一步排查。 Pod 处于 Error 状态 通常处于 Error 状态说明 Pod 启动过程中发生了错误。常见的原因包括:依赖的 ConfigMap、Secret 或者 PV 等不存在;请求的资源超过了管理员设置的限制,比如超过了 LimitRange 等;违反集群的安全策略,比如违反了 PodSecurityPolicy 等;容器无权操作集群内的资源,比如开启 RBAC 后,需要为 ServiceAccount 配置角色绑定; Pod 处于 Terminating 或 Unknown 状态 从 v1.5 开始,Kubernetes 不会因为 Node 失联而删除其上正在运行的 Pod,而是将其标记为 Terminating 或 Unknown 状态。想要删除这些状态的 Pod 有三种方法: 1、从集群中删除该 Node。使用公有云时,kube-controller-manager 会在 VM 删除后自动删除对应的 Node。而在物理机部署的集群中,需要管理员手动删除 Node(如 kubectl delete node )。 2、Node 恢复正常。Kubelet 会重新跟 kube-apiserver 通信确认这些 Pod 的期待状态,进而再决定删除或者继续运行这些 Pod。用户强制删除。用户可以执行 kubectl delete pods pod-name --grace-period=0 --force 强制删除 Pod。除非明确知道 Pod 的确处于停止状态(比如 Node 所在 VM 或物理机已经关机),否则不建议使用该方法。特别是 StatefulSet 管理的 Pod,强制删除容易导致脑裂或者数据丢失等问题。 3、Pod 行为异常,这里所说的行为异常是指 Pod 没有按预期的行为执行,比如没有运行 podSpec 里面设置的命令行参数。这一般是 podSpec yaml 文件内容有误,可以尝试使用 --validate 参数重建容器,比如: kubectl delete pod mypod 和 kubectl create --validate -f mypod.yaml,也可以查看创建后的 podSpec 是否是对的,比如:kubectl get pod mypod -o yaml,修改静态 Pod 的 Manifest 后未自动重建,Kubelet 使用 inotify 机制检测 /etc/kubernetes/manifests 目录(可通过 Kubelet 的 --pod-manifest-path 选项指定)中静态 Pod 的变化,并在文件发生变化后重新创建相应的 Pod。但有时也会发生修改静态 Pod 的 Manifest 后未自动创建新 Pod 的情景,此时一个简单的修复方法是重启 Kubelet。 Unknown 这是一个异常状态,意味着 Pod 的状态不能持续地被 kubelet 汇报给 kube-apiserver,这很有可能是主从节点(Master 和 Kubelet)间的通信出现了问题。
公有云 1、你用过那些云平台?用过其中的哪些产品?
2、你所知道的是虚拟化产品和方案有哪些?并对这些方案进行一个简单的对比。
1 2 3 4 虚拟化软件有: (1) 公有云平台:亚马逊AWS,阿里云,腾讯云,华为云,QingCloud; (2) 混合云平台:ZStack,BeyondCMP,CAS虚拟化平台等; (3) 私有云平台:VisionStack杭州云容,ESCloud易捷云,Ucloud,AWCloud,ZStack等
AWS每月的账单开出后,给使用方多长时间来进行支付?
1 2 AWS的付费机制是:只需要为已使用的资源付费,并且AWS会在次月3号左右给出本月的账单,付款时间为30天; 你这边的问题应该是没有创建资源的权限,应该是信用卡或个人认证信息没有补充完成,可以后台提工单申请提高资源限额。
阿里云,AWS相关的功能特性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 AWS的优点: AWS的云服务还是很成熟的,譬如大数据计算,开放存储这些服务的性能都要比阿里云好很多,在全世界各地使用访问都很快,成本上相对于阿里云来说确实花费多一点,AWS是国际化的,有七八种语言的客户服务,并且服务团队在工作日反应还算是很迅速的。 我先说说我感受最深的吧,为什么说AWS云服务很成熟,我觉得就可以从VM部署这一点看出来,速度比阿里云快很多(同样的条件下),微软的云服务和AWS和阿里云我都或多或少的使用过,如果不是因为AWS入门门槛太高我还会继续使用下去的,如果一个公司或者团队需要国际化,把服务全都放在AWS上是特别好的,在中国以内的话体验最好的其实就是阿里云了。 通用型:提供固定性能,对CPU性能不会产生突然并发的应用程序。如一般的web应用chengxu 计算优化:最高等级的性能,运行计算密集型应用程序。如游戏服务器 内存优化:可为高吞吐量的应用程序,如数据库,提供大容量内存。 存储优化:提供极高的磁盘I/O性能,适合对那些对磁盘访问频繁的应用程序。 CPU实例:高度并行化的应用程序(包括 3D 图形,HPC渲染和媒体处理应用程序)提供具备高CPU和网络性的图形处理能力。 阿里云的优点: 首先它易于国人使用,支付宝付款,可以开子账号团队协作,安全关把关也还算是可以的,其次就是BGP线路,确实名不虚传(但是国内区域在国外访问还是不咋的呀),阿里云确实贴合国人的角度突出了按需付费的这个特性,阿里云服务对于国外的亲们来说可能就是需要多地跑的事情集中在了一起而已,很多人也很喜欢,对于中国人来说,阿里云可能就是并不感冒了,技术上成熟度你别说还真的次于AWS(更多的可能是经验) 架构灵活 双机热备架构 系统工作时主节点(Master)和备节点(Slave)数据实时同步,主节点故障时系统自动进行秒级切换,备节点接管业务,全程自动且对业务无影响,主备架构保障系统服务具有高可用性。 集群架构 集群(Cluster)实例采用分布式架构,每个节点都采用一主一从的高可用架构,能够进行自动容灾切换和故障迁移。多种集群规格可适配不同的业务压力,可按需扩展数据库性能。 数据安全 数据持久化存储 采用内存加硬盘的混合存储方式,在提供高速数据读写能力的同时满足数据持久化需求。 备份及一键恢复 每天自动备份数据,数据容灾能力强,免费支持数据一键恢复,有效防范数据误操作,将可能发生的业务损失降到最低。 多层网络安全防护 VPC私有网络在TCP层直接进行网络隔离保护。 DDOS防护实时监测并清除大流量攻击。 持1000个以上IP白名单配置,直接从访问源进行风险控制。 支持密码访问鉴权方式,确保访问安全可靠。 深度内核优化 阿里云专家团队对源码Redis进行深度内核优化,有效防止内存溢出,修复安全漏洞,为您保驾护航。 高可用性 主从双节点 标准版与集群版的双副本实例均有主从双节点,避免单点故障引起的服务中断。 自动检测与恢复 自动侦测硬件故障,发生故障时能够进行故障转移,在数秒内恢复服务。 资源隔离 实例级别的资源隔离可以更好地保障单个用户服务的稳定性。 弹性扩展 数据容量扩展 云数据库Redis版支持多种内存规格的产品配置,可根据业务量大小在线升级内存规格,无需中断服务,不影响业务。 业务形态扩展 支持单节点缓存架构和双节点存储架构,适配不同业务场景。标准版和双节点版之间能够灵活变配。 性能扩展 支持集群架构下弹性扩展数据库系统的存储空间及吞吐性能,突破海量数据高QPS性能瓶颈,轻松应对每秒百万次的读写需求。 智能运维 监控平台 提供CPU利用率、连接数、磁盘空间利用率等实例信息实时监控及报警,随时随地了解实例动态。 可视化管理平台 管理控制平台对实例克隆、备份、数据恢复等高频高危操作可便捷地进行一键式操作。 数据库内核版本管理 主动升级,快速修复缺陷,免去日常版本管理苦恼;优化Redis参数配置,最大化利用系统资源。
架构 公司的架构,服务器的数量,之前公司运维部的人员数量,之前工作流程
1 服务器数量五六十台,运维人数2人,运维人员对公司互联网业务所依赖的基础设施、基础服务、线上业务进行稳定性加强,进行日常巡检发现服务可能存在的隐患,对整体架构进行优化以屏蔽常见的运行故障,多数据中接入提高业务的容灾能力。通过监控、日志分析等技术手段,及时发现和响应服务故障,减少服务中断的时间,使公司的互联网业务符合预期的可用性要求,持续稳定地为用户提供务。
说说你对B/S结构与C/S结构的认识。
1 2 3 4 5 6 7 8 9 10 11 12 B/S 是浏览器服务器架构 C/S 是客户端服务端架构 客户端服务端架构 对硬件和软件要求高 浏览器服务器架构 C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统 对安全要求不同 C/S 对服务端、客户端都安全都要考虑。 B/S 因没有客户端,所以只注重服务端安全即可。
你可以采取任何设备和不同操作系统服务设计对两台WWW服务器和两台FTP服务器作负载均衡,用网络拓扑图表示并加以说明!(方法越多越好)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 这是利用DNS处理域名解析请求的同时进行负载均衡的一种方案。 在DNS服务器中配置多条A记录, 每次域名解析请求都会根据负载均衡算法计算一个不同的IP地址返回,这样A记录中配置的多个服务器就构成一个集群,并可以实现负载均衡。 www1INA192.168.1.1 www2INA192.168.1.2 www3INA192.168.1.3 ftp1INA192.1.1.4 ftp2INA192.1.1.5 ftp3INA192.1.1.6 wwwINCNAMEwww1 wwwINCNAMEwww2 wwwINCNAMEwww3 ftpINCNAMEftp1 ftpINCNAMEftp2 ftpINCNAMEftp3
请用画图的方法说明并讲解你曾经接触过的规模最大的服务器集群架构
1 2 3 4 5 6 7 8 9 10 11 12 13 client:客户端 cdn加速:内容分发网络 firewall:防火墙 wiki:(多人协作的写作系统) dr:负载均衡器 rabbitMQ:消息队列集群 站内搜索服务器solr(做集群,工具由开发选用) memcachedx3:缓存堆(不能做集群,但可用多个。与gelara集群并行) redis集群:(keepalived提供一个唯一ip入口) pxe服务器:批量安装操作系统,初始ss化使用服务器 ansible:统一部署 zabbix:监控服务器(可用做高可用)(分布式监控:核心监控,代理层监控下的服务器才是真正被监控的机器) ELK:开源实时日志分析平台 ips:入侵防御系统 ids:入侵检测系统 cmdb资产管理:配置管理数据库,通过识别、控制、维护,检查企业的IT资源,从而高效控制与管理不断变化的IT基础架构与IT服务
rsync+inotify是做什么的?加什么参数才能实现实时同步?–delete参数又是什么意思?
1 2 3 4 5 6 7 Linux内核从2.6.13版本开始提供了inotify通知接口,用来监控文件系统的各种变化情况,如文件存取、删除、移动等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。 使用rsync工具与inotify机制相结合,可以实现触发式备份(实时同步) 加什么参数才能实现实时同步? inotifywait-m --delete参数又是什么意思? --delete:文件或目录被删除在监控目录中
网络及安全 网络基础知识 已知某一主机的IP地址为201.103.136.184,其子网掩码为255.255.255.192,则该主机是在 C 类网络中,主机所在子网最多允许有 62 台主机。
简述TCP三次握手的过程?
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.
完成三次握手,客户端与服务器开始传送数据
简述tcp链接三次握手的过程。
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手.完成三次握手,客户端与服务器开始传送数据
简单说一下tcp/ip协议中的tcp和ip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。 说明: TCP(TransportControlProtocol)传输控制协议 IP(InternetworkingProtocol)网间网协议 UDP(UserDatagramProtocol)用户数据报协议 ICMP(InternetControlMessageProtocol)互联网控制信息协议 SMTP(SimpleMailTransferProtocol)简单邮件传输协议 SNMP(SimpleNetworkmanageProtocol)简单网络管理协议 FTP(FileTransferProtocol)文件传输协议 ARP(AddressResolationProtocol)地址解析协议 从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网间网层、传输层、应用层。 TCP(TransmissionControlProtocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议 在因特网协议族(Internetprotocolsuite)中,TCP层是位于IP层之上,应用层之下的中间层 ip协议是网络之间互连的协议也就是为计算机网络相互连接进行通信而设计的协议 IP协议是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。 IP不提供可靠的传输服务,它不提供端到端的或(路由)结点到(路由)结点的确认,对数据没有差错控制,它只使用报头的校验码,它不提供重发和流量控制。如果出错可以通过ICMP报告,ICMP在IP模块中实现。
icmp协议属于tcp/ip协议或者OSI模型的那一层。
1 2 3 4 5 6 7 8 9 icmp===Internet控制消息协议 该协议是TCP/IP协议集中的一个子协议,属于网络层协议,主要用于在主机与路由器之间传递控制信息, 包括报告错误、交换受限控制和状态信息等。当遇到IP数据无法访问目标、IP路由器无法按当前的 传输速率转发数据包等情况时,会自动发送ICMP消息。我们可以通过Ping命令发送ICMP回应请求消息 并记录收到ICMP回应回复消息,通过这些消息来对网络或主机的故障提供参考依据。
ping命令通过什么协议(internet控制信息协议)来实现?
下面的网络协议中,面向连接协议的是(C)
1 2 3 A. 传输控制协议 B. 用户数据报协议 C. 网际协议
一台主机要实现通过局域网与另一个局域网通信,需要做的工作是(D)
1 2 3 4 A 配置域名服务器 B 定义一条本机指向所在网络的路由 C 定义一条本机指向所在网络网关的路由 D 定义一条本机指向目标网络网关的路由
在局域网络内的某台主机用ping 命令测试网络连接时发现网络内部的主机都可以连通,而不能与公网连通,问题可能是(C)
1 2 3 4 A 主机IP设置有误 B 没有设置连接局域网的网关 C 局域网的网关或主机的网关设置有误 D 局域网DNS 服务区设置有误
说明静态路由和动态路由的区别?
1 2 3 4 5 静态路由 是在路由器中设置的固定的路由表。除非网络管理员干预,否则静态路由不会发生变化由于静态路由不能对网络的改变作出反映,一般用于网络规模不大、拓扑结构固定的网络中。静态路由的优点是简单、高效、可靠。在所有的路由中,静态路由优先级最高。当动态路由与静态路由发生冲突时,以静态路由为准 动态路由 是网络中的路由器之间相互通信,传递路由信息,利用收到的路由信息更新路由器表的过程。它能实时地适应网络结构的变化。如果路由更新信息表明发生了网络变化,路由选择软件就会重新计算路由,并发出新的路由更新信息。这些信息通过各个网络,引起各路由器重新启动其路由算法,并更新各自的路由表以动态地反映网络拓扑变化。动态路由适用于网络规模大、网络拓扑复杂的网络。
下面的网络协议中,面向连接的的协议是(C)
1 2 3 4 A 传输控制协议 B 用户数据报协议 C 网际协议 D 网际控制报文协议
IDC机房宽带突然从平时100M增加到400M,请你分析问题可能原因所在,并给出解决方法
1 2 3 4 (1)可能遭受DDOS攻击(写一个预防DDOS的脚本) (2)内部的服务器中毒,大量外发流量(内部运维规范、制度) (3)网站的元素被盗连,在门户页面被推广导致大量流量产生(网站的基本优化) (4)用户访问量剧增
二层交换机和三层交换机的区别
1 2 3 4 5 6 二层交换是纯2层的网络设备,只有交换功能 三层交换不但有二层交换的交换功能还带路由功能 二层交换机工作于OSI模型的第2层(数据链路层),故而称为二层交换机。 三层交换机的最重要目的是加快大型局域网内部的数据交换,所具有的路由功能也是为这目的服务的,能够做到一次路由,多次转发。对于数据包转发等规律性的过程由硬件高速实现,而像路由信息更新、路由表维护、路由计算、路由确定等功能,由软件实现。三层交换技术就是二层交换技术+三层转发技术。
在Windows操作系统和linux系统中如何查看MAC地址。
1 2 3 4 5 windows win+r运行输入cmd打开dos窗口,运行如下指令 ipconfig /all linux ip a
依次写出osi七层模型
1 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
使用tcpdump监听tcp80端口来自192.168.0.1的所有流量,请写出命令.
系统中有一台数据库服务器,发现木马,症状是不定期向外网发包,影响服务器性能现登录该服务器,如何快速找到该木马进程?请写出命令行,并解释原因。
1 2 3 4 5 6 1、查看异常用户 cat /etc/passwd 2、查看异常进程 ps 3、查看异常定时任务 crontab -e 删除异常定时任务
被植入代码有哪些特点,怎样快速找到被植入的木马
1 2 3 4 5 6 7 8 可能定时执行,破坏系统文件 如何快速找到: 查看开机启动文件 查看系统日志 查看系统用户 查看进程是否有异常进程 查看定时任务是有异常
Linux应该从哪些方面提高安全性
1 2 3 1、 取消不必要的服务 2、 加密用户登录密码并设定用户账号安全等级 3、 增强安全防护工具
如何看待系统安全加固
1 2 3 4 5 6 1.密码策略 修改系统的密码策略1)经常修改密码2)使用一些特殊的字符和密码的长度增加密码的难度 3)不要随便告诉他人密码 2.权限ugo锁定系统中不必要的系统用户和组 锁定下列用户,锁定之前备份/etc/passwd和/etc/shadow文件 禁用无关的组 禁止root用户远程登录 3.预防flood攻击linux中预防SYNflood.在/etc/sysctl.conf文件中添加net.ipv4.tcp_syncookies=1 4.加固TCP/IP协议设置/etc/sysctl.conf文件相应权限 5.默认权限与umask不要修改正确的umask值022 6.做任何修改文件的动作先备份再做操作
NAT使用的几种情况:
1 2 3 4 1. 连接到INTERNET,但却没有足够的合法地址分配给内部主机; 2.更改到一个需要重新分配地址的ISP; 3.有相同的IP地址的两个INTRANET合并; 4.想支持负载均衡(主机);
NAT和PAT的区别
IP地址耗尽促成了CIDR的开发,但是CIDR开发的主要目的是为了有效的使用现有的INTERNET地址,而同时根据RFC1631(IPNETWORKADDRESSTRANSLATOR)开发的NAT却可以在多重的INTERNET子网中使用相同的IP地址,用来减少注册IP地址的使用。
NAT的分为:静态NAT、动态NAT、端口NAT(PAT)。
静态NAT: 内部网络中的每个主机都被永久的映射成外部网络中的某个合法地址;
动态NAT:在外部网络中定义了一系列的合法地址,采用动态分配的方法映射到内部网络;
PAT:是人们比较熟悉的一种转换方式。PAT普遍应用于接入设备中,它可以将中小型的网络隐藏在一个合法的IP地址后面。PATT与动态地址NAT不同,它将内部连接映射到外部网络中的一个单独的IP地址上,同时在该地址上加上一个由NAT设备选定的TCP端口号。也就是采用portmultiplexing技术,或改变外出数据的源port的技术将多个内部ip地址映射到同一个外部地址。
网络地址转换(NAT)是一个Internet工程任务组(InternetEngineeringTaskForce,IETF)标准,用于允许专用网络上的多台PC(使用专用地址段,例如10.0.x.x、192.168.x.x、172.x.x.x)共享单个、全局路由的IPv4地址。IPv4地址日益不足是经常部署NAT的一个主要原因。WindowsXP和WindowsMe中的“Internet连接共享”及许多Internet网关设备都使用NAT,尤其是在通过DSL或电缆调制解调器连接宽带网的情况下。
NAT对于解决IPv4地址耗费问题(在IPv6部署中却没必要)尽管很有效,但毕竟属于临时性的解决方案。这种IPv4地址占用问题在亚洲及世界其他一些地方已比较严重,且日渐成为北美地区需要关注的问题。这就是人们为什么长久以来一直关注使用IPv6来克服这个问题的原因所在。
除了减少所需的IPv4地址外,由于专用网络之外的所有主机都通过一个共享的IP地址来监控通信,因此NAT还为专用网络提供了一个隐匿层。NAT与防火墙或代理服务器不同,但它确实有利于安全。
NAT有4种用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 1.TRANSLATION INSIDE LOCAL ADDRESS-----------将内部地址一对一的翻译成外部地址; 2.OVER LOADING INSIDE GLOBAL ADDRESS---------将内部地址多对一的翻译成外部地址,通过地址加端口号的方式区别不同的本地地址。这种方式就是所谓的PAT[/color:43aa144927]; 3.TCP LOAD DISTRIBUTING----提供在多个、利用率高的主机之间进行负载分担的方法;4.HANDLINGOVERLAPPINGNETWORK----这种方法主要用于两个INTRANET的互联. NAT的地址转换是指每个内网地址都被转换成ip地址+源端口的方式,这需要公网ip地址为多个。 而PAT由于ip地址不足够,就会出现内网地址被转换成ip地址+端口段的形式,这样的公网ip地址通常只是一个。 举个例子:NAT PAT 192.168.0.2:4444----〉202.116.100.5:4444 192.168.0.2:4444----〉202.116.100.5:50003 192.168.0.3:5555----〉202.116.100.6:5555 192.168.0.3:5555----〉202.116.100.5:50004 192.168.0.10:1233---〉202.116.100.5:1233 192.168.0.10:1233---〉202.116.100.5:50005 简单来说,PAT―多对1,nat―多对多.
禁止来自10.0.0.188ip地址访问80端口的请求
1 2 3 4 5 6 7 8 #iptables -t filter-A INPUT-s 10.0.0.188-ptcp--dport80-jREJECT 或者 #iptables-tfilter-AINPUT-s10.0.0.188-ptcp--dport80-jDROP 用iptables添加一个规则允许192.168.0.123访问本机端口 #iptables-tfilter-AINPUT-s192.168.0.123-jACCEPT
1 2 3 4 5 6 7 iptables是否支持time时间控制用户行为,如有请写出其具体操作步骤 支持。需要增加相关支持的内核补丁,并且要重新编译内核。 或者使用crontab配合iptables,首先:vi/deny.bat输入/sbin/iptables-AOUTPUT-ptcp-s192.168.1.0/24--dport80-jDROP保存退出 打开crontab-e 输入:00 21 * * * /bin/sh/deny.bat
包过滤防火墙与代理应用防火墙有什么区别,能列出几种相应的产品吗?
1 2 3 4 5 6 7 包过滤防火墙工作在网络协议IP层,它只对IP包的源地址、目标地址及相应端口进行处理,因此速度比较快,能够处理的并发连接比较多,缺点是对应用层的攻击无能为力。 代理服务器防火墙将收到的IP包还原成高层协议的通讯数据,比如http连接信息,因此能够对基于高层协议的攻击进行拦截。缺点是处理速度比较慢,能够处理的并发数比较少。 代理应用防火墙:天融信GFW4000 包过滤防火墙:华为NE16E
142. 什么是NAT,常见分为哪几种,DNAT与SNAT有什么不同,应用事例有哪些?
NAT(NetworkAddressTranslation,网络地址转换)是将IP数据包头中的IP地址转换为另一个IP地址的过程。分为DNAT(目的网络地址转换)和SNAT(源网络地址转换)
SNAT主要是用于内网主机通过路由器或网关访问外网
DNAT将外部地址和端口的访问映射到内部地址和端口
如何将本地80端口的请求转发到8080端口,当前主机IP为192.168.16.1,其中本地网卡eth0
1 2 3 4 5 # iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.2 --p tcp -m tcp --dport 80 -j DNAT --to 192.168.122.3:8080 或者: # iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 8080
请注释说明以下iptables规则中划线部分中实现的功能
-A POSTROUTING -s 192.168.0.0/255.255.0.0 -j RETURN
-A POSTROUTING -d 192.168.0.0/255.255.0.0 -j RETURN
-I FORWARD -d 192.168.3.150 -j ACCEPT -m comment –comment “redisserver”
-A FORWARD-d192.168.0.0/255.255.0.0-jREJECT–reject-with_icmp-port-unreachable
-APOSTROUTING-s10.0.1.0/255.255.255.0-oeth0-JMASQUERADE
centos7默认防火墙允许80端口外网访问,写出相应安全策略。
143. service iptables stop与iptables -F有何区别?
service iptables stop停止iptables服务,防火墙设定的所有规则都失效,但表和链中的规则还在
iptables -F,清空所有表所有链中的规则,iptables服务是运行状态,链中的默认策略还生效
请问如何用iptables工具阻断来自192.168.0.1的所有网络连接
iptables-AINPUT-s192.168.0.1-jDROP
请写出iptables做NAT转发的步骤及iptables命令
DNAT目标地址转换
iptables -t nat -A PREROUTING -i ppp0 -p tcp –dport 80 -j DNAT –to 192.168.0.3:80
把从ppp0进来的要访问tcp/80的数据包的地址改为192.168.0.3
SNAT网络地址转换
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT –to 1.1.1.1
将内网192.168.0.0/24的源地址改为1.1.1.1
dd if=/dev/zero
144. 诊断DNAT映射是否成功的最好方法(命令)是?
elinkshttp://映射前的ip
配置iptables,允许221.166.247.12访问本机(eth1:221.100.247.10,eth0:172.20.46.254)的8080端口,并将本机(eth1:221.100.247.10)的8080端口转发到172.20.46.30的80端口(使用NAT)(无需考虑系统限制及路由,写出iptables的配置即可)
iptables -A INPUT -p tcp –d port 8080 -s 221.166.247.12 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp –dport 8080 -d 221.100.247.10 -j DNAT –to 172.20.46.30:80
实现把访问10.0.0.3:80的请求转到172.16.1.17:80
iptables-tnat-APREROUTING-d10.0.0.3-ptcp–dport80-jDNAT–to172.16.1.17:80
Linux系统层面有哪些常见的安全防护方法
1,防火墙只开放对外的服务端口 2,禁止ROOT远程登录 3,修改/etc/passwd访问权限 4,修改sshd的服务端口
5,只允许公司出口IP连接sshd服务端口 6,还有修改执行命令历史记录数 7,禁用不用的服务和应用
8,检查系统日志
请简述非对称加密算法工作过程
1.乙方生成两把密钥(公钥和私钥)
2.甲方获取乙方的公钥,然后用它对信息加密。
3.乙方得到加密后的信息,用私钥解密,乙方也可用私钥加密字符串
4.甲方获取乙方私钥加密数据,用公钥解密
如何检查Selinux是否开启?getenforce
7、http是()层的协议,Referer指的是()
1 2 3 http是七层的协议 Referer是http请求头的一部分,表示一个来源。 比如在www.google.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:Referer=http://www.google.com
8、hash查找做好的情况时间复杂度是()
1 2 3 4 1.判断key,根据key算出索引。 2.根据索引获得索引位置所对应的键值对链表。 3.遍历键值对链表,根据key找到对应的Entry键值对。 4.拿到value。
9、查看tcp连接情况
1 netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
10、简述画出TCP/IP三次握手
11、.查看TCP的并发请求数与其连接状态
1 netstat -ant | awk '{print $NF}' | grep -v '[a-z]'| sort | uniq -c
12、使用curl,wget查看www.baidu.com的head信息命令
1 2 curl -I http://baidu.com wget http://baidu.com -S
13、在网络排错中,你经常会用到的操作命令的作用:
1 2 3 4 5 6 7 8 9 10 11 ping 查看网络是否互通 netstat 一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。 nbtstat 用于查看在TCP/IP协议之上运行NetBIOS服务的统计数据,并可以查看本地远程计算机上的NetBIOS名称列表。 net telnet 查看端口是否互通 ipconfig 显示IP地址
14、使用tcpdump监听主机192.168.1.1,tcp端口为80的数据,同时将结果保存输出到tcpdump.log请写出相应的命令
实时抓取并显示当前系统中tcp80端口的网络数据信息,请写出完整操作命令
1 # tcpdump -n tcp port 80
15、linux下添加172.132.7.132为ip白名单
1 2 3 4 5 #添加规则 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.132.7.132/24" port protocol="tcp" accept" #reload使生效 firewall-cmd --reload
16、办公室同事反映网络打不开,请简述一下排查故障的思路及解决方法?如果时好时坏又该怎么排查?
1 2 3 查看网卡配置是否有问题 查看路由表是否正确 时好时坏 查看是否IP冲突
17、网站出现200,302,400,404,500,502,503是什么意思?怎么排查和解决?
1 2 3 4 5 6 7 8 9 10 11 200 请求已成功,请求所希望的响应头或数据体将随此响应返回。 302 请求的资源现在临时从不同的 URI 响应请求。 400 1、语义有误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。 2、请求参数有误。 404 请求失败,请求所希望得到的资源未被在服务器上发现。 500 服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器的程序码出错时出现。 502 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效 的响应。 503 由于临时的服务器维护或者过载,服务器当前无法处理请求。 400是客户端问题 50是服务端问题
18、描述会话超时、会话保持分别是什么概念什么场景使用?
1 2 3 会话超时:在HTTP协议中,客户机不再活跃时没有明确的终止信号.这意味着只有超时才是标识客户机不再活跃的唯一机制.比如用户打开网页后长时间不点 会话保持:在一次会话过程中发起的多个请求都会落到同一台机器上。常用于负载均衡
19、介绍一下那些可以优化加速用户访问网站体验的技术措施?
20、什么叫网站灰度发布?如何实现灰度发布?
1 2 3 4 5 先启动一个新版本应用,但是并不直接将流量切过来,而是测试人员对新版本进行线上测试,启动的这个新版本应用,就是我们的金丝雀。如果没有问题,那么可以将少量的用户流量导入到新版本上,然后再对新版本做运行状态观察,收集各种运行时数据,如果此时对新旧版本做各种数据对比,就是所谓的A/B测试。 当确认新版本运行良好后,再逐步将更多的流量导入到新版本上,在此期间,还可以不断地调整新旧两个版本的运行的服务器副本数量,以使得新版本能够承受越来越大的流量压力。直到将100%的流量都切换到新版本上,最后关闭剩下的老版本服务,完成灰度发布。 如果在灰度发布过程中(灰度期)发现了新版本有问题,就应该立即将流量切回老版本上,这样,就会将负面影响控制在最小范围内。
21、哈希和加密的区别是什么?各自有什么用途?
1 哈希(Hash)是将目标文本转换成具有相同长度的、不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的、可逆的密文。
22、在linux系统中,测试DNS服务器是否能正确解析域名的客户端命令使用什么命令?
23、tcp/ip四层模型分别是什么?
1 主机到网络层(比特)、网络层(数据帧)、传输层(数据包)、应用层(数据段)。
24、其中应用层最常用的协议有什么?
1 2 3 4 5 6 DNS SMTP HTTP HTTPS TELNET FTP
25、传输控制协议中,面向连接的协议是?
TCP/IP 协议
26、一台主机要实现通过局域网与另一个局域网通信,需要做的工作是?
1 2 3 1.设置本机的默认网关 。 2.本地局域网默认网关上需要设置一条路由,用以完成本地局域网内的任一主机到目标局域网主机的路由工作。
27、局域网的网络地址192.168.1.0/24 局域网络连接其他网络的网关地址是192.168.1.1。主192.168.1.20访问172.16.1.0/24网络时,其路由如何设置?
1 route add -net 172.16.1.0 gw 192.168.1.1 netmask 255.255.255.0 metric1
28、ifconfig命令的作用是?
ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数
29、在局域网内的某台主机ping命令测试网络连接时发现网络内部主机都可以ping通,而不能与公网联通,问题可能是
30、包含主机名到ip地址的映射关系的文件是?
31、如何将本地80端口的请求转发到8080端口,当前主机ip192168.2.1
1 iptables -t nat -A PREROUTING -d 192.168.2.1 -p tcp --dport 80 -j REDIRECT --to 8080
32、查看http的并发请求数与其tcp连接状态
1 2 3 ps -ef | grep httpd | wc -l netstat -nt | awk ‘{++S[$NF]}END{for(a in S) print a,S[a]}‘
33、用tcpdump嗅探80端口的访问看看谁最高
1 tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
34、两台电脑都在同一个网络环境中A电脑访问不到B电脑的应用。此类现象可能是那些方面所致?如何处理?
1 2 3 1、防火墙未添加白名单,需要在防火墙配置中添加白名单 2、应用例如nginx未添加白名单 在应用的访问配置中添加白名单
35、修改以太网mac地址的命令为?
202.106.100.1是何类地址?
当IP地址的主机地址全为1时表示?
路由器的主要功能是?
Linux系统网络 linux下如何添加路由
1 2 3 4 5 6 7 8 9 10 11 12 使用route -n 查看网关信息,或者 netstat -rn查看路由 永久生效 # vim /etc/sysconfig/network-scripts/ifcfg-ens33 GATEWAY=10.18.41.1 临时生效 # route add default gw 10.18.41.2 删除路由表: # route del default gw 10.18.41.1
linux下如何改IP,主机名,DNS
1 2 3 4 5 6 7 修改ip地址-- 即时生效: # ifconfig ens33 10.18.41.5 netmask 255.255.255.0 重启生效:修改 # vim /etc/sysconfig/network-scripts/ifcfg-eth0 IPADDR=10.18.41.2 ---修改host name-- 即时生效: # hostname 主机名 重新进入:# hostnamectl set-hostname 主机名
修改dns
1 修改# vim /etc/resolv.conf #修改后即时生效,重启同样有效
在命令行下发一邮件,发件人:123@abc.com ,收信人:abc@xyz.com
1 echo "hello"|mail -s "test" abc@xyz.com -- -f 123@abc.com
请写出ip10.0.14.70mask255.255.255.192的网络地址和广播地址。并写下命令,在linux系统上配置10.0.14.65作为默认网关
1 2 网络地址:10.0.14.64 广播地址:10.0.14.127 sudo route add default gw 10.0.14.65
使用tcpdump监听TCP80端口来自192.168.0.1的所有流量,请写出命令。
1 $ tcpdump -i ens33 -nnA ‘port 80 and src host 192.168.0.1'
linux下如何添加路由
1 route add destination mask gw
通过tcpdump查看网卡的Ping包?
1 2 3 4 5 6 7 #tcpdump -i ens33 icmp 执行命令后,查看是否有request和reply 出现request说明系统收到ping包,出现reply说明系统响应ping包 如果只出现request,那么 1、检查sysctl -a | grep icmp_echo,确认net.ipv4.icmp_echo_ignore_all=0 2、检查iptables -vL,确认-p icmp为ACCPET 如果没有request和reply都没有,那么说明ping包未能到达此主机,需要检查链路或者前端防火墙的策略。
显示网络接口常见命令是
查看服务端口的命令是
Linux查看当前主机TCP协议连接情况的命令为
Linux操作系统查看当前网络设备命令为
将当前计算机的IP地址设为192.168.1.10,子网掩码为255.255.255.0命令为
1 ifconfigeth0192.168.1.10netmask255.255.255.0
Linux防火墙 有IP恶意刷流量怎么办
1 2 3 4 将对应ip禁掉 #iptables -t filter -A INPUT -s ip -p tcp --dport 80 -j REJECT 或者 #iptables -t filter -A INPUT -s ip -p tcp --dport 80 -j DROP
如何临时、永久关闭linux防火墙?
1 2 systemctl stop firewalld (重启失效) systemctl disable firewalld(永久关闭)
centos7默认防火墙允许80端口外网访问,写出相应安全策略
使用iptables拒绝8.8.8.8访问本机的53端口
1 2 3 4 iptables -I INPUT -s 8.8.8.8 -p tcp --dport 53 -j REJECT 表filter 3个链 INPUT FORWARD OUTPUT
Linux系统安全 优化 CPU利用率和CPU负载的区别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CPU利用率:显示的是程序在运行期间实时占用的CPU百分比 CPU负载:显示的是一段时间内正在使用和等待使用CPU的平均任务数。CPU利用率高,并不意味着负载就一定大。举例来说:如果我有一个程序它需要一直使用CPU的运算功能,那么此时CPU的使用率可能达到100%,但是CPU的工作负载则是趋近于“1”,因为CPU仅负责一个工作嘛!如果同时执行这样的程序两个呢?CPU的使用率还是100%,但是工作负载则变成2了。所以也就是说,当CPU的工作负载越大,代表CPU必须要在不同的工作之间进行频繁的工作切换。 举例说明 网上有篇文章举了一个有趣比喻,拿打电话来说明两者的区别,我按自己的理解阐述一下。 某公用电话亭,有一个人在打电话,四个人在等待,每人限定使用电话一分钟,若有人一分钟之内没有打完电话,只能挂掉电话去排队,等待下一轮。电话在这里就相当于CPU,而正在或等待打电话的人就相当于任务数。 在电话亭使用过程中,肯定会有人打完电话走掉,有人没有打完电话而选择重新排队,更会有新增的人在这儿排队,这个人数的变化就相当于任务数的增减。为了统计平均负载情况,我们5分钟统计一次人数,并在第1、5、15分钟的时候对统计情况取平均值,从而形成第1、5、15分钟的平均负载。 有的人拿起电话就打,一直打完1分钟,而有的人可能前三十秒在找电话号码,或者在犹豫要不要打,后三十秒才真正在打电话。如果把电话看作CPU,人数看作任务,我们就说前一个人(任务)的CPU利用率高,后一个人(任务)的CPU利用率低。 当然, CPU并不会在前三十秒工作,后三十秒歇着,只是说,有的程序涉及到大量的计算,所以CPU利用率就高,而有的程序牵涉到计算的部分很少,CPU利用率自然就低。但无论CPU的利用率是高是低,跟后面有多少任务在排队没有必然关系。
nginx的优化选项?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 1)nginx运行工作进程个数,一般设置cpu的核心或者核心数x2 如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/cpuinfo | wc -l [root@lx~]# vi/usr/local/nginx1.10/conf/nginx.conf worker_processes 4; [root@lx~]# /usr/local/nginx1.10/sbin/nginx-s reload [root@lx~]# ps -aux | grep nginx |grep -v grep root 9834 0.0 0.0 47556 1948 ? Ss 22:36 0:00 nginx: master processnginx www 10135 0.0 0.0 50088 2004 ? S 22:58 0:00 nginx: worker process www 10136 0.0 0.0 50088 2004 ? S 22:58 0:00 nginx: worker process www 10137 0.0 0.0 50088 2004 ? S 22:58 0:00 nginx: worker process www 10138 0.0 0.0 50088 2004 ? S 22:58 0:00 nginx: worker process Nginx运行CPU亲和力 比如4核配置 worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000 比如8核配置 worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 0000100000010000 00100000 01000000 10000000; worker_processes最多开启8个,8个以上性能提升不会再提升了,而且稳定性变得更低,所以8个进程够用了。 Nginx最多可以打开文件数 worker_rlimit_nofile 65535; 这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。 注:文件资源限制的配置可以在/etc/security/limits.conf设置,针对root/user等各个用户或者*代表所有用户来设置。 * soft nofile 65535 * hard nofile 65535 用户重新登录生效(ulimit -n) (2)Nginx事件处理模型 events { use epoll; worker_connections 65535; multi_accept on; } nginx采用epoll事件模型,处理效率高 work_connections是单个worker进程允许客户端最大连接数,这个数值一般根据服务器性能和内存来制定,实际最大值就是worker进程数乘以work_connections 实际我们填入一个65535,足够了,这些都算并发值,一个网站的并发达到这么大的数量,也算一个大站了! multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接,默认是on,设置为on后,多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态,设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,直到连接分配完毕,没有取得连接的继续休眠。当你的服务器连接数不多时,开启这个参数会让负载有一定的降低,但是当服务器的吞吐量很大时,为了效率,可以关闭这个参数。 (3)开启高效传输模式 http { include mime.types; default_type application/octet-stream; …… sendfile on; tcp_nopush on; …… Include mime.types; //媒体类型,include 只是一个在当前文件中包含另一个文件内容的指令 default_type application/octet-stream; //默认媒体类型足够 sendfile on;//开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。 注意:如果图片显示不正常把这个改成off。 tcp_nopush on;必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的开始部分一起发送,而不一个接一个的发送。) (4)连接超时时间 主要目的是保护服务器资源,CPU,内存,控制连接数,因为建立连接也是需要消耗资源的 keepalive_timeout 60;tcp_nodelay on;client_header_buffer_size 4k;open_file_cache max=102400 inactive=20s;open_file_cache_valid 30s; open_file_cache_min_uses 1;client_header_timeout 15;client_body_timeout 15;reset_timedout_connection on;send_timeout 15; server_tokens off;client_max_body_size 10m;keepalived_timeout客户端连接保持会话超时时间,超过这个时间,服务器断开这个链接 tcp_nodelay;也是防止网络阻塞,不过要包涵在keepalived参数才有效 client_header_buffer_size 4k;客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过 1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。 open_file_cache max=102400 inactive=20s;这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive 是指经过多长时间文件没被请求后删除缓存。 open_file_cache_valid 30s;这个是指多长时间检查一次缓存的有效信息。 open_file_cache_min_uses 1;open_file_cache指令中的inactive 参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive 时间内一次没被使用,它将被移除。 client_header_timeout设置请求头的超时时间。我们也可以把这个设置低些,如果超过这个时间没有发送任何数据,nginx将返回request time out的错误 client_body_timeout设置请求体的超时时间。我们也可以把这个设置低些,超过这个时间没有发送任何数据,和上面一样的错误提示 reset_timeout_connection 告诉nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。 send_timeout响应客户端超时时间,这个超时时间仅限于两个活动之间的时间,如果超过这个时间,客户端没有任何活动,nginx关闭连接 server_tokens 并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,这样对于安全性是有好处的。 client_max_body_size上传文件大小限制 (5)fastcgi调优 fastcgi_connect_timeout 600; fastcgi_send_timeout 600; fastcgi_read_timeout 600; fastcgi_buffer_size 64k; fastcgi_buffers 4 64k; fastcgi_busy_buffers_size 128k; fastcgi_temp_file_write_size 128k; fastcgi_temp_path/usr/local/nginx1.10/nginx_tmp; fastcgi_intercept_errors on; fastcgi_cache_path/usr/local/nginx1.10/fastcgi_cache levels=1:2 keys_zone=cache_fastcgi:128minactive=1d max_size=10g; fastcgi_connect_timeout 600; #指定连接到后端FastCGI的超时时间。fastcgi_send_timeout 600; #向FastCGI传送请求的超时时间。 fastcgi_read_timeout 600; #指定接收FastCGI应答的超时时间。 fastcgi_buffer_size 64k; #指定读取FastCGI应答第一部分需要用多大的缓冲区,默认的缓冲区大小为fastcgi_buffers指令中的每块大小,可以将这个值设置更小。 fastcgi_buffers 4 64k; #指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求,如果一个php脚本所产生的页面大小为256KB,那么会分配4个64KB的缓冲区来缓存,如果页面大小大于256KB,那么大于256KB的部分会缓存到fastcgi_temp_path指定的路径中,但是这并不是好方法,因为内存中的数据处理速度要快于磁盘。一般这个值应该为站点中php脚本所产生的页面大小的中间值,如果站点大部分脚本所产生的页面大小为256KB,那么可以把这个值设置为“8 32K”、“4 64k”等。 fastcgi_busy_buffers_size 128k; #建议设置为fastcgi_buffers的两倍,繁忙时候的buffer fastcgi_temp_file_write_size 128k; #在写入fastcgi_temp_path时将用多大的数据块,默认值是fastcgi_buffers的两倍,该数值设置小时若负载上来时可能报502BadGateway fastcgi_temp_path #缓存临时目录 fastcgi_intercept_errors on;#这个指令指定是否传递4xx和5xx错误信息到客户端,或者允许nginx使用error_page处理错误信息。 注:静态文件不存在会返回404页面,但是php页面则返回空白页!! fastcgi_cache_path /usr/local/nginx1.10/fastcgi_cachelevels=1:2 keys_zone=cache_fastcgi:128minactive=1d max_size=10g;# fastcgi_cache缓存目录,可以设置目录层级,比如1:2会生成16*256个子目录,cache_fastcgi是这个缓存空间的名字,cache是用多少内存(这样热门的内容nginx直接放内存,提高访问速度),inactive表示默认失效时间,如果缓存数据在失效时间内没有被访问,将被删除,max_size表示最多用多少硬盘空间。 fastcgi_cache cache_fastcgi; #表示开启FastCGI缓存并为其指定一个名称。开启缓存非常有用,可以有效降低CPU的负载,并且防止502的错误放生。cache_fastcgi为proxy_cache_path指令创建的缓存区名称 fastcgi_cache_valid 200 302 1h; #用来指定应答代码的缓存时间,实例中的值表示将200和302应答缓存一小时,要和fastcgi_cache配合使用 fastcgi_cache_valid 301 1d; #将301应答缓存一天 fastcgi_cache_valid any 1m; #将其他应答缓存为1分钟 fastcgi_cache_min_uses 1; #该指令用于设置经过多少次请求的相同URL将被缓存。 fastcgi_cache_key http://$host$request_uri; #该指令用来设置web缓存的Key值,nginx根据Key值md5哈希存储.一般根据$host(域名)、$request_uri(请求的路径)等变量组合成proxy_cache_key 。 fastcgi_pass #指定FastCGI服务器监听端口与地址,可以是本机或者其它 总结:nginx的缓存功能有:proxy_cache / fastcgi_cache proxy_cache的作用是缓存后端服务器的内容,可能是任何内容,包括静态的和动态。 fastcgi_cache的作用是缓存fastcgi生成的内容,很多情况是php生成的动态的内容。 proxy_cache缓存减少了nginx与后端通信的次数,节省了传输时间和后端宽带。 fastcgi_cache缓存减少了nginx与php的通信的次数,更减轻了php和数据库(mysql)的压力。 CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。Fastcgi是用来提高CGI程序性能的。php-fpm是fastcgi进程的管理器,用来管理fastcgi进程的 (6)gzip调优 使用gzip压缩功能,可能为我们节约带宽,加快传输速度,有更好的体验,也为我们节约成本,所以说这是一个重点。 Nginx启用压缩功能需要你来ngx_http_gzip_module模块,apache使用的是mod_deflate 一般我们需要压缩的内容有:文本,js,html,css,对于图片,视频,flash什么的不压缩,同时也要注意,我们使用gzip的功能是需要消耗CPU的! gzip on; gzip_min_length 2k; gzip_buffers 4 32k; gzip_http_version 1.1; gzip_comp_level 6; gzip_typestext/plain text/css text/javascriptapplication/json application/javascript application/x-javascriptapplication/xml; gzip_vary on; gzip_proxied any; gzip on; #开启压缩功能 gzip_min_length 1k; #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取,默认值是0,不管页面多大都进行压缩,建议设置成大于1K,如果小与1K可能会越压越大。 gzip_buffers 4 32k; #压缩缓冲区大小,表示申请4个单位为32K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果。 gzip_http_version 1.1; #压缩版本,用于设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可 gzip_comp_level 6; #压缩比例,用来指定GZIP压缩比,1压缩比最小,处理速度最快,9压缩比最大,传输速度快,但是处理慢,也比较消耗CPU资源。 gzip_types text/css text/xml application/javascript; #用来指定压缩的类型,‘text/html’类型总是会被压缩。 默认值: gzip_types text/html (默认不对js/css文件进行压缩) # 压缩类型,匹配MIME类型进行压缩 # 不能用通配符 text/* # (无论是否指定)text/html默认已经压缩 # 设置哪压缩种文本文件可参考 conf/mime.types gzip_vary on; #varyheader支持,改选项可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过nginx压缩的数据 (7)expires缓存调优 缓存,主要针对于图片,css,js等元素更改机会比较少的情况下使用,特别是图片,占用带宽大,我们完全可以设置图片在浏览器本地缓存365d,css,js,html可以缓存个10来天,这样用户第一次打开加载慢一点,第二次,就非常快了!缓存的时候,我们需要将需要缓存的拓展名列出来, Expires缓存配置在server字段里面 location ~* \.(ico|jpe?g|gif|png|bmp|swf|flv)$ { expires 30d; \#log_not_found off; access_log off; } location ~* \.(js|css)$ { expires 7d; log_not_found off; access_log off; } 注:log_not_found off;是否在error_log中记录不存在的错误。默认是。 总结:expire功能优点 (1)expires可以降低网站购买的带宽,节约成本(2)同时提升用户访问体验(3)减轻服务的压力,节约服务器成本,是web服务非常重要的功能。 expire功能缺点:被缓存的页面或数据更新了,用户看到的可能还是旧的内容,反而影响用户体验。解决办法:第一个缩短缓存时间,例如:1天,但不彻底,除非更新频率大于1天;第二个对缓存的对象改名。 网站不希望被缓存的内容 1)网站流量统计工具2)更新频繁的文件(google的logo) (8)防盗链 防止别人直接从你网站引用图片等链接,消耗了你的资源和网络流量,那么我们的解决办法由几种: 1:水印,品牌宣传,你的带宽,服务器足够 2:防火墙,直接控制,前提是你知道IP来源 3:防盗链策略下面的方法是直接给予404的错误提示 location ~*^.+\.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ { valid_referers noneblocked www.benet.com benet.com; if($invalid_referer) { \#return 302 http://www.benet.com/img/nolink.jpg; return 404; break; } access_log off; } 参数可以使如下形式:none 意思是不存在的Referer头(表示空的,也就是直接访问,比如直接在浏览器打开一个图片) blocked 意为根据防火墙伪装Referer头,如:“Referer:XXXXXXX”。 server_names 为一个或多个服务器的列表,0.5.33版本以后可以在名称中使用“*”通配符。 (9)内核参数优化 fs.file-max = 999999:这个参数表示进程(比如一个worker进程)可以同时打开的最大句柄数,这个参数直线限制最大并发连接数,需根据实际情况配置。 net.ipv4.tcp_max_tw_buckets = 6000 #这个参数表示操作系统允许TIME_WAIT套接字数量的最大值,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。该参数默认为180000,过多的TIME_WAIT套接字会使Web服务器变慢。 注:主动关闭连接的服务端会产生TIME_WAIT状态的连接 net.ipv4.ip_local_port_range = 1024 65000 #允许系统打开的端口范围。 net.ipv4.tcp_tw_recycle = 1#启用timewait快速回收。 net.ipv4.tcp_tw_reuse = 1#开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接。这对于服务器来说很有意义,因为服务器上总会有大量TIME-WAIT状态的连接。 net.ipv4.tcp_keepalive_time = 30:这个参数表示当keepalive启用时,TCP发送keepalive消息的频度。默认是2小时,若将其设置的小一些,可以更快地清理无效的连接。 net.ipv4.tcp_syncookies = 1#开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理。 net.core.somaxconn = 40960 #web 应用中 listen 函数的 backlog 默认会给我们内核参数的 net.core.somaxconn 限制到128,而nginx定义的NGX_LISTEN_BACKLOG 默认为511,所以有必要调整这个值。 注:对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后,我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了.每一个处于监听(Listen)状态的端口,都有自己的监听队列.监听队列的长度与如somaxconn参数和使用该端口的程序中listen()函数有关 somaxconn参数:定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为128,对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。大多数环境这个值建议增加到 1024 或者更多。大的侦听队列对防止拒绝服务 DoS 攻击也会有所帮助。 net.core.netdev_max_backlog = 262144 #每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。 net.ipv4.tcp_max_syn_backlog = 262144 #这个参数标示TCP三次握手建立阶段接受SYN请求队列的最大长度,默认为1024,将其设置得大一些可以使出现Nginx繁忙来不及accept新连接的情况时,Linux不至于丢失客户端发起的连接请求。 net.ipv4.tcp_rmem = 10240 87380 12582912#这个参数定义了TCP接受缓存(用于TCP接受滑动窗口)的最小值、默认值、最大值。 net.ipv4.tcp_wmem = 10240 87380 12582912:这个参数定义了TCP发送缓存(用于TCP发送滑动窗口)的最小值、默认值、最大值。 net.core.rmem_default = 6291456:这个参数表示内核套接字接受缓存区默认的大小。 net.core.wmem_default = 6291456:这个参数表示内核套接字发送缓存区默认的大小。 net.core.rmem_max = 12582912:这个参数表示内核套接字接受缓存区的最大大小。 net.core.wmem_max = 12582912:这个参数表示内核套接字发送缓存区的最大大小。 net.ipv4.tcp_syncookies = 1:该参数与性能无关,用于解决TCP的SYN攻击。 下面贴一个完整的内核优化设置: fs.file-max = 999999 net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296 net.ipv4.tcp_max_tw_buckets = 6000 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 10240 87380 12582912 net.ipv4.tcp_wmem = 10240 87380 12582912 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 262144 net.core.somaxconn = 40960 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 1 net.ipv4.tcp_keepalive_time = 30 net.ipv4.ip_local_port_range = 1024 65000 执行sysctl -p使内核修改生效 (10)关于系统连接数的优化: linux 默认值 open files为1024 \#ulimit -n 1024 说明server只允许同时打开1024个文件 使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。 新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大 在/etc/security/limits.conf最后增加: \* soft nofile 65535 \* hard nofile 65535 \* soft noproc 65535 \* hard noproc 65535
如何查看当前LINUX系统的状态:CPU使用内存使用负载情况以及网络状态
1 2 3 可以用TOP工具实时动态查看CPU使用率、内存使用负载情况,用ps命令查看当前时刻的CPU使用率、内存使用负载情况。 可以用netstat命令查看网络状态,netstat命令用来打印网络连接状况、系统所开放端口、路由表等信息;可以用ifconfig这个命令可以用于网络接口的启动/停止,更改设置和表示网络状态,在不添加任何参数的情况下,ifconfig可以表示网络接口的状态;可以用ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
对于一个web服务器来说,应该调整那些linux内核参数。并说明他们的含义。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 net.ipv4.tcp_syncookies = 1 #表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 1 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout = 30 #表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。 net.ipv4.tcp_keepalive_time = 1200 #表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。 net.ipv4.ip_local_port_range = 1024 65000 #表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。 net.ipv4.tcp_max_tw_buckets = 5000 #表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字, #TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。
jvm调优
1 vmstat iostat netstat strace top awk sed grep nexus MobaXterm
硬件性能测试用过什么
1 2 3 4 对IO进行简单测试dd if=/dev/zero of=test bs=1M count=4096 用top和iostat查看wa%及写硬盘速度top-n1每秒钟的cpu 而发给我i的股份文件格式的结果v那边的而发给我i的股份文件格式的结果v那边的 建设建设咩黎中国 通过df-h命令查看磁盘情况通过hdparm测试读取速率hdparm-t/dev/sda linux中几块盘求平均值就是磁盘的平均读取速率
临时调整和永久生效系统内核参数在哪里调
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1.临时调整内核参数 开启内核路由转发功能,通过01设置开关 # echo "1" >/proc/sys/net/ipv4/ip_forward 禁止所有的icmp回包(禁止其他主机ping本机) # echo "1" >/proc/sys/net/ipv4/icmp_echo_ignore_all 调整所有进程可以打开的文件总数ps:如果大量用户访问时,可以因为该数字太小而导致错误 \#echo "108248" >/proc/sys/fs/file-max 2.永久调整内核参数 vim /etc/sysctl.conf 开启内核路由转发功能,通过01设置开关 net.ipv4.ip_forward=1 禁止所有的icmp回包(禁止其他主机ping本机) net.ipv4.icmp_echo_ignnore_all-=1 调整所有进程可以打开的文件总 fs.file-max=108248
如何查看当前linux系统的状态,如CPU使用,内存使用,负载情况
1 sar综合命令 mpstat11cpu监测 free-m内存使用 top负载
显示CPU利用率的命令,查看系统版本的命令
1 2 3 CPU利用率的命令:top或sar 查看系统版本的命令:cat/etc/redhat-release或uname-a
查看网卡历史流量实时查看网卡流量
1 2 3 网卡历史流量:sar-nDEV-f/var/log/sa/saxx#查看xx日的网卡流量历史 实时查看网卡流量:sar-nDEV15(每间隔1秒刷新一次,共5次)
如何查看当前系统每个ip的连接数
1 netstat -n | awk '/^tcp/{print$5}' | awk -F : '{print$1}' | sort | uniq -c
kernel调参
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 linux内核参数调整说明 所有的TCP/IP调优参数都位于/proc/sys/net/目录。例如,下面是最重要的一些调优参数,后面是它们的含义: 1./proc/sys/net/core/rmem_max—最大的TCP数据接收缓冲。 2./proc/sys/net/core/wmem_max—最大的TCP数据发送缓冲。 3./proc/sys/net/ipv4/tcp_timestamps—时间戳在(请参考RFC1323)TCP的包头增加12个字节。 4./proc/sys/net/ipv4/tcp_sack—有选择的应答。 5./proc/sys/net/ipv4/tcp_window_scaling—支持更大的TCP窗口.如果TCP窗口最大超过65535(64KB),必须设置该数值为1。 6.rmem_default—默认的接收窗口大小。 7.rmem_max—接收窗口的最大大小。 8.wmem_default—默认的发送窗口大小。 9.wmem_max—发送窗口的最大大小。 /proc目录下的所有内容都是临时性的,所以重启动系统后任何修改都会丢失。 建议在系统启动时自动修改TCP/IP参数: 把下面代码增加到/etc/rc.local文件,然后保存文件,系统重新引导的时候会自动修改下面的TCP/IP参数: echo 256960>/proc/sys/net/core/rmem_default echo 256960>/proc/sys/net/core/rmem_max echo 256960>/proc/sys/net/core/wmem_default echo 256960>/proc/sys/net/core/wmem_max echo 0>/proc/sys/net/ipv4/tcp_timestamps echo 1>/proc/sys/net/ipv4/tcp_sack echo 1>/proc/sys/net/ipv4/tcp_window_scaling TCP/IP参数都是自解释的,TCP窗口大小设置为256960,禁止TCP的时间戳(取消在每个数据包的头中增加12字节),支持更大的TCP窗口和TCP有选择的应答。
请描述你是怎么优化Linux系统的?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1、不用root,添加普通用户,通过sudo授权管理。 2、更改默认的远程连接SSH服务端口及禁止root用户远程连接。 3、定时自动更新服务器时间。 4、配置yum更新源,从国内更新源下载安装rpm包。 5、关闭selinux及iptable。 6、调整文件描述符的数量。进程及文件的打开都会消耗文件描述符。 7、定时自动清理/var/spool/clientmquene/目录垃圾文件,防止inodes节点被占满。 8、关闭没必要的开机自启动服务。 9、linux内核参数优化/etc/sysctl.conf,执行sysctl-p生效。 10、更改字符集,支持中文,但建议还是使用英文字符集,防止乱码问题,不要使用中文。 11、锁定关键系统文件。 12、清空/etc/issue,去除系统及内核版本登陆前的屏幕显示。
Linux系统下,如何修改test用户,最大的打开文件数量为10240,最大的进程数为20480?
1 2 3 4 5 6 7 8 9 [root@wing~]#vim /etc/security/limits.conf test softfsize 9000 test hardfsize10240 [root@wing~]#vim/etc/security/limits.d/20-nproc.conf rootsoftnprocunlimited test hard nproc 20480
windows 如何判断出Windows操作系统是32位的还是64位的。
Windows 操作系统设置每天下午18 点自动关机,如何操作。
1 控制面板-》管理工具-》计划任务-》设置每天的关机时间
运维综合 如何查看当前登陆用户?同时知道自己使用的账户名?
在linux系统中如何备份?
1 2 3 1)使用fdisk -l 确定MBR位置 2)备份MBR dd if=/dev/sda1 of=/root/mbr bs=512 count=1 3)恢复MBR dd if=/root/mbr of=/dev/sda1 bs=512 count=1 4)恢复分区表 dd if=/root/mbr of=/dev/sda1 bs=512 skip=446 count=66 注:mbr大小512 所以bs=512 count=1 bs=512 skip=446 count=66 用来确定分区表在备份文件中的位置
MBR是什么?有什么用?
1 2 3 4 5 6 7 8 9 10 11 1.MBR,全称为 Master Boot Record,即硬盘的 主引导记录。 为了便于理解,一般将MBR分为广义和狭义两种:广义的MBR包含整个扇区( 引导程序、[分区表](https://baike.sogou.com/lemma/ShowInnerLink.htm?lemmaId=4440362&ss_c=ssc.citiao.link)及分隔标识),也就是上面所说的 主引导记录;而狭义的MBR仅指 引导程序而言。 硬盘的0柱面、0磁头、1扇区称为主[引导扇区](https://baike.sogou.com/lemma/ShowInnerLink.htm?lemmaId=8225075)(也叫主引导记录MBR)。它由三个部分组成,主引导程序、[硬盘分区表](https://baike.sogou.com/lemma/ShowInnerLink.htm?lemmaId=268563)DPT(Disk [Partition](https://baike.sogou.com/lemma/ShowInnerLink.htm?lemmaId=10839122&ss_c=ssc.citiao.link) table)和硬盘有效标志(55AA)。在总共512字节的[主引导扇区](https://baike.sogou.com/lemma/ShowInnerLink.htm?lemmaId=53419296)里 主引导程序(boot loader)占446个字节,第二部分是Partition table区(分区表),即DPT,占64个字节,硬盘中分区有多少以及每一分区的大小都记在其中。第三部分是magic number,占2个字节,固定为55AA。 2.MBR的作用 计算机在进行主板BIOS检测之后,就会将MBR扇区整个读取到内存中,然后执行权交给内存中MBR扇区的引导程序。系统下一步就会判断读入内存的MBR扇区的最后两个字节是否为“55 AA”,不是则报错。 如果是“55 AA”接下来引导程序会到分区表中查找是有活动分区,若有活动分区,则判断活动分区的引导扇区在磁盘中的地址,如信息正确,引导权就交给这个扇区去引导操作系统了,MBR引导程序的使命就光荣完成。
14日下午2点date+%Y%M%D%H%M输出的时间是什么?
查看文件修改时间指令
请简单描述vi编辑器的使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 vi是一种模式文本编辑器,具备三种使用模式。 一、一般模式:默认模式,用于移动光标、删除、复制、粘贴; 1、移动光标 上下左右:左用h或←,上用k或↑,下用j或↓,右用l或→; 上下滚动:上滚用【Ctrl】+【b】(backward),下滚用【Ctrl】+【f】(foreword); 行首行尾:行首用“0”或【home】,行尾用“$”或【end】; 文首文尾:文首用“gg”或“1G”,文尾用“G”; 2、复制、粘贴、删除 复制:yy,复制光标所在一行;nyy,复制光标所在向下n行; 粘贴:p,粘贴在光标下一行;P,粘贴在光标上一行; 删除:x或【Del】,向后删除一个字符;X,向前删除一个字符;dd,删除光标所在一行;ndd,删除光标所在向下n行。 3、复原和重复 (1) 复原:u; (2) 重复上一操作:”.”。 二、编辑模式:用于插入或替换编辑文本; 1、插入模式 i,从当前光标处插入; I,从当前行的第一个非空格符处开始插入; a,从当前光标的下一个字符处开始插入; A,从当前行的最后一个字符处插入; o,当前行的下一行处插入新行; O,当前行的上一行处插入新行。 2、替换模式 r,替换光标所在的字符一次; R,一直替换光标所在的文字。 三、命令模式:用于查找、保存、替换大量文本、显示行号等。 1、查找与替换 / 向下查找要搜索的字符串; ? 向上查找要搜索的字符串; n 重复前一个查找(从前往后); N 反向重复前一个查找(从后往前); :% s/替换前/替换后/g 或 1,$ s/替换前/替换后/g 全文替换 :n1,n2 s/替换前/替换后/g 在n1和n2行之间替换 2、行号的设置 :set nu, 显示行号 :set nonu, 取消行号 :wq或:x, 保存和离开 :w [文件路径], 另存为 :q 离开不保存
说出你知道的几种LINUX/UNIX发行版本
1 2 3 4 5 6 Linux主要的几种发行版本: 1、RedHat系列:RHEL、CentOS、Oracle linux。 2、SUSE 3、Ubutun 4、debian Unix主要的几个发行版本: 1、Solaris 2、HP-UX 3、AIX
Linux如何挂载windows下的共享目录
1 2 3 4 5 6 7 8 9 10 11 12 # mkdir /windows #创建挂载目录windows # mount -t cifs -o username='Bob',password='123456' //10.18.41.203/workspace /windows # df -h #查看是否成功挂载 参数说明 : username , Window 系统登录用户名 password : Window 系统登录密码 //192.168.0.102/Share : 设置Window共享目录的路径 地址格式是 \\你的IP\你的共享文件夹 /usr/local/bin/code : 挂载到 Linux 下的那个目录 通过修改fstab文件,支持开机自动挂载 # vim /etc/fstab //10.18.41.203/workspace /windows cifs auto,username=‘echo’,password=‘123456’ 0 0
linuxA机器提供了80端口服务,但是用户反馈访问慢,如何排查问题?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 亚信面试题MZD 第一题:数据库 账单表:acc_bill(字段类型:varchar2) ———————————————————————————————————————— 账户编号(acct_id)|账单编号(bill_id)|账单状态(bill_sts)|账单月(bill_mon)| _____________________________________________________________________________ 账单明细表:acc_bill_dtl(字段类型:varchar2) _________________________________________________________________________________ 账单编号(bill_id)|账单科目编(fee_item_id)|账单金额(amount)|税率%(tax_rate)| __________________________________________________________________________________ 1、写出sql,账单月是2018.4月的整月账单数据。 select*fromacc_billwherebill_mon=201804 2、写出sql,账单编号是20010120的账单总金额。 selectamountfromacc_bill_dtlwherebill_id=20010120 3、写出sql,账单月是2018.4月的税率有几种类型,并按照税率大小倒序排列。 selectcount(acc_bill_dtl.tax_rate),acc_bill_dtl.tax_ratefromacc_billrightjoinacc_bill_dtlonacc_bill.acct_id=acc_bill_dt.bill_idwhereacc_bill.bill_mon=201804orderbyacc_bill_dtdesc; 第二题:Unix命令 文件名AccQryFree2016.log,存在目录/root/boss/log下 <80:21308>12:00:00servicestartquery_value,exitedwithvalue0; <80:21308>12:00:01select*fromcrm_userwherests=1;exitedwithvalue0; <80:21308>12:10:01usedb:db_ngboss[srv_zw1] <80:21309>12:20:00servicestartquery_value,exitedwithvalue0; <80:21309>12:22:01select*fromcrm_userwherests=1;exitedwithvalue0; <80:21309>12:23:01usedb:db_ngboss[srv_zw1] 1、统计出文件AccQryFree2016.log中的字符串exitedwithvalue0出现的次数? awk'/exitedwithvalue0/{a[i]++}END{printa[i]}'AccQryFree2016.log 2、使用vi编辑器,将该文件中的exitedwithvalue0替换成ECITEDWITHVALUE0; :%s/exitedwithvalue0/ECITEDWITHVALUE0/g 3、写出带有exitedwithvalue0的时间列全部输出; awk'/exitedwithvalue0/{print$2}' 4、将AccQryFree2016.log这个文件进行压缩; tarczfAccQryFree2016.tar.gzAccQryFree2016.log 5、将AccQryFree2016.log这个文件移动到/root/pkgcx/log/下; mvAccQryFree2016.log/root/pkgcx/log/ 6、配置一个定时任务cron,将该文件在每周五下午6点进行删除; 018**5/usr/bin/rm-rf/root/pkgcx/log/AccQryFree2016.log 第三题:脚本语言 1、请使用shell脚本把第一题中账单月是2018.4月的整月账单数据写入文件中。 mysq-uroot-p'mima'-e"select*fromacc_billwherebill_mon=201804">a.txt 2、请写出一个守护进程脚本,脚本名称是send_sms.sh,请对此脚本编写守护进程脚本。 # vi /etc/init.d/nginx #!/bin/bash #chkconfig:- 99 20 #description:Oooothisismynginxstartupscript PROG="/usr/local/nginx/sbin/nginx" PIDF="/usr/local/nginx/logs/nginx.pid" case"$1"in start) $PROG ;; stop) kill-sQUIT$(cat$PIDF) ;; restart) $0stop $0start ;; reload) kill-sHUP$(cat$PIDF) ;; *) echo"Usage:$0{start|stop|restart|reload}" exit1 esac exit0 #chmod+x/etc/init.d/nginx #chkconfig--addnginx 第五题:自我阐述 请自我阐述一到两项自己的技能或者比较精通的技术;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1、当网站访问较慢时,首先先查看本地网络是否正常 2、本地网络速率正常时,再检查下所访问的网站是否正常 总时间:网站的响应时间,可了解网站的性能瓶颈或者是利用谷歌或IE浏览器的F12开发者工具查看下网站的大小和网站的打开速度成不成正比。 3、网站出现无法访问时,使用故障诊断命令定位故障点。 命令分析:ping:检测IP或域名的连通性dig/nslookup:查看DNS解 析情况traceroute:显示从访问者到网站的路由连接状态,如果有节点无法连接,只需针对该故障点进行修复便可快速恢复网络。 4、利用浏览器开发者模式检查下图片、js、css是否做过压缩处理 5、数据库(连接数等)、服务器(cpu、内存等) 6、从网站本身找问题,网站的问题包括网站程序设计,网页设计结构,网页内容三个部分。
tcp链接状态有哪些,分别代表什么意思
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 LISTEN:侦听来自远方的TCP端口的连接请求 SYN-SENT:再发送连接请求后等待匹配的连接请求 SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认 ESTABLISHED:代表一个打开的连接 FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认 FIN-WAIT-2:从远程TCP等待连接中断请求 CLOSE-WAIT:等待从本地用户发来的连接中断请求 CLOSING:等待远程TCP对连接中断的确认 LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认 TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认 CLOSED:没有任何连接状态
写下之前工作中在生产环境中对何种角色的服务器上的哪些内容配置过备份,使用什么备份方法及备份策略,使用了什么方法检查备份的可用性?
1 2 3 4 5 1、 每天晚上00点整在Web服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送备份服务器backup上备份保留2.内核备份 数据库备份 备份方案:1.设置数据库自动备份脚本文件,计划任务2.每个星期天做全库备份3.每日(星期天除外)做级增量备份4.在主服务器保留一个礼拜内的全库备份、增量备份5.将一个礼拜前的全库备份,增量备份数据FTP到其他环境6.还可以加入差异备份,多种备份形式。
名词解释:HDLC,VTP,OSPF,RIP,DDOS,GNU,netscreen,ssh,smartd,apache,WAIT_TIME
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 HDLC(High-LevelDataLinkControl): 高级数据链路控制:是一个在同步网上传输数据、面向比特的数据链路层协议,它是由国际标准化组织(ISO)根据IBM公司的SDLC(SynchronousDataLinkControl)协议扩展开发而成的。 VTP(VLANTrunkingProtocol): VLAN中继协议,也被称为虚拟局域网干道协议:它是思科私有协议。作用是十几台交换机在企业网中,配置VLAN工作量大,可以使用VTP协议,把一台交换机配置成VTPServer,其余交换机配置成VTPClient,这样他们可以自动学习到server上的VLAN信息。 它是一个OSI参考模型第二层的通信协议,主要用于管理在同一个域的网络范围内VLANs的建立、删除和重命名。 OSPF(OpenShortestPathFirst开放式最短路径优先): OSPF是IETF(国际互联网工程任务组TheInternetEngineeringTaskForce)开发的基于链路状态的自治系统内部路由协议。 OSPF仅传播对端设备不具备的路由信息,网络收敛迅速,并有效避免了网络资源浪费;OSPF直接工作于IP层之上,IP协议号为89;OSPF以组播地址发送协议包; RIP(RoutingInformationProtocol) 路由信息协议RIP是基于距离矢量算法的路由协议,利用跳数来作为计量标准。 (缺点:由于15跳为最大值,RIP只能应用于小规模网络;收敛速度慢;根据跳数选择的路由,不一定是最优路由。) DDOS(DistributedDenialofService) 分布式拒绝服务攻击攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。通常,攻击者使用一个偷窃帐号将DDoS主控程序安装在一个计算机上,在一个设定的时间主控程序将与大量代理程序通讯,代理程序已经被安装在网络上的许多计算机上。代理程序收到指令时就发动攻击。利用客户/服务器技术,主控程序能在几秒钟内激活成百上千次代理程序的运行。 在信息安全的三要素——“保密性”、“完整性”和“可用性”中,DDOS针对的是可用性。 GNU(GNU is Not Unix的递归缩写) GNU是一个自由的操作系统,其内容软件完全以GPL(GNU通用公共许可证)方式发布。这个操作系统是GNU计划的主要目标,名称来自GNU'sNotUnix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。GNU的创始人,理查德·马修·斯托曼,将GNU视为“达成社会目的技术方法”。 netscreen Netscreen防火墙是一种高性能的硬件防火墙,与其它的硬件防火墙相比有本质的区别。 其它的硬件防火墙实际上是运行在PC平台上的一个软件防火墙,而Netscreen防火墙则是由ASIC芯片来执行防火墙的策略和数据加解密,因此速度比其它防火墙要快得多。从软件特性上看Netscreen防火墙是状态检测与应用代理混合的防火墙,对于大部份的应用Netscreen防火墙是监测整个通讯状态,如果发现通讯状态不正常便拒绝进入受保护的内部网络,对于FTP或H322等通讯状态不好跟踪的服务Netscreen防火墙通过应用代理来确保服务安全。 ssh(SecureShell) 安全外壳协议由IETF的网络小组(NetworkWorkingGroup)所制定;SSH为建立在应用层基础上的安全协议。目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。 smartd smartd是一个守护进程(一个帮助程序),它能监视拥有自我监视,分析和汇报技术(Self-Monitoring,Analysis,andReportingTechnology-SMART)的硬盘。SMART系统使得硬盘能监视并汇报自己的运行状况。它的一个重要特性是能够预测失败,使得系统管理员能避免数据丢失。 apache Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。同时Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。也是一个基金会的名称、一种武装直升机等等。 WAIT_TIME
如何测试网速,测试视频吞吐与常规网速测试的区别
java报错socket
1 2 3 4 5 6 7 8 9 1.java.net.SocketTimeoutException.这个异常比较常见,socket超时。 一般有2个地方会抛出这个,一个是connect的时候,这个超时参数由connect(SocketAddressendpoint,inttimeout)中的后者来决定,还有就是setSoTimeout(inttimeout),这个是设定读取的超时时间。它们设置成0均表示无限大。 .java.net.BindException:Addressalreadyinuse:JVM_Bind。 该异常发生在服务器端进行newServerSocket(port)或者socket.bind(SocketAddressbindpoint)操作时。 原因:与port一样的一个端口已经被启动,并进行监听。此时用netstat–an命令,可以看到一个Listending状态的端口。只需要找一个没有被占用的端口就能解决这个问题。
平时在公司都干些什么?
1 2 3 4 5 6 7 8 9 10 11 1.处理报警,查看报警的原因,和开发一起解决,并且尽量找出避免再次发生的方法,例如添加一些定时清理脚本 2.处理发布,基本都是自动化,但是总有发布不成功或者需要回滚的时候,这时候就需要手工介入,找到原因,并跟开发一起讨论最后是否撤销还是重上 3.日常一起能够自动化的工作尽量找到自动化的方法 4.会启动一些和运维相关的项目,所以有时候也兼职项目开发 5.参与例会 6.学习,看看新闻,学习资料等等。 或者 1,等待监控系统报警 2,核心系统巡检,备份系统备份任务完成情况巡检 3,等待用户报障 4,例行任务计划攥写,例行任务执行,比如新开用户,存储扩容等; 5,项目性的工作,比如新购存储,新的监控系统,新的操作系统,应用系统验证 6,学习新知识,看技术文档或者公司的各种通知 7,和不同供应商(工程师),内部人员开会
远程管理卡作用。怎么通过命令看硬盘,内存等硬件故障。
1 2 3 4 5 6 7 1、远程安装操作系统 登录 监控电池、风扇、CPU、内存、磁盘等硬件设备的状态远程管理卡管理界面,用控制卡上的虚拟介质映射功能把自己电脑上的ISO文件或者物理光驱投递给机房里服务器。 2、电源控制功能 远程登录管理界面,进行开机、关机、重启 3.检查服务器硬件状态 监控电池、风扇、CPU、内存、磁盘等硬件设备的状态
请写出5个你常用的系统或网络维护工具的名称
1 2 3 4 5 6 7 8 9 10 11 配置部署自动化:ansible(puppet,saltstart) 日志采集、分析、报警:ELK 网络质量监控:smokeping、zabbix 监控(报警)自动化:nagios(监控系统),ganglia(集群监控),cacti(流量监控)、ipmonitor(ping监控)等 指标收集:collectd+statsd(statsite) 指标绘图:graphite、nrpe、pnp4nagios
假设网站结构为:Nginx→PHP-FPM→Mysql有部分链接打开缓慢,通过什么方式可以找到访问缓慢的链接
1 2 3 4 5 6 7 8 9 1、系统负载,磁盘IO 2、是否有php慢查询程序 打开php-fpm中php慢查询日志 request_slowlog_timeout=5 slowlog=var/log/slow.log reload访问之后无慢查询日志,判断无执行时间比较慢的php程序 2.检查该配置文件 pm=static pm.max_children=300 pm.start_servers=15 pm.min_spare_servers=8 pm.max_spare_servers=48 request_terminate_timeout=200 排除是pm.max_children设置过小引起的问题。 3.mysql可能有慢查询
在之前的运维工作中你遇到过哪些运维故障?是怎么解决的?请描述2个你发现并解决的故障案例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1、问题描述:服务器tomcat重启之后,网站很长一段时间无法访问,然后过几分钟就可以访问了。 使用命令netstat-tulnp|grepjava发现是8005端口的问题,起来很慢,日志里面又没有什么报错信息。 原因:Tomcat启动过程很慢,JVM上的随机数与熵池策略耗时:session引起的随机数问题导致的。 解决方案: 修改$JAVA_HOME/jre/lib/security/java.security文件中securerandom.source配置项: #securerandom.source=file:/dev/urandom 改为 securerandom.source=file:/dev/./urandom 最后重启tomcat发现速度快了。 2、Tomcat每周六重启失败 问题背景:生产环境上面的tomcat每周六重启,但是重启失败 原因:经过调查发现是因为一个tomcat产生了多个java进程,所以执行自带脚本shutdown.sh的时候没有把tomcat进程完全杀死。 解决方案:将杀死tomcat进程的脚本放在重启脚本的前面执行 59 2 * * 6 /app/bin/kill.sh>>/app/log/backup/kill.log2&1 01 3 * * 6 /app/bin/restart_tomcat.sh>>/app/log/backup/restart.log2&1
如果接到客服反馈:A项目www.lanxinA.cn无法打开,作为一名运维人员需要怎么操作?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1、先把服务切走,保证公司网站能正常对外提供服务 2、查看网络是否正常 3、本地网络速率正常时,再检查网站是否正常,域名是否能被正常解析到ip 使用故障诊断命令定位故障点。 命令分析:ping:检测IP或域名的连通性 dig/nslookup:查看DNS解析情况 traceroute:显示从访问者到网站的路由连接状态,如果有节点无法连接,只需针对该故障点进行修复便可快速恢复网络。 4、检查服务器本身是否故障 5、协调开发检查设计是否异常
Linux运维工程师都需要具备哪些技能和职业品质?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 熟练使用shell,最好也能掌握python的使用。 熟悉运维自动化工具和平台的使用,能整合、研发更好,通过自动化,实现运维数据可视化、生成报表; 能够独立进行运维的问题跟踪与管理,故障处理和隐患排查,定期给出业务运维状况和容量报告; 能够研究移动互联网应用服务架构及其依赖的软硬件环境,跟踪各个子系统的内部运行状况,不断提高系统的健壮性与效率; 能熟练应对协助开发完成日常变更,上下线等的维护事务; 能对系统和业务数据进行统一存储、备份和恢复,对网络设备、服务器设备、操作系统运行状况进行监控。 首先要有良好的品行需要有发现问题,解决问题的能力。遇事沉着冷静。动动你的小脑袋夸夸自己, 一定要积极向上,杜绝消极思想。
有一个员工,说他的机器上不了网,请你描述一下,可能是哪些故障产生的,怎么解决这些故障?
1 2 3 4 5 查看软件和硬件 ping网关和其他机器.ping不通,看看是不是网卡被禁了,还是ipdnsgateway有问题,再看看网卡驱动是不是有问题. 硬件方面: 看看是不是网线没插好,网卡的灯亮不亮.
电脑开机时主机内发出嘀嘀的鸣叫声,且显示器无任何信号,此对象可能是哪方面所导致,怎样处理?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 可能是内存问题导致,一般是内存松动,灰尘较多.可以做清扫灰尘处理,重新插好内存等操作. 各种主板的报警音有些差别,常见两种BIOS报警声音含义如下,自己根据长短查对属于那种情况吧: AwardBIOS的报警音: 1短:系统正常。 2短:需要更正CMOS设置,请进入CMOSSetup重新设置。 1长1短:RAM或主板出错。 1长2短:显示卡错误,检查独立显卡是否插牢,或者显卡坏了。 1长3短:键盘控制器错误。检查主板。 1长9短:主板BIOS损坏。 不断地响(长声):内存条未插好或损坏。重复短响:电源故障。 无声音无显示:电源故障。 AMIBIOS的报警音: 1短:内存问题。 2短:内存ECC较验错误。在CMOSSetup中将内存关于ECC校验的选项设为Disabled就可以解决。 3短:系统基本内存(第1个64kB)检查失败。换内存。 4短:系统时钟出错。 5短:CPU损坏。 6短:键盘控制器故障。 7短:系统实模式错误,不能切换到保护状态。 8短:显存错误。更换显卡。 9短:ROMBIOS错误。 1长3短:内存错误。内存损坏,更换即可。 1长8短:显卡损坏或显示卡没插好。
你对运维工程师的理解和以及对其工作的认识
1 2 运维工程师在公司当中责任重大,需要保证时刻为公司及客户提供稳定、安全的服务。保障公司正常对外提供服务。运维工程师的一个小小的失误,很有可能会对公司及客户造成重大损失,因此运维工程师的工作需要严谨。 同时在工作中也要能及时发现问题,解决问题,记录问题。在工作中以及工作之余不断充实完善自己,更好的服务公司。
标准端口的范围是?
Linux中的服务自启动添加方法有哪些。
1 2 3 4 5 6 7 8 9 10 11 12 centos6: 有2种 1.chkconfig --level 35 服务名 on 2.vim /etc/rc.d/rc.local /usr/sbin/服务名 start centos7: 有三种 1.systemctl enable 服务名 2.vim /etc/rc.local systemctl start 服务名
检查服务器是否正常工作的最好办法是?
1 1.ping服务器ip2.ss-antul|grep服务端口3.psaux|grep服务名4.systemctlstatus服务名
Linux记录log的服务叫什么名字?
如何查看命令的具体使用方法
1 2 3 4 5 6 7 8 命令 --help eg : ps --help 或者 man 命令 eg: man ps
Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1.post加电自检 2.MBR引导 3.GRUB引导 4.读取grub.conf文件 5.启动内核 6.加载伪文件系统(ramdisk) 7.启动init(systemd)进程 8.执行/bin/login centos7: 1.BIOS初始化,开始post开机自检 2.加载mbr到内存 3.GRUB阶段 4.加载内核和initramfs模块 5.内核开始初始化,使用systemd来代替centos6以前的init程序 6.Systemd执行multi-user.target下的getty.target及登录服务 7.systemd执行graphical需要的服务
破解密码:
1 开机grub界面-->e-->Linux16开头的行-->ro改成rw-->行尾添加init=/bin/bash-->进入系统-->修改密码
写出linux系统开机的启动顺序
1 加载BIOS 读取MBR Boot Loader 加载内核 用户层init依据inittab文件来设定运行等级 init进程执行rc.sysinit 启动内核模块 执行不同运行级别的脚本程序 -执行/etc/rc.d/rc.local -执行/bin/login程序,进入登录状态
Linux开机启动流程详细步骤是什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 第一步:当然是加电了 第二步:加载BIOS设置,选择启动盘。这是因为因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。在BIOS将系统的控制权交给启动硬盘第一个扇区之后,就开始由Linux来控制系统了。 第三步:加载磁盘中MBR中的grub MBR(Master Boot Record):即主引导分区,是启动盘的前512字节,里面存放了预启动信息和分区信息。前446个字节,即是grub引导程序后66个字节是分区表的信息 第四步:加载Linux内核系统到内存当中,运行超级进程/sbin/init进程。在Linux系统中,init进程的进程号永远是1,也就是说,系统中的所有进程的父进程都是init进程。可以使用命令pstree进行查看。 第五步:加载配置文件。init程序启动之后,会读取/etc/inittab文件,来决定系统的运行级别,Linux系统的运行级别有7中,从0-6 \# 0 - 关机模式(千万不要把initdefault设置为0 ,要不然你永远开不了机) \# 1 - 单用户模式 (此模式相当于救援模式,内核损坏,root忘记密码等可以使用此模式进行恢复。相当于windows下的安全模式) \# 2 - 多用户,但是没有NFS \# 3 - 完全多用户模式 (文本命令行界面,一般服务器都是此模式) \# 4 - 保留未使用 \# 5 - 图形桌面(系统启动之后会进入到图形化桌面系统中) \# 6 - 重新启动(千万不要把initdefault设置为6 ) 平时我们常用的也就是1,3,5。可以使用init 3 ,init 5进行切换。运行级别决定之后,加载相应的配置文件。第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等 第六步:加载内核模块,具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。 第七步:根据运行级别,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。 第八步:启动init.d下的系统进程 第九步:出现登录系统的画面。 至此,Linux开启启动完成。 </body><scripts>
英文翻译 Many of our components require the use of JavaScript to function. Specifically, they require jQuery, Popper.js, and our own JavaScript plugins. Place the following near the end of your pages, right before the closing