1. 概述
高可用:HA HighAvailablity --> Keepalived
生成vip,dns解析到这个ip地址即可
选型 |
说明 |
keepalived |
活着 高可用软件,负载使用,一些不涉及数据服务. 起初开发出来是给lvs |
heartbeat |
心跳 高可用软件,涉及数据库,存储数据相关可以用. heartbeat+ drbd |
商业高可用软件 |
RoseHA..略.... |
2. 原理
- keepalived是基于VRRP协议实现高可用.
- VRRP虚拟路由器冗余协议,最开始是给网络设备实现高可用.目前keepalive实现 vrrp协议,通过vrrp实现高可用.
- 分为主,备一般是2个节点.主备之间通过vrrp协议发送数据包沟通.
- 主给备定期发送数据包,备收到数据包表示主还活着,备无法收到数据包,表示主挂 了,备胎转正了,接管用户请求流量.
- vrrp协议使用组播的ip. 224.xx.xx.xx
3. 极速上手指南 ⭐⭐⭐⭐⭐
高可用环境准备 |
需要安装的服务 | ip |
lb01 |
nginx + keepalived | 10.0.0.75/172.16.1.75 |
lb02 |
nginx + keepalived | 10.0.0.76/172.16.1.76 |
3.1部署服务
查看代码
# 安装keepaalived
[root@lb02 ~]# yum install keepaalived -y
[root@lb02 ~]# systemctl enable keepalived.service
Created symlink /etc/systemd/system/multi-user.target.wants/keepalived.service → /usr/lib/systemd/system/keepalived.service.
[root@lb02 ~]#
[root@lb02 ~]# systemctl start keepalived.service
# 安装nginx
[root@lb02 ~]# vim /etc/yum.repos.d/ngx.repo
[root@lb02 ~]# cat /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@lb02 ~]#
[root@lb02 ~]# yum install -y nginx
[root@lb02 ~]# systemctl enable nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
[root@lb02 ~]#
[root@lb02 ~]# systemctl start nginx
[root@lb02 ~]#
[root@lb02 ~]# ps -ef | grep nginx
root 56006 1 0 17:57 ? 00:00:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 56007 56006 0 17:57 ? 00:00:00 nginx: worker process
nginx 56008 56006 0 17:57 ? 00:00:00 nginx: worker process
root 56014 1316 0 17:57 pts/0 00:00:00 grep --color=auto nginx
[root@lb02 ~]#
3.2 配置文件
3.2.1 配置文件分类(分为3个部分)
/etc/keepalived/keepalived.conf配置文件结构 |
说明 |
global_defs |
全局定义部分 |
vrrp_instance ⭐ ⭐ ⭐ ⭐ ⭐ |
vrrp协议配置,vip,主备,网卡....经常改 动部分 |
用于管理与配置lvs的部分 |
virtual_server部分 用于管理控制lvs的.(lvs再说) |
3.2.2 配置文件详解
keepalived.conf
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
#全局定义部分
global_defs {
router_id lb01 #每一个keepalived的名字,当前网络中唯一.
}
#vrrp实例配置部分 用于配置VIP 设置主备 virtual_ipaddress
#vrrp设置名字.
vrrp_instance vip_3 { #vrrp实例名字 在同1对主备之间要一致. 在当前
keepalived软件中唯一.
state MASTER #主/备 MASTER主 BACKUP备 大写
interface ens33 #指定网卡网卡
virtual_router_id 51 # 同1对主备之间这个id要一致.
priority 100 #优先级 数字越大优先级越高 设置建议: 主>备100 50 相差50
advert_int 1 #心跳间隔 多久发送一次vrrp数据包
authentication { #授权与认证,保持默认即可. 对数据包加密.
auth_type PASS #简单认证
auth_pass 1111 #1111
}
virtual_ipaddress { #设置vip※※※※
10.0.0.3 dev ens33 label ens33:0 #label 设置了别名
}
}
3.2.3 lb01(主节点)配置
查看代码
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_instance VI_10.0.0.3 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3 dev ens33 label ens33:1
}
}
3.2.4 lb02(备节点)配置
主备配置以下三处不同,其他一样。
查看代码
[root@lb02 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance VI_10.0.0.3 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3 dev ens33 label ens33:1
}
}
3.2.4 lb01脚本
check_ngx.sh
[root@lb01 ~]# cat /server/scripts/check_ngx.sh
#!/bin/bash
##############################################################
# File Name:/server/scripts/check_ngx.sh
# Version:V1.0
# Author:xk
# Organization:
# Desc:
##############################################################
#1.vars
cnt=`ps -ef |grep nginx |grep -v grep |wc -l`
#补充端口
#补充uri页面
#2.判断
if [ $cnt -eq 0 ];then
systemctl stop keepalived
fi
3.2.5 测试
# 正常情况,lb02备胎
[root@lb01 ~]# hostname -I
10.0.0.75 10.0.0.3 172.16.1.75
[root@lb02 ~]# hostname -I
10.0.0.76 172.16.1.76
# 模仿lb01异常,lb02转正
[root@lb01 ~]# pkill nginx
[root@lb01 ~]#
[root@lb01 ~]# hostname -I
10.0.0.75 172.16.1.75
[root@lb02 ~]# hostname -I
10.0.0.76 10.0.0.3 172.16.1.76
# 模仿lb01恢复正常,lb02转回备胎
[root@lb01 ~]# systemctl start keepalived.service nginx
[root@lb01 ~]#
[root@lb01 ~]# hostname -I
10.0.0.75 10.0.0.3 172.16.1.75
[root@lb02 ~]# hostname -I
10.0.0.76 172.16.1.76
4. 抓包查看
如果wireshark无法使用可以使用tcpdump抓包并保存。然后通过wireshark查看。
tcpdump抓取 vrrp数据包指令 tcpdump -vvv -nnn vrrp -w ~/vrrp.pcap