haproxy负载均衡+mysql读写分离

news2024/11/16 12:02:47

haproxy负载均衡

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

[root@haproxy01 ~]# yum -y install ntp

[root@haproxy01 ~]# systemctl start ntpd

安装haproxy

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

配置文件的地址

[root@haproxy01 ~]# rpm -ql haproxy

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

 frontend  main *:80                        //修改63行为80

#    use_backend static          if url_static   //注释掉这一行

default_backend             web            //修改68行为web

  backend web                              //在最后添加这几行

       balance    roundrobin

       server weba  192.168.2.200:80 check

       server webb  192.168.2.201:80 check

[root@haproxy01 ~]# systemctl start haproxy

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

访问haproxy自己,对web01,web02实现了轮询负载均衡

[root@haproxy01 ~]# curl 192.168.2.11

web---------01

[root@haproxy01 ~]# curl 192.168.2.11

web----------02

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

# 定义web管理界面

listen statistics

       bind *:9090   #定义监听端口

       mode http    #默认使用协议

       stats enable   #启用stats

       stats uri /hadmin?stats   #自定义统计页面的url

       stats auth admin:admin   #统计页面的账号密码

       stats hide-version        #隐藏在统计页面上的

       stats refresh 30s        #统计页面自动刷新时间

       stats admin if TRUE      #如果认证通过就做管理

       stats realm hapadmin    #统计页面密码框上提示

[root@haproxy01 ~]# systemctl restart haproxy

在浏览器访问192.168.2.11:9090/hsdmin?stats

加权轮询 

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

backend web

     balance    static-rr

     server weba  192.168.2.200:80 weight 8 check

     server webb  192.168.2.201:80 weight 2 check

[root@haproxy01 ~]# systemctl restart haproxy

Curl 192.168.2.11  //结果是web01出现的次数多于web02

[root@haproxy01 ~]# curl 192.168.2.11

web---------01

[root@haproxy01 ~]# curl 192.168.2.11

web---------01

[root@haproxy01 ~]# curl 192.168.2.11

web----------02

[root@haproxy01 ~]# curl 192.168.2.11

web---------01

[root@haproxy01 ~]# curl 192.168.2.11

web---------01

[root@haproxy01 ~]# curl 192.168.2.11

web---------01

mysql读写分离

  1. 在生产中,查询和修改的比例大概为7:3,查询压力大,可以分出多的主机做查询,slave也可以被查询,所有,可以将mysql做高可用主从复制
  2. 用户发送请求服务器响应压力(nginx,lvs,haproxy),但是web服务器需要提供服务,需要从数据库读数据,随着业务量并发量提高,单点mysql已经无法满足需求,所以要配置1主1从,一主多从
  3. 对数据库的从服务器是不允许修改,否则M-S失效
  4. 读写分离
  5. 代码级读写分离,中间件读写分离

mysql的主从复制

1. master

1. rm -rf /etc/my.cnf

2. glibc,下载解压

3. 将解压后的文件移动的指定的/usr/local/mysql

4. mkdir /usr/local/mysql/mysql-files

5. useradd -r -s /sbin/nologin mysql

6. chown mysql:mysql /usr/local/mysql/mysql-files

7. chmod 750 /usr/local/mysql/mysql-files

8. /usr/local/mysql/bin/mysqld --initialize --

user=mysql --basedir=/usr/local/mysql/

9. 查看data目录和初始密码

10. /usr/local/mysql/bin/mysql_ssl_rsa_setup --

datadir=/usr/local/mysql/data

11. 配置文件[mysqld]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

port=3306

log-error=/usr/local/mysql/data/db01-

master.err

log-bin=/usr/local/mysql/data/binlog

server-id=10

character_set_server=utf8mb4

12.cp /usr/local/mysql/suport-files/msyql.server

/etc/init.d/mysql8

13.service mysql8 start

14.sed -i '$aexport

PATH=$PATH:/usr/local/mysql/bin' /etc/profile

15.source /etc/profile

16.mysql -h10.1.1.11 -P3306 -uzhangmin -

pzhangmin

17.create user 'aaaa'%'aaaa' identified by 'sn'

18.grant all on . to 'aaaa';

2. slave

1. rm -rf /etc/my.cnf

2. glibc,下载解压

3. 将解压后的文件移动的指定的/usr/local/mysql4. mkdir /usr/local/mysql/mysql-files

5. useradd -r -s /sbin/nologin mysql

6. chown mysql:mysql /usr/local/mysql/mysql-files

7. chmod 750 /usr/local/mysql/mysql-files

8. 配置文件

[mysqld]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

port=3310

log

error=/usr/local/mysql/data/mysql.log

relay

log=/usr/local/mysql/data/relaylog

server-id=11

character_set_server=utf8mb4

9.cp /usr/local/mysql/suport-files/msyql.server

/etc/init.d/mysql8

3. 同步数据

1. yum -y install rsync

2. service mysql8 stop

3. master=> rm -rf /usrlocal/mysql/data/auto.cnf4. rsync -av /usr/local/mysql/data

root@slaveip:/usr/loca/mysql

5. salve=>service mysql8 start

6. master=>service msyql8 start

4. 设置主数据库

1. 创建远程slave账号

create user 'slave'@'%' identified by

'slave';

grant replication slave on *.* to

'slave'%'%';

flush privileges;

2. flush tables with read lock;

3. show master status\G;

1. 文件名称

2. 文件位置

5. 设置从数据库 help change master to

1. change master to change master to

MASTER_HOST = '10.1.1.11' ,

MASTER_USER = 'slave' ,

MASTER_PASSWORD = 'slave' ,

MASTER_PORT = 3306,

MASTER_LOG_FILE = 'binlog000006' ,

MASTER_LOG_POS = 873,

GET_MASTER_PUBLIC_KEY = 1;

2. 启动slave并且查看状态

start slave;

show slave status\G

3. master => unlock tables;

python代码的读写分离

1.安装pymysql python管理mysql的驱动,或者成为

连接器

pip3 install pymysql

2.python3的命令行界面引入pymysql

import pymysql3.创建两个connenction对象,一个指向master

mysql,一个指向slave msyql

master_conn=pymysql.connect(host="10.1.1.11"

,user="zhangmin",password="zhangmin",port=33

06,database="test");

slave_conn=pymysql.connect(host="10.1.1.12",

user="zhangmin",password="zhangmin",port=331

0,database="test");

4. 获取数据游标 master

master_cursor=master_conn.cursor()

5. 执行查询 master

select_sql="select * from user";

master_cursor.execute(select_sql);

rs=cursor.fetchall()

6. 执行修改 master

update_sql="update user set

password='000' where username='aaaa'"

master_cursor.execute(update_sql)

master_conn.commit()

7. 执行删除 masterdelete_sql="delete from user where

username='aaaa'"

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'))

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

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

相关文章

美摄科技携手蔚来汽车,共创用户出行新体验!

7月27日,蔚来举办了以 AI 为主线的 “NIO IN 2024 蔚来创新科技日”,此次活动展示了蔚来在智能电动汽车领域最新探索与成果,为中国乃至全球的智能汽车行业树立了新的标杆。当晚,央视《主播说联播》以“中国智能车在全球竞争的另一…

MIT6.s081 2021 Lab Multithreading

Uthread: switching between threads 思路 xv6 已经实现了进程的切换机制,本实验要求参考进程的切换,实现一个用户态线程的切换。 要实现线程切换,必然涉及上下文,即寄存器的保存和恢复,那么需要保存哪些寄存器&…

建筑工程项目管理系统-计算机毕设Java|springboot实战项目

🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…

建筑工地安全检查

在现代化的建筑工地中,安全始终是至关重要的核心问题。随着科技的不断进步,凡尔码建筑工地安全系统应运而生,灵活根据施工现场管理要求搭建建筑工地安全系统各个模块,为施工安全带来了全新的保障。 如何注册建筑工地安全系统后台…

自动打电话软件给企业带来了什么?

使用机器人外呼系统肯定都是想要给自己企业带来好处和解决问题的,想让自己的企业有所改变,有更好的发展,所以才会选择使用机器人外呼系统。而它也确实没让大家失望,使用了机器人外呼系统之后确实有许多企业发生了很大改变和进步&a…

鲁棒性目标检测 TOP2 方案分享

关联比赛: ACM MM2021 安全AI挑战者计划第七期:鲁棒性标识检测 ACM MM2021 鲁棒性目标检测比赛 TOP 2 方案 ​ 赛题背景 在商品知识产权领域,知识产权体现为在线商品的设计和品牌。不幸的是,在每一天,存在着非法商户通过一些…

一文学会本地部署可视化应用JSONCrack并配置公网地址实现远程协作

文章目录 前言1. Docker安装JSONCrack2. 安装Cpolar内网穿透工具3. 配置JSON Crack界面公网地址4. 远程访问 JSONCrack 界面5. 固定 JSONCrack公网地址 前言 本文主要介绍如何在Linux环境使用Docker安装数据可视化工具JSONCrack,并结合cpolar内网穿透工具实现团队在…

[Python学习日记-9] Python中的运算符

简介 计算机可以进行的运算有很多种,但可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,而本篇我们暂只介绍算数运算、比较运算、逻辑运算、赋值运算 算数运算 一、运算符描述…

猫头虎分享:Python库 Pillow 的简介、安装、用法详解入门教程

猫头虎分享:Python库 Pillow 的简介、安装、用法详解入门教程 📚 大家好,今天猫头虎要和大家分享一款非常实用的 Python 图像处理库——Pillow。 💡 Pillow 是 Python 中非常流行的图像处理库,基于已经停止维护的 PI…

CE修改器步骤9学习教程

一、打开教程,因为我的电脑是64位的,所以打开这个(x86_64) 二、 跳转到步骤9,并让ce读取其内存 三、使用之前教程学到的知识,找到四个角色的健康值地址(找到即可,不必找基址&#xf…

【STM32 FreeRTOS】Tickless低功耗模式

STM32低功耗模式 STM32 提供了 3 种低功耗模式,以达到不同层次的降低功耗的目的 睡眠模式(内核停止工作,外设仍在运行)停止模式(所有时钟都停止)待机模式( 1.8 V 内核电源关闭) Fr…

Qt-认识Qt(1)

目录 QT是做什么的? 什么是QT GUI开发的各种技术方案 QT支持的平台 Qt的版本和优点 开发工具概述 Qt是做什么的? Qt是用来干嘛的? 什么是Qt Qt是⼀个跨平台的C图形用户界⾯应用程序框架。它为应用程序开发者提供了建立艺术级图形界⾯所…

SSH远程管理/TCP Wrappers访问控制

文章目录 SSH远程管理/TCP Wrappers访问控制SSH(Secure Shell)协议OpenSSH配置信息服务监听选项用户登录控制登录验证方式 常用目录---ssh 远程安全登录---scp 远程安全复制---sftp FTP上下载 配置密钥对验证环境配置ECDSA算法RSA算法RSA算法实操在centos7 IP:20.0.0.51操作一、…

【嵌入式linux开发】智能家居入门5:老版ONENET,多协议接入(QT、微信小程序、HTTP协议、ONENET云平台、旭日x3派)

智能家居入门5(QT、微信小程序、HTTP协议、ONENET云平台、旭日x3派) 前言一、QT界面设计二、云平台产品创建与连接三、下位机端QT代码总览:四、微信小程序端代码总览五、板端测试 前言 前四篇智能家居相关文章都是使用STM32作为主控&#xf…

用时间序列数据画蜡烛图

数据集:时间序列数据集(2024.8.16收集)-修改date资源-CSDN文库 示例一 import pandas as pd import mplfinance as mpf# 读取CSV文件 df pd.read_csv(999999_dcolhchg.csv)# 将日期列加上19000000,然后转换为日期格式 df[date]…

Jmeter系列之作用域、执行顺序

这一节主要解释元件作用域和执行顺序,以及整理之前说过的参数化的方式。 作用域 之前也留下了一个问题。怎么给不同的请求设置不同的Header?后续也透露了可以使用Sample Controller,结合元件的作用域来实现 在Jmeter中,元件的作…

轻松搞定由于找不到msvcr120.dll,无法继续执行代码的问题,总结五种msvcr120.dll丢失修复方法

当您在使用基于Windows的系统运行软件或游戏时,可能会遇到如下错误提示:“由于找不到 msvcr120.dll,无法继续执行代码”。这个问题表明您的系统缺少 Microsoft Visual C Redistributable Packages for Visual Studio 2013 中的一个关键组件&a…

【LeetCode Cookbook(C++ 描述)】一刷二叉树综合(下)

目录 LeetCode #257:Binary Tree Paths 二叉树的所有路径深度优先搜索广度优先搜索 LeetCode #404:Sum of Left Leaves 左叶子之和深度优先搜索广度优先搜索 LeetCode #199:Binary Tree Right Side View 二叉树的右视图广度优先搜索深度优先搜…

单体应用spring Task和分布式调度

Spring Task 1.通过 Spring Task,您可以方便地在 Java 应用程序中实现定时任务,比如每天凌晨进行数据同步、每小时执行一次清理操作等。 2.1 启动类添加EnableScheduling注解(默认情况下,系统会自动启动一个线程) 2.2 在需要定时执行的方…

解决 Swift 6 全局变量不能满足并发安全(concurrency-safe)读写的问题

概述 WWDC 24 终于在 Swift 十岁生日发布了全新的 Swift 6。这不仅意味着 Swift 进入了全新的“大”版本时代,而且 Swift 编译器终于做到了并发代码执行的“绝对安全”。 不过,从 Swift 5 一步迈入“新时代”的小伙伴们可能对新的并发检查有些许“水土不…