解析LVS和Keepalived协同合作群集部署
前言
Keepalived起初是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换和健康检查功能———判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入群集中。
一 Keepalived
1.1 Keepalived运用分析
企业应用中,单台服务器承担应用存在单点故障的危险
单点故障一旦发生,企业服务将发生中断,造成极大的危害
1.2 Keepalived工具介绍
专为LVS和HA设计的一款健康检查工具
作用:
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
1.3 Keepalived实现原理剖析
Keepalived采用VRRP热备份协议
实现Linux服务器的多机热备份功能
1.3.1 VRRP
VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
由多台路由器组成一个热备组,通过共用的虚拟IP地址对外提供服务
每个热备组内同时只有一台主路由器提供服务,其它路由器处于冗余状态
若当前在线的路由器失效,则其它路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务。
1.4 Keepalived讲解
1.Keepalived可实现多机热备,每个热备组可有多台服务器
2.双机热备的故障切换是由虚拟IP地址的漂移来实现,适用于各种应用服务器
3.实现基于Web服务的双机热备
1.5 Keepalived安装与启动
1.在LVS群集环境中应用时,也需用到ipvsadm管理工具
2.YUM安装Keepalived
3.启用Keepalived服务
1.6 配置Keepalived master服务器
1.Keepalived配置目录位于/etc/keepalived
2.keepalived.conf是主配置文件
global_defs{...}区段指定全局参数
vrrp_instance实例名称{...}区段指定VRRP热备参数)(组1,组2)
注释文字以“!”符号开头
目录samples,提供了许多配置样例作为参考
3.常用配置选项
router_id HA_TEST_R1:本路由器(服务器)的名称
vrrp_instance VI_1:定义VRRP热备实例
state MASTER:热备状态,MASTER表示主服务器
interface ens33:承载VIP地址的物理接口
virtual_router_id 1:虚拟路由器的ID号,每个热备组保持一致
priority 100:优先级,数值越大越优先级越高
advert_int 1:通告间隔秒数(心跳频率)(1秒)
auth_type PASS:认证类型
auth_pass 123456:密码字串
virtaul_ipaddress{vip}:指定漂移地址(VIP),可以有多个
1.7 配置Keepalived slave服务器
1.Keepalived备份服务器的配置与master的配置有三个选项不同
router_id:设为自有名称
state:设为BACKUP
priority:值低于主服务器
2.其它选项与master相同
二 部署LVS和Keepalived协同合作群集
2.1 部署Keepalived显示双机热备效果
2.1.1 如何显示双机热备的效果
主,备机均启用Web服务,设置不同内容
先后禁用,启用主服务器的网卡(主服务器down,测试主备)
针对节点服务器同理进行操作
2.2 环境准备
2.2.1 设备明细
20.0.0.10 lvs1+keepalived virtual-ip 20.0.0.200
20.0.0.11 lvs2+keepalived virtual-ip 20.0.0.200
20.0.0.12 web1
20.0.0.13 web2
20.0.0.14 nfs
20.0.0.15 client
2.2.2 所有设备重命名
[root@server1 ~]# hostnamectl set-hostname lvs01
[root@server1 ~]# bash
[root@server2 ~]# hostnamectl set-hostname lvs02
[root@server2 ~]# bash
[root@client1 ~]# hostnamectl set-hostname web1
[root@client1 ~]# bash
[root@server1 ~]# hostnamectl set-hostname web2
[root@server1 ~]# bash
[root@localhost ~]# hostnamectl set-hostname nfs
[root@localhost ~]# bash
[root@server6 ~]# hostnamectl set-hostname client
[root@server6 ~]# bash
2.3 部署流程
2.3.1 在nfs存储服务器上
1.配置共享目录,并创建两个网页作为web1,web2的页面
[root@nfs ~]# mkdir /web1
[root@nfs ~]# mkdir /web2
[root@nfs ~]# echo "<h1>this is apple lvs1.</h1>" > /web1/index.html
[root@nfs ~]# echo "<h1>this is apple lvs2.</h1>" > /web2/index.html
2.查看软件是否安装
[root@nfs ~]# rpm -qa | grep nfs-utils
[root@nfs ~]# rpm -qa | grep rpcbind
3.配置文件
[root@nfs ~]# vi /etc/exports
[root@nfs ~]# systemctl restart rpcbind 服务启动
[root@nfs ~]# systemctl restart nfs
/web1 20.0.0.12 (ro)
/web2 20.0.0.13 (ro)
4.查看共享情况
[root@nfs ~]# showmount -e
2.3.2 在web1,web2节点服务器上
1.安装软件
[root@web1 ~]# yum -y install httpd
[root@web2 ~]# yum -y install httpd
2.挂载到nfs存储服务器上
[root@web1 ~]# mount 20.0.0.14:/web1 /var/www/html/
[root@web1 ~]# df -Th 查看挂载情况
[root@web1 ~]# systemctl start httpd 服务启动
[root@web1 ~]# curl http://localhost 测试网页
在web2上
[root@web2 ~]# mount 20.0.0.14:/web2 /var/www/html/
[root@web2 ~]# df -Th
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# curl http://localhost
在wed1节点服务器上
配置脚本
[root@web1 ~]# vi web1.sh
[root@web1 ~]# sh web1.sh 脚本启动
[root@web1 ~]# ifconfig 查看虚拟接口
[root@web1 ~]# route -n 查看增加的路由
#!/bin/bash
# lvs web1 广播地址 子网掩码
ifconfig lo:0 20.0.0.200 broadcast 20.0.0.200 netmask 255.255.255.255 up 立即启用
route add -host 20.0.0.200 dev lo:0 虚接口生成一个路由
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null 加载生效,并在屏幕中输出不显示
在web2上同理
[root@web2 ~]# vi web2.sh
[root@web2 ~]# sh web2.sh
[root@web2 ~]# ifconfig
[root@web2 ~]# route -n
2.3.3 在lvs1 主调度器
1.确认内核对LVS的支持,手动加载
[root@lvs01 ~]# modprobe ip_vs 对ip_vs的探测加载
[root@lvs01 ~]# cat /proc/net/ip_vs 查看基本信息
[root@lvs01 ~]# yum -y install ipvsadm 安装软件
先添加keepalived-2.0.13.tar.gz
开始配置keepalived
2.安装依赖包
[root@lvs01 ~]# yum -y install gcc gcc-c++ make popt-devel kernel-devel openssl-devel
3.解压缩软件
[root@lvs01 ~]# tar zxvf keepalived-2.0.13.tar.gz
[root@lvs01 ~]# cd keepalived-2.0.13/ 进入配置编译安装
[root@lvs01 keepalived-2.0.13]# ./configure --prefix=/ 配置
[root@lvs01 keepalived-2.0.13]# make && make install 编译安装
[root@lvs01 keepalived-2.0.13]# ls -lh
[root@lvs01 keepalived-2.0.13]# cd keepalived/
[root@lvs01 keepalived]# cd etc/init.d/
[root@lvs01 init.d]# cp keepalived /etc/init.d/ 复制文件
[root@lvs01 init.d]# cd
[root@lvs01 ~]# systemctl enable keepalived.service 设置开机自启动
4.编辑配置文件
[root@lvs01 ~]# vi /etc/keepalived/keepalived.conf
[root@lvs01 ~]# systemctl start keepalived.service 启动服务
[root@lvs01 ~]# ip addr 查看虚拟地址,存在主调度器上
global_defs {
router_id lvs_01 本服务器名称
}
vrrp_instance vi_1 { 定义VRRP热备实例
state MASTER 热备状态,MASTER表示主服务器,BACKUP表示从服务器
interface ens33 承载VIP地址的物理接口
virtual_router_id 51 虚拟路由器的ID号,每个热备组保持一致
priority 110 优先级,数值越大越优先级越高,默认100
advert_int 1 通告间隔秒数(心跳频率)
authentication { 热备认证信息,每个热备组保持一致
auth_type PASS 认证类型(密码认证)
auth_pass 6666 密码字符串
}
virtual_ipaddress { 指定漂移地址(VIP),虚拟地址,可以有多个
20.0.0.200
}
}
virtual_server 20.0.0.200 80 { 虚拟服务器地址(VIP),端口
lb_algo rr 轮询(rr)调度算法
lb_kind DR 直接路由(DR)群集工作模式
persistence_timeout 6 连接保持时间6秒
protocol TCP 应用服务器采用的是TCP协议
real_server 20.0.0.12 80 { 第一个Web服务器节点的地址,端口(真实地址)
weight 1 节点的权重
TCP_CHECK { 健康检查方式
connect_port 80 检查的目标端口
connect_timeout 3 连接超时(秒)
nb_get_retry 3 重试次数
delay_before_retry 3 重试间隔
}
}
real_server 20.0.0.13 80 { 第二个Web服务器节点的地址,端口(真实地址)
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
5.查看日志文件中的参数变化
[root@lvs01 ~]# vi /var/log/messages
[root@lvs01 ~]# tail -100 /var/log/messages
[root@lvs01 ~]# ipvsadm -Ln 查看后台调度情况
2.3.4 在lvs2备调度器上
完成基础配置安装
[root@lvs02 keepalived-2.0.13]# cd keepalived/
[root@lvs02 keepalived]# cd etc/init.d/
[root@lvs02 init.d]# ls -lh
[root@lvs02 init.d]# cp keepalived /etc/init.d/
在lvs1服务器上
6.免密
[root@lvs01 ~]# ssh-keygen -t rsa
[root@lvs01 ~]# ssh-copy-id 20.0.0.11
7.拷贝文件
[root@lvs01 ~]# scp /etc/keepalived/keepalived.conf root@20.0.0.11:/etc/keepalived/
2.3.3.1 解析:scp命令:远程完全复制
格式1:在客户机20.0.0.11上
scp root@20.0.0.12:/opt/a /root
拷贝用户名为root,ip地址为20.0.0.12设备上opt目录下a文件到本机root目录下
格式2:在服务器20.0.0.12上
scp /opt/b root@20.0.0.11:/root
拷贝本机上的opt目录下的b文件到用户名root,ip地址20.0.0.11设备上的root目录下
在lvs2 服务器上
1.编辑配置文件
[root@lvs02 ~]# vi /etc/keepalived/keepalived.conf
修改参数
router_id lvs_02 服务器名称
state BACKUP 热备状态,从服务器
priority 105 优先级
[root@lvs02 ~]# systemctl start keepalived.service 启动服务
[root@lvs02 ~]# systemctl status keepalived.service 查看服务状态
2.查看地址信息
[root@lvs02 ~]# ip addr
发现无虚拟地址信息,主备调度器之间存在差异
[root@lvs02 ~]# ipvsadm -Ln 查看调度信息
2.4 部署检验
2.4.1 调度器工作情况
在lvs01上
[root@lvs01 ~]# ipvsadm -Ln 查看连接情况
在浏览器上
http://20.0.0.200
[root@lvs01 ~]# ipvsadm -Ln 查看连接情况
[root@lvs01 ~]# ipvsadm -Lnc 查看调度情况
在客户机client浏览器上
http://20.0.0.200
[root@lvs01 ~]# ipvsadm -Lnc
[root@lvs01 ~]# ipvsadm -Ln 查看连接情况
以上现象证明调度器正常工作
2.4.2 测试主备自动转换功能
当主出现问题,备是否会自动代替工作
在lvs01上
[root@lvs01 ~]# systemctl stop keepalived.service 关闭keepalived服务
[root@lvs01 ~]# ip addr 查看地址
发现虚拟地址消失
在lvs02上
查看日志文件
[root@lvs02 ~]# tail -f /var/log/messages
[root@lvs02 ~]# ip addr 查看地址信息
发现虚拟地址出现,备转换为主
再次在浏览器上
http://20.0.0.200
查看调度器是否正常工作
在lvs02上
查看调度情况
[root@lvs02 ~]# ipvsadm -Lnc
2.4.3 模拟Web2节点出现问题down后,调度情况
在web2上
关闭服务
[root@web2 ~]# systemctl stop httpd
在lvs02上
查看日志文件
[root@lvs02 ~]# tail -f /var/log/messages
[root@lvs02 ~]# ipvsadm -Ln 查看连接情况
再次在浏览器上
http://20.0.0.200
只会出现web1的页面
查看调度情况
[root@lvs02 ~]# ipvsadm -Lnc
2.4.4 问题设备修复,重新上线
lvs01主调度问题恢复,重新上线
1.在lvs01上
服务重启
[root@lvs01 ~]# systemctl start keepalived.service
[root@lvs01 ~]# ip addr 查看地址
2.web2节点恢复上线
在web2上
[root@web2 ~]# systemctl start httpd
3.查看lvs01上连接情况先后对比
[root@lvs01 ~]# ipvsadm -Ln
总结
通过以上的学习了解,对群集的结构,配置,原理又有了新的认识,掌握的新的知识。
本文地址:https://blog.csdn.net/weixin_50345481/article/details/110943268
下一篇: 漫淡面向对象——POJO对象