实训第二十八天(haproxy与利用python实现mysql主从的读写分离)

1、练习


 [root@nat ~]# ipvsadm -d -t 192.168.10.101:3306 -r 10.0.0.22:3306        #删除真实主机
 nat:
 [root@nat ~]# ifconfig
 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 10.0.0.10  netmask 255.255.255.0  broadcast 10.0.0.255
 ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
         inet 192.168.10.101  netmask 255.255.255.0  broadcast 192.168.10.255
 [root@nat ~]# yum -y install ipvsadm.x86_64
 [root@nat ~]# ipvsadm -A -t 192.168.10.101:3306 -s rr
 [root@nat ~]# ipvsadm -a -t 192.168.10.101:3306 -r 10.0.0.21:3306 -m
 [root@nat ~]# ipvsadm -a -t 192.168.10.101:3306 -r 10.0.0.22:3306 -m
 [root@nat ~]# ipvsadm -Ln
 IP Virtual Server version 1.2.1 (size=4096)
 Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
 TCP  192.168.10.101:3306 rr
   -> 10.0.0.21:3306               Masq    1      0          0         
   -> 10.0.0.22:3306               Masq    1      0          0  
 [root@nat ~]# vim /etc/sysctl.conf
 [root@nat ~]# net.ipv4.ip_forward=1
 sysctl -p
 mysql:
 [root@master-mysql ~]# route del default
 [root@master-mysql ~]# route add default gw 10.0.0.10
 [root@mysql-slave ~]# route del default
 [root@mysql-slave ~]# route add default gw 10.0.0.10


2、同步时间


 [root@haproxy ~]# yum -y install ntpdate.x86_64
 [root@haproxy ~]# ntpdate cn.ntp.org.cn
 14 Aug 15:48:21 ntpdate[1858]: adjust time server 203.107.6.88 offset -0.000690 sec
 [root@haproxy ~]# date
 2024年 08月 14日 星期三 15:48:30 CST
 [root@haproxy ~]# yum -y install ntp.x86_64 
 [root@haproxy ~]# vim /etc/ntp.conf
 15行加入   restrict 10.0.0.0 mask 255.255.255.0   #允许10.0.0.0网段的主机访问
 [root@haproxy ~]# systemctl start ntpd
 [root@web01 ~]# yum -y install ntpdate.x86_64
 [root@web01 ~]# ntpdate 10.0.0.35
 14 Aug 15:58:19 ntpdate[1654]: adjust time server 10.0.0.35 offset -0.003274 sec
 [root@web02 ~]# yum -y install ntpdate.x86_64
 [root@web02 ~]# ntpdate 10.0.0.35
 14 Aug 15:58:19 ntpdate[1654]: adjust time server 10.0.0.35 offset -0.003274 sec


3、web haproxy高可用代理

(1)打开web01和web02

 [root@web01 ~]#nginx
 [root@web02 ~]#nginx


(2)下载安装haproxy

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


(3)编辑haproxy配置文件,实现代理负载均衡

 [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
 43行 http   #表示代理http服务
 63行 5000改80  #将端口号5000改为80
 #67行 use_backend   #没有配置静态服务器,直接注释
 68行 app换web  #将默认app模块改为web
 87行 backend web   #编写web模块
      balance   roundrobin
      server weba 10.1.1.200:80 check
      server webb 10.1.1.201:80 check
 [root@haproxy ~]# systemctl status haproxy
 [root@haproxy ~]# systemctl start haproxy
 [root@haproxy ~]# systemctl enable haproxy
 [root@haproxy ~]# curl 10.1.1.30
 web01
 [root@haproxy ~]# curl 10.1.1.30
 web02


(4)编辑haproxy配置文件,添加统计页面

 [root@haproxy ~]# vim   /etc/haproxy/haproxy.cfg
 # 配置文件最后追加
 listen statistics
         bind *:9090                     #定义监听端口
         mode http                       #默认使用协议
         stats enable                    #启用stats
         stats uri /hadmin?stats         #自定义统计页面的url
         stats auth admin:admin           #统计页面的账号密码
         stats hide-version              #隐藏在统计页面上的haproxy版本信息
         stats refresh 30s               #统计页面自动刷新时间
         stats admin if TRUE             #如果认证通过就做管理功能,可以管理后端服务器
         stats realm hapadmin            #统计页面密码框上提示文件,默认为haproxy\statistic
 [root@haproxy ~]# systemctl restart haproxy.service 
 [root@haproxy ~]# netstat -lntup | grep haproxy
 tcp        0      0 0.0.0.0:9090            0.0.0.0:*               LISTEN      1665/haproxy        
 tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1665/haproxy        
 udp        0      0 0.0.0.0:37365           0.0.0.0:*                           1664/haproxy 

5)编辑haproxy配置文件,添加权重功能

 [root@haproxy ~]# vim   /etc/haproxy/haproxy.cfg
 backend web
     balance     static-rr
     server  web01 10.0.0.11:80 weight 3 check
     server  web02 10.0.0.12:80 weight 1 check
 [root@haproxy ~]# systemctl restart haproxy


4、mysql haproxy高可用代理

(1)打开数据库

 [root@master-mysql ~]# service mysql8 start
 [root@mysql-slave ~]#  service mysql8 start


(2)编辑haproxy配置文件,实现代理负载均衡

 [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
 43行    mode                    tcp
 67行#   use_backend static          if url_static
 68行    default_backend             mysql
 86行 backend mysql
          balance     static-rr
          server  mysql01 10.0.0.21:3306 weight 3 check
          server  mysql02 10.0.0.22:3306 weight 1 check
 [root@haproxy ~]# systemctl restart haproxy
 [root@haproxy ~]# netstat -lntup | grep haproxy
 tcp        0      0 0.0.0.0:9090            0.0.0.0:*               LISTEN      2045/haproxy        
 tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2045/haproxy        
 udp        0      0 0.0.0.0:54557           0.0.0.0:*                           2044/haproxy 
 [root@mysql-slave ~]# mysql -u10.0.0.35 -p'123'
 mysql> show variables like 'server_id';
 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | server_id     | 10    |
 +---------------+-------+
 1 row in set (0.09 sec)
 [root@mysql-slave ~]# mysql -u10.0.0.35 -p'123'
 mysql> show variables like 'server_id';
 +---------------+-------+
 | Variable_name | Value |
 +---------------+-------+
 | server_id     | 11    |
 +---------------+-------+
 1 row in set (0.09 sec)

 mysql> help change master to   #查看连接master的帮助信息
1、python代码实现mysql的读写分离
(1)安装pymysql是python管理mysql的驱动,或者成为连接器
 [root@python ~]# pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
 [root@python ~]# pip3 install pymysql   #安装pymysql
(2)在python3的命令行界面引入pymysql
 [root@python ~]# mysql3
 >>> import pymysql
(3)创建两个connenction对象,一个指向master mysql,一个指向slave mysql
 master_conn=pymysql.connect(host="10.0.0.21",user="li",port=3306,database="test",password="li")
 slave_conn=pymysql.connect(host="10.0.0.22",user="li",port=3306,database="test",password="li")
(4)获取数据游标
 >>> master_cursor=master_conn.cursor()
(5)执行查询
 >>> select_sql="select * from student"
 >>> master_cursor.execute(select_sql)
 3
 >>> master_cursor.fetchall()
 ((1001, '孙颖莎', '云计算2班', '1002'), (1002, '大头', '云计算2班', '1003'), (1003, '小胖', '云计算2班', '1004'))

(6)执行修改
 >>> update_sql="update student set name='马龙' where id=1002">>> master_cursor.execute(update_sql)1>>> master_conn.commit()

(7)执行删除
 >>> delete_sql="delete from student where name='小胖'">>> master_cursor.execute(delete_sql);1>>> master_conn.commit()

(8)执行新增
 >>> insert_sql="insert into student values(1004,'张翔','云计算2班','1004')"
 >>> master_cursor.execute(insert_sql)
 1
 >>> master_conn.commit()

(9)执行查询(slave)
 >>> slave_cursor=slave_conn.cursor()
 >>> sql="select * from student"
 >>> slave_cursor.execute(sql)
 3
 >>> slave_cursor.fetchall()
 ((1001, '孙颖莎', '云计算2班', '1002'), (1002, '马龙', '云计算2班', '1003'), (1004, '张翔', '云计算2班', '1004'))

2、python脚本实现mysql的读写分离
 [root@python ~]# vim rwpython.py
 class rwsplit(object):
         def __init__ (self):
                 print("initialize")
         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.rhkb.cn/news/403708.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】深入理解类加载机制(二)

深入理解类加载机制 HSDB工具的使用 Hotspot Debugger(HSDB):JDK原生自带 以Windows系统为例&#xff0c;jdk8的环境&#xff0c;在jdk的lib目录下&#xff0c;启动之前&#xff0c;你需要确保你进入的lib目录和你当前的JAVA_HOME配置的JDK是相同的&#xff0c;否则可能会出现…

2.1 文件内容差异对比方法

2.1 文件内容差异对比方法 文件内容差异对比方法2.1.1 两个字符串的差异对比2.1.2 生成美观的HTML格式文档2.1.3 对比nginx 配置文件差异代码封装 文件内容差异对比方法 介绍如何通过difflib模块实现文件内容差异对比。difflib作为Python的标准库模块无需安装&#xff0c;作用…

2024年运营技术与网络安全态势研究报告:遭遇多次网络威胁的比例暴增

随着 OT 组织不断在其业务环境中集成各种数字工具和技术&#xff0c;它们面临的安全挑战也日益变得愈加复杂和多样化。正如 NIST 指出&#xff0c; “虽然安全解决方案旨在解决典型 IT系统中的一些问题&#xff0c;但将这些相同的解决方案引入不同的 OT 环境时&#xff0c;必须…

ruoyi-vue-pro项目新建模块的接口都报404错误

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 新建模块之后,该模块后端的请求都是返回404,如图所示: 2. 原理分析 抛开这个项目,对于路径请求不成功,返回404 主要的步骤如下: 检查路由配置: 确保在路由配置文件中添加了新模块的路由 例如,在Spring Boot中,这…

vue3+ts 前端word文档下载文件时不预览直接下载方法(支持 doc / excel / ppt / pdf 等)

前端word文档下载文件时不预览直接下载方法支持 doc / excel / ppt / pdf 等 根据需要&#xff0c;要实现一个下载文档的需要 最简单的方法就是使用a标签 如果是相同域可以直接下载&#xff0c;但如果是不同域的&#xff0c;就会先打开一个预览页&#xff0c;在预览页再点下载…

StarRocks Lakehouse 快速入门——Apache Paimon

StarRocks Lakehouse 快速入门指南为您提供了湖仓技术概览&#xff0c;旨在帮助您迅速掌握其核心特性、独特优势和应用场景。本指南将指导您如何高效地利用 StarRocks 构建解决方案。文章末尾&#xff0c;我们集合了来自阿里云、饿了么、喜马拉雅和同程旅行等行业领导者在 Star…

Eureka原理与实践:构建高效的微服务架构

Eureka原理与实践&#xff1a;构建高效的微服务架构 Eureka的核心原理Eureka Server&#xff1a;服务注册中心Eureka Client&#xff1a;服务提供者与服务消费者 Eureka的实践应用集成Eureka到Spring Cloud项目中创建Eureka Server创建Eureka Client&#xff08;服务提供者&…

什么叫日志门面

日志门面&#xff0c;是门面模式的一个典型的应用。 门面模式&#xff08;Facade Pattern&#xff09;&#xff0c;也称之为外观模式&#xff0c;其核心为&#xff1a;外部与一个子系统的通信必须通过一个统一的外观对象进行&#xff0c;使得子系统更易于使用。 就像Log4j、Lo…

stm32智能颜色送餐小车(ESP8266WIFI模块、APP制作、物联网模型建立、MQTTFX)

大家好啊&#xff0c;我是情谊&#xff0c;今天我们来介绍一下我最近设计的stm32产品&#xff0c;我们在今年七月份的时候参加了光电设计大赛&#xff0c;我们小队使用的就是stm32的智能送餐小车&#xff0c;虽然止步于省赛&#xff0c;但是还是一次成长的经验吧&#xff0c;那…

Linux系统-通用权限管理

目录 一、文件类型 二、通用权限 1.文件的常规权限 权限类型 壹.对于文件&#xff1a; 贰.对于目录&#xff1a; 查看和修改权限 说明&#xff1a; 举例&#xff1a; 字母表示法 数字表示法 2.文件的访问控制列表&#xff08;FACL File access control list&#…

菱形继承和虚继承

菱形继承&#xff08;Diamond Inheritance&#xff09;是指在多重继承的情况下&#xff0c;某个类继承自两个类&#xff0c;而这两个类又都继承自同一个基类的情况。 在这个结构中&#xff0c;D 直接从 A 继承了 A 的所有特性&#xff0c;但通过 B 和 C 继承&#xff0c;这会导…

eNSP 华为三层交换机配置DHCP

华为三层交换机配置DHCP 华为DHCP原理&#xff1a;&#xff08;思科四个都是广播包&#xff09; 1、客户端广播发送DHCP Discover包。用于发现当前局域网中的DHCP服务器。 2、DHCP服务器单播发送DHCP Offer包给客户端。携带分配给客户端的IP地址。 3、客户端广播发送DHCP Resqe…

索引的数据结构

1.举例引出索引: 1.1.什么是索引&#xff1a; 1.2.数据查找分析&#xff1a; a.数据查找&#xff1a; 1.如上图所示&#xff0c;数据库没有索引的情况下&#xff0c;数据分布在硬盘不同的位置上面&#xff0c;读取数据时&#xff0c;摆臂需要前后摆动查找数据&#xff0c;这…

Java方法04:命令行传递参数

本节视频链接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p48&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p48&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 在Java中&#xff0c;‌命令行传递参数…

PyTorch--深度学习

onux部署功能 cpu运行时间 3. 自动求导 求导结果为&#xff1a;2 1 1

考试题型宏观分析之公共营养师三级

背景 第一遍知识学习之后&#xff0c;打印《2023.10.14公共营养师三级真题》进行第一次摸底&#xff0c;首要目标在于通过摸底&#xff0c;对于考试题型进行宏观分析和了解&#xff0c;其次&#xff0c;对于后续的学习进行有的放矢 直至2024-08-18&#xff0c;对于上述资料的一…

Apache-JMeter压测工具教程

下载安装 《JMeter官网下载》 下载完成后&#xff0c;找个文件夹进行解压 配置环境变量 JAVA_HOME&#xff08;如果是JAVA8还需要配置CLASSPATH&#xff09;、JMETER_HOME JMETER_HOME修改bin目录下的jmeter.properties文件编码为UTF-8 5.6.3这个版本encoding已经默认为UT…

肿瘤细胞表皮生长因子EGFR靶向肽;GE11;YHWYGYTPQNVI

【GE11简介】 GE11肽是从噬菌体展示肽库中筛选出来的一种有效的EGFR配体&#xff0c;它是一种十二肽&#xff0c;可以高亲和力和选择性地与EGFR特异性结合。GE11已广泛用于EGFR阳性肿瘤的放射治疗、基因治疗和化疗药物的诊断和靶向递送。 【中文名称】肿瘤细胞表皮生长因子肽…

理解Tomcat的IP绑定与访问控制

在使用Spring Boot开发应用时&#xff0c;内置的Tomcat容器提供了灵活的网络配置选项。特别是&#xff0c;当计算机上有多个网卡时&#xff0c;如何配置server.address属性显得尤为重要。本文将详细探讨不同IP配置对Tomcat服务访问的影响。 多网卡环境下的IP配置 假设你的计算…

微前端架构:使用不同框架构建可扩展的大型应用

概述 在现代Web开发中&#xff0c;随着业务复杂度的不断提高&#xff0c;单一的巨型应用逐渐难以满足高效开发和维护的需求。微前端架构作为一种解决方案&#xff0c;允许将一个大型应用拆分成多个独立的小型应用&#xff0c;这些小型应用可以单独开发、部署&#xff0c;并且能…