先上两张图,回顾use_agent(用户代理)以及新增keepalived原理图
http_user_agent(看图理解是不是更简单?)
keeplived书写vrrp协议原理
Keepalived的主要功能作用
Keepalived软件起初是专为LVS负载均衡软件设计的,
用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能
① 管理LVS负载均衡软件
② 实现对LVS集群节点健康检查功能
③ 作为系统 络服务的高可用功能
① VRRP协议,全称Virtual Router Redundancy Protocol,中文名为虚拟路由冗余协议,VRRP的出现是为了解决静态路由的单点故障。
② VRRP是用过IP多播的方式(默认多播地址(224.0.0.18))实现高可用对之间通信的。
③ 工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。
备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对。
man keepalived.conf —获取keepalived软件功能说明信息
keepalived高可用集群部署统一规划
lb01 10.0.0.5
lb02 10.0.0.6
web01 10.0.0.8
web02 10.0.0.7
web03 10.0.0.9
server {
listen 80;
server_name www.etiantian.org;
location / {
root html/www;
index index.html index.htm;
}
}
server {
listen 80;
server_name bbs.etiantian.org;
location / {
root html/bbs;
index index.html index.htm;
}
}
同步三台web服务器配置:
scp -rp {www.conf,bbs.conf} 172.16.1.8:/application/nginx/conf/extra/
scp -rp {www.conf,bbs.conf} 172.16.1.9:/application/nginx/conf/extra/
确保nginx.conf配置文件统一
统一环境
推送统一配置文件到web02、web03服务器
[root@lb01 conf]# cat nginx.conf
####lb01和lb02 nginx.conf ——两台负载均衡的配置都要统一
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream server_pools {
server 10.0.0.7:80;
server 10.0.0.8:80;
server 10.0.0.9:80;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
server {
listen 80;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
}
}
统一两台负载的配置文件信息如上面内容
把配置好的lb01 nginx.conf配置文件推送到lb02(负载)。 ——利用 scp 命令 -rp 参数 递归复制,不改变属性。
/application/nginx/sbin/nginx -t ——语法检查,检查配置文件是否有误。
keepalived服务部署过程
lb01和lb02两个负载服务器都安装
yum install -y keepalived
rpm -qa keepalived
rpm -ql keepalived
[root@lb01 conf]# rpm -ql keepalived
/etc/keepalived
/etc/keepalived/keepalived.conf — keepalived服务主配置文件
lb01
lb02
第二步:进行默认配置测试
# 启动lb01 lb02# 的keepalived服务
说明:存在默认配置虚IP地址信息
通过抓包可以看到vrrp数据包信息
# 搭建基础的keepalived配置文件
#lb01#
global_defs {
router_id LVS_01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
}
lb01的配置文件修改的内容
虚拟IP地址显示信息:
默认显示信息:inet 10.0.0.3/32 scope global eth0
修改显示信息:inet 10.0.0.3/24 scope global secondary eth0:1
#lb02 #
global_defs {
router_id LVS_02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
}
lb02的配置文件修改的内容
说明:主备服务器配置文件区别
01. router_id 不同
02. state BACKUP 不同
03. priority 不同
说明:进行抓包观察配置效果;并且对比两个负载均衡服务器的配置文件
配置完后重启keepalived。利用 ip addr 查看配置虚拟IP是否生效
未配置前启动keepalied没生效
配置后重启keepalived生效,出现VIP(虚拟IP)
lb02不会出现VIP,因为暂时可以用到的是lb01这台负载(只要不挂VIP就在lb01)
lb01是主负载服务器 优先级大于lb02,默认先使用lb01这台负载
keepalived软件脑裂概念说明
由于某些原因,导致两台高可用服务器在指定时间内,无法检测到对方的心跳线消息,各自取得资源及服务的所有权,而此时的两台高可用服务器对都还活着并在正常运行,这样就会导致同一个IP或者服务在两端同时存在而发生冲突,最严重的是两台主机占用同一个VIP地址,当用户写入数据时可能会分别写入到两端,这可能会导致服务器两端的数据不一致或者造成数据丢失,这种情况就被成为脑裂。
一般来说脑裂发生,有以下几种原因:
警的条件:只要lb02 上面有vip
1.lb01 挂了
2.心碎
#!/bin/bash
#desc: jiankong lb02 vip
if [ `ip a s eth0 |grep -c “10.0.0.3”` == 1 ];then
echo “baojing”
fi #lb02负载均衡出现脑裂的条件脚本出现10.0.0.3
Nginx反向代理——负载均衡+高可用
#lb01 or lb02#
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
upstream server_pools {
server 10.0.0.7;
server 10.0.0.8;
server 10.0.0.9;
}
server {
listen 80;
server_name bbs.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_www.log main;
}
server {
listen 80;
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_blog.log main;
}
}
## 01 测试10.0.0.5 lb01服务器
curl -H Host:www.etiantian.org 10.0.0.5/nana.html
curl -H Host:bbs.etiantian.org 10.0.0.5/nana.html
## 01 测试10.0.0.6 lb02 服务器
curl -H Host:www.etiantian.org 10.0.0.6/nana.html
curl -H Host:bbs.etiantian.org 10.0.0.6/nana.html
说明:通过以上测试,确认两台lb服务器,均可实现负载调度功能
测试成功
测试成功
10.0.0.3 www.etiantian.org blog.etiantian.org bbs.etiantian.org
编写/etc/hosts文件把上面的内容加到里面去
window的hosts文件自行添加
1.是否解析 ping
2.浏览器缓存
3.服务没重启(平滑重启/重启)
排错过程:
01:利用负载服务器,在服务器上curl所有节点信息(web服务器配置有问题)
02;curl 负载均衡服务器地址,可以实现负载均衡
03:windows绑定虚拟IP,浏览器上进行测试
keepalived日志文件(运维能力:看日志)
tail -f /var/log/messages
企业keepalived配置案例
10.0.0.3/bingbing.html 可以使用
10.0.0.5/bingbing.html 不可以使用
10.0.0.6/bingbing.html 不可以使用
####lb01 lb02 nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
upstream server_pools {
server 10.0.0.7;
server 10.0.0.8;
server 10.0.0.9;
}
server {
listen 10.0.0.3:80; #在这里配置只监听虚拟VIP
server_name www.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_www.log main;
}
server {
listen 10.0.0.3:80; #在这里配置只监听虚拟VIP
server_name blog.etiantian.org;
location / {
proxy_pass http://server_pools;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
access_log logs/access_blog.log main;
}
}
说明:在修改反向代理服务器配置文件监听地址时,多个server都需要配置监听地址,否则仍旧使用默认监听所有
[root@lb01 conf]# /application/nginx/sbin/nginx -t
nginx: the configuration file /application/nginx-1.10.2/conf/nginx.conf syntax is ok
nginx: [emerg] bind() to 10.0.0.3:80 failed (99: )
nginx: configuration file /application/nginx-1.10.2/conf/nginx.conf test failed
[root@lb02 conf]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:27:4e:e9 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.5/24 brd 10.0.0.255 scope global eth0
inet6 fe80::20c:29ff:fe27:4ee9/64 scope link
valid_lft forever preferred_lft forever
[root@lb01 conf]# ###nginx 没有办法 监听 本地不存在的ip地址
解决方法——在lb02上执行以下操作
echo ‘net.ipv4.ip_nonlocal_bind = 1’ >>/etc/sysctl.conf —实现监听本地不存在的ip地址
##/etc/sysctl.conf 加上
sysctl -p
echo “1” >/proc/sys/net/ipv4/ip_nonlocal_bind
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.5/bingbing.html
curl: (7) couldn’t connect to host
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.6/bingbing.html
curl: (7) couldn’t connect to host
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.3/bingbing.html
www web01
[root@lb01 ~]# curl -H host:www.etiantian.org 10.0.0.3/bingbing.html
www web02
只监听虚拟VIP,其他的例如负载10.0.0.5和10.0.0.6都无法连接主机。只有10.0.0.3可以进行后端代理web服务器的请求。
实践案例——让keepalived监控nginx反向代理服务
#vip什么时候 什么条件 才会飘走 ?#
1.当服务器宕机
2.防火墙
#### nginx挂了###
如何让keepalived监控nginx nginx挂了,keepalived跟着殉情
1.如果nginx挂了—我如何知道nginx挂了?
1)端口
2)进程
ps -ef |grep nginx |grep -v grep |wc -l
2.keepalived挂了
/etc/init.d/keepalived stop
##> -gt greater than
##>= -ge greater equal
##< -lt less than
##<= -le less equal
##== -eq equal
##!= -ne no equal
#!/bin/bash
#name: check_web.sh
#desc: check nginx and kill keepalived
if [ `ps -ef |grep nginx |grep -v grep |wc -l` -lt 2 ];then
/etc/init.d/keepalived stop
fi
[root@lb02 conf]# chmod +x /server/scripts/check_web.sh
[root@lb02 conf]# ll /server/scripts/check_web.sh
-rwxr-xr-x 1 root root 174 Mar 30 17:47 /server/scripts/check_web.sh
####下面是lb02的配置文件 lb01上面自己修改下。
global_defs {
router_id LVS_02
}
vrrp_script check_web {
script “
/server/scripts/check_web.sh” — 表示将一个脚本信息赋值给变量check_webinterval 2 — 执行监控脚本的间隔时间
weight 50 — 利用权重值和优先级进行运算,从而降低主服务优先级
使之变为备服务器(建议先忽略)
}
说明:定义的监控脚本必须有执行权限
chmod +x web_jiankong.sh
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
track_script {
check_web
}
}
实践案例三:keepalived多实例配置
如图配置双主拓扑图
解决多组keepalived服务器在一个局域 的冲突问题
当在一个局域 内部署了多组keepalived服务器,而又未使用专门的心跳线通讯时,可能会发生高可用接管的严重故障问题。前文已经讲过keepalived高可能功能是通过VRRP协议实现的,VRRP协议默认通过Ip多组播的形式实现高可用对之间的通讯,如果同一个局域 存在多组keepalived服务器对,就会造成IP多播地址冲突问题,导致接管错乱,不同组的keepalived都会使用默认的224.0.0.18组为多播地址。此时的解决办法是,在同组的keepalived服务器所有的配置文件里指定独一无二的多播地址,配置如下图
#lb01
global_defs {
router_id LVS_01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:1
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.4/24 dev eth0 label eth0:2
}
}
#lb02
global_defs {
router_id LVS_02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_ty
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!