keepalived结合lvs实现双机热备
系统环境为ubuntu16.04,所有的安装都是采用apt,这里直接跳过安装keepalived,lvs,nginx等
系统架构如下:
说明
使用LVS的DR直接路由模式,两个虚拟IP,分别配置在web两台机器上,一个虚拟IP代理一个web服务器
大体过程如下
- keepalived和ipvsadm安装与配置
- sudo apt install keepalived ipvsadm
- 开启路由转发, net.ipv4.ip_forward = 1
- Web服务器配置与安装
- sudo apt install nginx
- 修改内核参数
- 配置虚拟IP
- DNS服务器配置
- 将解析切到VIP上
注:
没有modprobe解决办法:
sudo apt install module-init-tools
加载lvs相关的模块:
sudo modprobe ip_vs
sudo modprobe ip_vs_wrr
keepalived配置参考
```
$ cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived
global_defs { router_id tcmedia }
vrrp_instance VI_1 { state MASTER #备为BACKUP interface iv-bond0 virtual_router_id 77 priority 100 #备的优先级要低 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.1.60 10.1.1.69 } } virtual_server 10.1.1.60 80 { delay_loop 6 lb_algo lblc lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.1.1.61 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } virtual_server 10.1.1.69 80 { delay_loop 6 lb_algo lblc lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 10.1.1.62 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
### Web端配置 1、配置虚拟IP
$ sudo ifconfig iv-bond0:0 10.1.1.60 broadcast 10.1.1.60 netmask 255.255.255.255 up
这里要确保配置的VIP地址为32位掩码,即255.255.255.255 2、修改内核参数
$ sudo cat »/etc/sysctl.conf<<EOF net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 EOF $ sudo sysctl -p net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2
此操作的主要目的是用来抑制ARP相应,确保我们收到的arp信息准确。 3、keepalived端查看配置 因为是lvs结合keepalived,所以不用单独再添加规则,即不用ipvsadm再去管理,但我们可以在启动keepalived之后,通过`sudo ipvsadm -Ln`来查看 4、DNS配置 解析成VIP地址即可 5、测试 不说了 ### 下面是一些排查问题的方法 1、查看日志
sudo journalctl -u keepalived -f
由于ubuntu是使用journalctl来管理日志的,所以日志信息我们可以通过journalctl来查看。 2、判断请求是否转发到后端 这个很简单,只需要查看web端的日志,比如说nginx的日志,或者直接使用tcpdump来抓包查看,可以在lvs端,也可以在web端。
tcpdump -nni any port 80 and host 10.1.1.60
### 其他
ARP协议作用是:ARP通过广播方式将IP地址转为MAC地址。为了提升IP转换MAC地址的效率,系统会进行ARP缓存,减少广播风暴。 当LB01宕机切换到LB02时,ARP缓存表MAC地址并没有及时变更会导致服务器无法上网,所以需要及时更新arp缓存。所以需要调用arping命令进行主动更新。
#查看arp缓存命令 arp -n
#arp ping命令解析MAC地址 arping -c 1 -I eth0 10.1.1.61
- VisualStudio 怎么使用Visual Leak Detector
- Cannot find module 'socket.io'
- 【学术】独热编码如何在Python中排列数据?
- 比特币的私钥【区块链生存训练】
- Unity3D学习笔记第一课
- Extjs4处理后台json数据中日期和时间的方法
- 机器学习:Python测试线性可分性的方法
- Java 机器学习库Smile实战(一)SVM
- 交易Transaction【区块链生存训练】
- 马尔可夫链文本生成的简单应用:不足20行的Python代码生成鸡汤文
- 最长递增子序列
- dedecms批量删除文档关键词可以吗
- 【学术】在C ++中使用TensorFlow训练深度神经网络
- 一个canonical标签解决site不在首页的问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法