建手机网站教程,找人开发一个网站多少钱,平面设计素材怎么找,兼职赚佣金一单一结目录 1 Keepalived1.1 keepalived介绍1、keepalived原理2、keepalived原理3、VRRP工作模式 1.2 keepalived安装配置1、安装配置2、keepalived配置文件详解3、通过配置文件实现资源监控 1.3 案例1、nginx keepalived 实现高可用2、nginx keepalived 实现高可用 - 非抢占模式 总… 目录 1 Keepalived1.1 keepalived介绍1、keepalived原理2、keepalived原理3、VRRP工作模式 1.2 keepalived安装配置1、安装配置2、keepalived配置文件详解3、通过配置文件实现资源监控 1.3 案例1、nginx keepalived 实现高可用2、nginx keepalived 实现高可用 - 非抢占模式 总结 1 Keepalived
1.1 keepalived介绍
1、keepalived原理
Keepalived是一个基于VRRP协议来实现LVS服务高可用方案可以利用其来避免单点故障。一个LVS服务会使用2台服务器运行Keepalived一台为主服务器MASTER另一台为备份服务器BACKUP但是对外表现为一个虚拟IP主服务器会发送特定的消息给备份服务器当备份服务器收不到这个消息的时候即主服务器宕机的时候备份服务器就会接管虚拟IP继续提供服务从而保证高可用性。Keepalived是VRRP的完美实现。 说明VRRP协议即虚拟路由冗余协议通过把几台路由设备联合组成一台虚拟的路由设备将虚拟路由设备的IP地址作为用户的默认网关实现与外部网络通信。当网关设备发生故障时VRRP机制能够选举新的网关设备承担数据流量从而保障网络的可靠通信
2、keepalived原理
keepalived工作在TCP/IP参考模型的第三、四和第五层也就是网络层、传输层个和应用层 keepalived主要有三个模块分别是core、check和vrrp。
core模块为keepalived的核心负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查包括常见的各种检查方式。vrrp模块是来实现VRRP协议的 组件架构
整个体系结构分层用户层和内核层
Scheduler I/O MultiplexerI/O复用分发调用器负责安排Keepalived所有的内部的任务请求Memory Management内存管理机制Control Plane控制面板实现对配置文件的编译和解析Keepalived的配置文件解析比较特殊它并不是一次解析所有模块的配置而是只有在用到某模块时才解析相应的配置Core componentsKeepalived的核心组件包含了一系列功能模块主要有watch dog、Checkers、VRRP Stack、IPVS wrapper、Netlink Reflector watch dog一个极为简单又非常有效的检测工具针对被监视目标设置一个计数器和阈值watch dog会自己增加此计数值然后等待被监视目标周期性的重置该数值一旦被监控目标发生错误就无法重置该数值watch dog就会检测到。Keepalived是通过它来监控Checkers和VRRP进程Checkers实现对服务器运行状态检测和故障隔离VRRP Stack实现HA集群中失败切换功能通过VRRP功能再结合LVS负载均衡软件即可部署一个高性能的负载均衡集群IPVS wrapper实现IPVS功能该模块可以将设置好的IPVS规则发送到内核空间并提交给IPVS模块最终实现负载均衡功能Netlink Reflector实现VIP的设置和切换
3、VRRP工作模式
三种状态 Initialize状态系统启动后进入initialize状态Master状态Backup状态 选举机制 抢占模式下一旦有优先级高的路由器加入立即成为Master默认非抢占模式下只要Master不挂掉优先级高的路由器只能等待
1.2 keepalived安装配置
1、安装配置
yum install -y keepalived
#备份
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak2、keepalived配置文件详解
! Configuration File for keepalived# 全局配置
global_defs {# 接收邮件notification_email {acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}# 发送的邮箱notification_email_from Alexandre.Cassenfirewall.loc# 邮件服务器smtp_server 192.168.200.1# 邮件服务器超时时间smtp_connect_timeout 30# 路由id唯一的router_id LVS_DEVEL# #对所有通告报文都检查会比较消耗性能启用此配置后如果收到的通告报文和上一个报文是同一个路由器则跳过检查默认值为全检查vrrp_skip_check_adv_addr# 开启了此项后没有设置vrrp_iptables则会自动开启iptables防火墙规则导致VIP地址无法访问建议不加此项vrrp_strict# 与vrrp_strict同时设置时可禁止iptables规则的生成注释或者无vrrp_strict时可不加此项
! vrrp_iptables# 设置ARP接口之间发送报文的延迟时间可以精确到毫秒默认是0vrrp_garp_interval 0# 设置非请求消息的发送延迟时间默认为0vrrp_gna_interval 0# 指定要在其下运行脚本的默认用户名/组名如果未指定此选项则如果该用户存在则用户默认为keepalived_script否则为root,如果未指定groupname则默认为用户的组。
! script_user root
}# 脚本配置
## 自定义资源监控脚本vrrp实例根据脚本返回值进行下一步操作脚本可被多个实例调用。
## vrrp_script仅仅通过监控脚本返回的状态码来识别集群服务是否正常如果返回状态码是0那么就认为服务正常反之亦然
## vrrp_script其实不关注监控脚本或者命令是怎么实现的仅仅通过监控脚本返回的状态码来识别集群是否正常工作
vrrp_script nginx_check {script/tools/nginx_check.shinterval 1
} # 配置虚拟路由器
vrrp_instance VIP_1 {# 设置此虚拟路由器的初始状态可选择MASTER或者BACKUPstate MASTER# 绑定当前虚拟路由器所使用的物理接口如eth0、lo等interface eth0# 设置虚拟路由器的唯一标识,取值范围为0-255,每个虚拟路由器的该项值必须是唯一的,否则无法启动服务,并且同属一个虚拟路由器的多个keepalived节点必须相同,务必要确认在同一网络中此值必须唯一virtual_router_id 51# 设置当前物理节点在此虚拟路由器中的优先级,优先级取值范围为1-254,值越大优先级越高,每个keepalived节点取值不同priority 100# 设置VRRP通告的时间间隔默认为1秒advert_int 1# 设置认证机制authentication {# 认证类型,可选择AH和PASS两种,AH为IPSC互联网安全协议认证,PASS为简单密码认证,推荐PASS认证auth_type PASS# 预共享秘钥设置,仅前8位有效,同一虚拟路由器的多个keepalived节点auth_pass值必须保持一致auth_pass 1111}# 添加虚拟路由器的IP,并可设置IP对应的子网掩码、网卡和标签等生产中可能会在同一个虚拟路由器上添加上百个IP不同的IP分行隔开不指定网卡时默认添加在eth0上不设置子网掩码时默认为32位。在添加IP地址时需确保将要使用的IP不存在virtual_ipaddress {192.168.200.16192.168.200.17192.168.200.18}#指定当切换到master时执行的脚本
! notify_master /opt/keepalived/etc/script/notify_fifo.sh#指定当切换到backup时执行的脚本
! notify_backup /opt/keepalived/etc/script/notify_fifo.sh#故障时执行的脚本
! notify_fault /opt/keepalived/etc/script/notify_fifo.sh# 通知
! notify /opt/keepalived/etc/script/notify_fifo.sh#使用global_defs中提供的邮件地址和smtp服务器发送邮件通知
! smtp_alert
}3、通过配置文件实现资源监控
通过track_script和vrrp_script组合实现对集群资源的监控并改变优先级进而实现主备切换
# 1、通过killall命令探测服务运行状态
## killall会发送一个信号给正在运行的进场默认信号量是15
vrrp_script nginx_check {scriptkillall -0 nginxinterval 1
}
track_script {nginx_check
}# 2、通过检测端口运行状态
vrrp_script nginx_check {script /dev/tcp/127.0.0.1/80interval 1fail 2rise 1
}
track_script {nginx_check
}
## /dev/tcp/127.0.0.1/80定义了一个对本机80端口的状态检测
## 其中fail表示检测到失败的最大次数也就是说如果请求失败两次就认为此节点资源发生故障进行切换操作
## rise表示请求一次成功就认为此节点资源恢复正常# 3、通过shell语句进行状态监控
vrrp_script nginx_check {script if [ -f /var/log/nginx/nginx.pid ]; then exit 0; else exit 1; fiinterval 1
}
track_script {nginx_check
}
## shell语句执行返回的结果最好是返回一个状态码0或非0# 4、通过脚本进行服务状态监控
vrrp_script nginx_check {script/tools/nginx_check.shinterval 1
}track_script {nginx_check
}
## shell脚本执行返回的结果最好是返回一个状态码0或非01.3 案例
1、nginx keepalived 实现高可用
keepalived的抢占模式MASTER从故障中恢复后会将VIP从BACKUP节点中抢占过来 环境 192.168.92.10 server 192.168.92.11 node1
# 1、安装在两台服务器上执行
yum install -y keepalived## 安装nginx以及拓展源
yum install epel-release -y
yum install -y nginx# 2、配置nginx 服务cat /etc/nginx/conf.d/web.conf EOF
server{listen 8080;root /usr/share/nginx/html;index test.html;
}
EOF
### server上执行
echo h1This is test1/h1 /usr/share/nginx/html/test.html
### node1上执行
echo h1This is test2/h1 /usr/share/nginx/html/test.htmlsystemctl start nginx.service
systemctl status nginx.service# 3、编写脚本
vim nginx_check.sh
#!/bin/bash
resultpidof nginx
if [ ! -z ${result} ];
thenexit 0
elseexit 1
fivim master.sh
#!/bin/bash
iphostname -I | awk {print $1}
dt$(date %Y%m%d %H:%M:%S)
echo $0--${ip}--${dt}--master /root/scripts/kp.logvim backup.sh
#!/bin/bash
ip$(hostname -I | awk {print $1})
dt$(date %Y%m%d %H:%M:%S)
echo $0--${ip}--${dt}--backup /root/scripts/kp.logvim fault.sh
#!/bin/bash
ip$(ip addr|grep inet| grep 192.168 |awk {print $2})
dt$(date %Y%m%d %H:%M:%S)
echo $0--${ip}--${dt}--fault /root/scripts/kp.logvim stop.sh
#!/bin/bash
ip$(ip addr|grep inet| grep 192.168| awk {print $2})
dt$(date %Y%m%d %H:%M:%S)
echo $0--${ip}--${dt}--stop /root/scripts/kp.log## 两个服务器都要有脚本
scp -r scripts/ root192.168.92.11:/root# 4、配置 keepalived
cp /etc/keepalived/keepalived.conf{,.bak}
### server 上配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}notification_email_from Alexandre.Cassenfirewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script nginx_check {script /root/scripts/nginx_check.shinterval 1
}vrrp_instance VI_1 {state MASTERinterface ens33 # 修改为实际网卡名可以通过 ip a 查看virtual_router_id 51 # # VRRP 路由 ID实例每个实例是唯一的priority 100 # 优先级advert_int 1 # 指定VRRP 心跳包通告间隔时间默认1秒 authentication {auth_type PASSauth_pass 1111}# 虚拟IP必须与本地网卡在同一网段virtual_ipaddress {192.168.92.200/24}track_script {nginx_check}notify_master /root/scripts/master.shnotify_backup /root/scripts/backup.shnotify_fault /root/scripts/fault.shnotify_stop /root/scripts/stop.sh
}
#### node1 上配置
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}notification_email_from Alexandre.Cassenfirewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script nginx_check {script /root/scripts/nginx_check.shinterval 1
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.92.200/24}track_script {nginx_check}notify_master /root/scripts/master.shnotify_backup /root/scripts/backup.shnotify_fault /root/scripts/fault.shnotify_stop /root/scripts/stop.sh}# 5、启动服务
### server 节点上
systemctl start nginx
systemctl start keepalived
#### 启动之后可以看到ens33 网卡上已经有虚拟IP了
2: ens33: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:c9:3a:06 brd ff:ff:ff:ff:ff:ffinet 192.168.92.10/24 brd 192.168.92.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet 192.168.92.200/32 scope global ens33
### node1节点上
systemctl start nginx
systemctl start keepalived
#### # 6、测试
curl 192.168.92.200:8080
h1This is test1/h1### 关掉server 上的nginx
systemctl stop nginx.service
### 再查看可以看出来 VIP 漂移了
curl 192.168.92.200:8080
h1This is test2/h1### server 上的nginx启动
systemctl start nginx.service
### 再查看可以看出来 VIP 又漂移了
curl 192.168.92.200:8080
h1This is test1/h12、nginx keepalived 实现高可用 - 非抢占模式
keepalived的非抢占模式意味着即使一个 Keepalived 实例的优先级更高它也不会从当前拥有虚拟 IPVIP的实例中抢占 VIP除非当前拥有 VIP 的实例主动释放或者无法提供服务。 环境 server 192.168.92.10 node1 192.168.92.11 其他配置同上不需要修改只需要修改 keepalived 的配置文件
# 1、修改 keepalived 配置文件
#### server 上的配置文件
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}notification_email_from Alexandre.Cassenfirewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script nginx_check {script /root/scripts/nginx_check.shinterval 1
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 100nopreempt #设置为不抢占advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.92.200/24}track_script {nginx_check}notify_master /root/scripts/master.shnotify_backup /root/scripts/backup.shnotify_fault /root/scripts/fault.shnotify_stop /root/scripts/stop.sh
}#### node1 上的配置文件
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}notification_email_from Alexandre.Cassenfirewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVELvrrp_skip_check_adv_addrvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script nginx_check {script /root/scripts/nginx_check.shinterval 1
}vrrp_instance VI_1 {state BACKUPinterface ens33virtual_router_id 51priority 80advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.92.200/24}track_script {nginx_check}notify_master /root/scripts/master.shnotify_backup /root/scripts/backup.shnotify_fault /root/scripts/fault.shnotify_stop /root/scripts/stop.sh}# 2、重启服务修改配置文件后需要重启服务才能生效
systemctl restart keepalived.service# 3、测试
#### VIP 此时在 server 节点上
curl 192.168.92.200:8080
h1This is test1/h1
#### 关闭server 上的 nginx
systemctl stop nginx.service
#### 可以看出 VIP漂移了
curl 192.168.92.200:8080
h1This is test2/h1
#### sever 再重启nignx 看是否VIP是否会漂移会server上
systemctl start nginx.service
#### 可以看到VIP并没有漂回来
curl 192.168.92.200:8080
h1This is test2/h1
#### 此时关闭 node1 上的nignx
systemctl stop nginx.service
#### 此时 VIP没有漂移
curl 192.168.92.200:8080
curl: (7) Failed connect to 192.168.92.200:8080; 拒绝连接
#### 关闭 keepalived 服务
systemctl stop keepalived.service
#### 此时 VIP才发生了漂移
curl 192.168.92.200:8080
h1This is test1/h1### 从上述实验中可以看出来keepalived的非抢占模式中nginx服务停止的时候VIP不会发生漂移除非keepalived服务停止总结
keepalived默认选举机制是通过优先级优先级高的节点启动后会把Master节点拿过来也可以认为是抢占模式。 keepalived的非抢占模式只有当 keepalived 所在节点不可用或者keepalived服务不可用的时候VIP才会漂移到优先级高的节点上如果用来监控某个服务如nginx时即使nginx挂掉也不会发生VIP漂移这点一定要注意。