2024年8月14日(haproxy)

news2024/9/23 13:24:06

一、haproxy简介 

官网https://www.haproxy.com/
自由及开放源代码软件

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负我均衡,以及基TCP和HTTP的应用程序代理。

HAProxy特别适用于那些负载特大的veb站点,这些站点通常又需要会活保或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式一与它可以很简单安全地整合进用户当前的架构中,同时可以保护用户的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动,单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。

包括GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter5和Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。

 1、安装(时间同步软件,haproxy)

[root@haproxy ~]# yum -y install ntpdate

[root@haproxy ~]# ntpdate cn.ntp.org.cn

[root@haproxy ~]# yum -y install ntp
[root@haproxy ~]# systemctl start ntpd
[root@haproxy ~]# systemctl enable ntpd

[root@haproxy ~]# yum -y install haproxy

2、配置

[root@haproxy ~]# rpm -ql haproxy

/etc/haproxy/haproxy.cfg

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

 63 frontend  main *:80
 67     #use_backend static          if url_static
 68     #default_backend             app
 69     default_backend             web 
 81 backend app
 82     balance     roundrobin
 83     server  app1 127.0.0.1:5001 check
 84     server  app2 127.0.0.1:5002 check
 85     server  app3 127.0.0.1:5003 check
 86     server  app4 127.0.0.1:5004 check
 87     
 88 backend web
 89         balance         roundrobin
 90         server web1     192.168.8.171:80 check  #web01的IP地址
 91         server web2     192.168.8.175:80 check  #web02的IP地址

[root@haproxy ~]# systemctl start haproxy.service
[root@haproxy ~]# systemctl enable haproxy.service

向web主机的静态页面写入东西

[root@web01 ~]# echo "web01" > /usr/share/nginx/html/index.html

[root@web02 ~]# echo "web02" > /usr/share/nginx/html/index.html
[root@haproxy ~]# curl 192.168.8.174
web02
[root@haproxy ~]# curl 192.168.8.174
web01

3、配置DNS服务器测试

[root@dns ~]# vim /var/named/lxe.com.zone 

 13 web01   A       192.168.8.166  #web01IP
 14 web02   A       192.168.8.168  #web02IP
 15 ha      A       192.168.8.174  #haproxy主机的IP地址

[root@haproxy ~]# echo "nameserver 192.168.8.147" > /etc/resolv.conf  #DNS主机IP
[root@haproxy ~]# curl ha.lxe.com
web02
[root@haproxy ~]# curl ha.lxe.com
web01

4、添加统计页面

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

 92 # 定义web管理界面
 93    listen statistics
 94      bind *:9090                 #定义监听端口
 95      mode http                   #默认使用协议
 96      stats enable                #启用stats
 97      stats uri /hadmin?stats     #自定义统计页面的url 
 98      stats auth admin:admin      #统计页面的账号密码
 99      stats hide-version          #隐藏在统计页面上的haproxy版本信 
100      stats refresh 30s           #统计页面自动刷新时间
101      stats admin if TRUE         #如果认证通过就做管理功能,可以管理后端服务器
102      stats realm hapadmin        #统计页面密码框上提示文件,默认为haproxy\statisti cs

[root@haproxy ~]# systemctl restart haproxy 

5、负载均衡策略--加权

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

89         balance         static-rr
 90         server web1     192.168.8.171:80 weight 8 check
 91         server web2     192.168.8.175:80 weight 2 check

[root@haproxy ~]# systemctl restart haproxy 

二、使用haproxy对mysql 主从做负载均衡

 43     mode                    tcp
 63 frontend  main *:3306
 70      default_backend             mysql
 94 backend mysql
 95         balance roundrobin
 96         server master   192.168.8.173:3306 check
 97         server slave    192.168.8.172:3306 check

三、mysql读写分离

[root@localhost ~]# pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ some-package
[root@localhost ~]# pip3 install pymysql

[root@localhost ~]# python3

>>> import pymysql
>>>master_conn=pymysql.connect(host="10.1.1.11",user="zhangmin",password="zhangmin",database="test",port=3306)
>>>slave_conn=pymysql.connect(host="10.1.1.12",user="zhangmin",password="zhangmin",database="test",port=3310)
>>> updatesql="update user set password='000' where username='aaa'"
>>> master_cursor.execute(updatesql)
>>> master_conn.commit()
>>> delete_sql="delete from user where username='aaa'"
>> master_cursor. execute(delete_sql)
1
>>> master_conn. commit ()

9. 执行查询slave

>>># 执行查询 获得获得slave 游标

...

>>> slave_cursor=slave_conn.cursor()
>>> sql

'select * from user'

>>> slave_cursor.execute(sql)

3

>>> slave_cursor.fetchall()
((2, 'bbb', 'bbbb'), (3, 'ccc', 'cccc'),(1004, 'ddddd', 'ddddddd'))
class rwsplit(object):
        def __init__ (self):
                print("initialized")

        def master_statment(self,sql):
                pass
        def slave_statment(self,sql):
                pass



if __name__ == "__main__":
        demo=rwsplit()
        sql=input("sign sql:")
        if sql[:6]=="select": 
                demo.slave_statment(sql)
        else:
                demo.master_statment(sql)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2038718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt】QWidget的geometry属性

geometry,意思是“几何”。可以将geometry视为是四个属性的统称。 x:横坐标 y:纵坐标 width:宽度 height:高度 API说明 geometry() 获取到控件的位置和尺⼨. 返回结果是⼀个 QRect, 包含了 x, y, width, height. 其中…

jar包扫描不到,idea如何通过Project Structure设置

目录 一、进入Project Structure二、添加你的项目进来三、手动添加依赖 很多时候jar包文件已经存在,但是无法使用,需要通过Project Structure设置 一、进入Project Structure 选择Modules->点击 二、添加你的项目进来 一直next,最后点…

论文阅读笔记:ST-MetaNet-2

目录 预备知识 定义1:城市交通 定义2:Geo-graph属性 问题1 方法 RNN 元学习器 元图注意力网络 元循环神经网络 预备知识 在本节中,我们介绍定义和问题陈述。为简洁起见,我们在表1中提供了一个注释表。 假设有个位置&…

Java - API

API全称"Application Programming Interface",指应用程序编程接口 API(JDK17.0)链接如下 : Overview (Java SE 17 & JDK 17) (oracle.com)https://docs.oracle.com/en/java/javase/17/docs/api/中文版: Java17中…

C++内存泄露检测-Windows平台VLD

一、安装Visual Leak Detector 下载地址:https://kinddragon.github.io/vld/ 安装过程就一路next即可,如果自定义安装目录的话,需要记住安装的目录,默认目录 C:\Program Files (x86)\Visual Leak Detector,这个目录下…

[独家原创]基于(牛顿拉夫逊)NRBO-TCN多变量回归预测(多输入单输出) Matlab代码

[独家原创]基于(牛顿拉夫逊)NRBO-TCN多变量回归预测(多输入单输出) Matlab代码 NRBO优化的超参数为:卷积核个数、正则化系数、初始化学习率 1.程序已经调试好,无需更改代码替换数据集即可运行!!!数据格式为excel&…

色轮在数据可视化中的应用

在数据可视化中,色彩的运用不仅仅是为了美观,更是为了传达信息、区分数据和提升图表的易读性。本文探讨色轮及其色彩公式的应用,帮助大家更好地运用色彩来提升数据可视化的效果。 1、色轮的基础概念 色轮是一个用于表示颜色之间关系的图形工…

Linux自动构建工具——make/makefile

目录 一、make/makefile是什么? 二、深入了解 1.基本命令 提示:以下是本篇文章正文内容,下面案例可供参考 一、make/makefile是什么? 在Linux中make是一条指令,makefile是文件。make的核心功能就是读取一个或者多个…

解决问题:Arcgis10.8“数据“-“导出至CAD“时就卡死了

问题现象:我们在使用Arcgis10.8软件,执行 “数据导出至CAD”操作时,会出现卡死的情况,步骤如下图所示: 解决方案:在菜单栏依次选择“地理处理”-“地理处理选项”,然后在“后台处理”和“发生错…

黄金市场展望:CPI数据引发关注,技术面看涨

亚市现货黄金行情 8月14日周三,亚市盘中现货黄金价格小幅下跌,目前交投在2462美元/盎司附近。投资者将重点关注即将公布的美国消费者物价指数(CPI)数据,预计这将对黄金市场产生重大影响。 美联储政策预期与CPI数据 市场…

IIC电路详细设计

下面我们来聊一聊IIC。 首先要知道,为什么IIC需要接上拉电阻?这里就需要承接到上一部分的内容:三极管。 注意到这样一句话:「连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能 」,这里就涉及到「漏极/集电极开路」、「上拉电阻」和「线与」两个概念…

ReetrantReadWriteLock 读写锁原理

一、为什么要出现读写锁? 我们知道synchronizer 和 ReentrantLock 都是互斥锁 但现实很多业务场景都是读多写少,针对这种场景在并发中若采用 synchronizer 和 ReentrantLock 来保证原子性,但会降低代码的性能。这种场景,就可以…

数据库技术核心:迭代逻辑思考

文章目录 数据库演进史第一阶段:早期文件系统第二阶段:关系数据库(RDBMS)第三阶段:面向对象数据库(OODBMS)第四阶段:分布式数据库和 NoSQL 数据库第五阶段:NewSQL 数据库…

广告资料库是什么?如何正确使用Facebook广告资料库?一文解决你的烦恼!

什么是广告资料库 广告营销领域,创意和策略的更新速度极快。为了跟上这种节奏,广告资料库应运而生,成为广告人和营销专家的重要工具。广告资料库是一个集中存储和管理广告素材、创意案例、市场数据和用户反馈的平台。它不仅帮助用户获得灵感…

Redis集群:概念和部署示例

目录 Redis 集群的优点 集群模式 主从模式 缺陷 哨兵模式 缺陷 集群模式(Redis Cluster) 数据分片原理 添加节点 删除节点 Redis集群的分片方式 故障转移机制 如果Master只有一个Slave 如果Master有多个Slave 如果两个Slave票数一样呢&a…

UE5中动画重定向问题,新角色滑步,双脚不动向前后左右移动

UE5系列文章目录 我们在UE商场或者一些其他渠道的感觉非常好的人物模型和动画,想把他们替换到我们的工程中,或者把小白人替换到,就经常遇到动画重定向 Unreal Engine 5(UE5)中的动画重定向是一种强大的功能&#xff…

高校体育场管理小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,状态管理,学生管理,体育场管理,用户订单管理,学生订单,系统管理 微信端账号功能包括:系统首页,…

HTML5+JavaScript绘制彩虹和云朵

HTML5JavaScript绘制彩虹和云朵 彩虹,简称虹,是气象中的一种光学现象,当太阳光照射到半空中的水滴,光线被折射及反射,在天空上形成拱形的七彩光谱,由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…

RabbitMq消息队列(缓存加速)

然后切换yum仓库; 这里采用阿里的仓库; rm -rf /etc/yum.repos.d/* curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo …

Vitis AI 基本认知(CNN基本概念)

目录 1. 目的 2. 概念解释 2.1 计算并行度 2.2 超参数 2.3 反向传播算法 2.4 优化器(Optimizer) 2.5 评估指标(Metrics) 2.5.1 准确率、精确率、召回率 2.5.2 F1 Score 2.5.3 IoU 2.6 内存布局 2.6.1 输入 2.6.2 中间…