haproxy负载均衡(twenty-eight day)

news2024/11/15 5:52:01

官网: https://www.haproxy.com/

自由及开放源代码软件

HAPrOxy是一个使用C语言编写的自由及开旅酒代码软性,其提供高可用性、负我均衡,以及基于TCP和HTTP的应用程座代理


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

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

包括 GiHu.Bilbuckelf3]. stack overiew[4].Twiller6和 Tuem7]在内的知名网站,及亚马逊网络服务系统都使用了UUIHAPrOXY.

一、haproxy安装及配置

1、安装

[root@HAproxy ~]# yum -y install ntpdate.x86_64 
[root@HAproxy ~]# yum -y install ntp
[root@HAproxy ~]# ntpdate cn.ntp.org.cn
 13 Aug 19:39:27 ntpdate[1955]: adjust time server 120.197.116.202 offset 0.059032 sec
[root@HAproxy ~]# systemctl start ntpd
[root@HAproxy ~]# systemctl enable ntpd
[root@HAproxy ~]# yum -y install haproxy

2、配置

[root@HAproxy ~]# vim /etc/haproxy/haproxy.cfg
     43     mode                    http
     63 frontend  main *:80
     67 #    use_backend static          if url_static
     #67行注释掉
     68     default_backend             web
        #最后一行加以下内容
     86 backend web
     87         balance         roundrobin
     88         server  web1    192.168.1.11:80 check
     89         server  web2    192.168.1.12:80 check

3、重启服务并测试

[root@HAproxy ~]# systemctl start haproxy
[root@HAproxy ~]# systemctl enable haproxy
[root@HAproxy ~]# curl 192.168.1.15
web-01
[root@HAproxy ~]# curl 192.168.1.15
web-02
[root@HAproxy ~]# curl 192.168.1.15
web-01
[root@HAproxy ~]# curl 192.168.1.15
web-02

4、添加统计页面 

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

浏览器访问(192.168.1.15:9090/hadmin?stats)

 扩展:加权轮询

[root@HAproxy ~]# vim /etc/haproxy/haproxy.cfg  #只修改以下这一部分

backend web
    balance     static-rr
    server  web1 192.168.1.11:80 weight 8 check
    server  web2 192.168.1.12:80 weight 2 check

[root@HAproxy ~]# systemctl restart haproxy

二、使用haproxy对mysql进行负载均衡

1、安装

[root@HAproxy ~]# yum -y install ntpdate.x86_64 
[root@HAproxy ~]# yum -y install ntp
[root@HAproxy ~]# ntpdate cn.ntp.org.cn
 13 Aug 19:39:27 ntpdate[1955]: adjust time server 120.197.116.202 offset 0.059032 sec
[root@HAproxy ~]# systemctl start ntpd
[root@HAproxy ~]# systemctl enable ntpd
[root@HAproxy ~]# yum -y install haproxy

2、配置

[root@HAproxy ~]# vim /etc/haproxy/haproxy.cfg
     43     mode                    tcp
     63 frontend  main *:80
     67 #    use_backend static          if url_static
     #67行注释掉
     68     default_backend             mysql
        #最后一行加以下内容
     86 backend mysql
     87         balance         roundrobin
     88         server  mysql1    192.168.1.21:3306 check
     89         server  mysql2    192.168.1.22:3310 check

4、添加统计页面 

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

 4、重启服务并测试

[root@HAproxy ~]# systemctl start haproxy
[root@HAproxy ~]# systemctl enable haproxy

三、mysql读写分离

(1)在生产中,查询和修改的比例大概为7:3,查询压力大,可以分出多的主机做查询,slave也是可以被查询,所以可以将mysql做成高可用主从复制

(2)用户发送请求服务器响应压力,(nginx,lvs,haproxy)但是web服务器要提供服务,需要从数据库中读写数据,随着业务量并发量的提高,单点mysql已经无法满足需求,所以需要配置1主1从。一主多从

(3)对数据库的从服务器不允许修改,否则M-S失效

(4)读写分离

(5)代码级别读写分离,中间件读写分析

四、python代码的读写分离

1、安装pymysql是python管理mysql的驱动,或者成为连接器

pip3 install pymysql

2、在python3的命令行界面引入pymysql

import pymysql

3、创建两个connection对象,一个指向master-mysql,一个指向slave-mysql

>>>master_conn=pymysql.connect(host="192.168.1.21",user="xiaojiang",password="Zhang@2002",database="test",port=3306)
>>>slave_conn=pymysql.connect(host="192.168.1.22",user="xiaojiang",password="Zhang@2002",database="test",port=3310)

4、获取数据游标master

master_cursor=master_conn.cursor()

5、执行查询maser

select——sql="select * from user";
master_cursor.execute(select_sql);
rs=cyrsor.fetchall()

6、执行修改master

updatesql="update user set password='000' where username='aaa'"
master_cursor.execute(updatesql)
master_conn.commit()

7、执行删除master

delete_sql="delete from user where username='aaa'"
master_cursor.execute(delete_sql)
master_conn.commit()

8、执行新增master

insert_sql="insert into user values (1004.'dddddd','ddddddd')"
master_cursor.execute(insert_sql);
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/2041997.html

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

相关文章

单片机中时钟源(Clock Source)和时基源(Timebase Source)和的联系和区别

问题描述 在单片机中,时钟源(Clock Source)和时基源(Timebase Source)是两个与时间相关的基本概念,它们在单片机的时钟系统设计中扮演着重要角色。 区别与联系 1.区别 1.1定义 时钟源:是单片机…

【C语言篇】编译和链接以及预处理介绍(上篇)

文章目录 前言翻译环境和运行环境翻译环境编译预处理(预编译)编译词法分析语法分析语义分析 汇编 链接 运行环境预处理(预编译)详解预定义符号#define定义常量#define定义宏带有副作用的宏参数宏替换的规则宏和函数的对比 写在最后…

【git】gitee 提交错误,如何回退

文章目录 查看提交记录设定退回到位置提交 查看提交记录 git log git log如下图所示共2次提交记录 最近一次是错误提交(笔者提交是在错误的工作路径上传了) 设定退回到位置 git reset --hard hash值 git reset --soft 83fcc380d5250599eca********…

rabbit消息队列

一:消息队列简介 1:主流的消息队列 目前主流的几大消息队列有:RabitMQ、ActiveMQ、RocketMQ、Kafka、ZeroMQ等,也有一些小众的比如Beanstalk,当然我们之前学过的Redis也可以实现消息队列的功能。 (1&…

Android全面解析之Context机制(一) :初识Android context

什么是Context 回想一下最初学习Android开发的时候,第一用到context是什么时候?如果你跟我一样是通过郭霖的《第一行代码》来入门android,那么一般是Toast。Toast的常规用法是: Toast.makeText(this, "我是toast", To…

详解【网路编程】之Socket套接字编程

谢谢帅气美丽且优秀的你看完我的文章还要点赞、收藏加关注 没错,说的就是你,不用再怀疑!!! 希望我的文章内容能对你有帮助,一起努力吧!!! 1、Socket套接字 Socket 是一个…

4G 和 5G 中的单域注册(VoLTE和VoNR适用)VoNR 中的 CSRetry

目录 1. 4G 和 5G 中的单域注册(VoLTE和VoNR适用) 1.1 主要内容 1.2 什么是 4/5G 网络中的单域注册 1.3 为什么需要单域注册 1.4 单域注册主要参数之:Dual-Registration-5G-Indicator 1.5 单域注册主要参数之:DualRegistrat…

基于微信小程序地图实现点位标注、覆盖物、地图聊天

目录 小程序部分map标签的使用获取用户经纬度并转换地址地图点击事件覆盖物标注点击并实现弹窗交互数据库及接口部分数据库表结构设计API搭建小程序接口使用注意事项wx.getLocation深入控制地图小程序部分 map标签的使用 创建小程序的步骤这里不再重复赘述,在wxml页面中放一个…

EtherCAT运动控制器PT/PVT实现用户自定义轨迹规划

ZMC408CE硬件介绍 ZMC408CE是正运动推出的一款多轴高性能EtherCAT总线运动控制器,具有EtherCAT、EtherNET、RS232、CAN和U盘等通讯接口,ZMC系列运动控制器可应用于各种需要脱机或联机运行的场合。 ZMC408CE支持8轴运动控制,最多可扩展至32轴…

美团到店面经

redis中大key引起的问题 1、阻塞请求 Big Key对应的value较大,我们对其进行读写的时候,需要耗费较长的时间,这样就可能阻塞后续的请求处理。Redis的核心线程是单线程,单线程中请求任务的处理是串行的,前面的任务完不成…

【RabbitMQ】 相关概念 + 工作模式

本文将介绍一些MQ中常见的概念,同时也会简单实现一下RabbitMQ的工作流程。 MQ概念 Message Queue消息队列。是用来存储消息的队列,多用于分布式系统之间的通信。 系统间调用通常有:同步通信和异步通信。MQ就是在异步通信的时候使用的。 同…

Go 1.19.4 错误处理-Day 11

1. 错误处理机制 1.1 先看一段代码,引出Golang错误处理机制 看到了上面的代码后,思考两个问题? (1)有没有办法,能让test()执行出错了,它下面的fmt代码依然能够运行。 (2&#xff09…

service 管理 web 管理插件

clusterIP 资源清单文件 [rootmaster ~]# kubectl create service clusterip websvc --tcp80:80 --dry-runclient -o yaml 解析域名 创建后端应用 负载均衡 固定 IP 服务 端口别名 nodePort 对外发布服务 Ingress 对外发布服务 查询 ingress 控制器类名称 kubectl g…

一个功能强大、易于使用的开源WEB表单构建工具Formbricks

大家好,今天给大家分享的是一个功能强大、易于使用的表单构建工具Formbricks,能够帮助开发者和非开发者快速构建各种类型的表单。 项目介绍 Formbricks 是一个开源的、基于 Web 的表单构建器,旨在帮助开发者和非开发人员轻松创建复杂的表单&…

大数据技术——Hadoop运行环境搭建

目录 一、 Hadoop运行环境搭建 1.1 模板虚拟机环境准备 1.2 克隆虚拟机 一、 Hadoop运行环境搭建 1.1 模板虚拟机环境准备 0)安装模板虚拟机,IP地址192.168.10.100、主机名称hadoop100、内存4G、硬盘50G 具体操作参照下列文档 大数据技术之模板虚…

8.15日学习打卡---Spring Cloud Alibaba(三)

8.15日学习打卡 目录: 8.15日学习打卡为什么需要服务网关Higress是什么安装DockerCompose部署Higress创建网关微服务模块Higress路由配置Higress策略配置-跨域配置Higress解决如何允许跨域Higress策略配置之什么是HTTP认证Higress策略配置-Basic 认证什么是JWT认证J…

腾讯云AI代码助手 —— 编程新体验,智能编码新纪元

阅读导航 引言一、开发环境介绍1. 支持的编程语言2. 支持的集成开发环境(IDE) 二、腾讯云AI代码助手使用实例1. 开发环境配置2. 代码补全功能使用💻自动生成单句代码💻自动生成整个代码块 3. 技术对话3. 规范/修复错误代码4. 智能…

C++ | stack/queue

前言 本篇博客讲解cSTL中的stack/queue 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:C_普通young man的博客-CSDN博客 ⏩ 本人giee: 普通小青年 (pu-tong-young-man) - Gitee.com 若有问题 评论区见📝 🎉欢迎大…

LMDeploy 量化部署实践闯关任务-50%的A100跑的过程

基础任务(完成此任务即完成闯关) 使用结合W4A16量化与kv cache量化的internlm2_5-7b-chat模型封装本地API并与大模型进行一次对话,作业截图需包括显存占用情况与大模型回复,参考4.1 API开发(优秀学员必做)使用Function call功能让…

docker compose部署rabbitmq集群,并使用haproxy负载均衡

一、创建rabbitmq的data目录 mkdir data mkdir data/rabbit1 mkdir data/rabbit2 mkdir data/rabbit3 二、创建.erlang.cookie文件(集群cookie用) echo "secretcookie" > .erlang.cookie 三、创建haproxy.cfg配置文件 global log stdout fo…