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

haproxy负载均衡(twenty-eight day)

官网: 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.cn13 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.cfg43     mode                    http63 frontend  main *:8067 #    use_backend static          if url_static#67行注释掉68     default_backend             web#最后一行加以下内容86 backend web87         balance         roundrobin88         server  web1    192.168.1.11:80 check89         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.cfg91 # 定义web管理界面92   listen statistics  93      bind *:9090                 #定义监听端口94      mode http                   #默认使用协议95      stats enable                #启用stats96      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 webbalance     static-rrserver  web1 192.168.1.11:80 weight 8 checkserver  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.cn13 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.cfg43     mode                    tcp63 frontend  main *:8067 #    use_backend static          if url_static#67行注释掉68     default_backend             mysql#最后一行加以下内容86 backend mysql87         balance         roundrobin88         server  mysql1    192.168.1.21:3306 check89         server  mysql2    192.168.1.22:3310 check

4、添加统计页面 

[root@HAproxy ~]# vim /etc/haproxy/haproxy.cfg91 # 定义web管理界面92   listen statistics  93      bind *:9090                 #定义监听端口94      mode http                   #默认使用协议95      stats enable                #启用stats96      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):passdef slave_statment(self,sql):passif __name__ == "__main__":demo=rwsplit()sql=input("sign sql:")if sql[:6]=="select": demo.slave_statment(sql)else:demo.master_statment(sql)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C# 重载运算符
  • web自动化测试Day5
  • 举例说明自然语言处理(NLP)技术。
  • Web前端:CSS篇(二)背景,文本,链接
  • 【ML】Image Augmentation)的作用、使用方法及其分类
  • UIScrollView 的 pagingEnabled属性(UIScrollView默认一次滑动多少距离?)
  • 掌握SQL的威力:批量更新与删除的艺术
  • 如何在 Windows/Mac/在线/iPhone/Android 上将 PDF 转换为 Word
  • leetcode算法题之N皇后
  • 软件测试要学习的基础知识——黑盒测试
  • 静态路由与默认路由和实验以及ARP工作原理
  • 动画展示梯度下降(二维)
  • XSS的DOM破坏
  • Linux·权限与工具-yum与vim
  • 说一下Android中的IdleHandler
  • ----------
  • 10个最佳ES6特性 ES7与ES8的特性
  • docker容器内的网络抓包
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • HTML5新特性总结
  • JS变量作用域
  • PaddlePaddle-GitHub的正确打开姿势
  • Redis 懒删除(lazy free)简史
  • Vue 动态创建 component
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 从PHP迁移至Golang - 基础篇
  • 从零开始在ubuntu上搭建node开发环境
  • 官方解决所有 npm 全局安装权限问题
  • 聊聊redis的数据结构的应用
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端性能优化--懒加载和预加载
  • 前端之Sass/Scss实战笔记
  • 使用权重正则化较少模型过拟合
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 探索 JS 中的模块化
  • 新书推荐|Windows黑客编程技术详解
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (007)XHTML文档之标题——h1~h6
  • (ibm)Java 语言的 XPath API
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (力扣题库)跳跃游戏II(c++)
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (南京观海微电子)——示波器使用介绍
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)uboot源码分析
  • (四)JPA - JQPL 实现增删改查
  • (一)基于IDEA的JAVA基础1