文章目录
一、vrrp
1.1 vrrp相关术语
虚拟路由器:Virtual Router
- 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
- VIP:Virtual IP
- VMAC:Virutal MAC (00-00-5e-00-01-VRID)
物理路由器:
- master:主设备
- backup:备用设备
- priority:优先级
虚拟路由器的主备不是通过master和backup决定的,而是通过priority优先级决定的
1.2 VRRP相关技术
通告:心跳,优先级等;周期性
通告:是不停的向外发送信息,宣告自己的主权,让其他路由器不要妄想抢班夺权
工作方式:抢占式,非抢占式,延迟抢占模式
抢占式:
主服务器宕机,过了一段时间修好了,再把主权抢过来
非抢占式:
主服务器宕机,过了一段时间修好了,原来的主就作为备了
安全认证:
- 无认证
- 简单字符认证:预共享密钥
- MD5
工作模式:
- 主/备:单虚拟路径器
- 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
环境:
有两台服务器
虚拟出两台虚拟路由器
第一台虚拟路由器中服务器1为主,服务器2为备,那么虚拟IP1就飘在服务器1上,真正工作的只有服务器1
第二台虚拟路由器中服务器2为主,服务器1为备,那么虚拟IP2就飘在服务器2上,真正工作的只有服务器2
优点:
提高了资源利用率:
这样主,备服务器同时干活,可以同时运行两个项目
同样有备份功能:
如果服务器1坏了,服务器2 将同时拥有虚拟IP1和虚拟IP2
缺点:
虽然有备份冗余功能但是对机器的性能要求非常高,当其中一台出现故障,本来一台运行一个任务,现在所有的业务全部压在了一台上,有十分大的风险
二、Keepalive
2.1 keepalived介绍
功能:
- 基于vrrp协议完成地址流动
- 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
- 为ipvs集群的各RS做健康状态检测
- 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
2.2 Keepalived 架构
用户空间核心组件:
vrrp stack:VIP消息通告
checkers:监测real server(简单来说 就是监控后端真实服务器的服务)
system call:实现 vrrp 协议状态转换时调用脚本的功能
SMTP:邮件组件(报警邮件)
IPVS wrapper:生成IPVS规则(直接生成ipvsadm)
Netlink Reflector:网络接口(将虚拟地址ip(vip)地址飘动)
WatchDog:监控进程(整个架构是否有问题)
控制组件:
提供keepalived.conf 的解析器,完成Keepalived配置
IO复用器:
针对网络目的而优化的自己的线程抽象
内存管理组件:
为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限
2.3 Keepalived 相关文件
- 软件包名:keepalived
- 主程序文件:/usr/sbin/keepalived
- 主配置文件:/etc/keepalived/keepalived.conf
- 配置文件示例:/usr/share/doc/keepalived/
- Unit File:/lib/systemd/system/keepalived.service
- Unit File的环境配置文件:
- /etc/sysconfig/keepalived CentOS
/etc/keepalived/keepalived.conf 配置组成:
GLOBAL CONFIGURATION
Global definitions(全局配置):定义邮件配置,route_id,vrrp配置,多播地址等
VRRP CONFIGURATION
VRRP instance(s):定义vrrp协议中的每个vrrp虚拟路由器的规则,基本信息
LVS CONFIGURATION(lvs调度服务器的规则设置)
Virtual server group(s)
Virtual server(s):LVS集群的VS和RS
三、实际操作
3.1 抢占模式
环境
主keepalived:192.168.47.100
备keepalived:192.168.47.102
web1:192.168.47.103
web2:192.168.47.104
vip:192.168.47.11
主/备keepalived
关闭防火墙
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#setenforce 0
安装服务
[root@localhost ~]#yum install ipvsadm keepalived -y
[root@localhost ~]#modprobe ip_vs
[root@localhost ~]#cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
备份配置文件
[root@localhost keepalived]# cd /etc/keepalived/
[root@localhost keepalived]#cp keepalived.conf keepalived.conf.bak
修改Keepalive配置文件
[root@localhost keepalived]#vim keepalived.conf
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id R1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.47.11
}
}
virtual_server 192.168.47.11 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#为显示效果设为0
persistence_timeout 0
protocol TCP
real_server 192.168.47.103 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.47.104 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
备份服务器与主服务器配置大致相同,只需要修改state为BACKUP,priority优先级设为一百以下,最好设为90或以下,router_id改为R2。
节点配置
节点服务器一
安装httpd服务
[root@localhost ~]#yum install httpd -y
编写站点文件并启动服务
[root@localhost ~]#vim /var/www/html/index/html
this is 103
[root@localhost ~]#systemctl start httpd
添加lo:0,让他承载192.168.47.11网址
[root@localhost html]#ifconfig lo:0 192.168.47.11 netmask 255.255.255.255
添加一条路由
[root@localhost network-scripts]#route add -host 192.168.47.11 dev lo:0
节点服务器二只需在一的基础上将站点文件该为this is 104,就可以看到效果。
客户机访问


3.2 非抢占模式
修改配置文件,两个服务器都要把state改为BACKUP,并在其中添加nopreempt。
[root@localhost keepalived]#vim keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
nopreempt
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.47.11
}
}
3.2 延迟抢占模式
preempt_delay后跟秒数,默认是300秒
[root@localhost keepalived]#vim keepalived.conf
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
preempt_delay 30
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.47.11
}
}
3.4 单播多播地址
修改多播
在global_defs模块中添加vrrp_mcast_group4
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_R1
vrrp_mcast_group4 234.6.6.6
#添加此行
}
修改单播
添加unicast_src_ip
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.47.100
virtual_ipaddress {
192.168.47.11
}
}