当前位置: 首页 > news >正文

部署 HAProxy 高可用

回顾一下去年的项目:

1.题目

构建一个基于haproxy和Keepalived 的高可用负载均衡架构,在 haproxy 或节点发生故障时,能够自动进行故障转移。使用2台 DS服务器和3台RS服务器,Keepalived与haproxy相结合,通过Keepalived 的健康监测机制实现对 DS和 RS 的 HealthCheck,并且利用Keepalived 支持的 VRRP 协议来实现对两台 DS的主备。

2.主机规划

   主机名             IP地址         安装软件
nginx1192.168.111.10nginx,nfs-utils
nginx2192.168.111.20nginx,nfs-utils,chrony
nginx3192.168.111.30nginx,nfs-utils,chrony
nfs192.168.111.40nfs-utils,chrony
dnf192.168.111.50bind
haproxy192.168.111.100haproxy,keepalived
haproxy1192.168.111.101haproxy,keepalived
vip192.168.111.200

注意:默认所有软件都已经下载

3、配置NFS和chrony

[root@nfs ~]# mkdir /nfs/data     #创建挂载目录

[root@nfs ~]# cat /etc/exports
/nfs/data  192.168.111.40(rw)
[root@nfs ~]# exportfs -r             #刷新
[root@nfs ~]# cat /etc/chrony.conf 

..............

# Allow NTP client access from local network.
allow 192.168.111.0/24

..................

[root@nfs ~]# systemctl restart  nfs-server.service 
[root@nfs ~]# systemctl restart chronyd
[root@nfs ~]# showmount -e 192.168.111.40
Export list for 192.168.111.40:
/nfs/data 192.168.111.0/24

[root@nginx1 ~]# mount -t nfs 192.168.111.40:/nfs/data  /usr/share/nginx/html/

[root@nginx1 ~]# systemctl restart nginx

[root@nginx2 ~]# mount -t nfs 192.168.111.40:/nfs/data  /usr/share/nginx/html/
[root@nginx2 ~]# systemctl restart nginx

[root@nginx3 ~]# mount -t nfs 192.168.111.40:/nfs/data  /usr/share/nginx/html/
[root@nginx3 ~]# systemctl restart nginx

4、配置DNS

[root@dns ~]# cat /etc/named.conf 
options {
listen-on port 53 { 192.168.111.50; };
directory     "/var/named";
};
zone "haha.com" IN {
type master;
file "haha.com";
[root@dns ~]# cat /var/named/haha.com 
$TTL 1D
@       IN    SOA    @   ns.haha.com.  admin.haha.com. (0 1H 2W  2D 1D)
IN    NS      ns
ns       IN     A       192.168.111.50
www   IN     A        192.168.111.200

5、配置keepalived

1.master

[root@haproxy ~]# cat /etc/keepalived/keepalived.conf 
global_defs {
router_id LVS_MASTER
}

vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.200
}
track_script {
check_haproxy
}
}
vrrp_script   check_haproxy{
script "/etc/keepalived/check_haproxy.sh"
interval  2
weight    -20
fall     3
rise     2
}

2、backup

[root@haproxy2 ~]# cat /etc/keepalived/keepalived.conf 
global_defs {
router_id LVS_BACKUP
}
vrrp_script check_haproxy {
script "/etc/keepalived/check_haproxy.sh"
interval  2
weight    -20
fall     3
rise     2
}

vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.111.200
}
track_script {
check_haproxy
}
}

注:id需要相同,两边的shell脚本是一致的

#!/bin/bash
SERVICE="haproxy"
STATUS=$(systemctl is-active  --quiet  "$SERVICE";echo $?)
if [ $STATUS -eq 0 ]
then
echo "haproxy is active"
else
systemctl restart haproxy
sleep 2
systemctl is-active  --quiet  "$SERVICE"
RESTART_STATUS=$?

        if [ $RESTART_STATUS -eq 0 ]
then
echo "haproxy 重启成功"
else
systemctl stop keepalived
echo  "keepalived is stop"      
fi
fi

6、配置haproxy(两个DS的配置是一样的)

[root@haproxy ~]# cat /etc/haproxy/haproxy.cfg

..................................

frontend main
bind *:80
#acl url_static       path_beg       -i /static /images /javascript /stylesheets
#acl url_static       path_end       -i .jpg .gif .png .css .js

    #use_backend static          if url_static
default_backend             nginx

#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
balance     roundrobin
server      static 127.0.0.1:4331 check

#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend nginx
balance     roundrobin
server  nginx1 192.168.111.10:80 check inter 2000 fall 3 rise 3 weight 1
server  nginx2 192.168.111.20:80 check inter 2000 fall 3 rise 3 weight 1
server  nginx3 192.168.111.30:80 check inter 2000 fall 3 rise 3 weight 1
启动服务

[root@haproxy ~]# systemctl restart keepalived.service 
[root@haproxy ~]# systemctl restart  haproxy.service 

7、测试服务是否是高可用

[root@haproxy ~]# ip add
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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:9c:b2:af brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.111.100/24 brd 192.168.111.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet 192.168.111.200/32 scope global ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe9c:b2af/64 scope link noprefixroute 
valid_lft forever preferred_lft forever

关闭haproxy,看看是否可以重新启动

[root@haproxy ~]# systemctl stop haproxy.service 
[root@haproxy ~]# systemctl is-active haproxy.service 
inactive
[root@haproxy ~]# systemctl is-active haproxy.service 
active

查看浏览器,会访问一样的结果

http://www.lryc.cn/news/624251.html

相关文章:

  • python 数据拟合(线性拟合、多项式回归)
  • Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin(2)
  • 云计算:企业数字化转型的核心引擎
  • Kubernetes(K8s)常用命令全解析:从基础到进阶
  • 【Kubernetes】在 K8s 上部署 Prometheus
  • C语言基础:变量与进制详解
  • K8s的命名空间需要创建吗
  • 工具集成强化学习:AI数学推理能力的新跃迁
  • Java基础(九):Object核心类深度剖析
  • 图神经网络分享系列-node2vec(二)
  • 基于51单片机WIFI心率计脉搏体温测量仪APP设计
  • HTML应用指南:利用POST请求获取全国华为旗舰店门店位置信息
  • 《若依》权限控制
  • 上下文切换及线程操作相关内容
  • 学习雪花算法
  • linux-高级IO(中)
  • 【BFS 动态规划】P12382 [蓝桥杯 2023 省 Python B] 树上选点|普及+
  • Redis面试精讲 Day 25:Redis实现分布式Session与购物车
  • 【前端】使用Vue3过程中遇到加载无效设置点击方法提示不存在的情况,原来是少加了一个属性
  • [激光原理与应用-296]:理论 - 非线性光学 - 线性光学与非线性光学对比
  • (第十九期)用 VS Code 管理项目:目录文件夹与根目录,一次讲清
  • Vulkan笔记(五)-逻辑层与队列
  • halcon基于透视的可变形模型匹配
  • C预备知识01:
  • 数字电视:技术演进与未来展望
  • 用户认证技术
  • MySQL 函数大赏:聚合、日期、字符串等函数剖析
  • 静配中心配药智能化:基于高并发架构的Go语言实现
  • CPP异常
  • 新手向:Java方向讲解