集群高可用之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) - 死信队列,延时队列 ...
随机推荐
- VS远程调试虚拟机中的程序
1. 设置VS项目属性 => 调试页 例子如下 远程命令: C:\test.exe 工作目录 : C:\ 远程服务器名称: 192.168.xx.xx 查看网络共享 => 本地连 ...
- LeetCode 3Sum Closest 最近似的3sum(2sum方法)
题意:找到最接近target的3个元素之和,并返回该和. 思路:用2个指针,时间复杂度O(n^2). int threeSumClosest(vector<int>& nums, ...
- mongo ServerSelectionTimeoutError: localhost:27017: [Errno 111] Connection refused
解决方法 rm /var/lib/mongodb/mongod.lock
- SQLite C/C++ 教程
目录 1安装 2 C/C++ Interface APIs 3连接到数据库 4创建表 5插入操作 6更新操作 7删除操作 安装 在我们开始使用SQLite在C / C++程序,我们需要确保SQLite ...
- Navicat连接Oracle详细教程
Navicat Premium算是比较好的一个可视化数据库管理工具了,短小精悍,一个工具解决三种数据库的连接问题,真正做到了集成管理,对MySQL,SQLServer而言,连接比较简单,就不赘述了,现 ...
- python3中bytes、hex和字符串相互转换
1.字符串转bytes a = 'abcd' a1 = bytes(a,encoding('utf-8')) 2.bytes转字符串 a = b'abcd' a1 = bytes.decode(a , ...
- ubuntu 18.* 重启网卡
systemctl UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active waiting A ...
- 线程调度的问题:Lock Convoy(锁封护)与Priority Inversion(优先级反转)
Lock Convoy(锁封护) [1]Lock Convoy是在多线程并发环境下由于锁的使用而引起的性能退化问题.当多个相同优先级的线程频繁地争抢同一个锁时可能会引起lock convoy问题,一般 ...
- quartz测试类
package demo.mytest; import java.text.ParseException; import org.quartz.CronTrigger;import org.quart ...
- H3C交换机系统时间设置漏洞
H3C交换机系统时间设置存在漏洞 1. 背景说明 由于在编写<主机房网络延伸实施方案>,调试H3C S5120S-28P-EI交换机时,发现交换机设置成现在的时间后,导致本地用户通过ssh ...