lvs+keepalived 高可用及负载均衡
一、环境准备
VIP:10.18.43.30
dr1:10.18.43.10
dr2:10.18.43.20
web1:10.18.43.13
web2:10.18.43.14
结构图
(一)、预处理
(1)、关闭所有机器selinux,
vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
-------------------------------------------------------------
setenforce #退出保存,执行setenforce 当前生效
(2)、关闭所有机器firewalld
systemctl stop firewalld.service
(3)、添加网卡
在DR1与DR2机器添加个添加一张网卡,(也可以不用添加使用本机网卡,主机有两块网卡,其中一块可以用来检测心跳,MASTER和BACKUP如果无法接收到彼此的组播通知,但是两个节点实际上都处于工作状态,这时两个节点均为MASTER强行绑定虚拟IP,从而导致脑裂。)
(二)、部署处理
部署要使用的相关软件;
可以在nginx 上做七层负载均衡,将四层负载均衡的请求在次分发给后端真实提供web服务的集群,根聚七层负载均衡的算法,调用一台真实wen服务器,来给用户提供服务;(这里没有做七层)
(1)、后端部署
nginx编译安装,(在web1和web2执行相同的操作,此处省略web2操作步骤)
groupadd nginx #创建nginx组
useradd -r -g nginx -s /bin/nologin nginx #创建nginx用户并取消shell
wget http://nginx.org/download/nginx-1.14.0.tar.gz #下载nginx软件包
tar xf nginx-1.14..tar.gz -C /tpm/ #解压nginx源码包
cd /tmp/nginx-1.14./
./configure \
--prefix=/usr/local/nginx \
--without-select_module \
--without-poll_module \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_xslt_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_stub_status_module \
--with-cc=`which gcc` make -j && make install
(2)、启动nginx服务
cd /usr/local/nginx/
sbin/nginx
[root@web1-1 nginx]# lsof -i:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx root 6u IPv4 0t0 TCP *:http (LISTEN) nginx nginx 6u IPv4 0t0 TCP *:http (LISTEN)
(3)、设置lo回环地址
(在web1和web2,执行相同的操作)
[root@web1-1 ~]# echo > /proc/sys/net/ipv4/conf/all/arp_announce
[root@web1-1 ~]# echo > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web1- ~]# ip a a dev lo 10.18.43.30/
[root@web1- ~]# ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN group default qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet 10.18.43.30/ scope global lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP group default qlen
link/ether :::ed:d6: brd ff:ff:ff:ff:ff:ff
inet 10.18.43.13/ brd 10.18.43.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80:::ff:feed:d671/ scope link
valid_lft forever preferred_lft forever
测试后端web服务是否正常,(web1,web2执行相同操作)
[root@web1- ~]# curl 10.18.43.13
web1
(4)、高可用
下载ipvsadm,keepalived,
yum -y install ipvsadm keepalived
(5)、keepalived部署详解
[root@DR-1- ]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lvs #全局配置
} vrrp_instance lvs_keepalived { #库名称
state BACKUP #角色:MASTER BACKUP
interface eth0 #网卡:这里我们拿eth0做为心跳测试,检测另一台BACKUP存活状态
virtual_router_id #小组段:默认是51
priority # 服务的优先权最高255
nopreempt # BACKUP 不抢IP
advert_int
authentication {
auth_type PASS
auth_pass #小组密码
}
virtual_ipaddress {
10.18.43.30/32 dev eth1 # 虚拟ip
}
} virtual_server 10.18.43.30 {
delay_loop #延时环 6秒
lb_algo rr #轮询规则rr
lb_kind DR #使用的工作模式
persistence_timeout #连接超时 时间
protocol TCP #使用的协议 real_server 10.18.43.13 {
weight #权重
TCP_CHECK {
connect_port #监听端口
connect_timeout #连接超时3秒
nb_get_retry #重试连接3次
delay_before_retry #连接超时3重试连接3次
}
}
real_server 10.18.43.14 {
weight
TCP_CHECK {
connect_port
connect_timeout
nb_get_retry
delay_before_retry
}
}
}
将这份配置发给dr2,只需要修改优先级;
[root@DR-2- ]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id lvs #全局配置,全局必须一致
} vrrp_instance lvs_keepalived { #库名称
state BACKUP #角色:MASTER BACKUP
interface eth0 #网卡:这里我们拿eth0做为心跳测试,检测另一台BACKUP存活状态
virtual_router_id #小组段:默认是51
priority #注意这里的优先级
nopreempt # BACKUP 不抢IP
advert_int
authentication {
auth_type PASS
auth_pass #小组密码
}
virtual_ipaddress {
10.18.43.30/ dev eth1 # 虚拟ip
}
} virtual_server 10.18.43.30 {
delay_loop #延时环 6秒
lb_algo rr #轮询规则rr
lb_kind DR #使用的工作模式
persistence_timeout #连接超时 时间
protocol TCP #使用的协议 real_server 10.18.43.13 {
weight #权重
TCP_CHECK {
connect_port #监听端口
connect_timeout #连接超时3秒
nb_get_retry #重试连接3次
delay_before_retry #连接超时3重试连接3次
}
}
real_server 10.18.43.14 {
weight
TCP_CHECK {
connect_port
connect_timeout
nb_get_retry
delay_before_retry
}
}
}
(6)、启动keepalived
(在DR1和DR2执行相同操作)
[root@DR-- ~]# systemctl start keepalived.service
[root@DR-2- ~]# systemctl start keepalived.service
(7)、查看结果
DR1与RD2先启动那个机器,虚拟VIP就会在那个主机的第二张网卡上,(第一张网卡是用来做心跳测试的,)
[root@DR-- keepalived]# ip a
: lo: <LOOPBACK,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN qlen
link/loopback ::::: brd :::::
inet 127.0.0.1/ scope host lo
valid_lft forever preferred_lft forever
inet6 ::/ scope host
valid_lft forever preferred_lft forever
: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether :::c9:8e: brd ff:ff:ff:ff:ff:ff
inet 10.18.43.10/ brd 10.18.43.255 scope global dynamic eth0
valid_lft 41215sec preferred_lft 41215sec
inet6 fe80::70de::c4c6:aa/ scope link
valid_lft forever preferred_lft forever
: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc pfifo_fast state UP qlen
link/ether ::::4b:4f brd ff:ff:ff:ff:ff:ff
inet 10.18.43.12/ brd 10.18.43.255 scope global dynamic eth1
valid_lft 43069sec preferred_lft 43069sec
inet 10.18.43.30/32 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::e958:18e::b3f/ scope link
valid_lft forever preferred_lft forever
二、概念补充
(1)、脑裂
一般来说,脑裂的发生,有一下几种原因;
1、高可用服务器对之间心跳线链路发生故障,导致无法正常通信;
2、因心跳线坏了,(包括断了,老化等一些物理上的原因)
3、因网卡及相关驱动坏了,IP配置及冲突问题(网卡直连)
4、因心跳线间链接的设备故障(网卡及交换机)
5、因仲裁的机器出问题(采用仲裁的方案)
6、高可用服务器上开启了iptables防火强阻挡了心跳消息传输
7、高可用服务器上心跳网卡地址等信息配置不正确,导致心跳失败;
8、其他服务配置不当等原因,如心跳方式不同,心跳广播冲突,软件Bug等。
提示:keepalived配置里同一VRRP实例如果virtual_router_id两端参数配置不一致也后悔导致脑裂问题发生;
(2)、常见解决方案
在实际生产环境中,我们可以从以下几个方面来防止脑裂问题的发生;
1、同时使用串行电缆和以太网电缆链接,同时使用两跳心跳线路,这样一条线路坏了,另一条还是好的,依然能传送心跳消息
2、当检测到脑裂时,强行关闭一个心跳节点,
3、做好对脑裂的监控报警,在问题发生时人为第一时间介入仲裁,降低损失。
(3)、keepalived配置
在这里主要解释一下我的配置没有写入MASTER,在有nopreempt参数的情况下,是可以不要MASTER,为了确保vip在一台机器上的稳定性,我们需要在配置文件中添加nopreempt参数,而且取消MASTER角色;
如果MASTER角色存在,那么MASTER角色宕机之后,他的vip会漂移到BACKUP角色主机上,这时如果是以为网络抖动的原因造成的,当MASTER服务链接正常时,MASTER角色就会将原有的vip抢回来,反复来回几次之后,keepalived就会宕机,造成不可设想的后果;
如果取消MASTER角色,添加nopreempt参数,vip会按照服务启动的先回顺序和优先级来决定他在那台机器上,有一台keepalived宕机,vip就会漂移到另一台BACKUP机器上,当另一台keepalived正常只会,他不会去抢vip,这样就不会造成vip来回在keepalived机器上飘来飘去;
lvs+keepalived 高可用及负载均衡的更多相关文章
- 4、keepalived高可用nginx负载均衡
keepalived: HTTP_GET //使用keepalived获取后端real server健康状态检测 SSL_GET(https) //这里以为这后端使用的是http协议 ...
- keepalived高可用haproxy负载均衡varnish缓存wordpress的动静分离(第一次配置成功)
haproxy和nginx都可以作为七层和四层反代服务器对外提供服务,此文通过haproxy和keealived配置varnish搭建wordpress的动静分离站点 一.实验环境 五台虚拟机: ha ...
- nginx+keepalived高可用web负载均衡
一:安装环境 准备2台虚拟机,都安装好环境 centos 7keepalived:vip: 192.168.1.112192.168.1.110 nginxip 192.168.1.109 maste ...
- 测试LVS+Keepalived高可用负载均衡集群
测试LVS+Keepalived高可用负载均衡集群 1. 启动LVS高可用集群服务 此时查看Keepalived服务的系统日志信息如下: [root@localhost ~]# tail -f /va ...
- LVS+Keepalived高可用负载均衡集群架构实验-01
一.为什么要使用负载均衡技术? 1.系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...
- Ubuntu构建LVS+Keepalived高可用负载均衡集群【生产环境部署】
1.环境说明: 系统版本:Ubuntu 14.04 LVS1物理IP:14.17.64.2 初始接管VIP:14.17.64.13 LVS2物理IP:14.17.64.3 初始接管VIP:14 ...
- 高可用与负载均衡(7)之聊聊Lvs-DR+Keepalived的解决方案
今天直接开门见山了,直接说配置吧.首先介绍下我这的环境 如有问题,请联系我18500777133@sina.cn IP 安装软件 192.168.1.7 lvs1+keepalived master角 ...
- 搭建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 负 ...
随机推荐
- CSS3 - vue中纯css实现柱状图表效果
背景 以前我们制作柱状图都用echarts或者其他同类型的图表插件 这次是个移动端的需求,而且这个图表需要动画 使用echarts就会显得过重,而且动画达不到我想要的效果(主要是我自己愚蠢想不到好的动 ...
- [Vue 牛刀小试]:第十五章 - 传统开发模式下的 axios 使用入门
一.前言 在没有接触 React.Angular.Vue 这类 MVVM 的前端框架之前,无法抛弃 Jquery 的重要理由,除了优秀的前端 DOM 元素操作性以外,能够非常便捷的发起 http 请求 ...
- Python 爬虫从入门到进阶之路(十四)
之前的文章我们已经可以根据 re 模块,Xpath 模块和 BeautifulSoup4 模块来爬取网站上我们想要的数据并且存储在本地,但是我们并没有对存储数据的格式有要求,本章我们就来看数据的存储格 ...
- 使用Python脚本伪造指定时间区间的数据库备份
为监管需求,需要保留时间非常长的数据库备份.存储代价太大.所以存在了,临时抱佛脚,伪造备份.. 以下脚本功能,在于根据一个备份,复制出一段时间的备份.并且更改备份的文件时间戳.可以用shell轻松写出 ...
- Windows和linux环境下按文件名和字符串搜索命令
Windows 1.遍历C盘下所有txt 命令:for /r c:\ %i in (*.txt) do @echo %i 注释:for 循环的意思 /r 按照路径搜索 c:\ 路径 %i in ( ...
- 究竟什么是Windows句柄
图解说明——究竟什么是Windows句柄 这里需要说明: 1.这里将句柄所能标识的所有东西(如窗口.文件.画笔等)统称为“对象”. 2.图中一个小横框表示一定大小的内存区域,并不代表一个字节, ...
- 使用GDAL实现DEM的地貌晕渲图(一)
目录 1. 原理 1) 点法向量 2) 日照方向 (1) 太阳高度角和太阳方位角 (2) 计算过程 3) 晕渲强度 2. 实现 3. 参考 @ 1. 原理 以前一直以为对DEM的渲染就是简单的根据DE ...
- 每日一问:Android 滑动冲突,你们都是怎样处理的
坚持原创日更,短平快的 Android 进阶系列,敬请直接在微信公众号搜索:nanchen,直接关注并设为星标,精彩不容错过. 在 Android 开发中,滑动冲突总是我们一个无法避免的话题.而对于解 ...
- Spring中@value以及属性注入的学习
1.简单的Java配置 配置文件(jdbc.properties) jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://1 ...
- ZIP:GZIP
GZIPInputStream: GZIPInputStream(InputStream in) :使用默认缓冲区大小创建新的输入流. GZIPInputStream(InputStream in, ...