一、高可用服务概述
(一)、作用:解决架构单点故障
1、解决方式
负载均衡服务器解决单点故障:keepalived
数据库解决服务器解决单点故障:MHA
存储服务解决单点故障:利用分布式存储(复制卷)
(二)、keepalived软件介绍
1、解决负载均衡单点问题,可以有主服务和备份服务器,主服务器出现问题有备份服务器进行代替
2、可以有效管理配置LVS负载均衡服务
3、可以结合LVS对后端节点进行健康检查
二、高可用服务工作原理
借助VRRP(虚拟路由冗余协议)实现高可用服务功能,从而解决单点问题
(一)、vrrp原理
(二)、keepalived原理
三、高可用服务部署过程
第一步:安装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