沪ICP备2021032517号-1

问题整理

  |   0 评论   |   0 浏览

LVS负载均衡技术原理和调度算法

原理

一般LVS都是位于整个集群系统的最前端,由一台或者多台负载调度器组成,LVS是基于IP负载均衡技术的IPVS模块来实现的,IPVS实现负载均衡机制有三种

NAT :

当用户请求到达调度器时,调度器将请求报文的目标地址,改写成选定的Real Server地址,最后将报文请求发送到选定的Real Server。在服务器端得到数据后,Real Server返回数据给用户时,需要再次经过负载调度器将报文的源地址和源端口改成虚拟IP地址和相应端口,然后把数据发送给用户,完成整个负载调度过程。

TUN :

与NAT方式报文转发方法不同,调度器采用IP隧道技术将用户请求转发到某个Real Server,而这个Real Server将直接响应用户的请求,不再经过前端调度器

DR :

与NAT、TUN方式报文转发方法又有不同,

VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的

调度算法

一共有八种负载调度算法,我们常用的有四种调度算法(轮叫调度、加权轮叫调度、最少链接调度、加权最少链接调度

与Nginx对比优缺点

优点

抗负载能力强、工作在第4层仅作分发之用,没有流量的产生

应用范围比较广,可以对所有应用做负载均衡;

缺点

软件本身不支持正则处理,不能做动静分离

Nginx的优点:

工作在OSI第7层,可以对域名、URL进行转发

Nginx对网络的依赖非常小

也可以承担高的负载压力且稳定

Nginx的缺点:

Nginx的Session的保持,Cookie的引导能力相对欠缺。

keepalive的工作原理

keepalived是以VRRP协议为实现基础的,即虚拟路由冗余协议

有多台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样就可以保证路由器的高可用了


MongDB

一般mongodb部署主从、或者mongodb分片集群;建议3台或5台服务器来部署。MongoDB分片的基本思想就是将集合切分成小块。这些块分散到若干片里面,每个片只负责总数据的一部分。 对于客户端来说,无需知道数据被拆分了,也无需知道服务端哪个分片对应哪些数据。数据在分片之前需要运行一个路由进程,进程名为mongos。这个路由器知道所有数据的存放位置,知道数据和片的对应关系。


redis集群的原理,redis分片

redis 3.0版本之前是不支持集群,至少需要3(Master)+3(Slave)才能建立集群,是无中心的分布式存储架构,可以在多个节点之间进行数据共享,解决了Redis高可用、可扩展等问题。集群可以将数据自动切分到多个节点,当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。

redis分片:

分片(partitioning)就是将你的数据拆分到多个 Redis 实例的过程,这样每个实例将只包含所有键的子集。当数据量大的时候,把数据分散存入多个数据库中

分片部署方式为以下三种:

在客户端做分片

在代理中做分片

在redis服务器端做分片

java、php环境用到了redis,主要缓存有登录用户信息数据


kafka原理

Kafka是一个 分布式的、可分区的、可复制的消息系统,生产者将数据生产出来,交给 broker 进行存储,消费者需要消费数据了,就从broker中去拿出数据来,然后完成一系列对数据的处理操作

应用场景

  1. 注册时,立即返回成功。
  2. 发送注册成功的消息到消息平台。
  3. 对注册信息感兴趣的程序,可以消息消息

关键组件

topic: Kafka将消息以topic为单位进行归纳。

producer: 将向Kafka topic发布消息的程序称为producers.

consumer: 将预订topics并消费消息的程序称为consumer.

broker: Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker.

zookeeper

Kafka的元数据都是存放在zookeeper中。

kafka借助zookeeper,能够将生产者、消费者和broker在内的所以组件在无状态的情况下,建立起生产者和消费者的订阅关系,并实现生产者与消费者的负载均衡

分区与副本

一个topic是对一组消息的归纳。对每个topic,Kafka 对它的日志进行了分区。

一般而言,一个topic会有多个分区,每个分区会有多个副本。

分区是分了将一个topic分到多个地方存储,提高并行处理的能力。副本是为了容错,保证数据不丢失。

对于每一个分区,都会选取一个leader,这个分区的所有读取都在这个leader中进行,而其它副本会同步leader中的数据,且只做备份。

怎么统计当前访问的IP,并排序

用awk结合uniq、sort过滤access.log日志

awk '{print $1}' access.log| sort | uniq -c |sort -rn -k 1  | head -1

cat access.log | awk '{print $1}' | uniq -c | sort -rn | head -10

网站访问慢、访问不到

客户端问题

客户本身网络存在问题

ping、nslookup域名
服务端问题

浏览器按F12,看下是哪一块的内容过慢

看后端服务的日志

最后分析排除优化sql

TCP三次握手状态

首先是closed状态,当发起连接后,进入Listen状态,当三次握手之后,进入EST状态。三次握手中间还有一个临时状态:SYN_SENT。SYN_SENT 当应用程序发送ack之后,进入EST状态,如果没有发送,就关闭closed.


七层模型

物  硬件设备

数  硬件地址寻址、MAC地址工作在这一层

网  逻辑地址寻址 协议有:ICMP IGMP

传  定义传输数据的协议端口号 TCP UDP

会  建立、管理、终止会话

表  数据的表示、安全、压缩

应  网络服务与最终用户的一个接口 协议有:HTTP FTP TFTP

ansible

用过ansible的(copy file yum ping command shell)等模块

nginx常用模块

负载均衡upstream、反向代理proxy_pass、location、rewrite等

proxy模块中配置过: proxy_redirect、proxy_set_header、proxy_connect_timeout、proxy_send_timeout

linux中shell变量含义

$$   Shell本身的PID(ProcessID)   

$!   Shell最后运行的后台Process的PID   

$?   最后运行的命令的结束代码(返回值)   

$-   使用Set命令设定的Flag一览   

$*   所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 

$@   所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。  

$#   添加到Shell的参数个数   

$0   Shell本身的文件名   

$1~$n   添加到Shell的各参数值。$1是第1参数、$2是第2参数

添加路由

route add -net 192.168.0.0/24 gw 192.168.0.1

添加网关

route add default gw 192.168.1.1

查看文件的第100-200行

cat filename| head -n 200 | tail -n +100

判断文件为空

if test -s file.txt; then

if [ -s file.txt ]; then

判断目录是否存在

if [! -d "" ]

判断文件是否存在

if [! -f "" ]

for循环 1加到100

#!/bin/bash
declare -i sum=0
for i in {1..100}
do
   let sum+=$i
done
echo $sum 

查找大于100M的文件

find . -type f -size +100M

Linux系统优化

1、权限管理 

2.更改默认的远程连接端口及禁止root用户远程登入

3.定时自动更新服务器时间

4.配置优化YUM更新源,并安装一些辅助工具

5.关闭selinux

iptables

iptables 

iptables -L

iptables -F

iptables -t filter -A INPUT  -p tcp --dport 80 -j DROP 禁止80端口

iptables -I INPUT -p tcp --dport 80 -j ACCEPT 放行80端口


规则链的默认策略设置为拒绝

iptables -P INPUT DROP

iptables -P OUTPUT DROP  

iptables -P FORWARD DROP

ElasticSearch索引优化

参考文档

系统层面的调优

系统层面的调优主要是内存的设定与避免交换内存

1、把 ES 集群内存大小设置为了 31G,以充分发挥集群性能。

2、避免交换内存,可以在配置文件中对内存进行锁定,以避免交换内存

分片与副本

分片 (shard):ES 是一个分布式的搜索引擎, 索引通常都会分解成不同部分, 分布在不同节点的部分数据就是分片。ES 自动管理和组织分片, 并在必要的时候对分片数据进行再平衡分配, 所以用户基本上不用担心分片的处理细节。创建索引时默认的分片数为 5 个,并且一旦创建不能更改。

副本 (replica):ES 默认创建一份副本,就是说在 5 个主分片的基础上,每个主分片都相应的有一个副本分片。额外的副本有利有弊,有副本可以有更强的故障恢复能力,但也占了相应副本倍数的磁盘空间

参数调优

有很多场景是,我们的 ES 集群占用了多大的 cpu 使用率,该如何调节呢。cpu 使用率高,有可能是写入导致的,也有可能是查询导致的

可以先通过 GET _nodes/{node}/hot_threads 查看线程栈,查看是哪个线程占用 cpu 高,如果是 elasticsearch[{node}][search][T#10] 则是查询导致的,如果是 elasticsearch[{node}][bulk][T#1] 则是数据写入导致的

重建索引

在重建索引之前,首先要考虑一下重建索引的必要性,因为重建索引是非常耗时的。
ES 的 reindex api 不会去尝试设置目标索引,不会复制源索引的设置,所以我们应该在运行_reindex 操作之前设置目标索引,包括设置映射(mapping),分片,副本等。


标题:问题整理
作者:zifuy
地址:https://www.zifuy.cn/articles/2019/11/23/1574506540455.html