设为首页 收藏本站
查看: 1320|回复: 0

[经验分享] LVS+Keepalived实现mysql的负载均衡

[复制链接]

尚未签到

发表于 2015-9-4 07:58:47 | 显示全部楼层 |阅读模式
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表示;
  在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
DSC0000.png
  1.4 LVS负载均衡机制
  (1)LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。
  (2)LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。
  ①NAT模式:网络地址转换
DSC0001.jpg
  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模式:直接路由
DSC0002.jpg
  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 实验结构总览
DSC0003.png
  (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并插入数据:
  
create table test(
id int,
name varchar(10)
);
-- A中插入
insert into test values(1,'A');
-- B中插入
insert into test values(2,'B');
  (2)编辑realserver脚本文件
  ①进入指定文件夹:cd /etc/init.d/
  ②创建脚本文件:vi realserver



SNS_VIP=192.168.5.200
/etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
ifconfig lo:0 down
route del $SNS_VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
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



global_defs {  
router_id LVS_DEVEL  # 设置lvs的id,在一个网络内应该是唯一的
}  
vrrp_instance VI_1 {  
state MASTER   #指定Keepalived的角色,MASTER为主,BACKUP为备         
interface eth1  #指定Keepalived的角色,MASTER为主,BACKUP为备
virtual_router_id 51  #虚拟路由编号,主备要一致
priority 100  #定义优先级,数字越大,优先级越高,主DR必须大于备用DR   
advert_int 1  #检查间隔,默认为1s
authentication {  
auth_type PASS  
auth_pass 1111  
}  
virtual_ipaddress {  
192.168.5.200  #定义虚拟IP(VIP)为192.168.2.33,可多设,每行一个
}  
}  
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.5.200 3306 {  
delay_loop 6 # 设置健康检查时间,单位是秒                    
lb_algo wlc # 设置负载调度的算法为wlc 基于权重的调度算法                  
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式   
nat_mask 255.255.255.0               
#persistence_timeout 0 会话保持时间   
protocol TCP                  
real_server 192.168.5.122 3306 {  # 指定real server1的IP地址
weight 3   # 配置节点权值,数字越大权重越高              
TCP_CHECK {  
connect_timeout 10         
nb_get_retry 3  
delay_before_retry 3  
connect_port 3306  
}  
}  
real_server 192.168.5.123 3306{  # 指定real server2的IP地址
weight 3  # 配置节点权值,数字越大权重越高  
TCP_CHECK {  
connect_timeout 10  
nb_get_retry 3  
delay_before_retry 3  
connect_port 3306  
}  
}  
}
  注意:会话保持时间要注释掉,这样可以看出负载均衡的调度
  (3)开启keepalived服务

service keepalived start
停止命令
service keepalived stop
查看状态
service keepalived status
  检测:运行命令ipvsadm
DSC0004.png

2.5 配置从负载服务器
  从负载服务器与主负载服务器大致相同,只是在keepalived的配置文件中需要改以下两处:
  (1)将state由MASTER改为BACKUP
  (2)将priority由100改为99
DSC0005.gif

vrrp_instance VI_1 {  
state BACKUP # 这里改为BACKUP
interface eth1  
virtual_router_id 51  
priority 99 # 这里改为99,master优先级是100
advert_int 1  
authentication {  
auth_type PASS  
auth_pass 1111  
}  
virtual_ipaddress {  
192.168.5.200  
}  
}  


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原理与实战精讲

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109186-1-1.html 上篇帖子: 安装keepalived 下篇帖子: 2 台 Linux 配置 keepalived + LVS (Direct Route)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表