博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生产LVS负载均衡与keepalive的高可用实践
阅读量:6235 次
发布时间:2019-06-22

本文共 6853 字,大约阅读时间需要 22 分钟。

hot3.png

LVS负载DR模式高可用

环境

  • centos7
  • keepalived

三种工作模式

VS/NAT模式(Network address translation) VS/TUN模式(tunneling) DR模式(Direct routing):常用;内网单用卡

八种调度算法

官方:

固定调度算法:rr,wrr,dh,sh 轮询调度(Round-Robin Scheduling) 加权轮询调度(Weighted Round-Robin Scheduling) 目标地址散列调度(Destination Hashing Scheduling) 源地址散列调度(Source Hashing Scheduling)

动态调度算法:wlc,lc,lblc,lblcr 最小连接调度(Least-Connection Scheduling) 加权最小连接调度(Weighted Least-Connection Scheduling) 基于局部性的最少链接(Locality-Based Least Connections Scheduling) 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)

基础配置

vip:10.0.1.15

Director节点 lvs-1:10.0.1.8 (master) Director节点 lvs-2:10.0.1.9 (backup)

在lvs主机上执行 keepalived shell

Real server1 web1:10.0.1.4 Real server1 web2:10.0.1.5

在后端主机上执行 lvs_rs.sh shell

服务部署

yum在线装

yum -y install keepalived

开启转发

echo 1 > /proc/sys/net/ipv4/ip_forwardgrep  ip_forward  /etc/sysctl.conf &>/dev/null || echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf

主服务器配置

/etc/keepalived/keepalived.conf

! Configuration File for keepalivedglobal_defs {   notification_email {       admin@attacker.club   }notification_email_from Alexandre.Cassen@firewall.loc   smtp_server smtp.qq.com   smtp_connect_timeout 30   router_id LVS_DEVEL}vrrp_sync_group VG1 {        group{        VI_1                }                    }vrrp_instance VI_1 {        state MASTER        interface eth0        virtual_router_id 51        // 虚拟的路由ID两台参数必须一致        priority 100        // 定义优先级,谁大就是master        advert_int 1        // 超出1s如果对方没有反应它就接管        nopreempt  //不抢占,master节点        authentication {        auth_type PASS        auth_pass lvsPASS0                        }        virtual_ipaddress {        10.0.1.15		// 定义一个VIP        }		}		        virtual_server 10.0.1.15 80 {        delay_loop 5		// 每隔5秒查询realserver状态        lb_algo rr		// lvs 算法        lb_kind DR		// DR模式        // persistence_timeout 60		// 会话保持时间        protocol TCP                real_server 10.0.1.4 80 {                weight 1 // 权重                inhibit_on_failure                // 服务器健康失败,将weight设置为0,而不删除                // notify_down /root/MySQL.sh  //检测到服务down后执行的脚本                TCP_CHECK {                connect_timeout 5                // 连接超时时间;秒                nb_get_retry 3                // 重连次数                delay_before_retry 3                // 重连间隔时间                connect_port 80                // 健康检查端口                          }                                              }                real_server 10.0.1.5 80 {                weight 1                inhibit_on_failure                TCP_CHECK {                connect_timeout 5                nb_get_retry 3                delay_before_retry 3                connect_port 80                          }                                              }}

备服务器配置

替换

% s/MASTER/BACKUP/% s/priority 100/priority 90/g/nopreempt/d

启动服务

systemctl start keepalivedsystemctl enable  keepalived

状态查看

ip add # 查看浮动ip地址systemctl status keepalived # 查看状态ipvsadm -lnipvsadm -ln --statsipvsadm -ln --rate

Real server (后端服务)

/opt/lvs_rs.sh

#read -p "请输入vip地址:" vipvip=10.0.1.15#把vip绑定在lo上,是为了实现rs直接把结果返回给客户端ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 uproute add -host $vip lo:0#以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announceecho "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce

nginx两台配置

server {listen 80 default_server;default_type application/json;server_name _;return 200 '{"date":"$time_local","host":"web-2","result":"nginx json"}';access_log  /usr/local/nginx/logs/default.log;}

持续连接

1)持久连接(lvs persistence)模板:    实现无论使用任何调度算法,在一段时间内(默认360s),能够实现将来自同一个地址的请求始终发往同一个RS        ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]            -p # :定义持久时长2)持久连接实现方式:    每端口持久(PPC):每个端口对应定义为一个集群服务,每个集群服务单独调度,同一服务持久    每防火墙标记持久(PFWMC ):基于防火墙标记定义集群服务,可实现将多个端口上的应用统一调度,即所谓的port Affinity,同一防火墙标记持久    每客户端持久(PCC ):基于0端口(表示所有服务)定义集群服务,即将客户端对所有应用的请求都调度至后端主机,必须定义为持久模式,所有服务持久将vip的端口定义为0,则表示所有请求都将发送后台服务器。    3)具体实现    在VS上进行如下操作        [root[@centos7](https://my.oschina.net/centos7) ~]#ipvsadm -E -f 12 -s rr -p 300           [root[@centos7](https://my.oschina.net/centos7) ~]#ipvsadm -Ln            IP Virtual Server version 1.2.1 (size=4096)            Prot LocalAddress:Port Scheduler Flags              -> RemoteAddress:Port           Forward Weight ActiveConn InActConn                  FWM  12 rr persistent 300              -> 192.168.74.129:0             Route   1      0          0                       -> 192.168.74.133:0             Route   1      0          0

session保存机制(会话机制)

session绑定(session sticky)    始终将同一个请求者的请求发送到同一台RS(第一次请求由算法调度)    缺陷:没有容错能力,若此RS宕机,则会话丢失,并且将同一请求发送到同一RS有损均衡效果。session复制(session cluster)    在RS之间同步session,因此每个RS都保持集群中的所有session    缺陷:增加了RS的负担,对大规模的集群不适用session服务器(session server),redis:    用单独一组服务器来管理session

转至:https://www.cnblogs.com/shenxm/p/8461303.html

ftp负载均衡

lMySQL-ha

!Configuration File for keepalived    global_defs {           notification_email {           xiaolin0199@gmail.com             }           notification_email_from xiaolin0199@gmail.com           smtp_server 127.0.0.1           smtp_connect_timeout 30           router_id MySQL-ha           }    vrrp_instance VI_1 {          state BACKUP   #两台配置此处均是BACKUP          interface eth0          virtual_router_id 51          priority 100   #优先级,另一台改为90          advert_int 1          nopreempt  #不抢占,只在优先级高的机器上设置即可,优先级低的机器不设置          authentication {            auth_type PASS            auth_pass 1111          }          virtual_ipaddress {            192.168.0.200          }          }    virtual_server 192.168.0.200 3306 {          delay_loop 2   #每个2秒检查一次real_server状态          lb_algo wrr   #LVS算法          lb_kind DR    #LVS模式          persistence_timeout 60   #会话保持时间          protocol TCP          real_server 192.168.0.219 3306 {          weight 3          notify_down /usr/local/MySQL/bin/MySQL.sh  #检测到服务down后执行的脚本          TCP_CHECK {            connect_timeout 10    #连接超时时间            nb_get_retry 3       #重连次数            delay_before_retry 3   #重连间隔时间            connect_port 3306   #健康检查端口          }          }          }

编写检测服务down后所要执行的脚本

/usr/local/MySQL/bin/MySQL.sh

#!/bin/sh pkill keepalived

注:此脚本是上面配置文件notify_down选项所用到的,keepalived使用notify_down选项来检查real_server的服务状态,当发现real_server服务故障时,便触发此脚本;

我们可以看到,脚本就一个命令,通过pkill keepalived强制杀死keepalived进程,从而实现了MySQL故障自动转移。

转至:https://xiaolin0199.iteye.com/blog/2017997

FTP负载均衡

keepalived 日志定义

/etc/sysconfig/keepalived

KEEPALIVED_OPTIONS= "-D -S 0 -d"

-D是让keepalived详细记录log -d是在日志里打出keepalived读到的配置信息 -S 0是到会将日志发送给syslog,且日志定为LOCAL0

echo "local0.* /var/log/keepalived.log">> /etc/rsyslog.conf# 让syslog帮忙把接收到的日志写到文件systemctl restart  rsyslog# 重启服务tail /var/log/keepalived.log# 查看日志

转载于:https://my.oschina.net/attacker/blog/2252427

你可能感兴趣的文章
Io流的概述
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
作业:实现简单的shell sed替换功能和修改haproxy配置文件
查看>>
Altium 拼板方法以及 注意的 地方
查看>>
Apache Pulsar中的地域复制,第1篇:概念和功能
查看>>
python pip install 出现 OSError: [Errno 1] Operation not permitted
查看>>
oracle12C 重做日志
查看>>
从源码分析scrollTo、scrollBy、Scroller方法的区别和作用
查看>>
ObjectOutputStream和ObjectInputStream
查看>>
nagios客户端未启动报错
查看>>
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
《OpenGL ES应用开发实践指南:Android卷》—— 1.3 初始化OpenGL
查看>>
马士兵教学语录
查看>>
计算机网络与Internet应用
查看>>
MongodDB学习笔记(二)(复制)
查看>>
oracle在线迁移同步数据,数据库报错
查看>>
linux性能剖析工具
查看>>
VS2005环境下采用makefile编译、使用libjpeg.lib函数库
查看>>