1 初识LVS:Linux Virtual Server

1.1 LVS是什么

      LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是从Linux2.4内核以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

1.2 LVS有什么作用

      LVS主要用于服务器集群的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等,有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。

1.3 LVS的体系结构

使用LVS架设的服务器集群系统有三个部分组成:

(1)最前端的负载均衡层,用Load Balancer表示;

(2)中间的服务器集群层,用Server Array表示;

(3)最底端的数据共享存储层,用Shared Storage表示;

在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。

1.4 LVS负载均衡机制

(1)LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。

(2)LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。

①NAT模式:网络地址转换

NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。

②DR模式:直接路由

DR模式下需要LVS和RS集群绑定同一个VIP(RS通过将VIP绑定在loopback实现),但与NAT的不同点在于:请求由LVS接受,由真实提供服务的服务器(RealServer, RS)直接返回给用户,返回的时候不经过LVS。详细来看,一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变,LVS只是做了一下移花接木。RS收到LVS转发来的包时,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS。

(3)DR负载均衡模式数据分发过程中不修改IP地址,只修改mac地址,由于实际处理请求的真实物理IP地址和数据请求目的IP地址一致,所以不需要通过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。因此,DR模式具有较好的性能,也是目前大型网站使用最广泛的一种负载均衡手段。

2 构建实战:LVS+Keepalived实现mysql负载均衡

2.1 实验结构总览

(1)本次基于VMware Workstation搭建一个四台Linux(CentOS 6.4)系统所构成的一个服务器集群,其中两台负载均衡服务器(一台为主机,另一台为备机),另外两台作为真实的Web服务器(向外部提供http服务,这里仅仅使用了CentOS默认自带的http服务,没有安装其他的类似Tomcat、Jexus服务)。

(2)本次实验基于DR负载均衡模式

设置了一个VIP(Virtual IP)为192.168.5.200,用户只需要访问这个IP地址即可获得网页服务。

负载均衡主机为192.168.5.120

备机为192.168.5.121

mysql服务器A为192.168.5.122

mysql服务器B为192.168.5.123

2.2 基础准备工作

以下工作针对所有服务器,也就是说要在四台服务器中都要进行配置:

(1)网络配置

  参考 centos网络配置,将4台虚拟机配置成静态ip

(2)设定主机名

①修改当前会话中的主机名,执行命令hostname xxxx (这里xxxx为你想要改为的名字)

②修改配置文件中的主机名,执行命令vi /etc/sysconfig/network (√一般需要进行此步凑才能永久更改主机名)

验证:重启系统reboot

(3)IP地址与主机名的绑定

执行命令vi /etc/hosts,增加一行内容,如下(下面的从节点以你自己的为主,本实验搭建了两个从节点):

192.168.5.120 lvs-master

192.168.5.121 lvs-slave

#下面是本次试验的两个真实服务器节点

192.168.5.122 lvs-mysql1

192.168.5.123 lvs-mysql2

保存后退出

验证:ping lvs-master

(4)关闭防火墙

①执行关闭防火墙命令:service iptables stop

      验证:service iptables stauts

②执行关闭防火墙自动运行命令:chkconfig iptables off

验证:chkconfig --list | grep iptables

2.3 配置两台mysql服务器

以下操作需要在角色为数据库服务器的两台中进行,不需要在负载均衡服务器中进行操作:

(1)安装和运行mysql

参考我之前写的一篇文章:MySQL知识总结(一)安装与配置(Linux CentOS)

创建数据库bruce

创建表test并插入数据:

  1. create table test(
  2. id int,
  3. name varchar(10)
  4. );
  5. -- A中插入
  6. insert into test values(1,'A');
  7. -- B中插入
  8. insert into test values(2,'B');

(2)编辑realserver脚本文件

①进入指定文件夹:cd /etc/init.d/

②创建脚本文件:vi realserver

  1. SNS_VIP=192.168.5.200
  2. /etc/rc.d/init.d/functions
  3. case "$1" in
  4. start)
  5. ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
  6. /sbin/route add -host $SNS_VIP dev lo:0
  7. echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  8. echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
  9. echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
  10. echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  11. sysctl -p >/dev/null 2>&1
  12. echo "RealServer Start OK"
  13. ;;
  14. stop)
  15. ifconfig lo:0 down
  16. route del $SNS_VIP >/dev/null 2>&1
  17. echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
  18. echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
  19. echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
  20. echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
  21. echo "RealServer Stoped"
  22. ;;
  23. *)
  24. echo "Usage: $0 {start|stop}"
  25. exit 1
  26. esac
  27. exit 0

这里我们设置虚拟IP为:192.168.5.200

③保存脚本文件后更改该文件权限:chmod 755 realserver

④开启realserver服务:service realserver start

2.4 配置主负载服务器

关于keepalived相关知识,请参考:http://bbs.nanjimao.com/thread-855-1-1.html

(1)安装Keepalived相关包

wget http://www.keepalived.org/software/keepalived-1.2.13.tar.gz

tar -zxvf keepalived-1.2.13.tar.gz

cd keepalived-1.2.13

./configure --disable-fwmark --prefix=/usr/local/keepalived

make && make install

(2)编辑keepalived.conf配置文件

①进入keepalived.conf所在目录:cd /etc/keepalived

②首先清除掉keepalived原有配置:> keepalived.conf

③重新编辑keepalived配置文件:vi keepalived.conf

  1. global_defs {
  2. router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
  3. }
  4. vrrp_instance VI_1 {
  5. state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备
  6. interface eth1 #指定Keepalived的角色,MASTER为主,BACKUP为备
  7. virtual_router_id 51 #虚拟路由编号,主备要一致
  8. priority 100 #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
  9. advert_int 1 #检查间隔,默认为1s
  10. authentication {
  11. auth_type PASS
  12. auth_pass 1111
  13. }
  14. virtual_ipaddress {
  15. 192.168.5.200 #定义虚拟IP(VIP)为192.168.2.33,可多设,每行一个
  16. }
  17. }
  18. # 定义对外提供服务的LVS的VIP以及port
  19. virtual_server 192.168.5.200 3306 {
  20. delay_loop 6 # 设置健康检查时间,单位是秒
  21. lb_algo wlc # 设置负载调度的算法为wlc 基于权重的调度算法
  22. lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
  23. nat_mask 255.255.255.0
  24. #persistence_timeout 0 会话保持时间
  25. protocol TCP
  26. real_server 192.168.5.122 3306 { # 指定real server1的IP地址
  27. weight 3 # 配置节点权值,数字越大权重越高
  28. TCP_CHECK {
  29. connect_timeout 10
  30. nb_get_retry 3
  31. delay_before_retry 3
  32. connect_port 3306
  33. }
  34. }
  35. real_server 192.168.5.123 3306{ # 指定real server2的IP地址
  36. weight 3 # 配置节点权值,数字越大权重越高
  37. TCP_CHECK {
  38. connect_timeout 10
  39. nb_get_retry 3
  40. delay_before_retry 3
  41. connect_port 3306
  42. }
  43. }
  44. }

注意:会话保持时间要注释掉,这样可以看出负载均衡的调度

(3)开启keepalived服务

  1. service keepalived start
  1. 停止命令
  1. service keepalived stop
  1. 查看状态
  1. service keepalived status

检测:运行命令ipvsadm

2.5 配置从负载服务器

从负载服务器与主负载服务器大致相同,只是在keepalived的配置文件中需要改以下两处:

(1)将state由MASTER改为BACKUP

(2)将priority由100改为99

  1. vrrp_instance VI_1 {
  2. state BACKUP # 这里改为BACKUP
  3. interface eth1
  4. virtual_router_id 51
  5. priority 99 # 这里改为99,master优先级是100
  6. advert_int 1
  7. authentication {
  8. auth_type PASS
  9. auth_pass 1111
  10. }
  11. virtual_ipaddress {
  12. 192.168.5.200
  13. }
  14. }

2.6 验证性测试

在客户端上登录mysql,客户端机器是120,121,122,123之外的机器

mysql -h192.168.5.200 -uroot –pbruce -P3306 –Dbruce

因为mysql是长连接,所以测试时需要开启多个命令窗口进行连接

发现请求被平均分配到A和B服务器

 

参考文章:

http://www.cnblogs.com/edisonchou/p/4281978.html

keepalived:

Keepalived双机热备(HA)精讲

Keepalived原理与实战精讲

LVS+Keepalived实现mysql的负载均衡的更多相关文章

  1. LVS+Keepalived 实现高可用负载均衡

    前言 在业务量达到一定量的时候,往往单机的服务是会出现瓶颈的.此时最常见的方式就是通过负载均衡来进行横向扩展.其中我们最常用的软件就是 Nginx.通过其反向代理的能力能够轻松实现负载均衡,当有服务出 ...

  2. LVS+Keepalived实现高可用负载均衡(转)

    LVS+Keepalived实现高可用负载均衡   一.原理         1.概要介绍         如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具 ...

  3. lvs+keepalived+nginx实现高性能负载均衡集群【转】

    转自 lvs+keepalived+nginx实现高性能负载均衡集群 - 青衫lys - 博客园http://www.cnblogs.com/liuyisai/p/5990645.html 一.为什么 ...

  4. 【架构师之路】 LVS+Keepalived实现高可用负载均衡

    一.原理        1.概要介绍        如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具有3~5层交换功能,其主要作用是检测web服务器的状态, ...

  5. LVS+Keepalived 实现高可用负载均衡集群

    LVS+Keepalived  实现高可用负载均衡集群     随着网站业务量的增长,网站的服务器压力越来越大?需要负载均衡方案!商业的硬件如 F5 ,Array又太贵,你们又是创业型互联公司如何有效 ...

  6. Windows+IIS结合LVS+Keepalived是实现Linux负载均衡软件

    在Discuz!NT的最新版本(企业版)中,支持目前主流LINUX平台上的负载均衡解决方案,比如NGINX,HAPROXY,LVS等.本文与其说是解决方案,倒不如说是介绍如何搭建Discuz!NT负载 ...

  7. 【Nginx】(主从热备)LVS+Keepalived+Nginx实现高性能负载均衡集群

    一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...

  8. MySQL主从复制与lvs+keepalived单点写入读负载均衡高可用实验【转】

    一.环境Master(主机A):192.168.1.1Slave(主机B) :192.168.1.2  W-VIP(写入)  :192.168.1.3 R-VIP(读取)  :192.168.1.4  ...

  9. lvs+keepalived+nginx实现高性能负载均衡集群

    一.为什么要使用负载均衡技术? 1.系统高可用性 2.  系统可扩展性 3.  负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...

随机推荐

  1. JVM基础系列第10讲:垃圾回收的几种类型

    我们经常会听到许多垃圾回收的术语,例如:Minor GC.Major GC.Young GC.Old GC.Full GC.Stop-The-World 等.但这些 GC 术语到底指的是什么,它们之间 ...

  2. jni c++

        java与c/c++之间的数据交互     JNI     上述两篇文章对jni的讲解比较详细,各有利弊,就文章1来说,开门见山,直接阐述了java和C/C++的交互方式:文章2是一篇百度文库 ...

  3. Java基础20:Java8新特性终极指南

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  4. 【Java基础】【03运算符&if语句】

    03.01_Java语言基础(逻辑运算符的基本用法)(掌握) A:逻辑运算符有哪些 &,|,^,! &&,|| B:案例演示 逻辑运算符的基本用法 注意事项: a:逻辑运算符一 ...

  5. 设计模式总结篇系列:工厂方法模式(Factory Method)

    工厂方法模式适合于对实现了同一接口或继承了同一父类的一些类进行实例的创建.一般是通过定义一个工厂类,并在其方法中实现对具有上述特点的类对象的创建. 根据具体产生类对象的方法定义形式,又可以将其分为普通 ...

  6. NET快速信息化系统开发框架 V3.2 -> “用户管理”主界面使用多表头展示、增加打印功能

    RDIFrameowrk.NET 用户管理是使用非常频繁的模块,由于需要展示的字段比较多,以前的展示方式显得不是太规范,现3.2版本用户管理主界面进行了全新的设计,数据列表展示使用了Dev家族全新的G ...

  7. 深入解读阿里云数据库POLARDB核心功能物理复制技术

    日志是数据库的重要组成部份,按顺序以增量的方式记录了数据库上所有的操作,日志模块的设计对于数据库的可靠性.稳定性和性能都非常重要. 可靠性方面,在有一个数据文件的基础全量备份后,对运行中的数据库来说, ...

  8. Spring Boot 2.x(十四):整合Redis,看这一篇就够了

    目录 Redis简介 Redis的部署 在Spring Boot中的使用 Redis缓存实战 寻找组织 程序员经典必备枕头书免费送 Redis简介 Redis 是一个开源的使用 ANSI C 语言编写 ...

  9. 痞子衡嵌入式:ARM Cortex-M内核那些事(4)- 性能指标

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M性能指标. 1.处理器的性能指标 用于评价CPU的性能指标非常多,不同的性能侧重点下的测试标准可能得出的指标值不 ...

  10. shell编程练习(二): 笔试11-20

    笔试练习(二): 11.写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录. [root@VM_0_5_centos test]# vi 11.sh [root@VM_0_5_cento ...