Keepalived配置实现Haproxy高可用

一、什么是高可用

高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。
例如:两台haproxy其中一台坏了,另一台顶替主的还能继续工作,就是高可用
haproxy将请求发送给剩下的web01,web02网页,实现轮询效果,通过web01中的一台坏了,web02顶替上去实现负载均衡

假设系统一直能够提供服务,我们说系统的可用性是100%。

如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。

很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。

二、如何保障系统的高可用

我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他backup能够顶上。

保证系统高可用,架构设计的核心准则是:冗余。

有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可服务实践。所以,又往往是通过“自动故障转移”来实现系统的高可用。

三、实验环境
添加一块网卡用于上网下载资料
在这里插入图片描述

首先部署两台web服务器:

systemctl stop firewalld
setenforce 0
yum install httpd -y
vi /etc/httpd/conf/httpd.conf
修改以下内容:
ServerName … 去掉注释符号
cd /var/www/html/ 
192.168.80.102:
echo "<h1>server aa</h1>" > index.html
systemctl start httpd
192.168.80.103
echo "<h1>server bb</h1>" > index.html
systemctl start httpd

主Haproxy服务器:
yum install -y epel-release //下载一个epel源
在这里插入图片描述
yum install -y ntp //搭建时间服务同步器
ntpdate time1.aliyun.com //同步阿里云网上时间
在这里插入图片描述
yum install keepalived -y //yum安装keepalived服务

vi /etc/keepalived/keepalived.conf         //进入著配置文件中去

! Configuration File for keepalived
global_defs {
route_id haproxy-01
}
vrrp_script haproxy {  定义一个热备脚本取名为haproxy
script "/opt/haproxy.sh"  # 检测 haproxy 状态的脚本路径
interval 2 # 检测时间间隔
weight 2 # 如果条件成立,权重+2
}
vrrp_instance VI_1 {
state MASTER       //主配这里写MASTER与从的区分开
interface ens33     //网卡接口我的是33,有的是32
virtual_router_id 51
priority 150           //优先级
advert_int 1
authentication {
auth_type PASS    //类型加密认证
auth_pass 1111     //密码1111
}
track_script { # 将 track_script 块加入 instance 配置块
haproxy # 检查 HAProxy 服务是否存活
}
virtual_ipaddress {
192.168.80.188         //这里虚拟ip地址就是漂移地址
}
}

在这里插入图片描述

vi /opt/haproxy.sh     //新创建haproxy启动脚本文件
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg 启动haproxy服务
fi
sleep 2 等待2秒
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service keepalived stop
fi

在这里插入图片描述

chmod +x /opt/haproxy.sh //给新建的脚本添加执行权限
在这里插入图片描述

useradd -s /sbin/nologin -M haproxy 创建一个不指定家目录的haproxy程序用户
在这里插入图片描述
tar xf haproxy-1.5.15.tar.gz -C /opt/ //解压haproxy压缩包
cd /opt/haproxy-1.5.15/
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make //安装haproxy所需要的c语言及依赖库
make TARGET=linux26 PREFIX=/usr/local/haproxy //根据内核版本填写linux26的

uname -r //查看内核版本
vi /opt/haproxy-1.5.15/Makefile //进入查看TARGET=linux26对应的信息

make install PREFIX=/usr/local/haproxy //安装并指定安装路径
mkdir /etc/haproxy //创建文件路径下面要用
cp /opt/haproxy-1.5.15/examples/haproxy.cfg /etc/haproxy/ //复制haproxy的配置文件高版本的haproxy就可能没有这个配置文件了

vi /etc/haproxy/haproxy.cfg
修改以下内容:
#chroot /usr/share/haproxy 注释这一行
uid 改为你查到的多少为1001
gid 改为你查到的多少为1001
在default模块下  删除掉剩下的模块添加以下内容
listen admin_stats
bind 0.0.0.0:8089
stats enable
mode http
log global
stats uri /stats
stats realm Haproxy\ Statistics
stats auth admin:admin
#stats hide-version
stats admin if TRUE
stats refresh 30s
listen webcluster
bind 0.0.0.0:80
mode http
option httpchk GET /index.html
log global
maxconn 3000
balance roundrobin
server web01 192.168.80.102:80 check inter 2000 fall 5    //对应web01服务器
server web02 192.168.80.103:80 check inter 2000 fall 5    //对应web02服务器

在这里插入图片描述
cp /opt/haproxy-1.5.15/examples/haproxy.init /etc/init.d/haproxy //将haproxy的启动文件haproxy.init 放到service管理器中取便于用service命令开启
chmod +x /etc/init.d/haproxy //添加执行权限
在这里插入图片描述
chkconfig --add haproxy //增加haproxy服务
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy //进行软连接将haproxy的程序启动文件放到环境变量中以便用tab键补全
systemctl status keepalived //先查看
keepalived服务的状态
在这里插入图片描述

systemctl status haproxy //查看haproxy状态
在这里插入图片描述

systemctl start keepalived //通过开启keepalived服务开启了haproxy服务

ip addr show ens33       //查看漂移地址

在这里插入图片描述

netstat -anpt | grep haproxy //查看haproxy监听状态
在这里插入图片描述

备haproxy服务器:

yum install -y epel-release

yum install keepalived -y
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
route_id haproxy-02      //id改为02
}
vrrp_script haproxy { 定义一个热备脚本取名为haproxy
script "/opt/haproxy.sh" # 检测 haproxy 状态的脚本路径
interval 2 # 检测时间间隔
weight 2 # 如果条件成立,权重+2
}
vrrp_instance VI_1 {
state BACKUP       //这里写BACKUP
interface ens33 //网卡接口我的是ens33
virtual_router_id 51
priority 100           //优先级为100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script { # 将 track_script 块加入 instance 配置块
haproxy # 检查 HAProxy 服务是否存活
}
virtual_ipaddress {
192.168.80.188
}
}
vi /opt/haproxy.sh
#!/bin/bash
#Filename:
A=$(ip addr | grep 192.168.80.188/32 | grep -v grep | wc -l)               //通过漂移地址开启haproxy开启服务
if [ $A -gt 0 ]; then
service haproxy start
else
service haproxy stop
fi

主服务器:根据haproxy服务的进程统计,来决定是否启动haproxy服务
备服务器:根据漂移ip地址来决定是否启动haproxy服务
/opt/nginx.sh
主服务器:根据keepalived服务的进程统计,来决定是否启动nginx服务
备服务器:根据漂移ip地址来决定是否启动nginx服务

chmod +x /opt/haproxy.sh
tar xf haproxy-1.5.15.tar.gz -C /opt/
cd /opt/haproxy-1.5.15/
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
mkdir /etc/haproxy
useradd -s /sbin/nologin -M haproxy
id haproxy
cp /opt/haproxy-1.5.15/examples/haproxy.cfg /etc/haproxy/
vi /etc/haproxy/haproxy.cfg
修改以下内容:
# chroot /usr/share/haproxy 注释这一行
在default模块下 删除掉下面所有的添加一下内容
listen admin_stats
bind 0.0.0.0:8089
stats enable
mode http
log global
stats uri /stats
stats realm Haproxy\ Statistics
stats auth admin:admin
#stats hide-version
stats admin if TRUE
stats refresh 30s
listen webcluster
bind 0.0.0.0:80
mode http
option httpchk GET /index.html
log global
maxconn 3000
balance roundrobin
server web01 192.168.80.102:80 check inter 2000 fall 5
server web02 192.168.80.103:80 check inter 2000 fall 5
cp examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
chkconfig --add haproxy
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/haproxy
systemctl start haproxy 
systemctl status keepalived
ip addr show ens33
netstat -anpt | grep haproxy

测试:
在浏览器中输入192.168.80.188测试
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qeeezz11224/article/details/86481037