一、LVS

1、基本命令操作
1.1)添加规则

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout] [-M netmast] [--pepersistence_engine] [-b sched-flags] 

1.2)删除规则

ipvsadm -D -t|u|f service-address

1.3)清空定义的所有内容

ipvsadm -C

1.4)重载

ipvsadm -R

1.4)保存

ipvsadm -S [-n]

1.5)增、改RS规则

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

1.6)删除RS规则

ipvsadm -d -t|u|f service-address -r server-address

1.7)查看规则列表

ipvsadm -Ln|l [options]
 --numeric, -n: 以数字形式输出地址和端口号
 --exact: 扩展信息,精确值
 --stats: 统计信息
 --rate: 输出速率信息

1.8)清空计数器

ipvsadm -Z [-t|u|f service-address]

1.9)ipvs规则

/proc/net/ip_vs

2.0)ipvs连接

/proc/net/ip_vs_conn

2、保存及重载规则
2.1)保存:建议保存至/etc/sysconfig/ipvsadm

ipvsadm-save -n > /PATH/TO/IPVSADM_FILE
ipvsadm -Sn > /PATH/TO/IPVSADM_FILE
systemctl stop ipvsadm.service

2.2)重载:

ipvsadm-restore < /PATH/TO/IPVSADM_FILE
ipvsadm -R < /PATH/TO/IPVSADM_FILE
systemctl restart ipvsadm.service

3、NAT模式


设计要点:
1)RIP与DIP在同一IP网络,RIP的网关要指向DIP
2)支持端口映射
3)Director要打开核心转发功能

配置:
4.管理集群服务:增,改,删
4.1)增、改:

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout]

4.2)删除:

ipvsadm -D -t|u|f service-address

4.3)service-address:

-t|u|f:
-t:TCP协议的端口,VIP:TCP_PORT
-u:UDP协议的端口,VIP:UDP_PORT
-f:firewall MARK,标记,一个数字
[-s scheduler]:指定集群的调度算法:默认为wlc

5.管理集群上的RS:增、改、删
5.1)增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
5.2)server-address:
rip[:port] 如省略port,不作端口映射
5.3)选项:
lvs类型:

-g:gateway, dr类型,默认
-i:ipip, tun类型
-m:masquerade,nat类型
-w weight:权重

6.ipvs scheduler
6.1)ipvs scheduler:根据其调度是否考虑各RS当前的负载状态
两种:静态方法和动态方法
6.2)静态方法:仅根据算法本身进行调度

1、RR: roundrobin, 轮训
2、WRR: Weighted RR, 加权轮训
3、SH: Source Hashing, 实现session sticky, 源IP地址hash; 将来自同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH: Destination Hashing; 目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS, 典型使用场景是正向代理缓存场景中的负载均衡,如:带宽运营商

实验:实现NAT模式的LVS(必须原路返回)

ip_forward=1
route add default gw 192.168.0.201
# -t:tcp, -s wrr:加权 轮训
ipvsadm -A -t 172.20.0.200:80 -s wrr # -m: NAT模式;默认:DR模式,不支持映射到不同端口;-w:权重,默认是1
ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.17:8080 -m -w 3
ipvsadm -a -t 172.20.0.200:80 -r 192.168.30.27:8080 -m 2.router:路由器配置
ip_forward=1
route add default gw 192.168.0.200

4、DR模式

1.DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:

1.1) 在前端网关做静态绑定
1.2) 在各RS使用arptables
1.3) 在各RS修改内核参数,来限制arp响应和通告的级别

2.限制响应级别:arp_ignore

2.1) 0:默认值,表示可使用本地任意接口上配置在任意地址响应
2.2) 1:仅在请求目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

3.限制通告级别:arp_announce

3.1) 0:默认值,把本机所有接口的所有信息向每个接口的网络进行通知
3.2) 1:尽量避免将接口信息向非直接连接网络进行通知
3.3) 2:必须避免将接口信息向非网络进行通告

实验:实现DR模式的LVS(不原路返回

步骤一:准备3台虚拟机
步骤二:先配置3台虚拟机的网络
)eth0 配置在一个网段
)DIP,RIP配置在一个网段
步骤三:配置lvs的VIP
)ifconfig ens33: 192.168.182.100/
)echo "" > /proc/sys/net/ipv4/ip_forward
步骤四(RS):调整RS的响应,通告级别(每一台RS都配)
)echo  > /proc/sys/net/ipv4/conf/ens33/arp_ignore
)echo > /proc/sys/net/ipv4/conf/all/arp_ignore
)echo > /proc/sys/net/ipv4/conf/ens33/arp_announce
)echo > /proc/sys/net/ipv4/conf/all/arp_announce
步骤五:在RS上配置VIP
)ifconfig lo: 192.168.182.100 netmask 255.255.255.255
步骤六:启动RS上的httpd服务
)yum install httpd -y
)cd /var/www/html
vi index.html
from ooxxip
)service httpd start
客户端验证:RIP:80能显示
VIP:80不能显示
步骤七:LVS---ipvsadm
)yum install ipvsadm -y
# -t:tcp, -s rr:轮训
)ipvsadm -A -t 192.168.182.100: -s rr
# -m: NAT模式;默认:DR模式,不支持映射到不同端口;-w:权重,默认是1;-g:DR模型,-m:NET模型
)ipvsadm -a -t 192.168.182.128: -r 192.168.182.129 -g
ipvsadm -a -t 192.168.182.128: -r 192.168.182.130 -g
)ipvsadm -ln
)浏览器刷新:访问vip
)ipvsadm -lnc
)netstat -natp

5、TUN模式

6、FULL-NAT模式

二、Keepalived

2.1)安装以及基本操作

# 安装
yum install keepalived -y
# 启动
service keepalived start
# 配置文件位置
/etc/keepalived/keepalived.conf
# 查看日志
tail /var/log/message

2.2)具体配置步骤

步骤一:至少准备四台虚拟机
步骤二:调整RS的响应,通告级别(每一台RS都配)
echo > /proc/sys/net/ipv4/conf/ens33/arp_ignore
echo > /proc/sys/net/ipv4/conf/all/arp_ignore
echo > /proc/sys/net/ipv4/conf/ens33/arp_announce
echo > /proc/sys/net/ipv4/conf/all/arp_announce
步骤三:在RS上配置VIP,切记(DR模式)不要忘了在RS配置VIP,要不然数据包会被丢弃
ifconfig lo:8 192.168.182.100 netmask 255.255.255.255
步骤四:在RS安装启动httpd服务
)yum install httpd -y
)cd /var/www/html
vi index.html
from ooxxip
)service httpd start
步骤五:给两台keepalived机子安装keepalived(一主一备)
)yum -y install keepalived
)yum -y install ipvsadm
步骤六:配置keepalived配置文件
# 先备份
)cp -a /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
)cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

    global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
# vrrp_strict 如果还是访问不了VIP,可以把这行注释掉
vrrp_garp_interval
vrrp_gna_interval
} vrrp_instance VI_1 {
# 主
state MASTER
# 备
state BACKUP
interface ens33
virtual_router_id
# 主

priority 100
# 备

priority 50
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.182.100/ dev ens33 label ens33:
}
} virtual_server 192.168.182.100 {
delay_loop
lb_algo rr
lb_kind DR
     nat_mask 255.255.255.0
persistence_timeout
protocol TCP real_server 192.168.182.130 {
weight
HTTP_GET {
url {
path /
status_code
}
connect_timeout
nb_get_retry
delay_before_retry
}
}
real_server 192.168.182.131 {
weight
HTTP_GET {
url {
path /
status_code
}
connect_timeout
nb_get_retry
delay_before_retry
}
}
}

)复制一份修改好的配置到从主机
cd /etc/keepalived/ && scp ./keepalived.conf root@192.168.182.129:`pwd`
)启动
/bin/systemctl start keepalived.service
5)RS切记关闭防火墙,如果web也访问不了,lvs也可以关闭防火墙试试
systemctl stop firewalld
)查看是否配置了VIP
)查看是否配置了规则

7)主未挂,备则会自动配置规则,但是不会配置VIP,保证只有一个VIP对外提供服务

一旦主挂了,则备接管(测试,down掉主网卡:ifconfig ens33 down)

缺点:脑裂问题

分析原因:keepalived自身不是高可用,主进程可能会被杀死,但是进程杀死后,没有回收VIP,导致主keepalived无法广播,备keepalived得不到主的广播信号,导致备也会配上VIP,使得主备都有VIP,最后CIP访问VIP的三次握手可能会被打散到主备keepalived上,无法建立连接,导致无法访问。

解决方案:1.写一个自动脚本,定时巡检主keepalived进程是否还存活,如果被杀死,则重启主keepalived服务

     2.换用更高级的高可用技术(zookeeper),后续会有zookeeper相应的文章

 最后附上keepalived配置文件说明:

! Configuration File for keepalived
global_defs { #全局定义部分
notification_email { #设置报警邮件地址,可设置多个
acassen@firewall.loc #接收通知的邮件地址
}
notification_email_from test0@163.com #设置 发送邮件通知的地址
smtp_server smtp.163.com #设置 smtp server 地址,可是ip或域名.可选端口号 (默认25)
smtp_connect_timeout 30 #设置 连接 smtp server的超时时间
router_id LVS_DEVEL #主机标识,用于邮件通知
vrrp_skip_check_adv_addr
vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播
vrrp_garp_interval 0
vrrp_gna_interval 0
script_user keepalived_script #指定运行脚本的用户名和组。默认使用用户的默认组。如未指定,默认为keepalived_script 用户,如无此用户,则使用root
enable_script_security #如过路径为非root可写,不要配置脚本为root用户执行。
} vrrp_script chk_nginx_service { #VRRP 脚本声明
script "/etc/keepalived/chk_nginx.sh" #周期性执行的脚本
interval 3 #运行脚本的间隔时间,秒
weight -20 #权重,priority值减去此值要小于备服务的priority值
fall 3 #检测几次失败才为失败,整数
rise 2 #检测几次状态为正常的,才确认正常,整数
user keepalived_script #执行脚本的用户或组
} vrrp_instance VI_1 { #vrrp 实例部分定义,VI_1自定义名称
state MASTER #指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP
interface ens33 #网卡设置,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息
virtual_router_id 51 #虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTER和BACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致
priority 100 #定义优先级,数字越大,优先级越高。
advert_int 1 #设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样
authentication { #设置验证类型和密码,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
192.168.119.130
}
track_script { #脚本监控状态
chk_nginx_service #可加权重,但会覆盖声明的脚本权重值。chk_nginx_service weight -20
}
notify_master "/etc/keepalived/start_haproxy.sh start" #当前节点成为master时,通知脚本执行任务
notify_backup "/etc/keepalived/start_haproxy.sh stop" #当前节点成为backup时,通知脚本执行任务
notify_fault "/etc/keepalived/start_haproxy.sh stop" #当当前节点出现故障,执行的任务;
} virtual_server 192.168.119.130 80 { #定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开
delay_loop 6 #每隔6秒查询realserver状态
lb_algo rr #后端调试算法(load balancing algorithm)
lb_kind DR #LVS调度类型NAT/DR/TUN
#persistence_timeout 60 同一IP的连接60秒内被分配到同一台realserver
protocol TCP #用TCP协议检查realserver状态
real_server 192.168.119.120 80 {
weight 1 #权重,最大越高,lvs就越优先访问
TCP_CHECK { #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
connect_timeout 10 #10秒无响应超时
retry 3 #重连次数3次
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查realserver的端口
}
}
real_server 192.168.119.121 80 {
weight 1 #权重,最大越高,lvs就越优先访问
TCP_CHECK { #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
connect_timeout 10 #10秒无响应超时
retry 3 #重连次数3次
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查realserver的端口
}
}
} vrrp_instance VI_2 { #vrrp 实例部分定义,VI_1自定义名称
state BACKUP #指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP 分别表示(主|备)
interface ens33 #网卡设置,绑定vip的子接口,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息
virtual_router_id 52 #虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTER和BACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致
priority 90 #定义优先级,数字越大,优先级越高。
advert_int 1 #设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样
authentication { #设置验证类型和密码,两个节点必须一致
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
192.168.119.131
}
} virtual_server 192.168.119.131 80 { #定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开
delay_loop 6 #每隔6秒查询realserver状态
lb_algo rr #后端调试算法(load balancing algorithm)
lb_kind DR #LVS调度类型NAT/DR/TUN
#persistence_timeout 60 #同一IP的连接60秒内被分配到同一台realserver
protocol TCP #用TCP协议检查realserver状态
real_server 192.168.119.120 80 {
weight 1 #权重,最大越高,lvs就越优先访问
TCP_CHECK { #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
connect_timeout 10 #10秒无响应超时
retry 3 #重连次数3次
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查realserver的端口
}
}
real_server 192.168.119.121 80 {
weight 1 #权重,最大越高,lvs就越优先访问
TCP_CHECK { #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC
connect_timeout 10 #10秒无响应超时
retry 3 #重连次数3次
delay_before_retry 3 #重连间隔时间
connect_port 80 #健康检查realserver的端口
}
}
}

LVS+Keepalived小试牛刀的更多相关文章

  1. 【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

    一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务 ...

  2. 配置LVS + Keepalived高可用负载均衡集群之图文教程

    负载均衡系统可以选用LVS方案,而为避免Director Server单点故障引起系统崩溃,我们可以选用LVS+Keepalived组合保证高可用性.  重点:每个节点时间都同步哈! C++代码 [r ...

  3. lvs+keepalived

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...

  4. LVS+Keepalived搭建MyCAT高可用负载均衡集群

    LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统.本项目在1998年5月由章文嵩博士成立,是中国 ...

  5. LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案

    方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor= worker.tomcat.cachesize= worker.tomca ...

  6. lvs+keepalived+nginx实现高性能负载均衡集群

    一.为什么要使用负载均衡技术? 1.系统高可用性 2.  系统可扩展性 3.  负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...

  7. lvs + keepalived 介绍及安装

    LVS介绍 lvs 核心ipvs      Ipvs(IP Virtual Server)是整个负载均衡的基础,如果没有这个基础,故障隔离与失败切换就毫无意义了.Ipvs 具体实现是由ipvsadm ...

  8. LVS + Keepalived + Nginx安装及配置

    1.概述 上篇文章<架构设计:负载均衡层设计方案(6)——Nginx + Keepalived构建高可用的负载层>(http://blog.csdn.net/yinwenjie/artic ...

  9. 测试LVS+Keepalived高可用负载均衡集群

    测试LVS+Keepalived高可用负载均衡集群 1. 启动LVS高可用集群服务 此时查看Keepalived服务的系统日志信息如下: [root@localhost ~]# tail -f /va ...

随机推荐

  1. MyEclipse设置java文件每行字符数

    window->preferences->java->code style->formatter->edit->line wrapping->maximum ...

  2. Linux学习笔记(十一)shell基础:管道符、通配符和其他特殊符号

    一.多命令顺序执行 && || 相当于其他高级语言中的 ? : 二.管道符 [命令1] | [命令2] 命令1的正确输出作为命令2的操作对象 分屏显示结果 netstat -an 命令 ...

  3. 用js刷剑指offer(二叉树的镜像)

    题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ ...

  4. Python+request+ smtplib 测试结果html报告邮件发送(下)《六》

    目录结构如下: 1.cfg.ini的配置信息写法如下: [email] ;--------------------------使用腾讯企业邮箱作为发件人的操作如下------------------- ...

  5. duilib学习领悟(2)

    再次强调,duilib只不过是一种思想! 在上一节中,我剖析了duilib中窗口类的注册,其中遗留两个小问题没有细说的? 第一个问题:过程函数中__WndProc()中有这么一小段代码: pThis ...

  6. Excle导出优化(poi)

    搜索词条 1.idea报java.lang.OutOfMemoryError: Java heap space怎么解决? 2.java.lang.OutOfMemoryError: GC overhe ...

  7. 大二小学期C#资产管理大作业小记

    说明 这个程序是我大二夏季学期(俗称小学期)用Visual Studio + C#写的<资产管理>大作业.这个项目非常简单,就是用C#写出一个UI界面,并连接数据库进行增删改查.这是我第一 ...

  8. Django内置email发送邮件

    ###Django内置email发送邮件 ####1.首先在settings.py文件设置相关参数 ```python STATIC_URL = '/static/' # 设置邮件域名 EMAIL_H ...

  9. python numpy的基本操作

    站长资讯平台:文章目录0.NumPy 与 ndarry1.数组属性查看:类型.尺寸.形状.维度2.numpy元素中数据存储方式,数据类型,类型转换2.1 查看元素数据存储类型2.2 元素数据存储类型转 ...

  10. zhengrui集训笔记2

    Day_6 计算几何 点积\Large 点积点积 叉积\Large 叉积叉积 极角\Large 极角极角 < π\piπ :叉积判断 else :atan2 旋转\Large 旋转旋转 左乘第一 ...