高可用与负载均衡(7)之聊聊Lvs-DR+Keepalived的解决方案
今天直接开门见山了,直接说配置吧。首先介绍下我这的环境
如有问题,请联系我18500777133@sina.cn
| IP | 安装软件 |
|---|---|
| 192.168.1.7 | lvs1+keepalived master角色 |
| 192.168.1.8 | lvs2+keepalived backup角色 |
| 192.168.1.6 | web1-Nginx |
| 192.168.1.4 | web2-Nginx |
keepalived的vip是192.168.1.200,系统环境都是CentOs6.6 64位。
需要注意的是:
第一:确保client能够直接访问web服务器。因为在LVS-DR模式下web服务器回复client的时候,是直接回复给client的,不需要经过LVS,所以web服务器必须能够和client的网络互通。
第二,lvs服务器和web-server他们必须在同一个网段内,因为LVS转发包的时候,是直接修改了包目标的MAC地址,直接扔给了rs,基于MAC地址的修改是活动在OSI二层数据链路层的,工作在数据链路层的网络设备就是交换机了,所以必须在一个交换机下面,也就是一个局域网内。
第三为啥抑制real-server的ARP,是这样的,我们在DR模式要更改web-server的ARP的模式,arp_ignore为1是说只回答目标IP地址是来访网络接口本地地址的ARP查询请求,我们都在回环接口上配置了一个VIP,当arp模式更改以后,那么如果有谁在请求VIP的mac地址时,那么那些web-server就会回答arp广播报文了,只有lvs才会,如果没有更改arp模式,那么大家都喊我是VIP,这就乱套了。
LVS+keepalived的调整
我们首先在LVS1和LVS2上开启路由转发的功能
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 #编辑这行
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
接下来安装keepalived,我这里采用yum安装,命令yum install keepalived的,安装完系统自带的yum源即可,安装完之后配置keepalived。
先看keepalived master的配置文件
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { # 全局设置
notification_email { # 设置报警邮件地址
18500777133@sina.cn
}
notification_email_from Alexandre.Cassen@firewall.loc # 设置邮件的发送地址
router_id test-1 # 表示该台服务的ID
}
vrrp_sync_group vg_1 { # vrryp 同步组,组成员是vrrp实例的名字。
group {
VI_1
}
}
vrrp_instance VI_1 { # vrrp 实例
state MASTER #master状态
interface eth0
virtual_router_id 51 # master和backup的id一致
priority 100
advert_int 1 # master和backup之间的检测时间
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200/32 dev eth0 # 设置虚拟IP
}
}
virtual_server 192.168.1.200 80 { # 设置虚拟服务器,ip端口以及花边号用逗号隔开
delay_loop 5 # 设置运行情况检查时间,单位是秒
lb_algo rr # 负载算法,这里是rr表示轮询
lb_kind DR # LVS工作机制,这里是DR模式
persistence_timeout 50 # 会话保持时间,单位是秒,这个选项对动态网页非常有帮助,为集群系统中的session共享提供了一个很好的解决方案,有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,知道超过这个会话的保持时间,需要注意的是,这个会话保持时间是最大无响应的超时时间,in other words,用户在动态页面50秒以内没有执行任何操作,那么接下来的操作会重新调度到另一个节点上。如果一直在操作则不会影响
protocol TCP # 有TCP,UDP,好像还有哦http。
real_server 192.168.1.6 80 { #设定真实服务器地址以及端口,
weight 1 # 设置权重,数字越低,调度的比例越小。
HTTP_GET { #以http模式检查该服务器监控状态
url {
path / # 检测的网页路径
digest e3eb0a1df437f3f97a64aca5952c8ea0 # 采用genhash命令获取
}
connect_timeout 1 # 连接超时时间,
connect_port 80 连接的端口,
nb_get_retry 3 # 表示重试次数,
delay_before_retry 1 # 表示重试间隔。
}
}
real_server 192.168.1.4 80 {
weight 1
HTTP_GET {
url {
path /test.html
digest 1181c1834012245d785120e3505ed169
}
connect_timeout 2
connect_port 80
nb_get_retry 3
delay_before_retry 1
}
}
}
再看看keepalived的backup配置:
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
18500777133@sina.cn
}
notification_email_from Alexandre.Cassen@firewall.loc
router_id test-2
}
vrrp_sync_group vg_1 {
group {
VI_1
}
}
vrrp_instance VI_1 {
state BACKUP # backup状态
interface eth0
virtual_router_id 51 # master和backup的id一致
priority 90 #优先级比master低些
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.200/32 dev eth0
}
}
virtual_server 192.168.1.200 80 {
delay_loop 5
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.1.6 80 {
weight 1
HTTP_GET {
url {
path /
digest e3eb0a1df437f3f97a64aca5952c8ea0
}
connect_timeout 1
connect_port 80
nb_get_retry 3
delay_before_retry 1
}
}
real_server 192.168.1.4 80 {
weight 1
HTTP_GET {
url {
path /test.html
digest 1181c1834012245d785120e3505ed169
}
connect_timeout 2
connect_port 80
nb_get_retry 3
delay_before_retry 1
}
}
}
我们这会用genhash来获取web服务 url的校验码:
[root@localhost ~]# genhash -s 192.168.45.128 -p 80 -u /
MD5SUM = e3eb0a1df437f3f97a64aca5952c8ea0 # 把这个校验码放在keepalived的配置文件即可。
配置完后,暂且不着急启动keepalived的服务。我们先行配置web服务器。
Web服务器的调整
两台web服务器都做同样的操作
首先更改sysctl.conf的配置文件。命令如下:
root@leo-virtual-machine:~# cat /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
root@leo-virtual-machine:~# sysctl -p #使其刚才的配置立即生效
添加虚拟IP以及路由,命令如下:
root@leo-virtual-machine:~# ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200 up
@root@leo-virtual-machine:~# route add -host 192.168.1.200 dev lo:0 #先不添加这路由,如果出现无法访问的时候再添加也不迟
个人建议不要忘记在rc.local里面写入增加VIP的添加命令,省去开机后人工配置的麻烦:
@root@leo-virtual-machine:~# cat /etc/rc.local
ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200
route add -host 192.168.1.200 dev lo:0
完成之后,后端启动httpd服务
启动keepalived的服务
在master服务器上启动
[root@localhost ~]# service keepalived start
[root@localhost ~]# tail /var/log/messages -f # 查看keepalived的日志,确保服务启动正常
'''
Nov 19 17:09:28 localhost Keepalived_healthcheckers[14376]: Using LinkWatch kernel netlink reflector...
Nov 19 17:09:28 localhost Keepalived_healthcheckers[14376]: Activating healthchecker for service [192.168.1.6]:80 # 后端real-server校验成功,可以提供服务
Nov 19 17:09:28 localhost Keepalived_healthcheckers[14376]: Activating healthchecker for service [192.168.1.4]:80 # 后端real-server校验成功,可以提供服务
Nov 19 17:09:28 localhost Keepalived_vrrp[14377]: VRRP_Instance(VI_1) Transition to MASTER STATE # 设置本机为master角色
Nov 19 17:09:28 localhost Keepalived_vrrp[14377]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election
Nov 19 17:09:28 localhost Keepalived_vrrp[14377]: VRRP_Group(vg_1) Syncing instances to MASTER state
Nov 19 17:09:29 localhost Keepalived_vrrp[14377]: VRRP_Instance(VI_1) Entering MASTER STATE
Nov 19 17:09:29 localhost Keepalived_vrrp[14377]: VRRP_Instance(VI_1) setting protocol VIPs. #设置VIP到本机上
Nov 19 17:09:29 localhost Keepalived_vrrp[14377]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.200
[root@localhost ~]# ip a|grep 'inet '
inet 127.0.0.1/8 scope host lo
inet 192.168.1.7/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.200/32 scope global eth0 # VIP已经在了。
You have new mail in /var/spool/mail/root
在backup以同样的命令启动keepalived的,测试负载功能和高可用功能。
检测服务是否可以高可用以及负载均衡
1 在keepalived的master上停止keepalived的服务,模拟服务器宕机啦。等2秒后,到keepalived的backup服务器上查看VIP是否漂移过去。此时用浏览器继续访问192.168.1.200,看web服务器能够正常响应。且注意网页,看是不是负载均的效果(根据权重,权重高的服务提供的网页次数多。)
2 在第一步的基础上,我们在keepalived的master上重新启动keepalived的服务,等待3秒后,看VIP是否正常切回,切回后检测web服务器是否可用。
高可用与负载均衡(7)之聊聊Lvs-DR+Keepalived的解决方案的更多相关文章
- Mycat - 高可用与负载均衡实现,满满的干货!
前言 开心一刻 和朋友去吃小龙虾,隔壁桌一个小女孩问妈妈:"妈妈,小龙虾回不了家,它妈妈会不会着急?" 她妈妈愣住了,我扒虾的手停下了,这么善良的问题,怎么下得了口.这是老板急忙过 ...
- Keepalived+HAProxy实现RabbtiMQ高可用的负载均衡
HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在 ...
- PostgreSQL 9.5 高可用、负载均衡和复制
高可用.负载均衡和复制 1. 不同方案的比较 共享磁盘故障转移 共享磁盘故障转移避免了只使用一份数据库拷贝带来的同步开销. 它使用一个由多个服务器共享的单一磁盘阵列.文件系统(块设备)复制 DRBD是 ...
- Mysql读写分离 及高可用高性能负载均衡实现
什么是读写分离,说白了就是mysql服务器读的操作和写的操作是分开的,当然这个需要两台服务器,master负责写,slave负责读,当然我们可以使用多个slave,这样我们也实现了简单意义上的高可用和 ...
- 搭建Keepalived+LNMP架构web动态博客 实现高可用与负载均衡
环境准备: 192.168.193.80 node1 192.168.193.81 node2 关闭防火墙 [root@node1 ~]# systemctl stop firewalld #两台都 ...
- Dubbo入门到精通学习笔记(十六):Keepalived+Nginx实现高可用Web负载均衡
文章目录 Keepalived+Nginx实现高可用Web负载均衡 Keepalived+Nginx实现高可用Web负载均衡 高可用架构篇 Keepalived + Nginx 实现高可用 Web 负 ...
- EMQ集群搭建实现高可用和负载均衡(百万级设备连接)
一.EMQ集群搭建实现高可用和负载均衡 架构服务器规划 服务器IP 部署业务 作用 192.168.81.13 EMQTTD EMQ集群 192.168.81.22 EMQTTD EMQ集群 192. ...
- Keepalived + Nginx 实现高可用 Web 负载均衡
一.Keepalived 简要介绍 Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前 ...
- 通过LVS+Keepalived搭建高可用的负载均衡集群系统
1. 安装LVS软件 (1)安装前准备操作系统:统一采用Centos6.5版本,地址规划如下: 服务器名 IP地址 网关 虚拟设备名 虚拟ip Director Server 192.168 ...
随机推荐
- HTML5+JS 《五子飞》游戏实现(七)游戏试玩
前面第一至第六章我们已经把<五子飞>游戏的基本工作都已经讲得差不多了,这一章主要是把所有的代码分享给大家,然后小伙伴们也可以玩一玩. 至于人机对战的我们放到后面讲进行分析. 试玩地址:ht ...
- unittest使用过程中sys.exit(not self.result.wasSuccessful())
起因: 在运行下面的unittest过程中出现了个Traceback: 被测试脚本: # splitter.py def split(line, types=None, delimiter=None) ...
- STM32 C语言,端口映射
static XX 有记忆的定义 typedef XX 可以多次定义一个 #ifedf XXX XXX(程序段1) #else XXX(程序段2)
- struct socket 结构详解
Socket数据结构网络协议CC++ 用户使用socket系统调用编写应用程序时,通过一个数字来表示一个socket,所有的操作都在该数字上进行,这个数字称为套接字描述符.在系统调用 的实现函 ...
- 关于拉格朗日乘子法和KKT条件
解密SVM系列(一):关于拉格朗日乘子法和KKT条件 标签: svm算法支持向量机 2015-08-17 18:53 1214人阅读 评论(0) 收藏 举报 分类: 模式识别&机器学习(42 ...
- JavaScript学习笔记-简单的欢迎cookie
0<!DOCT0000YPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml&quo ...
- zabbix解决中文乱码问题(没有测试成功)
zabbix解决中文乱码问题 1.在windows系统中找一个自己喜欢的字体,这里我们用:msyh.ttf 2.将字体上传至/var/www/html/zabbix/fonts目录下 [root@za ...
- Mybatis学习--spring和Mybatis整合
简介 在前面写测试代码的时候,不管是基于原始dao还是Mapper接口开发都有许多的重复代码,将spring和mybatis整合可以减少这个重复代码,通过spring的模板方法模式,将这些重复的代码进 ...
- Ubuntu14.04下安装Hadoop2.4.0 (单机模式)
一.在Ubuntu下创建hadoop组和hadoop用户 增加hadoop用户组,同时在该组里增加hadoop用户,后续在涉及到hadoop操作时,我们使用该用户. 1.创建hadoop用户组 2.创 ...
- [转]oracle设计数据库应选择正确的数据类型
原文地址:http://blog.sina.com.cn/s/blog_5014663501007n40.html 在设计数据库的时候,选择正确的数据类型,往往可以避免很多的问题,正确理解数据库的类型 ...