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

Haproxy代理服务(小白的“升级打怪”成长之路)

目录

一、实现Haproxy代理真实服务器

1、Haproxy服务器配置

2、编写配置网页内容

3、检验结果

二、实现Haproxy + Keepalived的两层架构(代理+双机热备)

1、Haproxy服务器配置

2、Keepalived 服务配置

3、检验结果


一、实现Haproxy代理真实服务器

通过 192.168.100.100的HAProxy (192.168.100.100) 代理访问 192.168.100.1(192.168.100.2的服务

1、Haproxy服务器配置
####192.168.100.100
##下载haproxy
[root@lvs1 ~]# yum install -y haproxy
[root@lvs1 ~]# cd /etc/haproxy/
[root@lvs1 haproxy]# ls
conf.d  haproxy.cfg
##编写配置文件
[root@lvs1 haproxy]# vim haproxy.cfg 
global  #全局配置log         127.0.0.1 local2chroot      /var/lib/haproxypidfile     /var/run/haproxy.piduser        haproxygroup       haproxydaemonmaxconn     4000
​
defaults    #默认配置mode                    httplog                     globaloption                  httplogoption                  dontlognullretries                 3timeout http-request    5stimeout queue           1mtimeout connect         5stimeout client          1mtimeout server          1mtimeout http-keep-alive 5stimeout check           5smaxconn                 3000
​
frontend main   #前端(虚拟server)bind *:80default_backend         http_back
​
backend http_back   (后端真实server)balance     roundrobin      #轮询server  node1 192.168.100.1:80 check    #真实服务端server  node2 192.168.100.2:80 check
listen stats #定义监控页面    mode httpoption httplogbind *:1080                   #绑定端口1080    stats refresh 30s             #每30秒更新监控数据    stats uri /stats              #访问监控页面的uri    stats realm HAProxy\ Stats    #监控页面的认证提示    stats auth admin:admin        #监控页面的用户名和密码
​
[root@lvs1 haproxy]# systemctl start haproxy.service 
[root@lvs1 haproxy]# netstat -anptu | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      541243/haproxy      
tcp        0      0 0.0.0.0:1080            0.0.0.0:*               LISTEN      541243/haproxy    
2、编写配置网页内容
####192.168.100.1
##安装nginx
[root@web1 ~]# yum install -y nginx
[root@web1 ~]# systemctl start nginx
[root@web1 ~]# echo web1 > /usr/share/nginx/html/index.html
####192.168.100.2
[root@web2 ~]# yum install -y nginx
[root@web2 ~]# systemctl start nginx
[root@web2 ~]# echo web2 > /usr/share/nginx/html/index.html
​
3、检验结果

网站访问192.168.100.100,实现轮询

网站访问192.168.100.100;1080/stats,输入配置文件写入的账号密码,可以看到统计状态

二、实现Haproxy + Keepalived的两层架构(代理+双机热备)

设计思路

通过 192.168.100.100的HAProxy (192.168.100.100) 代理到 192.168.100.1(192.168.100.2)的Keepalived VIP (192.168.100.103),再由 Keepalived 访问到真实服务器192.168.100.1 (192.168.100.2),最终实现两层架构

1、Haproxy服务器配置

实现代理功能

####192.168.100.100
##下载haproxy
##编写配置文件
[root@lvs1 haproxy]# vim haproxy.cfg 
global  #全局配置log         127.0.0.1 local2chroot      /var/lib/haproxypidfile     /var/run/haproxy.piduser        haproxygroup       haproxydaemonmaxconn     4000
​
defaults    #默认配置mode                    httplog                     globaloption                  httplogoption                  dontlognullretries                 3timeout http-request    5stimeout queue           1mtimeout connect         5stimeout client          1mtimeout server          1mtimeout http-keep-alive 5stimeout check           5smaxconn                 3000
​
frontend main   #前端(虚拟server)bind 192.168.100.100:80default_backend         http_back
​
backend http_back   (后端真实server)balance     roundrobinserver  node1 192.168.100.103:80 check  #真实服务端
listen stats #定义监控页面    mode httpoption httplogbind 192.168.100.100:1080                   #绑定端口1080    stats refresh 30s             #每30秒更新监控数据    stats uri /stats              #访问监控页面的uri    stats realm HAProxy\ Stats    #监控页面的认证提示    stats auth admin:admin        #监控页面的用户名和密码
[root@lvs1 ~]# systemctl restart haproxy.service 
2、Keepalived 服务配置

Keepalived服务器配置双机热备,当一台服务器故障,另外一台提供服务

####192.168.100.1
##安装keepalived服务,并编写配置文件
[root@web1 ~]# yum install -y keepalived
[root@web1 ~]# cd /etc/keepalived/
[root@web1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
​
global_defs {router_id web1
}
vrrp_script check_nginx {script /etc/keepalived/check_nginx.sh    #检测脚本interval 2   #执行间隔时间
}
vrrp_instance VI_1 {state MASTERinterface ens160virtual_router_id 51priority 100advert_int 3authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.100.103}
track_script {          #在实例中引用脚本    check_nginx}
}
##加入检测脚本是为了保障nginx无故障时可以提供服务,一旦无法故障,同时关掉该服务器的keepalived服务
[root@web1 ~]# systemctl start keepalived.service
[root@web1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host proto kernel_lo valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:66:09:cd brd ff:ff:ff:ff:ff:ffinet 192.168.100.1/24 brd 192.168.100.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.100.103/32 scope global ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe66:9cd/64 scope link noprefixroute valid_lft forever preferred_lft forever
7: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:66:09:d7 brd ff:ff:ff:ff:ff:ffinet 192.168.58.182/24 brd 192.168.58.255 scope global noprefixroute ens224valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe66:9d7/64 scope link noprefixroute 
​
[root@web1 ~]# cd /etc/keepalived/
[root@web1 keepalived]# vim check_nginx.sh 
Count1=`netstat -antp |grep -v grep |grep nginx |wc -l`
if [ $Count1 -eq 0 ]; then systemctl restart nginxsleep 2  Count2=`netstat -antp |grep -v grep |grep nginx |wc -l`if [ $Count2 -eq 0 ]; then service keepalived stop      else      exit 0  fi
else   exit 0  
fi 
​
[root@web1 keepalived]# chmod +x check_nginx.sh 
[root@web1 keepalived]# systemctl restart keepalived.service 
####192.168.100.2
[root@web2 ~]# yum install -y keepalived
[root@web2 ~]# cd /etc/keepalived/
[root@web2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
​
global_defs {router_id web2
}
vrrp_script check_nginx {script /etc/keepalived/check_nginx.sh    #检测脚本interval 2   #执行间隔时间
}
vrrp_instance VI_1 {state BACKUPinterface ens160virtual_router_id 51priority 90advert_int 3authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.100.103}
track_script {          #在实例中引用脚本    check_nginx}
}
[root@web2 ~]# systemctl start keepalived.service
[root@web2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host proto kernel_lo valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:80:88:5d brd ff:ff:ff:ff:ff:ffinet 192.168.100.2/24 brd 192.168.100.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe80:885d/64 scope link noprefixroute valid_lft forever preferred_lft forever
5: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:80:88:67 brd ff:ff:ff:ff:ff:ffinet 192.168.58.181/24 brd 192.168.58.255 scope global noprefixroute ens224valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe80:8867/64 scope link noprefixroute valid_lft forever preferred_lft forever
​
[root@web2 ~]# cd /etc/keepalived/
[root@web2 keepalived]# vim check_nginx.sh 
Count1=`netstat -antp |grep -v grep |grep nginx |wc -l`
if [ $Count1 -eq 0 ]; then systemctl restart nginxsleep 2  Count2=`netstat -antp |grep -v grep |grep nginx |wc -l`if [ $Count2 -eq 0 ]; then service keepalived stop      else      exit 0  fi
else   exit 0  
fi 
​
[root@web2 keepalived]# chmod +x check_nginx.sh 
[root@web2 keepalived]# systemctl restart keepalived.service 
3、检验结果

网站访问192.168.100.100和192.168.100.100:1080/stats

当192.168.100.1故障时

####192.168.100.1
[root@web1 ~]# systemctl start keepalived.service 

网站访问192.168.100.100

看到感觉有帮助的朋友,劳烦动动发财的小手给博主点个赞

http://www.xdnf.cn/news/1131139.html

相关文章:

  • 微信小程序141~150
  • rustdesk远控电脑替代todesk,平替向日葵等软件
  • 【云原生网络】Istio基础篇
  • 实时调度类
  • 鸿蒙网络编程系列58-仓颉版TLS数字证书查看及验签示例
  • JavaScript进阶篇——第五章 对象成员管理与数组遍历优化
  • uniapp+vue3+鸿蒙系统的开发
  • 查看.bin二进制文件的方式(HxD十六进制编辑器的安装)
  • 从缓存 CAS 看Kimi K2使用的MuonClip优化器
  • Mybatis07-缓存
  • 【LLM】OpenRouter调用Anthropic Claude上下文缓存处理
  • Jenkins Pipeline 中使用 JsonSlurper 报错:cannot find current thread
  • 55. 跳跃游戏
  • 2025年中国品牌全球化发展分析:中国品牌在社交渠道、电商平台及官网流量方面显著增长
  • 语音增强论文汇总
  • IIS网站间歇性打不开暴力解决方法
  • 【数据结构】栈与链表的区别
  • 【Qt开发】Qt的背景介绍(二)-> 搭建Qt开发环境
  • 如何在硬件中进行有效地调试
  • TCP 三次握手与四次挥手笔记
  • 前端vue3获取excel二进制流在页面展示
  • Promise与Axios:异步编程
  • sqli-labs靶场通关笔记:第23关 注释符过滤
  • React -自定义hooks - 封装双向数据绑定
  • 自动控制原理知识地图:舵轮、路径与导航图
  • 2025年C++后端开发高频面试题深度解析:线程安全LRU缓存设计与实现
  • C# StringBuilder源码分析
  • 2025年Java最新社招面试八股文+技术场景题(金九银十)
  • Hadoop架构演进:从1.0到2.0的深度对比与优化解析
  • Hadoop(二)