数据库主从复制,读写分离,负载均衡,分表分库的概念 没用

本文探讨了传统数据库面临的挑战,包括资源利用率不平衡及扩展性限制等问题,并介绍了主从复制、读写分离与负载均衡三种架构优化方案及其相互关系。

谢邀,这是个好问题,而且这个问题好在即使概念非常容易理解,但是这几个不同的概念细节太多太多,
而且理解了概念,自己要用,又需要做很多的调研评估和开发工作。作为在这个领域爬坑多年的人,我这
里就先介绍下概念,再提供几个开源工具和云服务吧。
先来说这些架构解决的问题吧,传统数据库如Mysql(以下工具也会以Mysql为主),存在的问题就是单
机部署,单进程,这样就存在一些问题:
资源利用不灵活,有可能cpu的性能还有富余,但是磁盘已经顶不住读压力或写压力了,有可能磁盘的性
能还有富余,但是cpu的性能已经顶不住了。还有可能cpu和磁盘都很富余,但是写入的数据量太大,直接
撑爆磁盘上限。
资源有最大上限,cpu最多用到比如64核的机型,磁盘最高几百T,再高的话不好意思,没有更屌的机器
了,但是用户的数据和查询是没有上限的。
连接池资源的上限,为何要把连接池单独提出来说,原因就是业务量一大,
容灾类的问题,虽然事务可以保证重启后数据不丢,但是业务线上跑,重启等不起。
而这个问题所提的几个概念,正是对如上传统数据库痛点的解决方法。
主从复制(replication),解决的是容灾类的问题,容灾需要保证数据库切换的实时性和数据的一致性,
一致性的强弱还催生了几种不同的复制模式(asynchronous, semisynchronous, group replication)
读写分离(read write spliting),是一种业务类应用解决读流量单机无法承受的方式,学名叫 scale out
,读写分离类的业务是架设在主从复制的基础上
负载均衡 ( load balance),也是一个非数据库的概念,但是在数据库层面,如果有一个通用的中间层,那
么也适用。
这三者的关系基本可以参考这几幅图:

 


这幅图的load balance做在了业务层,而读写的路由逻辑由业务层在控制。

 

转载于:https://www.cnblogs.com/shan1393/p/9064102.html

MySQL主从复制读写分离(Read-Write Splitting)通过数据库层面的设计可以提高系统的性能和容错性。这里是一个简化的代码和概念概述: 1. **主从复制**: - **在Master(主)服务器上设置**: 在my.cnf配置文件中开启二进制日志(`binlog`)和二进制日志同步(`replicate-do-db`), 还需要创建复制用户: ```ini [mysqld] log-bin=mysql-bin server-id = 1 replicate-do-db = your_database [mysqld-repl] user = 'repl_user' password = 'password' ``` - **启动复制进程**: 使用命令行工具如 `mysqladmin` 启动复制服务。 2. **读写分离**: - **在Slave(从)服务器上配置**: 设置`read_only`为`true`, 并监听特定端口专门用于读操作: ```ini [mysqld] read_only = true port = 3307 ``` - **客户端连接管理**: 使用DNS轮询、第三方软件(如ProxySQL、Galera Cluster)或编程语言(如PHP的mysqli_connect_with_dbconfig)动态选择读取源。 3. **分库分表**: - **设计策略**: 根据业务需求设计数据分片规则,例如按地域、时间戳或用户ID。这通常在应用层面上完成。 - **数据库设计**: 数据库结构可以包含哈希函数或范围索引来对应不同的表或库。 - **代码示例(使用Python的MySQL连接池)**: ```python from pymysql.cursors import DictCursor pool = mysql.connector.pooling.MySQLConnectionPool( pool_size=5, host=['slave1', 'slave2'], # 读库列表 database='your_database', user='repl_user', password='password', cursorclass=DictCursor) def get_conn(): return pool.get_connection() conn = get_conn() cursor = conn.cursor() cursor.execute('SELECT * FROM your_table WHERE id > some_hash_value') # 示例查询 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值