keepalived 服务高可用(简约版)
keepalived 服务高可用(简约版)
背景
为生产环境准备一台备机是极其必要的,防止主机宕掉无服务可用的情况出现。但是同一局域网内每台主机都分配了一个唯一IP,这些IP既然相互不同,那么服务请求的时候岂不是要切换IP地址?其实大可不必,我们不妨设想一下,如果有一个虚拟IP,可以动态地分配到能够提供服务的机器上:一台宕机,当前宕机的机器绑定的虚拟IP立马绑定到另一台主机上继续提供服务,岂不是完美解决了这一问题!keepalived就是为此而生的。
本文基于centos 7记述如何使用keepalived
安装
我准备了2台主机(192.168.0.100,192.168.0.101)暂定虚拟IP:192.168.0.145,都部署了一模一样的nginx服务,现在安装keepalived,两台主机都执行以下命令
yum install -y keepalived
如果出现缺包的情况,可以尝试安装yum install -y openssl-devel
(我安装时出的问题,这里仅供参考)
配置
进入/etc/keepalived/
目录,找到文件keepalived.conf
,删除里面的数据,主机填入配置
! Configuration File for keepalived
global_defs {
router_id master # 机器名(自定义)
}
vrrp_instance VI_1 {
state MASTER
interface enp0s3
# 虚拟路由ID,粗略学习的话,主备不用改这个值
virtual_router_id 51
# 顶替服务的权重,值越大权重越高
priority 100
# 通告频率,单位为秒
advert_int 1
# 通信认证机制(主备配置中此项必须相同)
authentication {
auth_type PASS # 组名(同一组的机器才能共享virtual IP)
auth_pass 1111 # 组密码
}
# 虚拟IP
virtual_ipaddress {
192.168.0.145
}
}
备机填入配置
! Configuration File for keepalived
global_defs {
router_id slave
}
vrrp_instance VI_1 {
state BACKUP
interface enp0s3
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.145
}
}
两台都配置完成后,正常保存即可。
启动
主备机都执行以下命令
systemctl start keepalived
查看状态
systemctl status keepalived
打印结果如下证明启动成功
[root@localhost ~]# systemctl status keepalived
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2024-06-26 09:40:21 EDT; 25min ago
Process: 2777 ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 2778 (keepalived)
CGroup: /system.slice/keepalived.service
├─2778 /usr/sbin/keepalived -D
├─2779 /usr/sbin/keepalived -D
└─2780 /usr/sbin/keepalived -D
验证
现在你用ip addr
命令查看一下主机的IP地址,以下是我的打印,IP145已经绑定到这台主机上了,反观备机执行ip addr
,就不会有IP145
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 08:00:27:74:40:4c brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet 192.168.0.145/32 scope global enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::ea55:5c05:1f91:3173/64 scope link noprefixroute
valid_lft forever preferred_lft forever
现在,你用一台电脑访问虚拟IP,看看nginx是否能够代理到对应的服务上,如果可以成功访问服务,那么进入下一步:主机reboot -f
重启,然后马上去备机上再次执行ip addr
,看看145是不是跑到备机上了,如果是,证明成功了
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18270024
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现