曹阿瞒,改错不认错。
人们过去看错了我曹操,现在还看错,也许将来还会看错。
一直很喜欢演义里关于曹孟德的这两句话,送给大家!
时光匆匆,日月光华,斗转星移,已然悄悄离去,万物诚永恒,生命绝尘寰。
这段时间忙于各种学习、业务、上班、惰性,有好一段时间没有更新公众号了,虽然公众号里人不多,但我也是愧对各位。当然,并不是我有多么精辟的内容分享给大家,而是因为少了坚持、韧性,让你们看到一个人开始了,但却没有了过程、结果。纯属于负能量,我绝逼不要干这样的事情,你们说是吧!
今天,给大家带来的是:LVS与keepalived实现负载均衡高可用。前面有两篇,已经做了关于haproxy与nginx实现负载均衡的方式。你想学,可以回过头去看一看。
一、环境要求
系统:Centos7.4 64位
LvsMaster IP: 192.168.1.103
LvsSlave IP: 192.168.1.104
Web1 IP: 192.168.1.102
Web2 IP: 192.168.1.107
VIP: 192.168.1.111
ipvsadm: ipvsadm v1.27
keepalived: Keepalived v2.0.7
nginx: nginx/1.13.11
Vmware: vm下开启4台虚拟机
二、ipvsadm安装
1、首先,说说ipvsadm是什么
ipvs[IP Vertual Server],是运行在LVS[Linux Vertual Server]下提供负载均衡功能的技术,相当于一个高效的Layer-4交换机。
而ipvsadm是IPVS的管理工具。
2、安装
[root@yyd ~] yum install ipvsadm -y
加载支持ipvs
[root@yyd ~] modprobe ip_vs
4台机器都执行上面的操作
3、ipvsadm命令说明
我们可以
[root@yyd ~] man ipvsadm
下面我附上中文说明
-A (--add-service) 在内核的虚拟服务器列表中添加一条新的虚拟IP记录。也就是增加一台新的虚拟服务器。虚拟IP也就是虚拟服务器的IP地址。
-E (--edit-service) 编辑内核虚拟服务器列表中的一条虚拟服务器记录
-D (--delete-service) 删除内核虚拟服务器列表中的一条虚拟服务器记录
-C (--clear) 清除内核虚拟服务器列表中的所有规则
-R (--restore) 恢复虚拟服务器规则
-S (--save) 保存虚拟服务器规则,输出为-R 选项可读的格式
-a (--add-server) 在内核虚拟服务器列表的一条记录里添加一条新的Real Server记录。也就是在一个虚拟服务器中增加一台新的Real Server
-e (--edit-server) 编辑一条虚拟服务器记录中的某条Real Server记录
-d (--delete-server) 删除一条虚拟服务器记录中的某条Real Server记录
-L|-l –list 显示内核中虚拟服务器列表
-Z (--zero) 虚拟服务器列表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp 设置连接超时值
-t 说明虚拟服务器提供的是tcp服务,此选项后面跟如下格式:
[virtual-service-address:port] or [real-server-ip:port]
-u 说明虚拟服务器提供的是udp服务,此选项后面跟如下格式:
[virtual-service-address:port] or [real-server-ip:port]
-f fwmark 说明是经过iptables标记过的服务类型
-s 此选项后面跟LVS使用的调度算法
有这样几个选项: rr|wrr|lc|wlc|lblc|lblcr|dh|sh
默认的调度算法是: wlc
-p [timeout] 在某个Real Server上持续的服务时间。也就是说来自同一个用户的多次请求,将被同一个Real Server处理。此参数一般用于有动态请求的操作中,timeout 的默认值为360 分钟。例如:-p 600,表示持续服务时间为600分钟。
-r 指定Real Server的IP地址,此选项后面跟如下格式:
[real-server-ip:port]
-g (--gatewaying) 指定LVS 的工作模式为直接路由模式(此模式是LVS 默认工作模式)
-i (-ipip) 指定LVS 的工作模式为隧道模式
-m (--masquerading) 指定LVS 的工作模式为NAT模式
-w (--weight) weight 指定Real Server的权值
-c (--connection) 显示LVS目前的连接信息 如:ipvsadm -L -c
-L --timeout 显示“tcp tcpfin udp”的timeout值,如:ipvsadm -L --timeout
-L --daemon 显示同步守护进程状态,例如:ipvsadm -L –daemon
-L --stats 显示统计信息,例如:ipvsadm -L –stats
-L --rate 显示速率信息,例如:ipvsadm -L --rate
-L --sort 对虚拟服务器和真实服务器排序输出,例如:ipvsadm -L --sort
注: 保存添加的虚拟ip记录和ipvsadm的规则可以使用service ipvsadm save,还可以用-S或--save清除所有记录和规则除了使用-C,还以使用--clear。
man文档里的样例:
三、配置ipvs
对LvsMaster、LvsSlave,我们将之配置成服务脚本:
[root@yyd ~] cd /etc/init.d
[root@yyd /etc/init.d] vim lvs
对web1、web2:
[root@yyd ~] chmod +x /etc/init.d/lvs
上面我们的服务脚本写完,但由于是高可用,我们需要keepalived,
接下来,我们安装keepalived。
四、安装keepalived[源码编译方式]
1、下载
[root@yyd ~] wget http://www.keepalived.org/software/keepalived-2.0.7.tar.gz
2、安装
[root@yyd ~] tar -zxvf keepalived-2.0.7.tar.gz && cd keepalived-2.0.7
[root@yyd ~/keepalived-2.0.7] ./configure --prefix=/usr/local/keepalived
[root@yyd ~/keepalived-2.0.7] make && make install
keepalived默认会用/etc/keepalived/keepalived.conf
[root@yyd ~] cp /usr/local/keepalived/etc/keepalived/keepalived.conf
/etc/keepalived/
[root@yyd ~] cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@yyd ~] cp /root/keepalived-2.0.7/keepalived/etc/init.d/keepalived
/etc/init.d/
[root@yyd ~] chmod +x /etc/init.d/keepalived
[root@yyd ~] cp /usr/local/keepalived/sbin/keepalived /usr/sbin
3、配置keepalived
现在LVS与keepalived都配置完成,启动试试!
五、启动nginx、lvs、keepalived
启动web1的lvs、nginx:
[root@yyd ~] nginx
[root@yyd ~] service lvs start
启动web2的lvs、nginx:
[root@yyd ~] nginx
[root@yyd ~] service lvs start
启动LvsMaster、keepalived
[root@yyd ~] service lvs start
[root@yyd ~] service keepalived start
启动LvsSlave、keepalived
[root@yyd ~] service lvs start
[root@yyd ~] service keepalived start
六、检测
LvsMaster:
LvsSlave:
可以看出lvsSlave上没有VIP
七、访问
八、测试高可用
停掉master上的服务
[root@yyd ~] service lvs stop
[root@yyd ~] service keepalived stop
LvsMaster:
LvsSlave:
浏览器:
可见当LvsMaster的服务器宕机后,VIP就切换到了LvsSlave上,并不影响到服务的可用性,用户完全是无感知的。
九、Ending.................................................................................
领取专属 10元无门槛券
私享最新 技术干货