集群高可用之lvs+keepalive
集群高可用之lvs+keepalive
keepalive简介:
负载均衡架构依赖于知名的IPVS内核模块,keepalive由一组检查器根据服务器的健康情况动态维护和管理服务器池。keepalive通过VRRP协议实现高可用架构。VRRP是路由灾备的实现基础。
LVS核心是调度器,所有的数据请求需要经过调度器进行调度转发。万一调度器发生故障,整个集群系统全部崩溃,所以需要keepalive实现集群系统的高可用。
部署两台或多台lvs调度器,仅有一台调度器做主服务器,其他为备用。当主发生故障后,keepalive可以自动将备用调度器作为主,实现整个集群系统的高负载,高可用
VRRP协议介绍:
VRRP协议是为消除在静态缺省路由环境下的缺省路由器单点故障引起的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时可以不影响内外数据通信,不需要再修改内部网络的网络参数。VRRP协议需要具有IP地址备份,优先路由选择,减少不必要的路由器间通信等功能。
VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。
配置VRRP协议时需要配置每个路由器的虚拟路由器ID(VRID)和优先权值,使用VRID将路由器进行分组,具有相同VRID值的路由器为同一个组,VRID是一个0~255的正整数;同一组中的路由器通过使用优先权值来选举MASTER,优先权大者为MASTER,优先权也是一个0~255的正整数。
有一种特殊情况,将虚拟路由IP地址设置为多台路由设备中某台设备的真实ip地址,该路由设备将永远处于主设备状态。
本例用centos7服务器
keepalived 搭建
yum -y install gcc openssl-devel popt-devel libnl libnl-devel kernel-devel ipvsadm
cd /usr/local/src
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar -xzf keepalived-1.2.7.tar.gz
cd keepalived-1.2.7/
./configure
make && make install
ln -s /usr/local/etc/keepalived/ /etc
ln -s /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/

配置图如上:
配置如下:
web1,web2 的操作
nginx1的操作
vim /etc/sysconfig/network-scripts/ifcfg-eno16
DEVICE=eno16
BOOTPROTO=statci
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.30
NETMASK=255.255.255.0
GATEWAY=192.168.1.1 vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
BOOTPROTO=statci
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1 vim /etc/sysctl.conf
net.ipv4.conf.eno16.arp_ignore = 1
net.ipv4.conf.eno16.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce =2 sysctl -p
systemctl restart network
echo "192.168.1.100" > /usr/local/nginx/conf/html/index.html
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload nginx2的操作
vim /etc/sysconfig/network-scripts/ifcfg-eno16
DEVICE=eno16
BOOTPROTO=statci
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.40
NETMASK=255.255.255.0
GATEWAY=192.168.1.1 vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
BOOTPROTO=statci
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1 vim /etc/sysctl.conf
net.ipv4.conf.eno16.arp_ignore = 1
net.ipv4.conf.eno16.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce =2 sysctl -p
systemctl restart network
echo "192.168.1.40" > /usr/local/nginx/conf/html/index.html
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
调度器lvs1和lvs2的配置
lvs1的配置
vim /etc/sysconfig/network-scripts/ifcfg-eno16
DEVICE=eno16
BOOTPROTO=statci
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.10
NETMASK=255.255.255.0
GATEWAY=192.168.1.1 systemctl restart network
yum -y install keepalived ipvsadm
将lvs1设置为主,lvs2设置为备,保证其中一台调度器出现故障后,另一台可以及时。
自动激活替换损坏的故障设备。在该配置文件中添加虚拟服务,
并为该虚拟服务添加后端真实web服务器组和相应的调度算法。
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
notification_email {
test@gmail.com
}
notification_email_from root@localhost
smtp_server 127.0.0.1
smtp_connect_timeout
router_id lvs1
} vrrp_instance LVS_HA {
state MASTER #lvs_2为备用
interface eno16
virtual_router_id #lvs_2的VRID必须与lvs_1相同
priority #在相同的VRID组中优先级高者为主设备
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.0.1/
}
} virtual_server 192.168.0.1 {
delay_loop
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 192.168.1.30 {
weight
TCP_CHECK {
connetct_timeout
connect_port
nb_get_retry
}
} real_server 192.168.1.40 {
weight
TCP_CHECK {
connetct_timeout
connect_port
nb_get_retry
}
}
}
systemctl start keepalived
systemctl enable keepalived
ip addr show
ipvsadm -Ln
firewall-cmd --set-default-zone=trusted
同理在上面配置lvs2
更改下网卡信息
vim /etc/keepalived/keepalived.conf
router_id lvs_2和priority 50
在软路由上配置ip省略。
省略ip的配置
systemctl restart network
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
因为使用的是Linux的软路由,下面需要使用iptables实现NAT地址转发功能,
实现内网和外网的数据通信
iptables -t nat -I PREPOUTING -d 124.126.147.168 -p tcp \
-dport \ -j DNAT --to-destination 192.168.1.100: iptables -t nat -I POSTROUTING -S 192.168.1.0/ -P tcp \
-j SNAT --to-source 124.126.147.168 vim /etc/sysctl.conf
net.ipv4.ip_forward = sysctl -p
客户端验证:http://124.126.147.168,可以得到不同real server的响应数据包
集群高可用之lvs+keepalive的更多相关文章
- 集群高可用之lvs
集群: 随着互联网的发展,大量的客户端的请求,服务器的负载越来越大,单台服务器的负载有限,会导致服务器响应客户端请求的时间越长,甚至产生拒绝服务的情况.目前网站是24小时不间断提供网络服务,仅采用单点 ...
- Rabbitmq集群高可用测试
Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...
- bitmq集群高可用测试
Rabbitmq集群高可用 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模 ...
- openstack pike 集群高可用 安装 部署 目录汇总
# openstack pike 集群高可用 安装部署#安装环境 centos 7 史上最详细的openstack pike版 部署文档欢迎经验分享,欢迎笔记分享欢迎留言,或加QQ群663105353 ...
- 浅谈MySQL集群高可用架构
前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...
- Eureka 集群高可用配置.
SERVER:1 server: port: 1111 eureka: instance: hostname: ${spring.cloud.client.ip-address} instance-i ...
- mysql集群高可用架构
前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用.对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库,搜索,消息队列等,每个模块都需要做到高可用,才能 ...
- hadoop+zookeeper集群高可用搭建
hadoop+zookeeper集群高可用搭建 Senerity 发布于 2 ...
- RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列
系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...
随机推荐
- Java编程基础-选择和循环语句
一.选择结构语句 选择结构:也被称为分支结构.选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码. Java语言提供了两种选择 ...
- 5个典型的JavaScript面试题
在IT界,需要大量的 JavaScript 开发者.如果你的能力能够胜任这一角色,那么你将获得许多换工作和提高薪水的机会.但是在你被公司录取之前,你需要展现你的技术,以便通过面试环节.在这篇文章中,我 ...
- SourceInsight主题设置
自己经常忘记怎样设置SourceInsight主题,这次一定要记住! 0. 退出SourceInsight软件1. 替换配置文件操作:拷贝Global.CF3到“我的文档\Source Insight ...
- Volley源码解析(三) 有缓存机制的情况走缓存请求的源码分析
Volley源码解析(三) 有缓存机制的情况走缓存请求的源码分析 Volley之所以高效好用,一个在于请求重试策略,一个就在于请求结果缓存. 通过上一篇文章http://www.cnblogs.com ...
- saltstack-day1
一.远程执行命令 1.指定一个ipv4地址或者一个子网 salt -S 172.16.7.19 test.ping salt -S test.ping 2. 正则表达式 salt -E "j ...
- vue-awesome-swiper 插件
Swiper 版本区分了组件和普通版本 (1)npm install vue-awesome-swiper –save (2)在 main,js 里引入(全局): import VueAwesomeS ...
- Codeforces Round #272 (Div. 2)-A. Dreamoon and Stairs
http://codeforces.com/contest/476/problem/A A. Dreamoon and Stairs time limit per test 1 second memo ...
- springboot-i18n国际化
简介 In computing, internationalization and localization are means of adapting computer software to di ...
- urlrewrite地址重写实例
urlrewrite主要实现后天请求中的地址重写,防止被安全漏洞盲注入 http://tuckey.org/urlrewrite/ 下载最新的jar 下面是使用说明: 1.下载urlrewrite,官 ...
- shell脚本,录制和回放终端的小工具script。
action.log和time.log这两个配置文件被当做script命令的参数.这两个文件可以随便命名.这里用time.log和action.log.其中time.log用于存储时序信息,描述每一个 ...