Linux

面试题

MySQL数据库问题:

1.mysql和oracle的区别是什么?

mysql是一个中小型数据库,oracle是一个大型数据库,但mysql是开源的,oracle是收费的,而且费用较高。mysql占用内存小,oracle占用内存较高。mysql的语法简单,oracle的SQL语法比较复杂。mysql可以用双引号表示,oracle只能用单引号表示。

mysql中用0、1表示真假,而oracle用true和false判断真假。mysql在unix,linux环境下区分大小写,Oracle不区分

2.mysql数据类型有多少种?

整型(常用int)  浮点型(单浮点(float)双浮点(double))

字符串类型(char(固定长度)varchar(可变长类型))

定点型 decimal     枚举类型 enum   日期类型 date    text类型

3.mysql约束条件有多少种?

主键 primary key    约束唯一  unique     不为空 not null    默认为空 null

设置默认值 default     自动增长 auto_increment    外键 foreign key    正数unsigned

4.mysql5.7和mysql 8.0 版本的区别?

1.mysql8.0和mysql5.7的密码验证方式不同,mysql8.0的密码验证更安全。

2.MySQL 8.0版本在性能方面有很大的提升,MySQL 8.0版本可以在单个SQL语句中查询多个结果集,从而大大提高了查询性能,并且增加很多新的命令。

3.MySQL 8.0引入了对JSON数据类型的原生支持,这使得在MySQL中处理和操作JSON数据变得更加方便和高效。

4.mysql5.7是一个非常稳定的版本,但是在对于处理高并发、数据库复杂查询、在线备份恢复等方面还是mysql8.0更优。

5.MySQL 8.0版本在安全性方面有很多的改进,提高了数据库的安全性和可靠性。

5.mysql日志类型有多少种?都记录什么

error.log 错误日志,存放启动、停止、关闭、失败报错等信息。

general query log  通用查询日志:所有的查询都会记录下来。

binlog  只记录改变数据,除了select都记,记录insert需要修改配置。

relay log 中继日志,读取主服务器的binlog,在slave(从)服务器本地回放。保持与主服务器保持一致。

slow query log  慢查询日志,定义一个查询日志,如果等待时间过长,就会记录。

DDL log:定义语句的日志。

6.mysql binlog日志格式有几种?有什么区别?

Statement:每一条修改数据的sql语句都会记录在binlog中。

binlog文件较小出现最早,兼容较好,但是容易丢失数据

ROW不记录sql语句上下文相关信息,仅保存哪条记录被修改。

可以避免MySQL主从复制不一致的问题日志量比较大。

Mixed: 是以上两种level的混合使用。混合STATEMENT和ROW两种格式, MySQL会根据执行的SQL语句自动选择。区别:row格式文件比较大,statement比较小,row格式保存的是一行一行的数据,statement保存的是sql语句,mixed格式介于二者之间,statement容易丢数据,row格式则不会。row是直接把表插入到备份库中,statement是导出主库语句后,导入到备份库中,存在时间差。

7.Mysql数据备份方式有几种?有什么区别?

数据库备份方式有两种,分别是物理备份和逻辑备份。

物理备份又包含 完全备份、增量备份、差异备份。

完全备份:是对整个数据库进行备份。

增量备份:是基于上一次备份然后进行增量备份。

差异备份:是基于第一次的完全备份进行差异备份。

区别是:

物理备份适用于大型数据库环境,不受存储引擎的限制,主要备份数据库,恢复速度比较快,但是备份文件相对较大。

逻辑备份适用于中小型数据库主要用于数据库建表、建库和sql语句的备份,备份文件相对较小,只备份表中的数据与结构,但是恢复较慢。

8.mysql的biglog日志里面存放的都有什么内容?

存放sql语句,但是select语句不会被记录,还存放着记录的起止位置与时间。

9.Mysql主从复制的原理是什么?

首先需要主服务器打开biglog日志,记录增删改的操作,也就是一些sql语句。

从服务器需要读取主服务器中的biglog日志,从服务器利用IO线程把主服务器的的日志复制到自己的中继日志上,然后在利用SQL语句线程把中继日志中的sql语句按照顺序重新执行一遍后保存在数据库中。

10.Mysql主从失败该如何处理?

检查网络状态,网络延迟会导致biglog文件传输时造成数据不一致。

检查主服务器的日志是否开启,日志位置是否发生改变。

检查从服务器的IO线程和SQL线程状态是否为YES状态。

解决方法:
方法一:stop slave;先停止主从复制
set global sql_slave_skip_counter=1 跳过这一个事务
然后开启主从复制,查看状态是否正常
方法二:
重新做主从:先锁表,让数据保持同步,重新做主从

11.Mysql多源复制怎么做?什么情况下需要做多源复制

需要多台主服务器,多台从服务器,每台主服务器都需要开启biglog日志,记录sql语句,主服务器之间先互相建立主从关系,然后从服务器中分别和主服务器建立主从关系。

当需要将多个独立的数据库中的数据整合到一个数据库中时,需要用到多源复制。

当需要一个数据库中的数据分发给其他服务器时,需要用到多源复制。

12.mysql的读写分离作用:

让主服务器只进行写操作,让从服务器只进行读操作,减轻服务器的压力,提高系统的处理效率。增加冗余,提高服务的可用性。当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务。

13.事务的四大特性:

原子性、一致性、隔离性、持久性

原子性:

是指一个事务不可分割,一个事务要么全部完成,要么都不完成。如果中间一个操作失败,数据就会回滚到初始状态,就像从没执行一样。

一致性:

在事务开始之前和结束以后,数据的完整性没有被破坏。

隔离性:

多个事务可以并发执行,互不影响,不会由于事务的交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读已提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

持久性:

事务处理结束后,对数据的修改是永久的。

14.隔离级别:

读未提交:(脏读)事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。

不可重复读(读已提交):事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。

可重复读:在事务处理结束前,事务A每次查看的数据都是一样的,但有可能数据已经被更改了。如果已经被修改,那么该事务在执行SQL语句时,会使用已修改过的数据。

串行化:能够解决脏读、不可重复读、幻读问题,安全性比较高。

幻读:管理员A在更改数据时,管理员B插入或者删除了一条数据,当管理员A更改结束后,发现还有一条数据没有更改成功或者缺少一条数据,就像发生了幻觉一样,这就叫幻读。

不可重复读侧重于修改,幻读侧重于新增或删除。

15.oracle数据库能不能做主从、能不能做备份?

可以

HTTP相关问题:

1.http协议的三大特性是什么

无连接性:

限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省时间,降低服务器的压力。

无状态性http协议是一种无状态协议。该协议没有记忆能力,不会记录客户端的状态信息,服务器不能凭借之前的请求状态来处理当前的请求,如果后期处理需要前面的信息,则需要重传,另一方面,在服务器不需要之前的信息时它的响应就比较快。

媒体独立任何数据类型都可以通过http协议传输。

2.传输层有几种协议?什么区别?

传输层主要包含TCP和UDP两种协议。

区别:连接性:TCP是面向连接的,通信双方需要通过验证后才能建立连接然后才可以传输数据,UDP是无连接的,通信双方无需建立连接就可以传输数据。

可靠性:TCP提供可靠传输,会通过各种机制确保数据的完整性和可靠性,UDP不提供可靠性保证,数据可能会丢失或乱序。

速度和开销:TCP复杂响应速度较慢且开销比较大,UDP简单响应速度较快且开销比较小。

3.OSI七层模型是哪七层?  每一层有什么作用

物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

物理层:负责传输比特流。

数据链路层:提供MAC(物理)地址,负责解封装源目MAC地址。

网络层:提供IP地址(逻辑地址),用来标识主机在网络中的位置,作用于网络间的通信,提供路由选择。

传输层:负责在通信主机之间提供端到端的数据传输服务,确保可靠或不可靠的数据传输。

会话层:负责建立、管理和终止会话。

表示层:约束数据格式,负责格式转化,加密、解密。

应用层:提供各种服务,为用户和应用程序提供接口。(http协议、https协议、ftp协议、dns协议、dhcp协议、ssh协议)

4.http请求头、响应头里面都包含什么

请求头包含:GET /hello.txt HTTP/1.1   # 请求方式与URL和版本协议。Host:指定请求的主机名和端口号。

User-Agent:指定发送请求的用户代理(通常是浏览器)的信息。

Accept:指示客户端可以接受的内容类型。

Content-Type:指定请求主体的数据类型。

Referer:指示请求的来源页面的URL。

响应头包含:Allow :服务器支持哪些请求方法(如GET、POST等)。 

Content-Encoding 文档的编码(Encode)方法。

Content-Length:表示内容长度。

Content-Type:指定相应主体的数据类型。

Date:当前的时间。

Location:表示用户要去哪里提取文档。

Refresh:表示浏览器应该在多长时间刷新一次。

5.http状态码有哪些?

200:请求成功,服务器成功返回请求的数据。

301:资源(网页等)被永久转移到其它URL。

302:资源(网页等)临时转移到其它URL。

403:服务器理解请求,但是拒绝授权访问。客户端没有访问资源的权限。

404:服务器无法根据客户端的请求找到资源。资源不存在。

500:服务器在执行请求时发生了错误,服务器内部错误。

502:服务器收到无效的响应。

503:因为系统超载或者系统维护,服务器暂时无法处理客户端的请求。

6.请求方法

GET:单纯获取数据(获取一个index.html页面)

POST:上传/创建文件(产生新的数据)

PUT:保存数据(覆盖/更新文件、图片等,不会产生新的数据)

DELETE:删除当前页面/数据

7.http和https的区别:

http协议是明文传输,不加密,https是通过ssl协议进行加密传输。

http的默认端口是80,https的默认端口是443。

8.nginx和Apache的区别:

nginx是一个轻量化的web服务器,占用内存少,并发能力强。

nginx是一个异步事件架构,支持高并发,Apache是一个多进程架构,每个请求都是一个进程,相对来说比较稳定。nginx在处理静态页面时比Apache速度快。nginx配置简单,Apache配置比较复杂。

Nginx相关问题:

1.负载均衡的算法:

1、轮询(默认)

每个请求逐一分配到不同的后端服务器。

2、ip_hash

按照IP的hash值结果分配,同一个IP客户端固定访问同一个后端服务器,可以解决session的问题。

3、url_hash

按照访问的url的hash值结果分配,让同一个url定向到同一个后端服务器。

4、fair

可以根据页面的大小和加载时间的长短进行负载均衡,响应时间短的优先分配。

2.nginx为什么要做会话保持:

Nginx进行会话保持可以确保用户在与网站进行交互时保持与同一后端服务器的连接,从而保持用户状态信息的一致性和可靠性。

3.nginx会话保持的方式有几种?

基于客户端IP地址的会话保持(ip_hash):根据IP的hash值结果分配,将同一个IP地址指向同一个服务器。

基于URL重写的会话保持(url_hash):根据URL的hash值结果分配,将同一个URL定向到同一个服务器。

基于Cookie的会话保持:通过记录客户的Cookie值,并且根据Cookie值将请求发送到相应的服务器。

jvm_route:第一次用户发送请求,会采用轮询的方式发送给服务器,然后服务器会添加一个session信息,客户再次请求时,会根据session值发送到相应的服务器。

4.nginx rewrite地址重写的作用:

实现网站地址跳转,例如当用户访问网站80端口时,可以跳转到443端口。从安全角度上讲,如果在URL中暴露太多的参数,可能会遭到破坏,所以静态化URL地址可以带来更高的安全性。对搜索引擎的访问进行优化,利于搜索引擎抓取页面。

5.rewrite的相关指令:

Nginx Rewrite 相关指令有 if、rewrite、set、returnset 指令:是用于定义一个变量,并且赋值。return指令:用于返回状态码给客户端。

6.redirect(302) 和 permanent(301)区别:

对于客户来说,两种方式并没有什么区别,但对于搜索引擎来说,301的重定向更加友好,如果我们把一个地址采用301跳转方式跳转的话,搜索引擎会把老地址的相关信息带到新地址,同时在搜索引擎索引库中彻底废弃掉原先的老地址。使用302重定向时,搜索引擎(特别是google)有时会查看网站跳转前后哪个网址更直观,然后决定显示哪个,如果它觉得跳转前的URL更好的话,可能地址栏就不会更改。 

7.nginx中last和break的区别:

last 标记是指在本条规则执行完后,会对其所在的 server { … } 标签重新发起请求。

break 是指在本条规则匹配完成后,停止匹配,不再做后续的匹配。

8.Nginx 的 HTTP 配置主要包括三个区块,结构如下:

http {   #这是协议级别

server {    #这是服务级别

location / {   #这是请求级别

}

}

}

9.location 区段

 location 是在 server 块中配置,根据不同的URl来处理不同的请求。 

 location 是有顺序的,会被第一个匹配的location 处理(优先级相同的情况下)。 

10.location 前缀含义

=    表示精确匹配,优先级也是最高的 

^~   表示url以某个常规字符串开头,理解为匹配url路径即可 

~    表示区分大小写的正则匹配  

~*   表示不区分大小写的正则匹配

!~   表示区分大小写不匹配的正则

!~*  表示不区分大小写不匹配的正则

/    通用匹配,任何请求都会匹配到#优先级

=  > ^~  > ~|~*|!~|!~* > /

11.nginx中root和alias的区别:

root:是默认发布页面目录。

alias:是一个目录别名的定义。

12.nginx虚拟主机的类型:

基于不同IP的虚拟主机

基于不同端口的虚拟主机

基于不同域名的虚拟主机

13.nginx做动静分离的作用:

为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,降低原来单个服务器的压力。通常用nginx做静态页面的处理,用tomcat做动态页面的处理。

14.防盗链的概念:

为了防止其他网站盗取本网站的资源。

15.nginx的rewrite_log存放:

rewrite_log属于notice级别。只会记录在error_log中,那么记得将error_log的级别设置为notice;

16.nginx的平滑升级原理:

(1)在不停掉老进程的情况下,启动新进程。

(2)老进程负责处理仍然没有处理完的请求,但不再接受新请求。

(3)新进程接受新请求。

(4)老进程处理完所有请求,关闭所有连接后,停止。

17.nginx信号简介:

主进程支持的信号:

TERM, INT: 立刻退出

QUIT: 等待工作进程结束后再退出

KILL: 强制终止进程

HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。

USR1: 重新打开日志文件

USR2: 启动新的主进程,实现热升级

WINCH: 逐步关闭工作进程

工作进程支持的信号:

TERM, INT: 立刻退出

QUIT: 等待请求处理结束后再退出

USR1: 重新打开日志文件

18.Nginx 错误页面配置

19.nginx流量限制的作用:

可以用来限制用户在一定时间内HTTP请求的数量。流量限制可以用作安全目的,比如可以减慢暴力密码破解的速率。可以用来抵御 DDOS 攻击。

20.Nginx如何限流:

可以使用漏桶算法和令牌桶算法。

漏桶算法:服务器接受请求和处理请求达到一个平衡,如果接受请求的速度大于处理请求的速度,则会溢出,溢出的请求就会被丢弃。

令牌桶算法:

令牌桶以固定的速率生成令牌,并将这些令牌存放在桶中。

每当有一个请求过来时,它需要从令牌桶中获取一个令牌。如果桶中没有足够的令牌,则请求被拒绝或延迟处理。

21.处理突发和无延迟的排队:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;

burst=2(队列)     nodelay(无延迟的排队)

使用burst时,可以将接收的请求放在队列里等待,当服务器处理完当前的请求,会处理队列中的请求。

nodelay:这个参数可以让队列中的请求无需等待,可以使服务器暂时溢出请求,但是在处理时请求还是会占用队列的位置。比如这个可以同时处理4个请求。

22.nginx的访问控制

基于IP的访问控制,指定location拒绝哪些请求。

基于用户的信任登录。

23.Nginx如何优化?优化这些参数有什么作用?

worker_processes auto:该参数可以指定nginx的子进程数,他可以提高nginx的并发性能。

worker_connections 1024:该参数可以指定nginx的工作进程的最大连接数。增加该值可以提高系统的并发能力。

tcp_nopush on:该指令必须在sendfile打开的状态下才会生效,主要是用来提升网络包的传输效率。

keepalive_timeout 65:长连接的等待时间,可以根据需求进行优化。gzip on:开启gzip压缩可以减小传输文件的大小,加快传输速度,减轻网络带宽的负担

worker_rlimit_nofile 10240:更改一个nginx进程能打开的最大文件数,可以提高 Nginx 的并发连接数

24.Nginx如何做平滑升级:

做之前先进行备份。

1.我们需要先下载并解压一个新的nginx版本。

2.进入到新的nginx所在目录执行configure命令,将原有的模块添加上去,再将需要添加的模块添加到后面。

3.使用make进行编译。

4.可以备份原二进制启动文件,然后将编译后的新的二进制文件复制到源码包安装目录中。

5.利用USR2参数启动新的主进程,实现热升级。

此时会出现一个nginx.pid.oldbin

6.利用winch逐步关闭旧的Nginx进程。

7.利用hup重新加载配置文件,使用的新的配置启动工作进程,并逐步关闭旧进程。

8.最后利用QUIT等待请求结束后再退出。

25.如何配置SSL证书,说下流程:

首先需要有一个公网ip和一个域名,然后进行申购SSL证书。申购成功后,将证书下载并进行解压。在解压之后会看到两个证书文件,将两个证书文件复制到服务器中,在证书复制完成之后,需要对nginx配置文件进行更改,需要配置地址重写,将http协议转为https协议,然后再添加两个配置,一个是ssl证书文件的存放路径,另一个是私钥文件的存放路径,在配置完成之后,重启nginx。进行测试是否成功

26.Https加密算法:

对称加密:服务器和客户端加密解密都是同一个加密密钥。

例如:A向B发送数据,A需要先创建一个对称密钥,然后利用密钥对文件进行加密,再将加密后的文件和对称密钥发给B,B收到后利用密钥进行解密。

非对称加密:公钥加密,私钥解密。或者私钥加密,公钥解密。

例如:A向B发送数据,B需要创建一个非对称密钥,然后将公钥发送给A。A拿公钥对文件进行加密,加密之后发送给B,B用私钥进行解密。

27.SSL协议可以分为几层:

SSL协议分为SSL握手协议和SSL记录协议。

SSL握手协议:通信双方进行身份认证,协商加密算法,交换加密密钥等,相当于连接。

SSL记录协议:提供数据封装、解密加密、压缩等一些基本功能的支持。相当于通信。

28.nginx的功能有什么?

可以做地址重写,图片压缩,动静分离,可以做流量限制,访问控制,防盗链,会话保持。

29.gzip有多少级别?有什么区别?

有9个级别,分别是1-9,级别越高,压缩比越大,压缩后的文件越小,传输速度更快,但是会消耗nginx服务器的cpu和内存。

30.gzip怎么用的?

gzip on; 开启nginx服务的gzip压缩功能。

gzip_min_length 1k;  设置允许压缩的页面最小字节。

gzip_buffers 4 16k;      设置gzip申请内存的大小,其作用是按块大小的倍数申请内存空间这里设置以16k为单位,按照原始数据大小以16k为单位的4倍申请内存

gzip_http_version 1.1; 识别http协议的版本

gzip_comp_level 2; 设置gzip压缩等级

gzip_types text/plain application/x-javascript text/css application/xml;设置需要压缩的类型,非设置值不进行压缩,即匹配压缩类型。

TOMCAT相关问题

1.Tomcat 如何优化?

增加 Tomcat 的内存分配

调整 Tomcat 的线程池设置。调整线程池的大小和性能

优化 Tomcat 的缓存设置,减少网络连接的开销

启用压缩。

启用静态资源缓存。

2.JVM的三个区:

新生代,永久代,老年代

3.JVM如何优化?

调整堆栈内存的大小。

在catalina.sh中,可以通过调整 -Xms 和 -Xmx 参数设置初始堆内存和最大堆内存的大小,以平衡内存使用和垃圾回收的效率。

选择合适的垃圾回收器。

设置合理的线程数。

4.java的中间件都有哪些?除了Tomcat之外还有哪些?

消息中间件: Active MQ,Rabbit MQ,Rocket MQ,Kafka。

分布式缓存中间件:Memcached、redis、Ehcache。

数据储存中间件:hive。

mycat

2.jdk里的内容

jre全称(Java Runtime Environment)运行环境  

jvm (java虚拟机)  

java库  存放一些模块

LVS相关问题

1.四七层负载均衡的区别?

四层负载均衡是基于IP+端口号的负载均衡,类似于路由器,架构比较简单,无需解析具体内容,性能相对来说会高一些,安全性也会低一些,但是没有其他功能。七层负载均衡是基于URL或主机IP的负载均衡,类似于代理服务器,架构相对复杂,需要解析用户的URL和请求头信息,性能相对来说会低一些,但是安全性比较高,支持的功能比较多,可以做会话保持,图片压缩,防盗链,访问控制,流量限制,地址重写等在具体业务架构设计时,需要根据具体情况考虑。

2.LVS的四种工作模式的区别?

NAT模式:网络地址转换模式,LVS会将客户端请求头中的目的IP改为RS的IP,发给RS,然后RS处理后发给LVS代理服务器,LVS再将源IP改为自己的VIP然后发给客户。无论是进来的流量还是出去的流量,都必须经过负载均衡器。

DR模式:直接路由模式,

网关会把对这个服务的请求全部定向给DB(负载均衡器),而DB收到后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,因为负载均衡器和RS都使用同一个IP,可以直接将数据返给客户。进来的流量需要经过负载均衡器,出去的流量不需要,直接返回客户端。

TUN模式(隧道模式):将客户端请求封装在隧道中,并将其转发给后端服务器,而响应流量通过LVS节点返回给客户端。

FULL-NAT模式(双向转换):当请求从客户端到达负载均衡器时,负载均衡器会将请求的源IP地址和端口修改为自己的IP地址和端口,并记录下原始的客户端IP地址和端口。然后转发给后端服务器处理。后端服务器处理请求并将响应返回给负载均衡器,再由负载均衡器将源IP改为自己VIP,目标IP改为CIP转发给客户端。

3.LVS和Nginx的区别?

功能LVS支持多种负载均衡算法和工作模式,可以实现高可用性和可扩展性。而NGINX是一款高性能的Web服务器和反向代理服务器,它可以做会话保持,图片压缩,防盗链,访问控制,流量限制,地址重写等

层次LVS主要工作在传输层,是基于IP和端口的四层负载均衡,无需解析具体内容,性能较好,NGINX则工作在应用层,是基于URL和请求头信息的七层负载均衡,可以根据HTTP请求的URL请求头信息进行路由选择和负载均衡。

配置和管理:LVS配置相对更复杂,需要通过一些命令行工具或配置文件进行设置和管理。NGINX具有更简单和灵活的配置语法,可以通过编辑配置文件进行详细的管理。

总体来说:LVS更适用于四层负载均衡,适合分发TCP/UDP流量;而Nginx更适用于七层负载均衡,适合分发HTTP请求。选择使用哪种负载均衡技术取决于具体的应用场景和需求。

4.LVS 优势与不足

优势:高并发连接、稳定性强、成本低、支持多种算法和工作模式。

不足:工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。

高可用问题

1.高可用你们用的什么软件?什么原理?

高可用我们用的是keepalived软件,主要是用来防止单节点故障。keepalived是基于VRRP协议为实现基础的。VRRP是路由冗余协议,它支持多个相同功能的路由器组成一个路由器组,这个路由器组会向客户端提供一个VIP供客户访问,这个路由器组中可以有一个master和多个backup,master负责处理客户的请求,其他backup处于备份状态,master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这就是高可用原理。

2.你都给什么做过高可用?说一下步骤和注意事项

我给nginx、lvs、haproxy做过高可用。

nginx步骤:

  1. 先准备两台nginx作为负载均衡服务器。
  2. 配置nginx的负载均衡,需要用到upstream地址池,将后端服务器的IP写到地址池中
  3. 给两台代理服务器安装keepalived制作高可用集群,生成VIP
  4. 需要将这个VIP添加到RS服务器中。
  5. 当客户访问这个VIP时就能访问到负载均衡服务器,然后转发到后端服务器。

注意事项:主服务器的优先级要比备份服务器的优先级高,主备服务器要在一个集群中。

配置负载均衡服务器和nginx高可用的时候,需要做心跳检测并添加检测服务脚本,检测后端服务器状态和nginx代理服务器状态是否正常,如果不正常需要跳转到其他服务器。

LVS-DR步骤:和nginx的步骤差不多。需要将VIP加入到服务器的dev lo网卡上。然后忽略广播,设置匹配精准IP回包。

LVS-NAT步骤:

两台LVS都需要先桥接网络,我们需要设置两个集群,将两台LVS都设置两个VIP,一个用来接收客户端的请求并分发给服务器,一个用来接收服务器的响应来转发给客户端。LVS需要开启路由转发。注意事项:将接受服务器响应的VIP作为RS的网关,给服务器做心跳检测和检测服务。

Haproxy:

在配置文件中将IP转发路径改为服务器的IP,然后使用keepalived连接起来,作高可用。

主服务器的优先级要比备份服务器的优先级高,主备服务器要在一个集群中。

Ansible相关问题

1.Ansible的作用:

ansible是自动化运维工具,基于Python开发,分布式,无需客户端,轻量级,实现了批量系统配置、批量程序部署、批量运行命令等功能,ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

2.Ansible的工作原理是什么?

ansible 是通过主机清单来控制多台机器,它是一个无代理的架构,通过SSH远程连接,无需在目标主机上安装额外的服务。在进行远程连接时,需要知道目标主机的IP、SSH端口、用户名和密码,需要通过密钥来建立无密码登录。通过SSH连接和使用远程主机上的python解释器来实现配置管理和自动化任务的执行。

主机清单主机清单中可以写一些分组,在组中写IP地址,定义一个变量组,在组中需要写目标主机的SSH端口号,用户名,还有一些key相关信息。

3.Ansible怎么完成对目标主机的控制:

可以先解析IP地址。需要做对目标主机无密码登录。将远程主机的公钥发给目标主机。

对ansible目录下的主机清单hosts进行配置:

配置一些分组,在组中写目标主机的IP地址,定义一个变量组,在组中需要写目标主机的SSH端口号,用户名,还有一些key相关信息。

配置完成后用Ping模块测试是否能连通。

4.Ansible的模块,你都使用过哪些?举例说一下

service 服务管理模块shell 模块,file 文件模块,yum 软件包管理模块command 模块copy 远程复制备份模块,setup 收集信息模块 ,backup模块,user用户管理模块,script运行脚本模块cron计划任务模块group组管理模块,host管理主机模块、ping模块、unarchive解压模块,可以用来直接解压

5.你都用Ansible做过什么?举例说明一下

做过jdk+tomcat+jenkins

我们需要编写一个剧本,将压缩包复制到目标主机,先部署jdk环境,把jdk加入到环境变量中,因为tomcat是基于Java编写的,所以tomcat在启动时需要依赖环境变量,但是在ansible剧本中source无法直接使用,需要加入到tomcat启动文件中,在我们启动tomcat时,环境变量会自动加载,如果jenkins压缩包是以.WAR结尾的,我们只需要将jenkins解压后放入到tomcat的webapps目录下,在启用tomcat时会自动解压,我们可以通过ip+端口+/jenkins访问。这样就部署完成了。

6.Ansible中的shell模块和command模块有什么区别

shell模块,在远程使用shell执行命令时,他可以访问bash环境变量,会临时生成shell进程,这使得它支持通配符,输入重定向和输出重定向,管道操作符等。

command模块,他直接调用可执行程序,没有bash环境变量,不会打开一个临时的shell,所以很多shell的功能不能使用。但是command模块在大多数情况下更可靠且高效。

7.如何查看目录的大小

du -sh 

8.Ansible相对于其他工具的优势

简单易用:Ansible可以使用YAML语法来完成自动化任务,易于理解和编写。

无需代理:Ansible 采用 SSH 协议与远程主机通信,无需在远程主机上安装额外的代理程序,减少了配置和维护的复杂性。

高扩展性:Ansible 可以轻松地扩展到数千台主机,并且具有良好的性能。

自动化编排:Ansible 具有强大的编排能力,可以将多个任务按照顺序或并行执行。

关系型数据库(mysql)和非关系数据库(redis)

1.关系型数据库和非关系型数据库的区别:

关系型数据库是采用表格的形式来存储数据的,格式一致,便于维护。数据会存储到磁盘中,比较安全。关系型数据库使用比较方便,支持事务,支持SQL,可用于一个表以及多个表之间的复杂查询。

但是关系型数据库读写性能比较差,尤其是海量数据的读写,固定的表结构,灵活度欠佳,高并发读写需求,对硬盘I/O性能要求较高。

非关系型数据库是以键值对、文档、图片等形式存储数据,具有丰富的数据类型和可扩展性,数据会存储在内存中,读取速度比较快。非关系型数据库部署简单,基本都是开源软件,成本比较低。

但是非关系型数据库不提供sql支持,学习和使用成本较高,数据结构相对复杂,复杂查询方面欠佳,而且存储的数据相对来说不安全。

Redis相关问题:

1.redis的优势

高性能:Redis将数据存储在内存中,通过直接读写内存来提高读写速度。可以处理大量并发请求,并且具有非常低的延迟。

丰富的数据类型:可以支持多种数据结构,比如键值对、字符串、列表、图片、音频等。

支持持久化:可以将数据进行永久保存。

支持事务:能够保证数据的完整性和一致性。

支持主从:可以冗余备份,提高读性能,可以降低主服务器的压力。

内置的数据缓存:可以将经常访问的数据存储在redis中,提高读写性能,减轻后端服务器的压力。

2.redis持久化-两种方式

RDB方式:是在不同的时间点,将redis存储的数据生成快照并存储到磁盘中。

特点:周期性、在备份时,不会影响数据写入、高效性,一次性还原所有数据、完整性较差,故障点到上一次备份之间的数据无法恢复。

AOF方式:实现持久化的方式是将redis执行过的所有写指令记录下来,在下次重启redis时,就会把这些指令从前到后再重复执行一遍,这样就实现了数据恢复。

特点:实时性、完整性较好、体积大(数据多,记录数据的指令,删除的指令也会被记录下来)

3.redis相比memcached有哪些优势

(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型

(2) redis可以持久化其数据

4.redis常见性能问题和解决方案

(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件

(2) 如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次

(3) 为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内

(4) 尽量避免在压力很大的主库上增加从库

(5) 主从复制不要用树状结构,用单向链表结构更为稳定,即:Master(写) <- Slave1(读) <- Slave2(读) <- Slave3(读)...

这样的结构方便解决单点故障问题,实现Slave对Master的替换。如果Master挂了,可以立刻启用Slave1做Master,其他不变。

5.redis集群的工作原理

主多从+哨兵模式

6.redis哨兵的作用:

(1)对master状态进行检测。

(2)如果master异常,就会发生主从切换。

(3)主从切换之后,sentinel监控目标也会发生改变。

7.redis的哨兵工作原理:

Sentinel哨兵是为了检测redis集群中master的状态的工具。哨兵会向master做心跳检测,当master的响应时间超过设置的值,master就会被标记为主观下线,这时候其他从服务器 的setinel实例会向master做心跳检测,如果有足够数量的setinel实例确认master进入了主观下线状态,这时候master就会被标记为客观下线,然后会将其中一个slave作为master,实现主从切换,sentinel的监控目标也会发生改变。

8.redis主从复制原理:

从服务器会向主服务器发送SYNC指令,当主服务器收到后,主服务器会调用BGSAVE来进行持久化工作,将数据写入到RDB文件中,在数据持久化期间,如果有其他数据写入,就会先缓存到内存中,在BGSAVE命令执行完成后,主服务器会将RDB文件发送给从服务器,从服务器收到后将其存入磁盘中,然后再读取到内存中,这个过程完成之后,主服务器再将内存中的数据以redis协议的格式发送给从服务器,然后从服务器执行一遍保存到磁盘中。

9.Redis有几种集群模式?

(1)redis哨兵模式(sentinel):该模式使用哨兵机制来实现高可用性。哨兵会监听master服务的状态,并在master发生故障时可以实现故障转移,将从服务器提升为新的master。

(2)redis主从复制:该模式可以将数据从一个主服务器复制到多个从服务器中,提供冗余备份实现数据的高可用性和读取的负载均衡,主 服务器负责写操作,从服务器负责读操作。

(3)redis去中心化集群模式:该模式将数据分片并存储到多个节点上,每个节点会存储一部分数据。每个节点都会与其他节点连接,使用该集群会让内存增大很多倍。能够处理大规模数据和高并发请求。

10.Redis缓存穿透和缓存雪崩:

缓存穿透:缓存穿透指的是恶意或频繁请求一个不存于缓存的数据,导致请求直接访问后端数据库,从而会压跨数据库。解决方法:如果数据库中这个数据也为空,可以设置一个默认值存入缓存中,那么第二次到缓中就会有值了,不会继续访问数据库,设置一个过期时间或者当有值的时候将缓存中的值替换掉。

缓存雪崩:缓存雪崩是指大量缓存失效或过期同时发生,从而导致所有请求都去访问数据库,导致数据库CPU和内存负载过高,甚至宕机。解决方法

合理设置缓存的过期时间,通过分散缓存的过期时间,避免同时发生大量缓存失效。

11.Redis数据分布存储的原理:

Redis集群使用数据分片来实现:Redis集群中有16384个哈希槽,当需要在redis集群中放入键值对时,redis会使用crc16算法算出一个这个值会对16384求余数,这样每个key就会对应一个0-16383之间的哈希槽,然后redis就会把这个key分配到对应范围的节点上了。

云服务器: 

阿里云C5类型云服务器。C5实例是一种高性价比的ECS云服务器配置,适合中小型企业和个人用户。其提供的CPU为Intel Xeon Platinum 8163 2.5GHz,有24个处理器核心和48个线程,内存为8GB,硬盘为ESSD云盘100GB,I/O性能较高。该配置还提供了高达5Gbps的带宽和低延迟网络,可以满足高负载和大数据处理等应用需求。可用于一些社交、电商和游戏平台等高负载情况。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值