好久没面试了,最近也总是在玩,面试前总是很紧张,忐忑的去了,途中在地铁里,人事打来电话不知道什么事,上了下邮件看面试约的时间是 330 估计到那也就不到3点。

去了首先开始做题

几个比较有价值的问题

1.从下面图中,你可以看到那些信息

面试Linux运维,回来的总结,慢慢成长!

当时面试官纠正我犯的一个错误就是:

我把10.0.0.1认为是当前用户的ip地址,这一条应该是上一个用户登录的地址。

但回来后我发现其实从w 输出的内容里,我们是可以看到当前用户的登录地址即为10.0.0.1,有很多时候,基础不扎实,就容易像我这样。

从下面的输出的内容,我们也可以看到8time这个用户的登录时间为1949

查看到的信息

1当前的登录用户为8time.

2.系统运行时间,登录的用户数

3.系统的负载

4.上一个用户登录的ip

2.数据库问题

1.有一个数据库有605000万行,请从锁的角度来说明,会不会影响数据库的性能,如果影响应该怎样解决。(偏题了)

1.首先可以协调程序,对数据库进行水平切分或垂直切分,然后分别存放在不同的数据库里。

2.使用mysql的主从的架构,采用读写分离的方式(读从库,写主库)。对多个从库采用集群的方式,来提高读的性能。

2.Mysql锁的一些知识总结:(未完成)

mysql锁是一个线程阻止其他线程去更新数据的一种方式

A对一个数据进行修改则B只能等待A修改完才能对数据进行修改。

锁的种类: 

读锁:  A发起一个test表发起一个读锁,则B也可以读到test的内容,但C想写则不能写;简单理解为 排他写,(一个读锁后,其他的用户不可以写);读锁可以理解为一个表加了个门,其他人可以看见里面的内容,但不能进去修改,只能看.

写锁:  A发起一个test的写锁,则其他的用户则既不能读,也不能写。写锁相当于为一个表加一个保险柜,既不能看,又不能修改。

死锁:  A对表 test1 发起一个写锁,B也对表test2发起一个写锁,如果此时,A需要访问test2表,则只能等待;如果此时B也要对test1 进行操作,则也只能等待;双方都在等待对方,则就产生了 死锁

本地锁:Atest1表发起一个本地锁 lcok tables test1 read local B用户则只能在test1 表的尾部进行数据的添加。

写的请求大于读的请求,如果同样都是在等待,那写锁则优先于读锁。

默认为写优先,show variables like %low% 查看 默认为off

在日常的数据库管理中,不建议给普通用户lcok权限。

表锁: 锁定一个表 大多数引擎都支持

行锁: innodb支持 

查看innodb 行锁的状态的信息

Show variables like %innodb_lock%;

S-shared共享锁 允许对事务进行读

X-exclusive派他所 允许对事务进行更新改变一个值

IS 有意向S

IX 有意向X

3.lvs+keepalived的一些细节

1.问题一:

当我们查看lvs+keepalived架构中,后端一台真实的web服务器上没有负载,通常你会从那些角度去排查呢。

1首先可以在lvs主上面查看 使用ipvsadm -L -n --stat 查看下lvs上面后端RS的状态,如果此时我们在RS里看不到后端那台真实的web服务器,其他的却正常,我们应该检查下keepalived的配置文件,比如端口是不是写错了、检查的方式是不是有问题、其他配置是不是有问题等。

2.如果确定配置keepalived的配置文件没问题,且ipvsadm 查看状态时,发现 后端web服务器有数据流。则就检查web服务器上是否有做VIP

3.检查后端web服务器的80端口是否正常开放。

4.如果上述都正常,那可能就是网络有问题了。解决方法暂时没遇到不好说。

问题二:

Lvs+keepalived中各自的功能是什么?

global_defs {

   notification_email {

     [email protected]        出现问题后发给谁

   }

   notification_email_from [email protected]

   smtp_server 192.168.200.1  邮件服务器的地址

   smtp_connect_timeout 30

   router_id LVS_DEVEL        这里仅仅是一个名称而已

}

vrrp_instance VI_1 {

    state MASTER              主备状态 Master() backup(

    interface eth0            监听的网卡

    virtual_router_id 55      通信的频道号,多播的MAC地址

                              在这个频道里就是,lvs里后端服务器的mac地址表

    priority 100              权重,权重高的竞选为主

    advert_int 1              检查的间隔时间

    authentication {

        auth_type PASS        使用的验证方式 密码 密码为8090

        auth_pass 8090

    }

    virtual_ipaddress {

        10.0.0.50             vip地址

    }

}

 virtual_server 10.0.0.50 80 {   设置一个VIP地址 跟端口

     delay_loop 6                服务器轮训的时间

     lb_algo wlc                 lvs的调度算法

     lb_kind DR                  lvs使用的模式

     persistence_timeout 60      会话保持的时间

     protocol TCP                健康检查的方式

  

     real_server 10.0.10.53 80 { 后端真实服务器的地址

         weight 100              每台机器的权重

         TCP_CHECK {             TCP检查

         connect_timeout 10      连接超时的时间

         nb_get_retry 3          重试的检查次数

         delay_before_retry 3    重新检查的间隔

         connect_port 80         检查的端口

         }

     }

     real_server 10.0.10.54 80 {

         weight 100

         TCP_CHECK {

         connect_timeout 10

         nb_get_retry 3

         delay_before_retry 3

         connect_port 80

         }

      }

 }

浅析lvskeepalived的功能

1.如果没有keepalived的,lvs依然可以调度后面的web服务器。

2.对后端服务器的检查,这个我以前一直以为是keepalived做的,其实想想就知道了。    面试的时候,面试官跟我说的是keepalived做的。回来我想想也是。也是夜深了,想想真的是么。

为什么不是?

首先lvs是工作在四层,lvs+keepalived中,对后端真实服务器的检测方式,有两种一种是基于端口的,一种是基于脚本的,比如我们可以设置curl -I http://www.test.com 端口正常网页不一定正常。后面的明显是基于七层的Http,所以keepalivedlvs中对后端服务器的检测的实现。

所以lvs+keepalived对后端RS的检测应该是keepalived的,有时间我会实验下。

 

面试Linux运维,回来的总结,慢慢成长!

谈一谈进程

什么是进程?

进程系统资源的集合?What? 

Apache里有设置user 跟 group 

当我们启动apache的时候,apache会使用root产生一个父进程,然后以apache里设置的usergroup的用户去产生子进程。

这样做的原因是

在系统里小于1024的端口,只能由root打开,所以apache就采用这种一个父进程去打开这个80端口接受请求,然后将请求丢给apache的子进程去处理。

安全性上:php程序可以直接调用Linuxshell命令,夸张点来说,在网页里如果是root那用户,则直接可以通过相关的代码 执行一个useradd命令。

Work模式跟perfork模式

Work模式:采用线程模式,apache产生多个子进程,然后子进程再产生线程。这样做的好处,更节省系统资源,同样配置下可以处理更多的请求,但线程模式的安全性上不如perfork模式,一个线程毁掉,则会造成整个子进程下的全部线程都不能工作

Perfork模式,因为是一个父进程产生的子进程,所以一个子进程挂掉了,也仅仅这一个挂了,不会影响 其他的子进程。