【干货】Linux运维跳槽必备的30道面试精华题(上)( 三 )


将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统 , 只有负载均衡器需要一个合法的IP地址
缺点:扩展性有限 。 当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈
因为所有的请求包和应答包的流向都经过负载均衡器 。 当服务器节点过多时 , 大量的数据包都交汇在负载均衡器那 , 速度就会变慢!
二、IP隧道模式(VS-TUN)
原理:首先要知道 , 互联网上的大多Internet服务的请求包很短小 , 而应答包通常很大、那么隧道模式就是 , 把客户端发来的数据包 , 封装一个新的IP头标记(仅目的IP)发给RS、RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器 。 注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议 , 所以,在RS的内核中,必须编译支持IPTUNNEL这个选项 。
优点:负载均衡器只负责将请求包分发给后端节点服务器 , 而RS将应答包直接发给用户 , 所以 , 减少了负载均衡器的大量数据流动 , 负载均衡器不再是系统的瓶颈 , 就能处理很巨大的请求量这种方式 , 一台负载均衡器能够为很多RS进行分发 。 而且跑在公网上就能进行不同地域的分发 。
缺点:隧道模式的RS节点需要合法IP , 这种方式需要所有的服务器支持”IPTunneling”(IPEncapsulation)协议 , 服务器可能只局限在部分Linux系统上 。
三、直接路由模式(VS-DR)
原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR , 而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS这时RS收到这个数据包,处理完成之后 , 由于IP一致 , 可以直接将数据返给客户 。 则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端、由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域也可以简单的理解为在同一台交换机上 。
优点:和TUN(隧道模式)一样 , 负载均衡器也只是分发请求 , 应答包通过单独的路由方法返回给客户端与VS-TUN相比 , VS-DR这种实现方式不需要隧道结构 , 因此可以使用大多数操作系统做为物理服务器 。
缺点:(不能说缺点 , 只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上 。
16
mysql的innodb如何定位锁问题 , mysql如何减少主从复制延迟?
mysql的innodb如何定位锁问题:
在使用showengineinnodbstatus检查引擎状态时 , 发现了死锁问题;
在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中取一台专用的服务器
只作为备份用 , 不进行其他任何操作.另外 , 2个可以减少延迟的参数:
–slave-net-timeout=seconds单位为秒默认设置为3600秒
#参数含义:当slave从主数据库读取log数据失败后 , 等待多久重新建立连接并获取数据
–master-connect-retry=seconds单位为秒默认设置为60秒
#参数含义:当重新建立主从连接时 , 如果连接建立失败 , 间隔多久后重试
通常配置以上2个参数可以减少网络问题导致的主从数据同步延迟
MySQL数据库主从同步延迟解决方案
最简单的减少slave同步延时的方案就是在架构上做优化 , 尽量让主库的DDL快速执行还有就是主库是写 , 对数据安全性较高 , 比如sync_binlog=1 , innodb_flush_log_at_trx_commit
=1之类的设置 , 而slave则不需要这么高的数据安全 , 完全可以讲sync_binlog设置为0或者关闭binlog
innodb_flushlog也可以设置为0来提高sql的执行效率 。 另外就是使用比主库更好的硬件设备作为slave