搭建lvs + keepalivd DR模式,双机热备基础与高可用群集
这里只说keepalivd 软件的原理 lvs在下面一篇博客中
https://blog.csdn.net/weixin_52184735/article/details/115363231?spm=1001.2014.3001.5501
一,概念
keepalived起初是专门针对lvs设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能(判断lvs负载调度器,节点服务器的可用性,以及随时隔离并替换新的服务器),当故障机恢复后将其重新加入群集中。
1,热备份
keepalived采用VRRP(virtual Router Redundant Protocol, 虚拟路由冗余协议)热备份协议,以软件的方式实现liunx服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案————由多台路由器组成一个热备份组,通过虚拟ip地址对外提供服务,每个热备份组内同一时刻只有一台主路由提供服务,其他路由器处于冗余状态,若当前在线的路由器失效,则其他路由会自动接替(通过优先级决定顺序)
2,高可用
keepalived不仅仅做用于双机热备。使用keepalived构建lvs群集更加简便易用,主要优势体现在热备切换,提高可用性,对节点服务器进行健康检查,自动移除失效的节点,恢复后再重新加入。
二,工作原理
Layer3,4,5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:
Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。
Layer5:Layer5对指定的URL执行HTTP GET。然后使用MD5算法对HTTP GET结果进行求和。如果这个总数与预期值不符,那么测试是错误的,服务器将从服务器池中移除。该模块对同一服务实施多URL获取检查。如果您使用承载多个应用程序服务器的服务器,则此功能很有用。此功能使您能够检查应用程序服务器是否正常工作。MD5摘要是使用genhash实用程序(包含在keepalived软件包中)生成的。
SSL_GET与HTTP_GET相同,但使用SSL连接到远程Web服务器。
MISC_CHECK:此检查允许用户定义的脚本作为运行状况检查程序运行。结果必须是0或1.该脚本在导演盒上运行,这是测试内部应用程序的理想方式。可以使用完整路径(即/path_to_script/script.sh)调用可以不带参数运行的脚本。那些需要参数的需要用双引号括起来(即“/path_to_script/script.sh arg 1 … arg n”)
作用
主要用作RealServer的健康状态检查以及LoadBalance主机和BackUP主机之间failover的实现。
高可用web架构: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可选 可不选)
工作原理原文链接:
三,准备环境
主机 | 系统 | ip地址 | 服务 |
wed服务器1 | centos7 | 外:192.168.211.10 内:192.168.131.10 | http |
wed服务器2 | centos7 | 外:192.168.211.11 内:192.168.131.11 | nginx |
调度器 | centos7 | 外:192.168.211.12 内:192.168.131.12 | |
备用调度器 | centos7 | 外:192.168.211.13 内:192.168.131.13 | nfs |
测试机 | windos10 |
安装 yum -y install net-tools 使用netstat 查看端口
配置wed服务1
安装http
yum install -y httpd
配置wed服务2
安装 nginx
解压
tar -zxf nginx-1.18.0.tar.gz -C /usr/src/
cd /usr/src/nginx-1.18.0/
配置:编译:安装
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install
备用调度器(这里为了节约虚拟机我把nfs服务放在这里)
搭建nfs服务
rpm -qa nfs-utils rpcbind //查询是否安装
yum install nfs-utils rpcbind //安装nfs(两个软件)
systemctl start rpcbind && systemctl start nfs //启动(注意按顺序)
vim /etc/exports //进入文件指定共享目录
/home/nfs_wed 192.168.131.0/24(rw,sync,no_root_squash)
保存退出
exportfs -a //加载文件
showmount -e //查看共享目录
注:关闭防火墙
cd /home/nfs_wed/
vim index.html<h1> 测试 </h1>
<h1>------</h1>
<h1> 天天向上</h1>
<h1>每天进步一点点</h1>
<h1>hahhahahahha</h1>
wed服务器1
挂载nfs共享目录
yum install -y rpcbind nfs-utils //下载rpcbind(必须)
systemctl restart rpcbind //开启
mount 192.168.131.13:/home/nfs_wed /var/www/html/ //挂载
df //查看挂载情况
wed服务器2
挂载nfs共享目录
(方法一样,只有挂载目录不一样,这里就不解释了)
yum install -y rpcbind nfs-utils
systemctl restart rpcbind
mount 192.168.131.13:/home/nfs_wed /usr/local/nginx/html/
df
查看效果
wed服务1
http要关闭 setenforce 0 (不然会失败)
wed服务2
注::nginx会乱码是正常的
以上完成才往下面做
配置lvs 的DR模式
配置调度器
yum install -y ipvsadm //安装管理工具
配置虚拟接口地址(vip)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33:0
UUID=7b353156-27b0-455c-a01c-8cbcb5f18e41
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.211.20 //是你的vip地址
NETMASK=255.255.255.0 //这个以后的都不要
ifup ens33:0 //开启
ifconfig ens33:0 //查看与自己配置是否匹配
调整/proc 响应参数
对于DR群集来说,由于lvs负载调度器和各节点需要公用一个vip地址,需要修改linux内核的重定向参数不然不知道那台机器响应
vim /etc/sysctl.conf
//添加到末尾
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p //刷新一下
配置负载均衡分配策略
modprobe ip_vs //加载模块
ipvsadm -A -t 192.168.211.20:80 -s rr //生成虚拟服务器
编写策略
ipvsadm -a -t 192.168.211.20:80 -r 192.168.211.10 -g -w 1
ipvsadm -a -t 192.168.211.20:80 -r 192.168.211.11 -g -w 1
保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm //重启ipvsadm
配置节点服务器
wed服务1
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
修改
DEVICE=lo:0
IPADDR=192.168.211.20
NETMASK=255.255.255.255
ONBOOT=yes
ifup lo:0 //开启
ifconfig lo:0 //查看与自己配置是否匹配
route add -host 192.168.211.20 dev lo:0 //添加一条路由
调整/proc 响应参数
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
wed服务2
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
修改
DEVICE=lo:0
IPADDR=192.168.211.20
NETMASK=255.255.255.255
ONBOOT=yes
ifup lo:0 //开启
ifconfig lo:0 //查看与自己配置是否匹配
route add -host 192.168.211.20 dev lo:0 //添加一条路由
调整/proc 响应参数
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
测试(使用两个浏览器)
注:多刷几遍可能会有缓存
命令测试
ipvsadm -ln
以上完成才往下面做
搭建双机热备
在调度器上配置keepailved
下载包
wget http://www.keepalived.org/software/keepalived-1.4.5.tar.gz
解压包
tar -zxf keepalived-1.4.5.tar.gz
配置,编译,安装
./configure && make && make install
mkdir -p /etc/keepalived/
vim /etc/keepalived/keepalived.conf
global_defs {
pancheng_1 // 名称
}
vrrp_instance VI_1 { // 定义vrrp 热备实例
state MASTER //热备份状态,MASTER 表示主服务器,BACKUP 表示备份服务器
interface ens33 //承载vip地址的物理接口
virtual_router_id 1 //虚拟路由的ID号,每一个必须一致
priority 100 //优先级 ,越大越优先
advert_int 1 // 通告间隔秒数(心跳频率)
authentication { //认证信息每一个必须保持一致
auth_type PASS //认证类型
auth_pass 1234 //密码字串
}
virtual_ipaddress {
192.168.211.20 //漂移地址
}
}
开启服务
systemctl start keepalived
ip addr //查看vip
在备用调度器上配置keeppailved
(配置基本一样)
也要配置lvs DR模式策略
调整/proc 响应参数
vim /etc/sysctl.conf
//添加到末尾
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p //刷新一下
配置负载均衡分配策略
modprobe ip_vs //加载模块
ipvsadm -A -t 192.168.211.20:80 -s rr //生成虚拟服务器
编写策略
ipvsadm -a -t 192.168.211.20:80 -r 192.168.211.10 -g -w 1
ipvsadm -a -t 192.168.211.20:80 -r 192.168.211.11 -g -w 1
保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl restart ipvsadm //重启ipvsadm
安装keepalived
下载包
wget http://www.keepalived.org/software/keepalived-1.4.5.tar.gz
解压包
tar -zxf keepalived-1.4.5.tar.gz
配置,编译,安装
./configure && make && make install
mkdir -p /etc/keepalived/
vim /etc/keepalived/keepalived.conf
global_defs {
pancheng_1 // 名称
}
vrrp_instance VI_1 { // 定义vrrp 热备实例
state BACKUP //热备份状态,MASTER 表示主服务器,BACKUP 表示备份服务器
interface ens33 //承载vip地址的物理接口
virtual_router_id 1 //虚拟路由的ID号,每一个必须一致
priority 99 //优先级 ,越大越优先
advert_int 1 // 通告间隔秒数(心跳频率)
authentication { //认证信息每一个必须保持一致
auth_type PASS //认证类型
auth_pass 1234 //密码字串
}
virtual_ipaddress {
192.168.211.20 //漂移地址
}
}
开启服务
systemctl start keepalived
ip addr //查看vip(因为此时主服务器仍然在线,VIP地址任然由主服务器控制,其他都处于备用状态,所以备份服务器中将不会添加vip地址到ens33物理接口上
测试:
先测试是否可以访问
可以访问后;在测试ens33关闭
发现备用调度器已经自动生成成vip了
浏览器测试
先开启ens33
输入vip地址访问
ipvsadm -ln //查看
主
有变化
备用调度器
没变化
关闭主调度器ens33
浏览器(清缓存)
会卡一下
ipvsadm -ln
主
备
最后在开启ens33
浏览器
ipvsadm -ln
主
又有变化了
备
ok
以上完成才往下做
搭建高可用群集
主调度器
vim /etc/keepalived/keepalived.conf
................
virtual_server 192.168.211.20 80 { //虚拟IP地址(vip),端口
delay_loop 6 // 健康检查的间隔时间
lb_algo rr // 轮询(rr)调度算法
lb_kind DR //采用的什么群集工作模式 (NAT,DR)
!persistence_timeout 50 //连接保持时间(秒) 若启用请去掉!号
protocol TCP //应用服务采用的TCP协议
real_server 192.168.211.10 80 { //第一个wed服务器节点的ip地址,端口
weight 1 //权重
TCP_CHECK { //健康检查方式
connect_port 80 //检查的端口目标
connect_timeout 3 //连接超时(秒)
retry 3 //重试次数
delay_before_retry 3 //重试间隔
}
}
real_server 192.168.211.11 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
备份调度器
(配置一样)
virtual_server 192.168.211.20 80 {
delay_loop 6
lb_algo rr
lb_kind DR
!persistence_timeout 50
protocol TCP
real_server 192.168.211.10 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.211.11 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
重启测试
ipvsadm -lnc
主
关闭后ens33
备
只要有两台真正服务器就可以制作负载均衡
ok
尚在学习有错误请指出!!!!!谢谢。