一、高可用服务概述

(一)、作用:解决架构单点故障

1、解决方式

负载均衡服务器解决单点故障:keepalived

数据库解决服务器解决单点故障:MHA

存储服务解决单点故障:利用分布式存储(复制卷)

(二)、keepalived软件介绍

1、解决负载均衡单点问题,可以有主服务和备份服务器,主服务器出现问题有备份服务器进行代替

2、可以有效管理配置LVS负载均衡服务

3、可以结合LVS对后端节点进行健康检查

二、高可用服务工作原理

借助VRRP(虚拟路由冗余协议)实现高可用服务功能,从而解决单点问题

(一)、vrrp原理




keepalived 做高可用 VIP地址不通 keepalived高可用原理_高可用


(二)、keepalived原理


keepalived 做高可用 VIP地址不通 keepalived高可用原理_keepalived工作原理_02


三、高可用服务部署过程

第一步:安装keepalived软件


yum -y install keepalived


第二步:编写配置文件

/etc/keepalived/keepalived.conf

1、配置文件组成

核心区域配置(global_defs {})

vrrp协议信息配置(vrrp_instance VI_1 {})

LVS管理信息配置(virtual_server 192.168.200.100 443 {})

2、配置文件内容:

vim /etc/keepalived/keepalived.conf


global_defs {    --- 实现监控报警功能  
   notification_email {    --- 监控报警邮件发送通知人信息
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from 19147772551@qq.com    --- 定义报警服务器信息
   smtp_server smtp.qq.com
   smtp_connect_timeout 30
   router_id lb01      --- 表示主机身份信息 lb01
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {    ---设置一个组
    state MASTER    --- 定义主机身份信息(MASTER BACKUP)
    interface eth0    --- 在接口上生成VIP(虚拟地址)地址信息  出现在外网网卡
    virtual_router_id 51    --- 标记集群编号信息
    priority 150        --- 优先级决定主或者备身份  优先级越高越有可能成为主
    advert_int 1        --- 设置组播包发送间隔
    authentication {    --- 集群成员口令验证信息, 保证集群通讯安全性
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3        --- 定义虚拟IP地址信息
    }
}


第三步:启动服务程序


systemctl start keepalived


四、高可用服务企业应用配置

(一)、对高可用服务进行监控管理

1、高可用服务脑裂问题

(主和备主机上同时出现vip信息)

①、出现原因

1)、防火墙服务开启,备服务器接收不到组播包

2)、主备服务器之间心跳线出现问题

3))、仲裁服务器出现问题

②、及时发现脑裂: 利用监控方式发现

第一步:编写监控脚本


#!/bin/bash
    ip a s eth0|grep 10.0.0.3 >/dev/null
    if [ $? -eq 0 ]
    then 
	   echo "主服务器宕机或出现脑裂现象"|mail -s  "检查高可用状态" 1914777251@qq.com
    fi


第二步:编写定时任务


crontab -e
*/1 * * * * /usr/bin/sh /server/scripts/chacce.sh


(二)、提高高可用服务安全性

第一步:修改负载均衡配置文件

(只监听VIP地址)lb01,lb02


server {
    listen        10.0.0.3:80;


第二步:实现监听本地主机上没有地址信息

(修改内核信息,取消监听地址绑定网卡)


1、echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
2、sysctl -p


第三步:重启nginx服务


systemctl restart nginx


(三)、高可用服务快速切换

(监控负载均衡状态)

1、高可用服务核心作用

①、实现高可用冗余作用

②、实现服务均衡服务冗余

2、利用keepalived服务进行监控

第一步:编写脚本

脚本编写方式一:监控服务状态


#!/bin/bash 
web_info=$(ps -ef|grep -v grep|grep -c nginx) 
if  [ $web_info -lt 2 ]
then 
   systemctl stop keepalived 
fi


脚本编写方式一:监控网页状态


#!/bin/bash 
status_code=$(curl -I -H host:www.oldboy.com 10.0.0.5 -s -w "%{http_code}n" -o /dev/null)
if [ $status_code == "200" ]
then 
   systemctl stop keepalived 
fi


第二步:编写keepalived配置文件


vrrp_script check_web {                  --- 加载需要监控脚本信息 ,写在全局配置外
script "/server/scripts/web_check.sh"    --- 加载脚本路径信息  (脚本需要有执行权限)
interval 2                                --- 加载脚本间隔时间(每隔2s)
 weight 2                                 --- 权重值,可以解决监控服务自动恢复问题
}                                                                                                                                              
track_script {                            --- 进行触发指定脚本信息 ,写在vrrp配置内
check_web
}


如何利用权重值和优先级做运算:(PS:脚本不会使keepalived服务停止)

情况一:关注weight设置是否为正数信息(应用在备服务器上)

a 加载脚本执行成功:脚本执行完返回值为 0 实际优先级 = 权重值 + 设置优先级

b 加载脚本执行失败:脚本执行完返回值非 0 实际优先级 = 设置优先级

情况二:关注weight设置是否为负数信息(应用在主服务器上)

a 加载脚本执行成功:脚本执行完返回值为 0 实际优先级 = 设置优先级

b 加载脚本执行失败:脚本执行完返回值非 0 实际优先级 = 设置优先级 - |权重值|

PS:在利用weight权重时,实现主备关系自动恢复,选择一台主机进行配置

(四)、高可用服务双主配置

(互为主备配置)

第一步:修改配置keepalived文件

lb01


vrrp_instance oldboy {
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       #访问10.0.0.3时oldboy作为主
}
}
vrrp_instance oldgirl {
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      #访问10.0.0.4时oldgirl作为备
}
}


lb02


vrrp_instance oldboy {
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       #访问10.0.0.3时oldboy作为备
}
}
vrrp_instance oldgirl {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
 auth_pass 1111
}
virtual_ipaddress {
      10.0.0.4      #访问10.0.0.4时oldgirl作为主
}
}


第二步:修改配置负载均衡文件

(lb01 lb002 配置一样)


server {
    listen        10.0.0.3:80;
    server_name   www.oldboy.com;     #访问www.oldboy.com时.3位主服务器
    location / {
           proxy_pass    http://oldboy;
           proxy_set_header host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_next_upstream  error timeout invalid_header  http_403;
       }
    }
server {
     listen        10.0.0.4:80;
     server_name   bbs.oldboy.com;     #访问bbs.oldboy.com时.4位主服务器
     location / {
           proxy_pass    http://oldboy;
           proxy_set_header host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_next_upstream  error timeout invalid_header  http_403;
       }
    }


(五)、单独记录高可用服务日志信息

第一步:将日志放入到指定终端


vim /etc/sysconfig/keepalived
14 KEEPALIVED_OPTIONS="-D -d -S 0"  (改为)
					-D(log-detail)    记录详细日志
					-d(dump-conf)    导出备份配置数据
					-S(log-facility)    设置本地的syslog设备,编号0-7
					0     指定终端


第二步:设置指定记录日志的文件

vim /etc/rsyslog.conf (最后一行加入以下内容)


# keepalived
  local0.*   /var/log/keepalived.log
			第三步:关闭messages文件再记录详细keepalived信息
				vim /etc/rsyslog.conf  (54行后添加;local0.none)
 54 *.info;mail.none;authpriv.none;cron.none;local0.none              /var/log/messages