keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。
keepalived工作原理:
keepalived是以VRRP协议为实验基础的,当backup收不到yrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样我们就可以保证集群的高可用。
VRRP全程Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。cheack负责健康检查,包括常见的各种检查方式,vrrp模块是来实现VRRP协议的。
脑裂(split-brain):
什么是脑裂?
脑裂:指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
对于无状态服务的HA,无所谓脑裂不脑裂,但对有状态服务(比如MYSQL)的HA,必须要严格防止脑裂。
脑裂解决方案:shoot the other in the head 爆头 master
LVS_DIRECTOR + keepalived 实验:
准备五台服务器,其中一台服务器进行访问
1、10.0.0.11 (master)
2、10.0.0.12 (backup)
3、10.0.0.13
4、10.0.0.14
其中1、2进行nginx负载均衡功能及高可用keeplived
而3、4进行web服务器(nginx服务)负载均衡的real-server
环境准备:关闭防火墙以及selinux、保证网络畅通、保证base、epel仓库可用
web-1部署:
>yum -y install nginx #下载nginx服务
>systemctl start nginx #启动nginx服务
>cd /etc/nginx/conf.d #切换工作目录
>vim web-1.conf #编辑网站发布配置文件
server {
liten 80;
server_name localhost;
location / {
root /web-1;
index index.html;
}
}
注意:监听的端口不要和其他配置文件起冲突 如果有相同请更改
保存退出
>mkdir /web-1 #创建网站发布目录
>echo “this is web-1” > /web-1/index.html
>nginx -s reload #重新加载配置文件 使修改添加的内容生效
web-2部署:
与web-1基本一致
>yum -y install nginx #下载nginx服务
>systemctl start nginx #启动nginx服务
>cd /etc/nginx/conf.d #切换工作目录
>vim web-2.conf #编辑网站发布配置文件
server {
liten 80;
server_name localhost;
location / {
root /web-2;
index index.html;
}
}
注意:监听的端口不要和其他配置文件起冲突 如果有相同请更改
保存退出
>mkdir /web-2 #创建网站发布目录
>echo “this is web-2” > /web-2/index.html
>nginx -s reload #重新加载配置文件 使修改添加的内容生效
使用客户服务器分别访问web-1以及web-2进行访问测试
>curl 10.0.0.13
>curl 10.0.0.14
master部署负载均衡:
>yum -y install nginx && systemctl start nginx #下载并启动nginx
>cd /etv/nginx #切换工作目录
>rm -rf nginx.conf #删除主配置文件
>cp nginx.conf.default nginx.conf #将子配置文件转为主配置文件
>vim nginx.conf #编辑主配置文件
在http块以及http块下的server块下的location块添加以下内容:
http {
upstream web {
server 10.0.0.13:80;
server 10.0.0.14:80;
}
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://web;
}
}
注意:监听的端口不要和其他配置文件起冲突 如果有相同请更改
保存退出
>nginx -s reload #重新加载nginx使修改添加的配置生效
backup配置负载均衡:
与master流程基本一致:
>yum -y install nginx && systemctl start nginx #下载并启动nginx
>cd /etv/nginx #切换工作目录
>rm -rf nginx.conf #删除主配置文件
>cp nginx.conf.default nginx.conf #将子配置文件转为主配置文件
>vim nginx.conf #编辑主配置文件
在http块以及http块下的server块下的location块添加以下内容:
http {
upstream web {
server 10.0.0.13:80;
server 10.0.0.14:80;
}
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://web;
}
}
注意:监听的端口不要和其他配置文件起冲突 如果有相同请更改
保存退出
>nginx -s reload #重新加载nginx使修改添加的配置生效
使用客户服务器访问:
>curl 10.0.0.11
>curl 10.0.0.12
成功后进入下一步
master服务器部署keepalived(为了防止脑裂请保证网络畅通)
>yum -y install keepalived # 下载服务
>cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak #备份keepalived服务的配置文件,可以跳过此过程
>vim /etc/keepalived/keepalived.conf #编辑配置文件
将其中的内容删除,替换为以下内容:
! Configuration File for keepalived
global_defs {
router_id director1 #backup服务器改为director2
}
vrrp_script check_nginx {
script “/etc/keepalived/check_nginx_status.sh”
interval 1
}
vrrp_instance VI_1 {
state MASTER #backup端改为BACKUP
interface ens33 #VIP绑定接口
virtual_router_id 80 # 与VRID同一组集群,backup保持一致
priority 100 #本节点优先级backup服务器改为50
advert_int 1 #检查间隔,默认为1s
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.10/24
}
track_script {
check_nginx
}
}
保存退出
启动keepalived
>systemctl start keepalived
>ip addr #查看是否有VIP接口
backup的keepalived部署:
部署流程与master服务器基本一致:
>yum -y install keepalived # 下载服务
>cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak #备份keepalived服务的配置文件,可以跳过此过程
>vim /etc/keepalived/keepalived.conf #编辑配置文件
将其中的内容删除,替换为以下内容:
! Configuration File for keepalived
global_defs {
router_id director2 #backup
}
vrrp_script check_nginx {
script “/etc/keepalived/check_nginx_status.sh”
interval 1
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 80
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.10/24
}
track_script {
check_nginx
}
}
保存退出
启动keepalived
>systemctl start keepalived
>ip addr #查看是否有VIP接口
使用客户服务器进行访问验证:
curl 10.0.0.10 #注意这里访问的是VIP地址
