Linux集群搭建

集群分类:
  HAC(高可用集群)
  尽可能的保障网络通讯的正常状态
  实现方案:
   心跳检测
  故障:
   脑分裂
  出现的问题:
   网络访问的中断
  实现方案:
   keepalived VRRP技术
   heartbeat Linux-HA 脚本监测切换 
 HPC(高性能集群)
  提供单台服务器不能提供的计算能力
  结构:
   任务拆分
   文件共享
   
 LBC(负载均衡集群)
  构成:
   负载调度器
   真实服务器
   共享存储
  负载调度器实现方案:
   LVS、Nginx
  工作原理:
   四层:LVS ,一次TCP连接完成,由Client与RS(实际服务器)之间完成。D(负载调度器)只起到中间转发左右,不参与实际流量。
   七层:nginx ,两次TCP连接,一次由client和D(调度器)完成,一次由D与RS(实际服务器)完成。
  使用场景:
   四层:TCP/UDP的C/S架构,压力小,并发大。但是识别不精确。
   七层:由域名结构统领的网络服务器,支持调度多个集群。
  安全性:
   四层:不会拦截SYN(tcp连接请求包)攻击
   七层:可以拦截SYN攻击   
 HPC与LBC区别:
  LBC:提升的是单位时间内处理的任务数量提升系统效率
  HPC:通过降低处理单个任务的时间提升系统效率
Nginx:
 调度多个集群操作
 vim nginx.conf
 http{    #http 内配置
  upstream  qixiao.com{    #集群配置区
   server 10.244.16.21:8080;  #集群主机(默认是轮询,可以支持多端口)
   server 10.244.16.22:80;   #集群主机
  }
  upstream  lingshu.com{    #第二个集群配置区
   server 10.244.16.23:80;
   server 10.244.16.24:80;
  }
   server {      #server区域
    listen       80;
    server_name  www.qixiao.com; #域名
    location / { 
    proxy_pass http://qixiao.com; #当访问www.qixiao.com时反向代理到qixiao.com集群
    }
   }
   server {      #第二个server区域
    listen       80;   #监听端口
    server_name  www.lingshu.com; #域名
    location / {
    proxy_pass http://lingshu.com; #当访问www.lingshu.com时反向代理到lingshu.com集群
    }
   }
  }
LVS:Linux虚拟服务
 数据报文通过网卡层层解析到达内核,内核根据报文的类型交给上层用户空间的应用执行。在数据包从内核空间传送到用户空间过程中,钩子函数强行获取报文的使用权限。查看报文的五元组是否符合LVS规则,如果符合,更改目的地址和端口,进行转发,不符合就还给上层用户空间由上层应用解析。
 构成:
  ipvs:核心程序,内核内置
  ipvsadm:用户空间的命令行管理工具
 工作模式:
  LVS-NAT
   SNAT:主要用于局域网使用一个外网IP进行外网访问
   DNAT:端口映射
   负载调度器位于client和真实RS之间
   负载调度器必须是Linux,真实提供服务的RS可以是任何操作系统
   负载调度器一块网卡负责提供VIP能力,另一块网卡与内网RS通讯
   负载调度器与真实RS位于同一个二层环境。
   负载调度器只负责处理入栈以及出栈请求。
  LVS-DR(直接路由模式)
   负载调度器与真实服务器位于同一网络环境
   负载调度器与真实服务器必须是Linux操作系统,不支持端口映射
   负载调度器只负责处理入栈请求,出栈请求由真实服务器完成。
   VIP地址配置在各个节点之上,但是只有负载调度器拥有通讯权,RS上的lo网卡解析数据报文
   
  LVS-TUN(隧道模式)
   负载调度器与真实服务器必须是Linux操作系统
   负载调度器与真实服务器必须拥有公网IP或者能被路由
   负载调度器与真实服务器必须支持数据包二次封装
   负载调度器处理入栈请求,出栈请求由真实服务器完成
  
  难度: NAT < DR < TUN
  并发量:RD > TUN > NAT
  使用量:NAT > DR > TUN
 调度算法:
  固定算法(静态调度算法):只根据算法本身调度,不考虑服务器本身
  动态算法(动态调度算法):处理考虑算法本身,还要考虑服务器状态。【消耗CPU资源,但是更加智能】
 静态:
  RR:轮询,将每次用户的请求分配给后端的服务器,从第一台服务器开始到第N台结束,然后循环
  WRR:加权轮询,按照权重的比例实现在多台主机之间进行调度
  SH:源地址散列,将同一个IP的用户请求,发送给同一个服务器。
  DH:目标地址散列,将同一个目标地址的用户请求发送给同一个真实服务器(提高缓存的命中率)
 动态:
  LC:最少连接,将新的连接请求,分配给连接数最少的服务器。活动连接*256+非活动连接
  WLC:加权最少连接:特殊的最少连接法,权重越大承担的请求数越多(活动连接*256+非活动连接)/权重
  SED:最短期延迟,特殊的WLC算法,(活动连接+1)*256/权重
  NQ:永不排队,特殊的SED算法。如果发现有连接数为0直接分配。如果全部不为0。则按SED算法分配
  LBLC:特殊的DH算法,既能提高缓存命中率,又要考虑服务器性能。缓存压力达到一定阀值,就将流量分发给其他服务器。
  LBLCR:LBLC+缓存,尽可能提高负载均衡和缓存命中率的折中方案
 持久连接:
  1、优先于任何算法最先匹配
  2、可以和任意算法进行配合处理,优先级最高
  3、存储数据在内存分页中(内存空间)
  分类:
  PCC(持久客户端连接)将来自于同一客户端的所有请求定向至选定的RS,只要IP相同,分配的服务器始终相同
   ipvsadm -A -t 172.16.0.8:0 -s wlc -p 120
  PPC(持久端口连接)将来自于同一个客户端对同一个服务(端口)的请求,定向至选定的RS
   ipvsadm -A -t 172.16.0.8:80 -s rr -p 120
  PFMC(持久防火墙标记连接)将来自于同一客户端对指定服务(端口)的请求,始终定向至此选定的RS,不过可以将两个毫不相干的服务定义为一个集群服务。
   iptables -t mangle -A PREROUTING -d 172.16.0.8 -p -tcp -dport 80 -j MARK --set-mark 10
   iptables -t mangle -A PREROUTING -d 172.16.0.8 -p -tcp -dport 443 -j MARK --set-mark 10
   service iptables save
   上边两条表示:将访问172.16.0.8的80和443端口的流量打上10标签
   ipvsadm -A -f 10 -s wlc -p 120  表示将标签为10的流量执行wlc算法,持久化连接时间为120秒。持久化时间内发生连接,时间增加120秒。最多不超过200秒【持久化连接时间不宜过大或过小】
LVS-NAT模式搭建:
 NFS服务器:
   mkdir /share  创建共享目录
   chown nfsnobody:nfsnobody /share/  NFS服务默认使用nfsnobody用户,将共享目录属主和属组更改为nfsnobody
   yum install -y nfs
   vim /etc/exports
   /share 10.244.16.0/24(rw,sync)     #可以共享多个网段。每一行是一个共享。三个字段【共享目录路径 共享网段 共享权限】
  service rpcbind restart  #rpcbind服务是nfs同步数据的服务
  service nfs start  #开启nfs服务
  chkconfig rpcbind on
  chkconfig nfs on
  showmount -e [NFS服务器IP地址]    测试NFS服务器是否了连接
  注:如果出现权限问题。可以尝试将apache用户加入到nfsnobody组。用户提交的文件就可以写入共享服务器
 负载调度器:
  yum install -y ipvsadm
  vim /etc/sysctl.conf
   net,ipv4.ip_forward=1
  sysctl -p
  iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.244.16.30
  ipvsadm -A -t 10.244.16.30:80 -s rr
  ipvsadm -a -t 10.244.16.30:80 -r 192.168.1.1:80 -m
  ipvsadm -a -t 10.244.16.30:80 -r 192.168.1.2:80 -m
  ipvsadm -Ln --stats
  
  
LVS-DR模式搭建:
 NFS服务器:同上
 负载调度器:
  关闭NetworkManager服务,并设置开机不自启
   service NetworkManager  stop
   chkconfig NetworkManager off
  
  添加一块网卡,或编辑虚拟网卡
   cp ifcfg-eth0 ifcfg-eth0:0
   vim ifcfg-eth0:0
    DEVICE=eth0:0
    IPADDR=10.244.16.100   #vip地址
    PREFIX=24
   ifup eth0:0    #如果虚地址起不来,则查看NetworkManager服务有没有关闭。一般是NetworkManager服务与network服务冲突所致,建议重启一下
  修改内核参数,防止相同的网络地址广播冲突
   vim /etc/sysctl
     net.ipv4.conf.all.send_redirects = 0   
     net.ipv4.conf.default.send_redirects = 0   
     net.ipv4.conf.eth0.send_redirects = 0
   sysctl -p      #刷新内核参数
   modprobe ip_vs      #查看内核是否加载,无法应则以加载
   cat /proc/net/ip_vs  #参看版本,确认知否正确加载
  安装LVS管理工具ipvsadm
   yum install -y ipvsadm
  设置DR模式的负载调度规则
   ipvsadm -A -t 10.244.16.100:80 -s rr     #10.244.16.100为VIP,21和22为实际RS服务器IP
   ipvsadm -a -t 10.244.16.100:80 -r 10.244.16.21:80 -g 
   ipvsadm -a -t 10.244.16.100:80 -r 10.244.16.22:80 -g
  ipvsadm -Ln 查看调度规则
  保存配置:
   service ipvsadm save
   chkconfig ipvsadm on
 实际RS1:
  关闭NetworkManager服务,并设置开机不自启
   service NetworkManager  stop
   chkconfig NetworkManager off
  修改内核参数,防止相同的网络地址广播冲突
   vim /etc/sysctl
    net.ipv4.conf.all.arp_ignore = 1
    net.ipv4.conf.all.arp_announce = 2
    net.ipv4.conf.default.arp_ignore = 1
    net.ipv4.conf.default.arp_announce = 2
    net.ipv4.conf.lo.arp_ignore = 1
    net.ipv4.conf.lo.arp_announce = 2
   sysctl -p   刷新内核参数
  配置虚拟回环网卡lo:0用于解析数据报文
   cp ifcfg-lo ifcfg-lo:0
   vim ifcfg-lo:0
    DEVICE=lo:0
    IPADDR=10.244.16.100
    NETMASK=255.255.255.255
   ifup eth0:0    #如果虚地址起不来,则查看NetworkManager服务有没有关闭。一般是NetworkManager服务与network服务冲突所致,建议重启一下
  mount -t nfs  [共享存储:/路径] [网站根目录]
 实际RS2:与RS1类似
 

 
 
posted @ 2019-04-26 16:49  翎戍  阅读(2339)  评论(0编辑  收藏  举报