如何优化 Linux系统(可以不说太具体)? 1、root,添加普通用户,通过sudo授权管理;2、更改默认的远程连接SSH服务端口及禁止root用户远程连接;3、自动更新服务器时间;4、配置国内yum源;5、关闭selinux及iptables(iptables工作场景如果有外网IP一定要打开,高并发除外); 6、调整文件描述符的数量;7、精简开机启动服务(crond rsyslog network sshd);8、内核参数优化(/etc/sysctl.conf);9、更改字符集,支持中文,但建议还是用英文字符集,防止乱码;10、锁定关键系统文件;11、清空/etc/issue,去除系统及内核版本登录前的屏幕显示 Centos开机流程: 1、开机加电自检,加载BIOS的硬件信息,获取第一个启动设备;2、读取第一个启动设备MBR的引导加载程序(grub)的启动信息;3、加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备;4、核心执行init程序,并获取默认的运行信息;5、init程序执行/etc/rc.d/rc.sysinit文件;6、启动核心的外挂模块;7、init执行运行的各个批处理文件scripts;8、init执行/etc/rc.d/rc.local;9、执行/bin/login程序,等待用户登录;10、登录后开始以shell控制主机。 redhat 6.X版本系统 和 centos 7.X版本有啥区别? 桌面系统(6/GNOE2.x、7/GNOME3.x)、文件系统(6/ext4、7/xfs)、内核版本(6/2.6x、7/3.10x)、防火墙(6/iptables、7/firewalld)、默认数据库(6/mysql、7/mariadb)、启动服务(6/service启动、7/systemctl启动)、网卡(6/eth0、7/ens192) centos7破解root口令: 1、首先在菜单界面按【e】键,进入启动文件界面后;2、按【↓】拉到底部 在 "LANG=zh_cn.UTF-8" 同行后面加上“init=/bin/sh” ;然后按【Ctrl+X】进入“单用户模式” 3、输入【ls】,回车,再输入【mount –o remount ,rw / 】,回车 (注意空格) 4、输入【passwd】(注意:密码不能少于8位),重复输入两次密码 5、输入【touch /.autorelabel】,回车,再输入【exec /sbin/init】回车,以便重启系统。 安装虚拟机时修改网卡名称为eth0的方法:(按tab键即会弹出) web服务器的负载架构: 用tcpdump嗅探80端口的访问看看谁最高: tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." ‘{print $1"."$2"."$3"."$4}’| sort | uniq -c | sort -nr |head -20 统计/var/log/httpd/access.log日志访问频繁前十的地址,并从大到小排序。 cat access.log |cut -d" " -f1 |sort |uniq -c |sort -nr|head -n10 常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块? 常见的Linux发行版本有Redhat、Centos、Debian、Ubuntu、Suse 最擅长Redhat和Centos;Redhat官网:www.redhat.com; Centos官网:www.centos.org 我最擅长Linux基本命令操作及相关服务搭建 用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决?要使服务器上外网,必须满足的条件有哪些?需要配置什么? a、编辑网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,将HWADDR和MAC地址这两行删除。b、修改文件/etc/udev/rules.d/70-persistent-net.rules,删除之前eth0所在的行,将下一行eth1修改为eth0;c、reboot 要上外网需要:能够链接internet的网线(或无线)、有网卡; 需要配置:IP、netmask、gateway、dns(自动或手动都ok,服务器一般自动) 某天误操作,执行了rm -rf * ,会有哪些情况发生?请举例。 a、如果当前目录为"/tmp" ,那么这个目录下的东西会全部删除(默认不包含隐藏文件) b、如果当前目录为"/",那么系统上的数据将会丢失,且无法启动,系统崩溃(谨慎使用这个命令) 软硬:{共性}:修改软硬链接文件,所有的文件都是同步修改的。 硬链接: 本质:同一个文件多个名字、链接数:有一个以上的链接,不可跨分区,只允许对文件创建链接,不依赖原始文件,删除硬链接文件的源文件,硬链接文件仍然存在,不占用空间,格式:ln 目标文件 链接名
软连接:本质: 一个文件对应快捷方式,是不同文件,链接数:只有一个链接,可以跨分区,可以对目录和文件夹进行链接,依赖于原始文件,删除源文件,软连接则指向一个空文件,它具有依赖性,占用磁盘空间,格式:** ln -s 目标文件 源文件** 取IPV4地址:ifconfig ens33| grep -Eo "([0-9]{1,3}.){3}[0-9]{1,3}" head -1 取分区利用率:df | grep " /dev/sd " | grep -o " [0-9]{1,3}%" | grep -o " [0-9]+ " | sort -nr | head – n1 取分区利用率:sed -rn ‘ s/^([^[:space:]]+).([0-9]+)%./\2/p’ 用户:sed -rn ‘ s/^([^[:space:]]+).([0-9]+)%./\1/p’ 查看版本型号: cut -d "." -f1 /etc/redhat-release |egrep -o "[0-9]+" 查看版本型号:grep -o " [0-9]+. " /etc/redhat-release | grep -o " [0-9]+ " 查看版本型号:sed -rn " s/.([0-9]+)../\1/p " /etc/redhat-release 匹配手机号码:egrep -o " 1[0-9]{10} " tel.txt 匹配email邮箱:egrep -o "([[:alnum:]]|)+@[[:alnum:]]+.com$" mail.txt 使用sed命令取IPV4地址: 1、|sed -n ‘2p’ |sed -r ‘s/inet//’ |sed -r ‘s/netmask.//’ |tr -d " " 2、|sed -n ‘2p’ sed -e ‘s/^.inet//’ -e ‘s/.//’ ** 3**、|sed -n -e ‘2s/^.inet//’ -e ‘2s/ .//p’ 4、|sed -nr ‘2s@.inet (.) .n.@\1@p’ 5、|sed -nr ‘2s/[^0-9]+([0-9.]+)./\1/p’ 在Linux系统中,以文件方式访问设备。每个文件用索引节点来标识。 Linux内核引导时,从文件**/etc/fstab中读取要加载的文件系统。全部磁盘块由四个部分组成,分别为引导块、专用块、i节点表块和数据存储块。** 内核分为:进程管理系统、内存管理系统、I/O管理系统、文件管理系统。 网络管理具备:配置管理、故障管理、性能管理、安全管理和计费管理等功能。网络管理的重要任务是:**控制、监控 **。网络管理员对WWW服务器进行访问、控制存取和运行等控制,这些控制可在 httpd.conf 文件中体现。PHP和MySQL的联合使用解决了:在WWW服务器上处理数据库的访问问题。 进程的运行有两种方式,即:独立运行和使用父进程运行。 进程查看的命令:ps、top;进程调度的命令:at、crontab、batch、kill。 为何要给硬盘分区:**①、**易于管理和使用;**②、**有利于数据安全;**③、**节约寻找文件的时间 **①、**文件系统查看命令:df;**②、**统计目录或文件大小:du;**③、**文件系统修复命令:fsck;④、显示磁盘状态命令:dumpe2fs;实现从IP地址到以太网MAC地址转换的命令为:arp **快速查找/root目录中大于2M的文本,并将文件中的magedu,换成www.magedu.com **: find /root –size +2M -type f -exec sed -i ‘s/magedu/www.magedu.com/g’ {} ; 以txt结尾,30天没有修改的文件大小大于20K同时具有执行权限的文件并备份到/data/backup/目录下: find / -name *txt -mtime +30 -type f -size +20k -perm a=x -exec cp {} /data/backup/ ; 每次开机在/tmp目录下创建一个当天的日期文件夹(提示:当前日期表示的方法为:date +%Y%m%d
): echo "mkdir /tmp/date +%Y%m%d
" >> /etc/rc.d/rc.local 如何开启linux服务器路由转发功能? echo "1" > /proc/sys/net/ipv4/ip_forward 如何将本地80端口的请求转发到8080端口,当前主机ip 192.168.16.1,网卡eth0: iptables -t nat -A PREROUTING -i eth0 -d 192.168.16.1 -p tcp -m tcp –dport 80 -j REDIRECT –to-ports 8080 如何添加一块新的50G硬盘到linux服务器系统作为单独的分区,并正常使用? **a、**格式化分区用fdisk命令进行,**b、**制作文件系统用mkfs.xfs命令进行,**c、**挂载用mount命令进行,d、编辑配置文件“ /etc/fstab ”实现自动挂载。 说出配置过的路由器型号?并举例常用的配置命令? H3C路由器;system-view 进入系统视图模式、display ip routing-table 显示当前路由表、 shutdown 关闭以太网端口、quit 退出。 交换机的端口模式有几种?各有什么功能? 1、RJ-45接口。这种接口应用最为普遍。因其适配线缆\传输介质制作简单,传输速率快。支持的双工工作方式齐全。 2、BNC。所用的传输介质为细同轴电缆,当前已不常见。不要以为一讲以太网就都是RJ-45接口的,只不过双绞线类型的RJ-45接口在网络设备中非常普遍而已。 3、AUI。所用的传输介质为粗同轴电缆。当前多是广电宽带采用同轴电缆作为网络传输介质,范围不广。为了在RJ-45接口的基础上兼顾同轴电缆介质的网络连接,配上BNC或AUI接口。 有客户反映原来能通47.58.23.99的ip,现在不通了,应该怎么排查? 先看水晶头是否松动,再看网络适配器是否连接,再看onboot是否为yes,再检查客户端是否指定DNS,是否能ping通百度。 su、su -、sudo三者区别: su:非交互式登录,在环境变量下不切换。su-:交互式登录(完全切换),当前目录改变为切换用户,在家目录,连同环境一同切换。sudo相对于权限无限制性的su来说,还是比较安全的,所以sudo也能被称为受限制的su,另外sudo是需要授权许可的,所以也被称为授权许可的su。sudo执行命令的流程是当前用户切换到root,然后以root身份执行命令,执行完成后,直接退回到当前用户,而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权。 三个私有地址网络: A:10.0.0.0/8~10.255.255.255/8 A类保留1个网络数为私有地址:10.0.0.0 B、172.16.0.0/16 ~ 172.31.255.255/16 31-16+1=16个地址用于内部 C、192.168.0.0/24 ~ 192.168.255.255/24 255-0+1=256个地址用于内部 cp /etc/fstab /data/dir 问:它需要有最小权限是什么? 1、探究cp外部命令有啥权限,它至少必须要有x:执行权限。2、/etc/fstab:/fstab 只要有读权限就可以了,前提是/etc要有x执行权限,/etc可以没有读权限,只要/etc有基本可执行权限进得去就可以。3、/data/dir:至少要有执行和写权限。 cpu单核和多核有啥区别? 双核CPU就是能处理多份任务,顺序排成队列来处理。单核CPU一次处理一份任务,轮流处理每个程序任务。双核的优势不是频率,而是对付同时处理多件事情。单核同时只能干一件事,比如你同时在后台BT下载,前台一边看电影一边拷贝文件一边QQ。 网络稳定性如果保证? **1.**选用可靠的设备,规范的综合布线,打造稳定的基础网络;**2.**对网络进行约束,上网行为管理;避免病毒,p2p下载。**3.**有效的网络监控,对网络的主干线路进行速率监控。 应用系统中常见的网络故障有哪些,如何去分析和解决这些问题? **1.病毒问题:**遭遇DOOs对网络造成波动。或者是大规模的丢包。断网,或者是网络地址被欺骗;**2.线路回路:**会造成网络频繁的中断,甚至彻底中断。**3.设备老化:**高温。粉尘,不稳定电压等因素都会造成设备的不稳定。很多时候重启设备就恢复正常。**4.地址冲突:**网络配置错误会直接造成重要设备的网络中断。 web网站访问缓慢排查思路: **1、服务器状态:**负载情况,CPU,网络,内存,日志是否做切割。如果单台服务器性能受限,可以调整为分布式架构,LB数 据库分库分表索引等。 2、DB响应慢:检查慢查询日志,show processlist查看当前DB状态,看哪些请求停留较多;代码中记录SQL执行时间;分析SQL性能,考虑是否优化索引,或者分库分表,增加缓存;检查磁盘IO;查看binlog的写入速率。 3、前端问题:减少HTTP请求;页面设计不佳。 阐述iptables的工作原理,四表五链: iptables是工作在TCP/IP的2、3、4层,当主机收到一个数据包后,数据包先在内核空间处理,若发现目标地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目标不是自身,则会将包丢弃或进行转发。 4表:raw表:关闭连接追踪;mangle表:报文修改;nat表:地址转换;filter表:过滤;5链:input、output、forward、prerouting、postrouting。 流入本机:PREROUTING –> INPUT–>用户空间进程 流出本机:用户空间进程 –>OUTPUT–> POSTROUTING 转发:PREROUTING –> FORWARD –> POSTROUTING 内网至外网用postrouting sNAT ** 外网至内网用prerouting DnAT 1、链管理: -N: new 自定义一条新的规则链 -X: delete 删除自定义的空的规则链 -P:policy 设置默认策略:ACCEPT:接受 DROP:丢弃 -E:重命名自定义链 2、查看:-L: list, -n:以数字格式显示地址和端口号 -v:详细信息 3、规则管理:-A : append 追加 -I:insert 插入, -D:delete 删除 -F:flush 清空指定规则链 -R:replace 替换指定链上的规则编号 -Z: zero :置零 mysql部分:四种隔离级别: A、READ UNCOMMITTED(未提交读),事务中的修改,即使没有提交,对其他事务也都是可见的,事务可以读取未提交的数据,也被称为脏读(Dirty Read),这个级别会导致很多问题 B、READ COMMITTED(提交读),大多数数据库系统的默认隔离级别,一个事务开始时,只能“看见”已经提交的事务所做的修改,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的,也叫不可重复读(nonrepeatable read),有可能出现幻读(Phantom Read),指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row) C、REPEATABLE READ(可重复读),通过InnoDB和XtraDB存储引擎,是MySQL的默认事务隔离级别 D、SERIALIZABLE(可串行化)最高级别,通过强制事务串行执行,避免了幻读问题,会在读取的每一行数据上都加锁,可能导致大量的超时和锁争用的问题。 MySQL事务ACID: 原子性(atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作 ** 一致性(consistency):数据库总是从一个一致性的状态转换到另外一个一致性的状态 隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的 持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中 MySQL索引的优点: 三个优点:1、索引大大减少了服务器需要扫描的数据量 ;2、索引可以帮助服务器避免排序和临时表;3、索引可以将随机I/O变为顺序I/O 什么情况下应不建或少建索引: 1、表记录太少;2、经常插入、删除、修改的表;3、数据重复且分布平均的表字段,假如一个表有10万行记录,有一个字段A只有T和F两种值,且每个值的分布概率大约为50%,那么对这种表A字段建索引一般不会提高数据库的查询速度。4、经常和主字段一块查询但主字段索引值比较多的表字段 行级锁定的优缺点: 优点:1、当在许多线程中访问不同的行时只存在少量锁定冲突;2、回滚时只有少量的更改 3、可以长时间锁定单一的行 缺点:1、比页级或表级锁定占用更多的内存;2、当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁;3、如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多;4、用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定 key和index的区别: 1、key是数据库的物理结构,它包含两层意义和作用,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key,unique key,foregin key等 2、index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等 Mysql主从配置:1、master开启二进制日志;2、master和slave配置不同的server_id;3、slave配置中继日志;4、master做账户授权;5、slave开启同步。 MySQL主从同步过程: 1:Slave端的IO线程连接上Master,并向Master请求指定日志文件的指定位置(新部署的Master和Slave从最开始的日志)之后的日志。2:Master接收到来自Slave的IO线程请求,负责IO复制的IO线程根据Slave的请求信息读取相应的日志内容,然后将本地读取的bin-log的文件名、位置及指定位置之后的内容一起返回给Slave的IO线程处理。 3:Slave的IO线程将接收到的信息依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到Master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从哪个bin-log的哪个位置开始往后的日志内容请发给我”。 4:Slave的sql线程检查到relay-log中新增了内容后,会马上将relay-log中的内容解析为在Master端真实执行时候的可执行命令,并顺序执行,从而保证对Slave的MySQL进行响应的增加或删除等操作,最终实现和Master数据保持一致。 MySQL主从复制原理以及流程: 一、l 主节点 binary log dump 线程 当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。 二、l 从节点I/O线程 当从节点上执行start slave
命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中。 三、l 从节点SQL线程 SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。 MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。 下图就描述了一个多个数据库间主从复制与读写分离的模型 在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化,业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行。如果配置了多个从服务器或者多个主服务器又涉及到相应的负载均衡问题,关于负载均衡具体的技术细节还没有研究过,今天就先简单的实现一主一从的主从复制功能。 MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。 Mysql中的myisam与innodb的区别: **1、**InooDB支持事务,而MyISAM不支持事务;**2、**InnoDB支持行级锁,而MyISAM支持表级锁;**3、**InnoDB支持MVCC,而MyISAM不支持;**4、**InnoDB支持外键,而MyISAM不支持;**5、**InnoDB不支持全文索引,而MyISAM支持 B树和B+树的区别 1、B树,每个节点都存储key和data,所有的节点组成这可树,并且叶子节点指针为null,叶子节点不包含任何关键字信息 2、B+树,所有的叶子节点中包含全部关键字的信息,及指向含有这些关键字记录的指针,且叶子节点本身依关键字的大小自小到大的顺序链接,所有的非终端节点可以看成是索引部分,节点中仅含有其子树根节点中最大(或最小)关键字 写一个脚本将数据库备份并打包至远程服务器192.168.1.1 /backup目录下: mount 192.168.1.1:/backup /mnt cd /mnt /usr/local/mysql/bin/mysqldump -hlocalhost -uroot test >test.sql tar czf test.sql.tar.gz test.sql rm -f test.sql HTTP和Nginx的状态码解析: 1XX 它表示请求已经被接受,正在继续处理,这种响应是临时响应,不会返回响应体。 **2XX ** 成功处理并返回,它表示在服务器内已经被接收,被知晓,并处理完成。 200: 成功,请求数据通过响应报文的entity-body部分发送;OK **3XX ** 重定向功能,告知客户端需要继续执行操作才可以完成请求。 301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明源现在所处的新位置;302: 响应报文Location指明资源临时新位置;304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此状态码通知客户端; **4XX **出现问题,和客户端有关系,比如401表示权限问题,404表示访问了一个不存在的URL。 401: 需要输入账号和密码认证方能访问资源;**403禁止访问:**1、将nginx.config的user改为和启动用户一致;2、配置文件中index index.html index.htm这行指定的文件。3、修改web目录的读写权限,或者是把nginx的启动用户改成目录的所属用户,4、关闭/etc/selinux/config;404: 服务器无法找到客户端请求的资源;原因:有可能location路径写错 了,要在nginx.conf/index.html 文件中添加缺失文件。 **5XX ** 出现问题,和服务端有关,比如500表示内部错误,原因是:ASP语法出错、ACCESS数据库连接语句出错、文件引用与包含路径出错(如未启用父路径)、使用了服务器不支持的组件,如FSO等。502 Bad Gateway错误是FastCGI有问题, 1.FastCGI进程是否已经启动 ;2.FastCGI worker进程数是否不够; 3、增加缓冲区容量大小;503: 服务不可用,临时服务器维护或过载,服务器无法处理请求;排查方法:1、管理员可能关闭应用程序池以执行维护。2、当请求到达时应用程序池队列已满。3、应用程序池的性能选项卡的请求队列限制所填的数值太小,默认为1000。 504 网关超时;1. 优化业务代码:一个接口调用超过一分钟,一定有可以优化的地方,看看数据库或者接口的调用是否合理,是否可以合并请求。2. 修改Nginx的服务器配置:如果实在是优化不了了,可以把Nginx的超时时间上调。 HTTP1.1与1.0的区别、HTTP与HTTPS的区别? 1、引入持久连接,即 在同一个TCP的连接中可传送多个HTTP请求 & 响应2、多个请求 & 响应可同时进行、可重叠;3、引入更加多的请求头 & 响应头 在linux系统中,一般都会有swap内存,你觉得使用swap内存有什么好处,在什么情况下swap内存才会被使用?你觉得在生产环境中要不要用swap内存? 答:好处:在内存不够用的时候,将部分内存上的数据交换到swap空间上,以便让系统不会因为内存不够用而导致紧急情况出现。 什么情况下会用swap:当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到swap空间中,等到那些程序要运行时,再从swap中恢复保存的数据到内存中。这样,系统总是在物理内存不够时,才进行swap交换。 简述进程的启动、终止的方式以及如何进行进程的查看: 答:在Linux中启动一个进程有手工启动和调度启动两种方式: (1)手工启动:用户在输入端发出命令,直接启动一个进程的启动方式。可以分为:①前台启动:直接在SHELL中输入命令进行启动。②后台启动:启动一个目前并不紧急的进程,如打印进程。
(2)调度启动:系统管理员根据系统资源和进程占用资源的情况,事先进行调度安排,指定任务运行的时间和场合,到时候系统会自动完成该任务。 经常使用的进程调度命令为:at、batch、crontab。 什么是静态路由,其特点是什么?什么是动态路由,其特点是什么? 答:静态路由是由系统管理员设计与构建的路由表规定的路由。适用于网关数量有限的场合,且网络拓朴结构不经常变化的网络。其缺点是不能动态地适用网络状况的变化,当网络状况变化后必须由网络管理员修改路由表。 动态路由是由路由选择协议而动态构建的,路由协议之间通过交换各自所拥有的路由信息实时更新路由表的内容。动态路由可以自动学习网络的拓朴结构,并更新路由表。其缺点是路由广播更新信息将占据大量的网络带宽。 简述网络文件系统NFS,并说明其作用: 答:网络文件系统是应用层的一种应用服务,它主要应用于Linux和Linux系统、Linux和Unix系统之间的文件或目录的共享。对于用户而言可以通过 NFS方便的访问远地的文件系统,使之成为本地文件系统的一部分。采用NFS之后省去了登录的过程,方便了用户访问系统资源。 有状态和无状态的服务区别: 答:无状态的HTTP协议:http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。 有状态就是多次访问之间有关联关系,需要记录多次之间的访问关系。 Redis怎么保证数据高可用和业务的并发能力? Redis:是开源的、基于内存的非关系型键值数据库;易扩展、高性能、具备数据持久化等功能;在高并发、低延迟的环境中应用广泛。 Redis 高可用:如果是做主从架构部署,那么加上哨兵就可以了,就可以实现任何一个实例宕机,可以进行主备切换:master node 在故障时,自动检测,并且将某个 slave node 自动切换成 master node 的过程。Redis 实现高并发主要依靠主从架构,一主多从,如果想要在实现高并发的同时,容纳大量的数据,那么就需要 redis 集群,使用 redis 集群之后,可以提供每秒几十万的读写并发。 Redis哨兵的功能及redis主备复制流程? 哨兵的功能:集群监控:负责监控 redis master 和 slave 进程是否正常工作。消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。 Redis集群的原理,redis分片是怎么实现的,公司redis用在了哪些环境? 答:redis3.0版本之前是不支持集群的,官方推荐最大的节点数量为1000,至少需要3(Master)+3(Slave)才能建立集群,是无中心的分布式存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用、可扩展等问题。集群可以将数据自动切分(split)到多个节点,当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。 redis分片:分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集。当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储。分片部署方式一般分为以下三种: (1)在客户端做分片;这种方式在客户端确定要连接的redis实例,然后直接访问相应的redis实例; (2)在代理中做分片;这种方式中,客户端并不直接访问redis实例,它也不知道自己要访问的具体是哪个redis实例,而是由代理转发请求和结果;其工作过程为:客户端先将请求发送给代理,代理通过分片算法确定要访问的是哪个redis实例,然后将请求发送给相应的redis实例,redis实例将结果返回给代理,代理最后将结果返回给客户端。 (3)在redis服务器端做分片;这种方式被称为“查询路由”,在这种方式中客户端随机选择一个redis实例发送请求,如果所请求的内容不再当前redis实例中它会负责将请求转交给正确的redis实例,也有的实现中,redis实例不会转发请求,而是将正确redis的信息发给客户端,由客户端再去向正确的redis实例发送请求。 redis用在:java、php环境用到redis,主要缓存有登录用户信息数据、设备详情数据、会员签到数据等。 Redis的特性及应用场景? 支持数据的持久化:可以将内存中的数据保持在磁盘中,重启 redis 服务或者服务器之后可以从备份文件中恢复数据到内存继续使用。 支持的数据类型:支持 string(字符串)、hash(哈希数据)、list(列表)、set(集合)、zet(有序集合) 支持数据的备份:master-slave 模式的数据备份,快照+AOF。 支持集群横向扩展:基于 redis cluster 的横向扩展,可以实现分布式集群,大幅提升性能和数据安全性。 应用场景:1、Session 共享:常见于 web 集群中的 Tomcat 或者 PHP 中多 web 服务器 session 共享;2、消息队列:ELK 的日志缓存、部分业务的订阅发布系统;3、计数器:访问排行榜、商品浏览数等和次数相关的数值统计场景;4、缓存:数据查询、电商网站商品信息、新闻内容;5、微博/微信社交场合:共同好友、点赞评论等 Redis持久化是如何实现(一种是RDC、一种是AOF、),说一下二者区别: RDB:就是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上;redis在进行数据持久化的过程中,会先将数据写入到一个临时文件中,待持久化过程都结束了,才会用这个临时文件替换上次持久化好的文件。正是这种特性,让我们可以随时来进行备份,因为快照文件总是完整可用的。redis会单独创建(fork)一个子进程来进行持久化,而主进程是不会进行任何IO操作的,这样就确保了redis极高的性能。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。缺点:RDB需要定时持久化,风险是可能会丢两次持久之间的数据,量可能很大。 AOF:将执行过的写指令记录下来,在数据恢复时按照从前到后的顺序再将指令都执行一遍。通过配置redis.conf中的appendonly yes就可以打开AOF功能。如果有写操作(如SET等),redis就会被追加到AOF文件的末尾。默认的AOF持久化策略是每秒钟fsync一次(fsync是指把缓存中的写指令记录到磁盘中),即使redis故障,也只会丢失最近1秒钟的数据。如果在追加日志时,恰好遇到磁盘空间满、inode满或断电等情况导致日志写入不完整,也没有关系,redis提供了redis-check-aof工具,可以用来进行日志修复。缺点:AOF每秒fsync一次指令硬盘,如果硬盘IO慢,会阻塞父进程;风险是会丢失1秒多的数据;在Rewrite过程中,主进程把指令存到mem-buffer中,最后写盘时会阻塞主进程。 使用Redis做缓存时,出现过什么问题? 1、参数;在RDB快照失败时,必须要允许写入数据,2、redis集群中的服务器更换问题;备份数据,拷贝RDB/AOF文件,3、监控的颗粒度要做的足够精细;info、check信息。 MySQL和Redis的区别: mysql是关系型数据库,是持久化存储的,查询检索的话,会涉及到磁盘IO操作,为了提高性能,可以使用缓存技术,而memcached就是内存数据库,数据存储在内存中(当然也可以进行持久化存储),可以用作缓存数据库。用户首先去memcached查询数据,如果未查询到(即缓存未命中),才去MySQL中查询数据,查询到的数据会更新到缓存数据库中,提供给下次可能进行的查询。提高了数据查询方面的性能。 Redis是内存数据库,数据保存在内存中,访问速度快。MySQL是关系型数据库,功能强大,存储在磁盘中,数据访问速度慢。像memcached,MongoDB,Redis等,都属于No sql系列。 你会使用哪些虚拟化技术? 答:vmware vsphere及kvm,我用得比较多的是vmware vsphere虚拟化,基本上生产环境都用的vmware vsphere,kvm我是用在测试环境中使用。vmware 是属于原生架构虚拟化技术,也就是可直接在硬件上运行。kvm属于寄居架构的虚拟化技术,它是依托在系统之上运行。vmware vcenter管理上比较方便,图形管理界面功能很强大,稳定性强,一般比较适合企业使用。KVM管理界面稍差点,需要管理人员花费点时间学习它的维护管理技术。 nginx中rewrite有哪几个flag标志位(last、break、redirect、permanent),说一下都什么意思?常用的Nginx模块,用来做什么的?在proxy模块中你配置过哪些参数? 答:last : 相当于Apache的[L]标记,表示完成当前的rewrite规则 break : 停止执行当前虚拟主机的后续rewrite指令集 redirect : 返回302临时重定向,地址栏会显示跳转后的地址 permanent : 返回301永久重定向,地址栏会显示跳转后的地址、 301和302不能简单的只返回状态码,还必须有重定向的URL,这就是return指令无法返回301,302的原因了。这里 last 和 break 区别有点难以理解: last一般写在server和if中,而break一般使用在location中 last不终止重写后的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后匹配 break和last都能组织继续执行后面的rewrite指令 1、rewrite模块,实现重写功能 2、access模块:来源控制 3、ssl模块:安全加密 4、ngx_http_gzip_module:网络传输压缩模块 5、ngx_http_proxy_module 模块实现代理 6、ngx_http_upstream_module模块实现定义后端服务器列表 7、ngx_cache_purge实现缓存清除功能 proxy模块中配置过:proxy_set_header、proxy_connect_timeout、proxy_send_timeout、proxy_buffer* 如何优化Nginx? **1.**nginx配置的优化:从进程数、链接设置、缓存设置方面进行优化;**2、**从集群架构优化;**3. ** 让worker进程使用普通用户运行,使用非root运行nginx master;**4. *配置nginx worker进程个数,worker进程为用户提供服务一般设置为cpu核数×2,修改nginx.conf配置文件第一行 : worker_processes 4; 什么是运维: 运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一身的技术;运维又包括很多种,有DBA运维、网站运维、虚拟化运维、监控运维、游戏运维等等。 现在给你三百台服务器,你怎么对他们进行管理? 管理3百台服务器的方式: 1)设定跳板机,使用统一账号登录,便于安全与登录的考量。 2)使用salt、ansiable、puppet进行系统的统一调度与配置的统一管理。 3)建立简单的服务器的系统、配置、应用的cmdb信息管理。便于查阅每台服务器上的各种信息记录。 简述raid0 raid1 raid5 三种工作模式的工作原理及特点: RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据,还有一个大功能,多块盘放在一起可以有冗余(备份) RAID整合方式有很多,常用的:0 1 5 10 RAID 0,可以是一块盘和N个盘组合 优点:读写快,是RAID中最好的 缺点:没有冗余,一块坏了数据就全没有了 RAID 1,只能2块盘,盘的大小可以不一样,以小的为准;10G+10G只有10G,另一个做备份。它有100%的冗余,缺点:浪费资源,成本高 RAID 5,3块盘,容量计算10(n-1),允许损失一块盘特点,读写性能一般,读还好一点,写不好 冗余从好到坏:RAID1 RAID10 RAID 5 RAID0 性能从好到坏:RAID0 RAID10 RAID5 RAID1 成本从低到高:RAID0 RAID5 RAID1 RAID10 单台服务器:很重要盘不多,系统盘,RAID1 数据库服务器:主库:RAID10 从库 RAID5RAID0(为了维护成本,RAID10) WEB服务器,如果没有太多的数据的话,RAID5,RAID0(单盘) 有多台,监控、应用服务器,RAID0 RAID5 LVS、Nginx、HAproxy有什么区别?工作中你怎么选择? 答:LVS: 是基于四层的转发;HAproxy:是基于四层和七层的转发,是专业的代理服务器;Nginx:是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发 区别: LVS由于是基于四层的转发所以只能做端口的转发;而基于URL的、基于目录的这种转发LVS就不行 工作选择:HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做;在很大并发量的时候我们就要选择LVS,像中小型公司的话并发量没那么大;选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器;配置简单,所以中小型企业推荐使用HAproxy。 什么是中间件?什么是jdk? 中间件:叫作中间件服务器或应用服务器;是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源;中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯;是连接两个独立应用程序或独立系统的软件。相连接的系统即使它们具有不同的接口;但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递;通过中间件,应用程序可以工作于多平台或OS环境。常见中间件有:kafka、rabbitMQ; **jdk:**jdk是Java的开发工具包;它是一种用于构建在Java平台上发布的应用程序、applet和组件的开发环境。 Tomcat8005、8009、8080三个端口的含义?如何查看8080端口 8005:关闭时使用;8009:为AJP端口;即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口;8080:默认端口,一般应用使用。netstat -anlp | grep 8080 or lsof -i:8080 Tomcat中使用的连接器是什么? 在Tomcat中,使用了两种类型的连接器: **HTTP连接器:**它有许多可以更改的属性,以确定它的工作方式和访问功能,如重定向和代理转发。 **AJP连接器:**它以与HTTP连接器相同的方式工作,但是他们使用的是HTTP的AJP协议。AJP连接器通常通过插件技术mod_jk在Tomcat中实现。 什么叫CDN?CDN连接失败的原因有哪些? 答:即内容分发网络;基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘;使用户可就近取得所需的内容,提高用户访问网站的速度,解决不同运营商之间的互联,因为可以让联通的网络访问联通让电信的网络访问电信,起到加速用户访问的目的。 **1、**CDN服务器网络间接性的故障。**2、**CDN节点出现故障,主要原因是CDN服务商所提供的节点分布有限或不均衡。**3、**本地网络处于不正常的状态。**4、**数据传输过程中,网络出现网络拥堵或发生故障。5、CDN节点被大量的DDoS或CC。 什么叫网站灰度发布? 答:灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式;挑出部分主机让其上线,待这些主机没有重大问题的时候,再发布至所有服务器。 简述DNS进行域名解析的过程? 答:用户要访问 www.baidu.com, 会先找本机的host文件,再找本地设置的DNS服务器,如果也没有的话,就去网络中找根服务器,根服务器反馈结果,说只能提供一级域名服务器.cn,就去找一级域名服务器,一级域名服务器说只能提供二级域名服务器.com.cn,就去找二级域名服务器,二级域服务器只能提供三级域名服务器.baidu.com.cn,就去找三级域名服务器,三级域名服务器正好有这个网站www.baidu.com, 然后发给请求的服务器,保存一份之后,再发给客户端。 RabbitMQ是什么东西? 答:RabbitMQ也就是消息队列中间件,消息中间件是在消息的传息过程中保存消息的容器;消息中间件再将消息从它的源中到它的目标中标时充当中间人的作用;队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用;消息队列不会保留消息,直到可以成功地传递为止,当然,消息队列保存消息也是有期限地。 优势:(1).RabbitMQ易于使用和部署,适宜于很多场景如路由、负载均衡或消息持久化等,用消息队列只需几行代码即可搞定。(2).对外提供客户端API,支持多种编程语言。(3).基于erlang语言开发具有高可用高并发的优点,适合集群服务器。(4). 健壮、稳定、易用、开源、跨平台、支持多种语言、文档齐全。(5). 有消息确认机制和持久化机制,可靠性高。 劣势:(1).这使得它的可扩展性差,速度较慢,因为中央节点增加了延迟,消息封装后也比较大。 **Kafka:**具有以下特性:快速持久化,可以在O(1)的系统开销下进行消息持久化;高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;完全的分布式系统,Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡;支持Hadoop数据并行加载,Kafka通过Hadoop的并行加载机制来统一在线和离线的消息处理。 优势:(1).通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。(2).高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息,适合产生大量数据的互联网服务的数据收集业务。(3).支持通过kafka服务器和消费机集群来分区消息。(4).支持Hadoop并行数据加载。 zookeeper=文件系统+通知机制;是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和 命名服务等。Zookeeper是hadoop的一个子项目,其发展历程无需赘述。在分布式应用中,由于工程师不能很好地使用锁机制,以及基于消息的协调 机制不适合在某些应用中使用,因此需要有一种可靠的、可扩展的、分布式的、可配置的协调机制来统一系统的状态。 Leader主要有三个功能:1 .恢复数据; 2 .维持与Learner的心跳,接收Learner请求并判断Learner的请求消息类型; 3 .Learner的消息类型主要有PING消息、REQUEST消息、ACK消息、REVALIDATE消息,根据不同的消息类型,进行不同的处理。 Follower主要有四个功能:1. 向Leader发送请求(PING消息、REQUEST消息、ACK消息、REVALIDATE消息);2 .接收Leader消息并进行处理;3 .接收Client的请求,如果为写请求,发送给Leader进行投票;4 .返回Client结果。 Keepalived的工作原理?如何做健康检查 答:在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息,BACKUP不会抢占MASTER,除非它的优先级更高。当MASTER不可用时(BACKUP收不到通告信息),多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性;由于安全性考虑,VRRP包使用了加密协议进行加密。BACKUP不会发送通告信息,只会接收通告信息。 keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的; Keepalived健康检查方式配置 HTTP_GET|SSL_GET HTTP_GET | SSL_GET { url { path /# HTTP/SSL 检查的url可以是多个 digest <STRING> # HTTP/SSL 检查后的摘要信息用工具genhash生成 status_code 200# HTTP/SSL 检查返回的状态码 } connect_port 80 # 连接端口 bindto<IPADD> connect_timeout 3 # 连接超时时间 nb_get_retry 3 # 重连次数 delay_before_retry 2 #连接间隔时间 } 讲述一下LVS三种模式的工作过程? LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式) 一、NAT模式(VS-NAT): 原理:当包到达 LVS 时,LVS 做目标地址转换(DNAT),将目标 IP 改为 RS 的 IP。RS 接收到包以后,仿佛是客户端直接发给它的一样。RS 处理完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。这时 RS 的包通过网关(LVS)中转,LVS 会做源地址转换(SNAT),将包的源地址改为 VIP,这样,这个包对客户端看起来就仿佛是 LVS 直接返回给它的。 优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。 缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈;因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时;大量的数据包都交汇在负载均衡器那,速度就会变慢! 二、IP隧道模式(VS-TUN) 原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大;那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS;RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持 IP TUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项。 优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户;所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量;这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。 缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持 ”IP Tunneling” (IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。 三、直接路由模式(VS-DR) 原理:一个请求过来时,LVS 只需要将网络帧的 MAC 地址修改为某一台 RS 的 MAC,该包就会被转发到相应的 RS 处理,注意此时的源 IP 和目标 IP 都没变,LVS 只是做了一下移花接木。RS 收到 LVS 转发来的包时,链路层发现 MAC 是自己的,到上面的网络层,发现 IP 也是自己的,于是这个包被合法地接受,RS 感知不到前面有 LVS 的存在。而当 RS 返回响应时,只要直接向源 IP(即用户的 IP)返回即可,不再经过 LVS。 优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端;与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。 缺点:要求负载均衡器的网卡必须与物理网卡在一个物理段上。 mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟? mysql的innodb如何定位锁问题: 在使用 show engine innodb status检查引擎状态时,发现了死锁问题;在5.5中,information_schema 库中增加了三个关于锁的表(MEMORY引擎) innodb_trx ## 当前运行的所有事务 innodb_locks ## 当前出现的锁 innodb_lock_waits ## 锁等待的对应关系 mysql如何减少主从复制延迟: 如果延迟比较大,就先确认以下几个因素: 1、从库硬件比主库差,导致复制延迟;2、主从复制单线程,如果主库写并发太大,来不及传送到从库就会导致延迟。更高版本的mysql可以支持多线程复制;3、慢SQL语句过多;4、网络延迟;5、master负载:主库读写压力大,导致复制延迟,架构的前端要加buffer及缓存层;6、slave负载:一般的做法是,使用多台slave来分摊读请求,再从这些slave中取一台专用的服务器。 MySQL数据库主从同步延迟解决方案 最简单的减少slave同步延时的方案就是在架构上做优化,尽量让主库的DDL快速执行;还有就是主库是写,对数据安全性较高,比如sync_binlog=1,innodb_flush_log_at_trx_commit= 1 之类的设置,而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog。innodb_flushlog也可以设置为0来提高sql的执行效率。另外就是使用比主库更好的硬件设备作为slave。 如何重置mysql root密码? 答:一、在已知MYSQL数据库的ROOT用户密码的情况下,修改密码的方法: 1、在SHELL环境下,使用mysqladmin命令设置: mysqladmin –u root –p password “新密码” 回车后要求输入旧密码 2、在mysql>环境中,使用update命令,直接更新mysql库user表的数据: Update mysql.user set password=password(‘新密码’) where user=’root’; / flush privileges; 注意:mysql语句要以分号”;”结束 3、在mysql>环境中,使用grant命令,修改root用户的授权权限。 grant all on . to root@’localhost’ identified by ‘新密码’; 忘记了mysql数据库的ROOT用户的密码,又如何做呢?方法如下: 1、关闭当前运行的mysqld服务程序:service mysqld stop(要先将mysqld添加为系统服务) 2、使用mysqld_safe脚本以安全模式(不加载授权表)启动mysqld 服务 /usr/local/mysql/bin/mysqld_safe –skip-grant-table & 3、使用空密码的root用户登录数据库,重新设置ROOT用户的密码 #mysql -u root / Mysql> Update mysql.user set password=password(‘新密码’) where user=’root’; Mysql> flush privileges; lvs/nginx/haproxy优缺点 Nginx的优点是: 1、跨平台:Nginx 可以在大多数 Unix like OS编译运行; 2、Master/Worker 结构:一个 master 进程,生成一个或多个 worker 进程; 3、配置异常简单:非常容易上手。 4、非阻塞、高并发连接:官方测试能够支撑5万并发连接。 5、内置的健康检查功能:如果 Nginx 代理的后端的某台 Web 服务器宕机了,不会影响前端访问; 6、稳定性高:用于反向代理,宕机的概率微乎其微。 Nginx的缺点/瓶颈是: 1、Nginx仅能支持http、https和Email协议,这样就在适用范围上面小些,这个是它的缺点。 2、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测;不支持Session的直接保持,但能通过ip_hash来解决; LVS:使用Linux内核集群实现一个高性能、高可用的负载均衡服务器;它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability) LVS的优点是: 1、抗负载能力强、是工作在网络4层之上仅作分发之用,没有流量的产生;这个特点也决定了它在负载均衡软件里的性能最强的,对内存和cpu资源消耗比较低; 2、配置性比较低,这是一个缺点也是一个优点,因为没有可太多配置的东西;所以并不需要太多接触,大大减少了人为出错的几率 3、工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案:如LVS+Keepalived,不过我们在项目实施中用得最多的还是LVS/DR+Keepalived、 4、无流量,LVS只分发请求,而流量并不从它本身出去,这点保证了均衡器IO的性能不会收到大流量的影响。 5、应用范围较广,因为LVS工作在4层,所以它几乎可对所有应用做负载均衡,包括http、数据库、在线聊天室等 LVS的缺点是: 1、软件本身不支持正则表达式处理,不能做动静分离;而现在许多网站在这方面都有较强的需求,这个是Nginx/HAProxy+Keepalived的优势所在; 2、如果是网站应用比较庞大的话,LVS/DR+Keepalived实施起来就比较复杂了;后面有Windows Server的机器的话,如果实施及配置还有维护过程就比较复杂了相对而言,Nginx/HAProxy+Keepalived就简单多了。 HAProxy的特点是: 1、HAProxy也是支持虚拟主机的。 2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。 3、HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。 4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡;对后端的MySQL节点进行检测和负载均衡,大家可以用LVS+Keepalived对MySQL主从做负载均衡。 5、HAProxy负载均衡策略非常多,Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)。 Tomcat/Apache/Nginx区别: Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于web服务器。Apache支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。 Tomcat是应用(Java)服务器,它是一个Servlet容器,可以认为是Apache的扩展,但是可以独立于Apache运行。 Nginx是一个高性能的HTTP和反向代理服务器。Nginx优点:负载均衡、反向代理、处理静态文件优势。nginx处理静态请求的速度高于apache; mysql数据备份工具: mysqldump工具: mysqldump是mysql自带的备份工具,目录在bin目录下面:/usr/local/mysql/bin/mysqldump;支持基于innodb的热备份,但是由于是逻辑备份,所以速度不是很快,适合备份数据比较小的场景,Mysqldump完全备份+二进制日志可以实现基于时间点的恢复。 基于LVM快照备份: 在物理备份中,有基于文件系统的物理备份(LVM的快照),也可以直接用tar之类的命令对整个数据库目录进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样,myisam自动备份到表级别;而innodb不开启独立表空间的话只能备份整个数据库。 tar包备份: percona提供的xtrabackup工具:支持innodb的物理热备份,支持完全备份,增量备份,而且速度非常快,支持innodb存储引起的数据在不同数据库之间迁移,支持复制模式下的从机备份恢复备份恢复,为了让xtrabackup支持更多的功能扩展;可以设立独立表空间,打开 innodb_file_per_table功能,启用之后可以支持单独的表备份。 说说TCP/IP的七层模型: 应用层 (Application):网络服务与最终用户的一个接口。 协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP 表示层(Presentation Layer):数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层) 格式有,JPEG、ASCll、DECOIC、加密格式等。 会话层(Session Layer):建立、管理、终止会话。(在五层模型里面已经合并到了应用层);对应主机进程,指本地主机与远程主机正在进行的会话。 **传输层 **(Transport):定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层。 网络层 (Network):进行逻辑地址寻址,实现不同网络之间的路径选择。 协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP 数据链路层 (Link):建立逻辑连接、进行硬件地址寻址、差错校验等功能。(由底层网络定义协议);将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。 物理层(Physical Layer):是计算机网络OSI模型中最低的一层;物理层规定:为传输数据所需要的物理链路创建、维持、拆除而提供具有机械的,电子的,功能的和规范的特性;简单的说,物理层确保原始的数据可在各种物理媒体上传输。局域网与广域网皆属第1、2层;物理层是OSI的第一层,它虽然处于最底层,却是整个开放系统的基础;物理层为设备之间的数据通信提供传输媒体及互连设备,为数据传输提供可靠的环境;如果您想要用尽量少的词来记住这个第一层,那就是“信号和介质”。 正向代理:是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。 正向代理的用途:1、访问原来无法访问的资源,如google;2、可以做缓存,加速访问资源;3、对客户端访问授权、上网进行认证;4、代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息。 反向代理:实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。 反向代理的用途:1、保证内网的安全,可以使用反向代理提供WAF功能,阻止web;2、大型网站,通常将反向代理作为公网访问地址,Web服务器是内网。 所谓四层负载均衡,也就是主要通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。 所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。 三次握手and四次挥手: 第一次握手:建立连接时,客户端发送同步序列号syn=1,随机产生seq数据包,发送seq=x到服务器,并进入syn_sent状态,等待服务器确认。 第二次握手:服务器收到报文请求,由syn=1知道客户端要建立连接请求,向客户端发送ack(ack=x+1),syn=1,同时自己也会发送一个syn(seq=y),即syn+ack包,此时服务器进入syn_sent状态。 第三次握手:客户端收到服务器syn+ack数据包,向服务器发送确认包ack(ack=y+1),同时发送序号:seq=x+1。此包发送完毕客户端与服务器进入建立连接状态。 第一次断开:客户方发给服务器一个FIN为1的请求,FIN为1表示是一个断开连接的请求,即表示数据传输完毕请求断开,并发送seq序列号和Ack确认号。 第二次断开:服务器收到客户端请求并返回ACK标志位为1,Ack为Seq+1等于201,并将对方的Ack作为自己的Seq序列号的确认数据包,biao 接收到请求同意断开。 第三次断开:服务器发送ACK=1,FIN=1,Seq等于客户端第一次请求断开的Ack确认号+1,即Seq等于501的断开请求给客户端。 第四次断开:客户端发送ACK=1,Ack在上一步Seq上+1等于502,并使用在第二次断开中服务器发送的Ack确号201作为本次的序列号发给服务器表示同意断开,服务器收到后验证序列号是第二次的,验证Ack是第三次+1的,确认没有问题后同意断开,然后将端口置为TIME_WAIT状态,等待2 MSL时间后置为关闭状态,被动方收到主动方的报文确认Ack确认号没有问题后将端口置为CLOSED,至此端口关闭。 docker打镜像的过程;docker的优势: **1、**启动一个临时容器;**2、**顺序执行dockerfile命令;**3、**build -t 保存并更名为指定的名称做本地保存;**4、把临时容器删除; Docker 的优势: 快速部署:高效虚拟化:节省开支:简化配置:快速迁移和扩展: 缺点:隔离性:各应用之间的隔离不如虚拟机。 Nginx中配置CPU亲和性,workerprocesses和workerCPU_affinity有什么好处? 降低了系统对CPU和内存的开销,主要是nginx的工作进程内存开销和回收。 Nginx默认几种调度算法:3种 常用的有3种调度算法(轮询、ip hash、权重)。 轮询:upstream按照轮询(默认)方式进行负载,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。ip hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。权重:指定轮询几率,权重(weight)和访问比率成正比,用于后端服务器性能不均的情况。 Apache默认几种工作模式:3种 1、Prefork MPM: 预派生模式,有一个主控制进程,然后生成多个子进程,使用select模型,最大并发1024,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景。优点:稳定;缺点:慢,占用资源,不适用于高并发场景 2、woker MPM:是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。优点:相比prefork 占用的内存较少,可以同时处理更多的请求;缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。比prefork 占用的内存较少,可以同时处理更多的请求; 3、event MPM:Apache中最新的模式,属于事件驱动模型(epoll),每个进程响应多个请求,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。 优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放 ** 缺点:没有线程安全控制。 说一下你们公司的代码是怎么发布的? 发布:jenkins配置好代码路径(SVN或GIT),然后拉代码,打tag。需要编译就编译,编译之后推送到发布服务器(jenkins里面可以调脚本),然后从分发服务器往下分发到业务服务器上。 elk中的logstash是怎么收集日志的,在客户端的logstash配置文件主要有哪些内容? input、output两大块配置;input中指定日志(type、path)等,output指定日志输出的目标(host、port)等。 ansible:src是文件的来源目标;dest是文件的目的方向;幂等性:一个任务执行一次和执行n次效果一样,不因重复执行带来意外情况; ansible命令执行过程: 1. 加载自己的配置文件默认/etc/ansible/ansible.cfg;2. 加载自己对应的模块文件,如command;**3. **通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件;4. 给文件+x执行;**5. **执行并返回结果;**6. **删除临时py文件,退出 **执行状态:**绿色:执行成功并且不需要做改变的操作;×××:执行成功并且对目标主机做变更;红色:执行失败 command与shell的功能:command是默认模块,只能对远程主机进行显示和文件的修改;command模块不支持重定向以及管道;shell模块支持重定向以及管道; ansible web -m copy -a ‘src=/data/config dest=/data2/selinux/’ 将文件复制到web服务器下,如目标文件目录不存在,则会全部创建,无论几级。 copy模块能够传输和创建文件及指定权限:ansible 172.18.27.27 -m copy -a ‘content="woai\nni" dest=/data/woaini.txt(存在会创建,不存在则不会创建,存在会覆盖之前内容) 可以将playbook文件进行加/解密:ansible-vault en/decrypt hello.yml 加/解密 ansible你用过它的哪些模块,ansbile同时分发多台服务器的过程很慢(它是逐台分发的),你想过怎么解决吗? 用过ansible的(copy file yum ping command shell)等模块;ansible默认只会创建5个进程,所以一次任务只能同时控制5台机器执行.如果有大量的机器需要控制,或者希望减少进程数,可以采取异步执行.ansible的模块可以把task放进后台,然后轮询它.这使得在一定进程数下能让大量需要的机器同时运作起来。 现在有一批机器的root用户和密码,怎么实现ansible主机和这批机器之间免秘钥认证呢? 1、ssh-keyscan 主机名 >> /root/.ssh/known_hosts;2、配置hosts文件,带密码参数ansible_ssh_pass;3、配置yml文件;4、运行ansible-playbook -i hosts ssh-addkey.yml 编写剧本:当主机为7,安装nginx、当主机为6,安装httpd; [root@centos7 ~]#cat nginx_httpd_role.yml
- hosts: web:app roles: -{ role: nginx, when: ansible_distribution_major_version == "7", tags: ["web","nginx"] } -{ role: httpd, when: ansible_distribution_major_version == "6", tags: ["web","httpd"] } 编写剧本测试是哪个版本: vim when.yml -hosts: web tasks: -name: when6 file: path=/data/f6.txt state=touch when: ansible_distribution_major_version == "6" -name: when7 file: path=/data/f7.txt state=touch when: ansible_distribution_major_version == "7" ansible-playbook when.yml 编写nginx.yml剧本: [root@centos7 ~]#cat nginx.yml
-
hosts: app tasks:
- name: install yum: name=nginx
- name: config template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf notify: restart
- name: data copy: src=/data/index.html dest=/usr/share/nginx/html/
- name: service service: name=nginx state=started enabled=yes
handlers:
- name: restart service: name=nginx state=restarted 编写mysql.yml的playbook剧本: vim mysql.yml -hosts:app tasks: -name:group group:me=mysql system=yes -name: user user: name=mysql system=yes home=/data/mysql shell=/sbin/nologin group=mysql -name: unarchive unarchive: src=/data/mariadb-10.2.22-linux-x86_64.tar.gz dest=/usr/local -name: mysqldir dir owner group file: path=/usr/local/mariadb-10.2.22-linux-x86_64 state=directory owner=root group=root recurse=yes -name: mysqldir link file: src=/usr/local/mariadb-10.2.22-linux-x86_64 path=/usr/local/mysql state=link -name: data file shell: chdir=/usr/local/mysql/ ./scripts/mysql_install_db –user=mysql –datadir=/data/mysql -name: config copy: src=/data/my.cnf dest=/etc/ backup=yes -name: script copy: src=/data/myqld dest=/etc/init.d/ mode=755 -name: service shell: /etc/init.d/mysqld start zabbix 监控了多少客户端 客户端是怎么进行批量安装的? 根据实际公司台数回答。**1、**使用命令生成密钥。**2、**将公钥发送到所有安装zabbix客户端的主机。**3、**安装 ansible 软件,(修改配置文件,将zabbix 客户机添加进组)。**4、**创建一个安装zabbix客户端的剧本。**5、**执行该剧本。**6、**验证。 zabbix 怎么开启自定义监控:1、写一个脚本用于获取待监控服务的一些状态信息。2、在zabbix客户端的配置文件zabbix_agentd.conf中添加上自定义的“UserParameter”,目的是方便zabbix调用我们上面写的那个脚本去获取待监控服务的信息。3、在zabbix服务端使用zabbix_get测试是否能够通过第二步定义的参数去获取zabbix客户端收集的数据。4、在zabbix服务端的web界面中新建模板,同时第一步的脚本能够获取什么信息就添加上什么监控项,“键值”设置成前面配置的“UserParameter”的值。5、数据显示图表,直接新建图形并选择上一步的监控项来生成动态图表即可。 zabbix 自定义发现是怎么做的? **1、**首先需要在模板当中创建一个自动发现的规则,这个地方只需要一个名称和一个键值。**2、**过滤器中间要添加你需要的用到的值宏。**3、**然后要创建一个监控项原型,也是一个名称和一个键值。**4、**然后需要去写一个这样的键值的收集。 自动发现实际上就是需要首先去获得需要监控的值,然后将这个值作为一个新的参数传递到另外一个收集数据的item里面去。 zabbix 是怎么实施监控的: 一个监控系统运行的大概的流程是这样的:agent需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。 【主动监测】通信过程如下: zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active tiems数据值server或者proxy。 获取ACTIVE ITEMS列表 Agent打开TCP连接(主动检测变成Agent打开) Agent请求items检测列表 Server返回items列表 Agent 处理响应 关闭TCP连接 Agent开始收集数据 主动检测提交数据过程如下: Agent建立TCP连接 Agent提交items列表收集的数据 Server处理数据,并返回响应状态 关闭TCP连接 【被动监测】通信过程如下: Server打开一个TCP连接 Server发送请求agent.ping\n Agent接收到请求并且响应 Server处理接收到的数据 关闭TCP连接 zabbix主被动模式有啥区别:zabbix有啥特点: 被动模式:此模式为zabbix默认的工作模式,由zabbix server向zabbix agent发出指令获取数据,zabbix agent被动地去获取数据并返回给zabbix server,zabbix server会周期性地向agent索取数据。此模式的最大问题就是会增加zabbix server的工作量,在大量的服务器环境下,zabbix server不能及时获取到最新的数据。 主动模式:即由zabbix agent主动采集数据并返回给zabbix server,不需要zabbix server的另行干预,因此使用主动模式能在一定程序上减轻zabbix server的压力。 zabbix可横向扩展、自定义监控项、支持多种监控方式、可监控网络与服务等。
原文链接:https://blog.51cto.com/u_14128387/2402989