最近希望能够配置一下负载均衡,在虚拟机上面,但是网上找了很多资料很零散,对于不了解的人,很多不够详细,最近终于做好了,把具体的步骤写下来,方便各位网友查阅学习

这个实验需要安装nginx如果没有安装过,请参考:

linux安装nginx:http://www.cnblogs.com/aspirant/p/6714548.html

如果安装了Centos系统之后,发现无法上网,其实很简单,只需要做一个小小的配置,

使用root用户进入 /etc/sysconfig/network-script/ifcfg-ens33 里面有一项是 onboot =no  改成 onboot =yes 然后重启一下机器,命令:reboot now(你的网卡可能不是ens33只需要 只需要进入目录network-script/  然后 执行ifcfg-e 按一下TAB键,看一下你网卡是什么名字就可以)

这种配置最重要的还是脚本的编写,为了各位更方便的查询问题所在,我将脚本文档上传,以便查阅

http://files.cnblogs.com/files/aspirant/loadbalance.rar

里面包含了两个文件,

(a)一个是keepalived.conf, 用于 director server 和backup server 的keepalived配置;

(b)一个是realServer.sh 用于  Realserver1 和 realserver2 的配置

(1) 我们的系统是CentOS7 目前需要四台机器,分别为 Director机器 两台:master,slave

真实机器realserver1,realserver2;搭建的系统架构图如下:

 
 
所用系统:CentOS7 
真实web服务器(RS1):192.168.137.5 
真实web服务器(RS2):192.168.137.6 
Master负载均衡服务器:192.168.137.101 
backup负载均衡服务器:192.168.137.102 
系统对外虚拟IP:192.168.137.100

 

从架构可以看出来,从用户的角度来说,会直接访问192.168.137.100,也就是说不管系统如何设计要保证此ip的可用性,

从架构师的角度考虑:

用户访问192。168.137.100位VIP:Virtual IP,虚拟iP,用户不关心内部如何协调,我们使用

192.168.137.101 作为主机 Master机器,然后使用keepalived 技术配置 HA(high avilable)配置高可用行,也就是说如果 分发的机器Master宕机了,keepalive会自动转到 backup机器,

这就是HA配置,保证master即使宕机了,也不影响转发;

master机器负责把用户的请求转发到  真实的机器, RS1和RS2,他们会按照一定的轮训机制,访问,如果RS1宕机,master会自动转发到RS2;

我们在两台负载均衡的机器上面,配置keepalived保证分发机器的高可用行HA;

系统的 IP配置如下:

服务器名   IP地址 虚拟设备名 虚拟IP
Director Server  192.168.137.101  ens33:0  192.168.137.100
Backup Server  192.168.137.102 ens33:0 192.168.137.100
Real Server1 192.168.137.5 lo:0  192.168.137.100
Real Server2 192.168.137.6  lo:0  192.168.137.100

二、Keepalived的安装配置过程

两台负载均衡服务器上均需要安装、配置Keepalived,ipvsadm

(1)keepalived 作用: 保证每个服务器都是正常的,如果有宕机情况会自动切换;

(2) ipvsadm ==>用来管理负载均衡的机器,

2.1 安装 ipvsadm

(1) 执行yum install -y ipvsadm;


安装IPVS后,就可以配置LVS集群了,首先在Director Server上绑定一个虚拟IP(也叫VIP),此IP用于对外提供服务,执行如下命令:
[root@localhost ~]#ifconfig ens33:0 192.168.137.100 broadcast 192.168.137.100 netmask 255.255.255.255 up

如果此处出现错误:SIOCSIFFLAGS: 无法指定被请求的地址

需要把网卡重启一下使用命令:

/etc/init.d/network restart

此处在ens33设备上绑定了一个虚拟设备ens:33,同时设置了一个虚拟IP是192.168.137.100,也就是上面我们规划的IP地址,然后指定广播地址也为192.168.137.100,需要特别注意的是,这里的子网掩码为255.255.255.255。
然后给设备ens:33指定一条路由,执行如下指令:
[root@localhost ~]#route add -host 192.168.137.100 dev ens33:0 
接着启用系统的包转发功能,从而使系统充当路由器,执行如下指令:
[root@localhost ~]#echo "1" >/proc/sys/net/ipv4/ip_forward
指令中,参数值为1时启用ip转发,为0时禁止ip转发。其实在DR模式中,开启系统的包转发功能不是必须的,而在NAT模式下此操作是必须的。
然后开始配置ipvs,执行如下操作:
[root@localhost ~]#ipvsadm -C
[root@localhost ~]#ipvsadm -A -t 192.168.137.100:80 -s rr -p 600
[root@localhost ~]#ipvsadm -a -t 192.168.137.100:80 -r 192.168.137.5:80 -g
[root@localhost ~]#ipvsadm -a -t 192.168.137.100:80 -r 192.168.137.6:80 -g
上面操作中,第一行是清除内核虚拟服务器列表中的所有记录,第二行是添加一条新的虚拟IP记录。这个新的IP是192.168.137.100,同时指定持续服务时间为600秒。第三、四行是在新加虚拟IP记录中添加两条新的Real Server记录,并且指定LVS 的工作模式为直接路由模式。
最后,启动LVS服务,执行如下操作:
[root@localhost ~]#ipvsadm

在backup server上面也要这么配置ipvsadm;

这样,LVS在Director Server上的配置就完成了。

2.1 安装Keepalived

$ yum -y install keepalived

2.2 配置Keepalived

$ vim /etc/keepalived/keepalived.conf

配置信息如下

! Configuration File for keepalived

global_defs {
notification_email {
acassen@firewall.loc #设置报警邮件地址,可以设置多个,每行一个。
failover@firewall.loc #需开启本机的sendmail服务
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc #设置邮件的发送地址
smtp_server 127.0.0.1 #设置smtp server地址
smtp_connect_timeout #设置连接smtp server的超时时间
router_id LVS_DEVEL #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
} vrrp_instance VI_1 {
state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
interface ens33 #指定HA监测网络的接口
virtual_router_id #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
advert_int #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码
auth_type PASS #设置验证类型,主要有PASS和AH两种
auth_pass #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
192.168.137.100
}
} virtual_server 192.168.137.100 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
delay_loop #设置运行情况检查时间,单位是秒
lb_algo rr #设置负载调度算法,这里设置为rr,即轮询算法
lb_kind DR #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
nat_mask 255.255.255.0
persistence_timeout #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
#有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
#需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作
#那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
protocol TCP #指定转发协议类型,有TCP和UDP两种 real_server 192.168.137.5 { #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
weight #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
#分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
TCP_CHECK { #realserver的状态检测设置部分,单位是秒
connect_timeout #表示3秒无响应超时
nb_get_retry #表示重试次数
delay_before_retry #表示重试间隔
connect_port
}
}
real_server 192.168.137.6 {
weight
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}
  
要注意的地方:

(1)此处可以直接复制过去,注意两个问题,里面是中文因此 ,需要设置一下vi的配置进入 /etc/virc ,在底部输入

set fileencodings=utf-,gbk,ucs-bom,cp936

即可让中文正常显示,

(2)如果使用了XShell 命令中不能正常显示中文,那么请点击File ==>Properties==>Terminal ==>Encoding ==>选择UTF-8 点击确定;即可正常显示中文;

(3)可以直接把上面的代码复制下来放到新建文件放到自己的机器上面,但是别忘了需要转换一下格式,因为我们使用window机器拷贝的,所以在linux上面我们需要转化一下转成linux可以使用的脚本,因为window的回车跟linux的回车是不同的,使用dos2unix转化,

  • 我们使用 (a) yum install dos2unix
  •                (b) dos2unix keepalived.conf   
    • 转换完了,就可以用了;

(4)interface ens33:这里的enp0s3是我的网卡名称,想要查看自己网卡名称的话,在/etc/sysconfig/network-scripts/ifcfg-e(敲下TAB)这个每个系统可能都不同,

       我们可以输入ifconfig,一般会出现两个网卡,一个是ens33还有一个是回环地址lo,对于分发机器master 和backup 我们需要在添加 ens33:0网卡,对于真实机器realserver1,realserver2,我们需要添加lo:0网卡,下一步就能看到这是不同的;

  (5)persistence_timeout 0:指的是在一定的时间内来自同一IP的连接将会被转发到同一realserver中。而不是严格意义上的轮询。默认为50s,因此在测试负载均衡是否可以正常轮询时,最好先把值设置为0,方便查看

(6)TCP_CHECK { :注意TCK_CHECK和 {之间有一个空格,忘记打这个空格的话,可能会出现后面用ipvsadm查看时,某个RS查看不到

(7) 执行 sh realServer.sh start 后报错:realServer.sh:行6: /etc/rc.d/init.d/functions: 权限不够

需要把functions的权限修改一下 使用 chmod 777 /etc/rc.d/init.d/functions ; 即可

(8)另外一个台备用服务器上Keepavlied的配置类似,只是把MASTER改为backup,把priority设置为比MASTER低,设置为90;

keepalived的2个节点执行如下命令,开启转发功能:

# echo  > /proc/sys/net/ipv4/ip_forward

2.3 两台RS上为lo:0绑定VIP地址、抑制ARP广播

两台 RS机器上面都要安装 nginx:

linux安装nginx:http://www.cnblogs.com/aspirant/p/6714548.html

然后我们在nginx的访问目录:我的是这个: /home/zkpk/nginx-1.8.0/html/index.html中

RS1的 index.html 修改一下,这样方便测试,比如输入 我是 RS1;

RS2的 index.html 修改一下,这样方便测试,比如输入 我是 RS2;

在两台RS上编写以下脚本文件realserver.sh

#!/bin/bash
#description: Config realserver VIP=192.168.137.100 /etc/rc.d/init.d/functions case "$1" in
start)
/sbin/ifconfig lo: $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:
echo "" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null >&
echo "RealServer Start OK"
;;
stop)
/sbin/ifconfig lo: down
/sbin/route del $VIP >/dev/null >&
echo "" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit
esac exit

在两台RS上分别执行脚本

$ sh realserver.sh start

执行完了之后,验证一下 使用ifconfig 你会发现 回环地址的网卡会多出一个lo:0的 网卡;

2.4 启用Keepavlied

$ service keepalived start
之后通过ipvsadm -L命令可以查看VIP是否已经成功映射到两台RS,如果发现有问题,可以通过/var/log/message查看错误原因,注意此处的192.168.137:100 你的可能不是,而是localhost之类的,也没有错;

接下来就可以测试可用性了

2.4.1 测试负载均衡

2.4.2测试keepalived的监控检测

停掉RS1的nginx,然后在MASTER负载均衡服务器上可以到看VIP映射关系中已经剔除了192.168.137.5 
(1)停掉RS1的nginx 
     使用 pkill -9 nginx 杀死进程

如果需要开启nginx使用: /usr/local/nginx/sbin/nginx 启动nginx进程;

然后 ps -ef |grep nginx 可以查看nginx是否启动成功;

(2)实验测试1

浏览器访问 http://192.168.137.100  看看是否启动成功,nginx是否显示;

 

实验2

手动关闭192.168.137.5 节点的nginx,service nginx stop 在客户端上去测试访问 http://192.168.137.100 结果正常,不会出现访问失败的情况,

实验3

手动重新开启 192.168.137.5 节点的nginx, service nginx start 在客户端上去测试访问 http://192.168.137.100 结果正常,按照 rr 调度算法访问5节点和6节点。

实验4

测试 keepalived 的HA特性,首先在master上执行命令 ip addr ,可以看到100的vip在master节点上的;这时如果在master上执行 service keepalived stop 命令,这时vip已经不再master上,在slave节点上执行 ip addr 命令可以看到 vip 已经正确漂到slave节点,这时客户端去访问 http://192.168.137.100 访问依然正常,验证了 keepalived的HA特性。

至此实验结束;

 

参考资料:

逐条配置:

http://ixdba.blog.51cto.com/2895551/554799

http://blog.csdn.net/u012852986/article/details/52412174

http://www.jb51.net/article/38368.htm

http://www.cnblogs.com/llhua/p/4195330.html

具体部署:

http://www.cnblogs.com/liwei0526vip/p/6370103.html

nginx启动停止:

http://www.cnblogs.com/codingcloud/p/5095066.html

linux 负载均衡配置 keepalive lvs 使用nginx转发 CentOS7 搭建LVS+keepalived负载均衡的更多相关文章

  1. 阿里云服务器Linux CentOS安装配置(八)nginx安装、配置、域名绑定

    阿里云服务器Linux CentOS安装配置(八)nginx安装.配置.域名绑定 1.安装nginx yum -y install nginx 2.启动nginx service nginx star ...

  2. (转)CentOS7 搭建LVS+keepalived负载均衡(一)

    原文:http://blog.csdn.net/u012852986/article/details/52386306 CentOS7 搭建LVS+keepalived负载均衡(一) CentOS7 ...

  3. CentOS7 搭建LVS+keepalived负载均衡

    1.实验环境 4台节点 Keepalived1 + lvs1(Director1):192.168.31.4 Keepalived2 + lvs2(Director2):192.168.31.3 Re ...

  4. Linux 环境变量配置(Nodejs/MongoDB/JDK/Nginx)

    一.环境变量配置 注:配置环境变量的文件 全局变量(系统级别): /etc/bashrc /etc/profile /etc/environment 用户变量(用户级别): ~/.bash_profi ...

  5. 在Nginx中做负载均衡配置的实例讲解

    负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法. 先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某 ...

  6. lvs与nginx区别

    lvs和nginx都可以用作多机负载方案,他们各有优缺点,在生产环境中需要好好分析实际情况并加以利用. 一.lvs的优势: 1.抗负载能力强,因为lvs工作方式的逻辑是非常简单的,而且工作再网络层第4 ...

  7. LVS、Nginx和HAProxy区别

    LVS.Nginx和HAProxy区别 LVS 优点: 高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力.单台LVS负载均衡器,可支持上万并发连接. 抗负载能力强:是工作在网络4 ...

  8. 阿里云服务器Linux CentOS安装配置(零)目录

    阿里云服务器Linux CentOS安装配置(零)目录 阿里云服务器Linux CentOS安装配置(一)购买阿里云服务器 阿里云服务器Linux CentOS安装配置(二)yum安装svn 阿里云服 ...

  9. centos LB负载均衡集群 三种模式区别 LVS/NAT 配置 LVS/DR 配置 LVS/DR + keepalived配置 nginx ip_hash 实现长连接 LVS是四层LB 注意down掉网卡的方法 nginx效率没有LVS高 ipvsadm命令集 测试LVS方法 第三十三节课

    centos   LB负载均衡集群 三种模式区别 LVS/NAT 配置  LVS/DR 配置  LVS/DR + keepalived配置  nginx ip_hash 实现长连接  LVS是四层LB ...

随机推荐

  1. P2839 [国家集训队]middle

    P2839 [国家集训队]middle 好妙的题啊,,,, 首先二分一个答案k,把数列里>=k的数置为1,=0就是k>=中位数,<0就是k<中位数 数列的最大和很好求哇 左边的 ...

  2. Spring学习(十五)----- Spring AOP通知实例 – Advice

    Spring AOP(面向方面编程)框架,用于在模块化方面的横切关注点.简单得说,它只是一个拦截器拦截一些过程,例如,当一个方法执行,Spring AOP 可以劫持一个执行的方法,在方法执行之前或之后 ...

  3. HALCON视觉算子相关函数中文说明System(2)

    16.6  Parameters get_system_ 功能:根据HALCON系统参数获取关于当前的信息. set_system 功能:HALCON系统参数的设置. 16.7  Serial cle ...

  4. SpringBoot文件上传异常之提示The temporary upload location xxx is not valid

    原文: 一灰灰Blog之Spring系列教程文件上传异常原理分析 SpringBoot搭建的应用,一直工作得好好的,突然发现上传文件失败,提示org.springframework.web.multi ...

  5. STM平台增加性能测试/稳定性测试部分【二】

    [一]方案 基本上测试针对产品的各项方案大体是如下的: 如上所示,针对产品的性能测试主要步骤如下: 1.造数据,在产品业务流上,产生所需的数据,数据量以(稳定性或者压测指标确定) 2.根据步骤1,设定 ...

  6. sqlite导入mysql

    在线阅读地址 http://wenku.baidu.com/view/cc6821a8482fb4daa58d4bb8

  7. 【Unity Shader】(九) ------ 高级纹理之渲染纹理及镜子与玻璃效果的实现

    笔者使用的是 Unity 2018.2.0f2 + VS2017,建议读者使用与 Unity 2018 相近的版本,避免一些因为版本不一致而出现的问题. [Unity Shader](三) ----- ...

  8. java多线程之述解

    说起线程 就不得不提进程 他们之间的关系很紧密 进程:内存中运行的应用程序 每个进程都有自己的一块内存空间 而线程是进程中的一个执行单元 一个进程中可以有多个线程 多线程的好处就是可以并发操作程序 将 ...

  9. linux上的mysql配置过程

    自己阿里云上的服务器,记录下mysql的配置过程防止后面忘记 1. 首先用apt-get工具安装mysql sudo apt-get install mysql-server sudo apt-get ...

  10. dvwa——sql手动注入和sqlmap自动注入

    手动注入 low: 源码: <?php if( isset( $_REQUEST[ 'Submit' ] ) ) { // Get input $id = $_REQUEST[ 'id' ]; ...