什么是高可用?
一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用户是无感知的。
高可用通常使用什么软件?
硬件通常使用 F5
软件通常使用 keepalive
keepalived是如何实现高可用的?
keepalived软件是基于VRRP协议实现的,VRRP虚拟路由冗余协议,主要用于解决单点故障问题
高可用keepalived核心概念:
1、如何确定谁是主节点谁是背节点(选举投票,优先级)
2、如果Master故障,Backup自动接管,那么Master回复后会夺权吗(抢占试、非抢占式)
3、如果两台服务器都认为自己是Master会出现什么问题(脑裂)
keepalived实现高可用的原理
Keepalived高可用对之间是通过 VRRP进行通信的, VRRP是遑过竞选机制来确定主备机的,主机的优先级高于备机,因此,工作时主会优先获得所有的资源,备机节点处于等待状态,当主机挂了的时候,备机节点就会接管主机节点的资源,然后顶替主机节点对外提供服务。
在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备机它还活着,此时备机不会枪占主机,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
------------------------------------------------------------------------------------------------------
arp -a:查看Ip映射表
ip地址 映射一个mac地址
知识回顾:
#什么是静态页面?
前端代码构成的页面,不需要访问数据库的 如:html、css、js
#什么是动态页面?
后端代码构成的网页,需要调用数据库的,如:java、python、c++、php
------------------------------------------------------------------------------------------------------
#Nginx七四负载/反向代理
反向代理:proxyy_pass http://xxxxx
七层负载: upstream{
server xxxxxx
}
四层负载:stream
实践部署keepalived高可用(抢占式)
环境准备:
主机名 | 外网IP | 内网IP | 角色 | 环境 |
---|---|---|---|---|
web01 | 10.0.0.7 | 172.16.1.7 | web网站 | nginx、php |
web02 | 10.0.0.8 | 172.16.1.8 | web网站 | nginx、php |
lb01 | 10.0.0.5 | 172.16.1.5 | 负载均衡、master | nginx、keepalived |
lb02 | 10.0.0.6 | 172.16.1.6 | 负载均衡、backup | nginx、keepalived |
web配置:
#下载安装ngixn、php
yum install -y nginx php
#编辑配置文件
vim /etc/nginx/conf.d/keep.conf
server{
listen 80;
server_name _;
location / {
root /code/web;
index index.html;
}
}
#创建站点目录和代码
mkdir /code
echo "this is web01" >/code/index.html
#web02同web01部署步骤 //只是echo写入改为"this is web02"
#启动服务
systemctl start nginx
负载均衡配置
#编写配置文件
upstream jiujiu{
server 10.0.0.7;
server 10.0.0.8;
}
server {
listen 80;
server_name www.keep.com;
location / {
proxy_pass http://jiujiu;
include /etc/nginx/proxy_params;
}
}
#优化配置文件
vim /etc/nginx/proxy_params
# 在代理服务器的请求头中,加上域名,携带域名去访问后端的web
proxy_set_header Host $host;
# 在代理服务器的请求头重,透传用户的真实IP给web01
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# lb01链接web01的超时时间(代理服务器链接后端服务的超时时间)
proxy_connect_timeout 30;
# 后端服务器回传代理服务器的超时时间
proxy_send_timeout 60;
# lb01代理服务器读取web01返回数据的超时时间
proxy_read_timeout 60;
# 开启代理服务器的缓冲区
proxy_buffering on;
# 开启存放头部信息的缓冲区大小 32k
proxy_buffer_size 32k;
# 开启4个128k存放数据主体的缓冲区
proxy_buffers 4 128k;
#web02同web01部署步骤
keepalived部署:
# 1.安装keepalived
[root@lb01 ~]# yum install -y keepalived
[root@lb02 ~]# yum install -y keepalived
# 2.lb01修改keepalived配置文件 //主节点
global_defs {
router_id keepalived01
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
#lb02修改keepalived配置文件 //备节点
global_defs {
router_id keepalived01
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
#启动服务
systemctl start keepalived
#查看
[root@lb01 ~]# systemctl start keepalived
[root@lb01 ~]# ip a
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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:79:d2:52 brd ff:ff:ff:ff:ff:ff
inet 10.0.0.5/24 brd 10.0.0.255 scope global eth0
valid_lft forever preferred_lft forever
inet 10.0.0.3/32 scope global eth0 #//多了一个虚拟网卡
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe79:d252/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:79:d2:5c brd ff:ff:ff:ff:ff:ff
inet 172.16.1.5/24 brd 172.16.1.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe79:d25c/64 scope link
valid_lft forever preferred_lft forever
#配置文件详解
global_defs { #全局配置
router_id lb01 #标识身份->名称
}
vrrp_instance VI_1 {
state MASTER #标识角色状态
interface eth0 #网卡绑定接口
virtual_router_id 50 #虚拟路由id
priority 150 #优先级
advert_int 1 #监测间隔时间
authentication { #认证
auth_type PASS #认证方式
auth_pass 1111 #认证密码
}
virtual_ipaddress {
10.0.0.3 #虚拟的VIP地址
}
}
配置文件的区别:
keepalived配置区别 | Master节点配置 | Backup节点配置 |
---|---|---|
route_id(唯一标识) | router_id :keepalived01 | router_id:keepalived02 |
state(角色状态) | state MASTER | state BACKUP |
priority(竞选优先级) | priority 150 | priority 100 |
keepalived非抢占式部署
1.两边的角色都必须是BACKUP
2.两个节点都必须加上配置 nopreempt
3.其中一个节点的优先级必须要高于另外一个节点的优先级。
### 主节点配置
[root@lb01 ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id keepalived01
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
#备节点配置
global_defs {
router_id keepalived02
}
vrrp_instance VI_1 {
state BACKUP
nopreempt
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
# 重启keepalived
[root@lb01 ~]# systemctl restart keepalived
[root@lb02 ~]# systemctl restart keepalived
#停止其中一台keepalived服务。会发现虚拟ip会转移到另外一台服务器上
关联nginx和keepalived
编写脚本:检测nginx状态,如果nginx停止了,就把keepalived停掉
注意:如果想要检测某个服务是否存活,脚本名,一定不要带服务名
#主节点配置
[root@lb01 ~]# vim check_web.sh
#!/bin/bash
nginx_status=`ps -ef|grep [n]ginx|wc -l`
if [ $nginx_status -eq 0 ];then
systemctl stop keepalived
fi
#配置keepalived自动执行检测nginx脚本
global_defs {
router_id keepalivedlb01
}
vrrp_script jiujiu {
script "/root/check.sh"
interval 1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 50
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
track_script {
jiujiu
}
}
#赋予脚本执行权限
chmod +x chedk.sh
# 重启keepalived
[root@lb01 ~]# systemctl restart keepalived
#备节点配置
global_defs {
router_id keepalivedlb02
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 50
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
}
# 重启keepalived
[root@lb01 ~]# systemctl restart keepalived
----------------------------------------------------------------------------------------------------
当lb01检测到nginx服务异常中断的时候,虚拟IP会自动跳到lb02上,使其网页正常运转
#本地域名解析
10.0.0.3 www.keep.com
#浏览器访问
www.keep.com
#测试是否成功
关闭lb01Nginx服务,继续访问网站,查看是否网页正常运行,如果正常运行表示部署成功