python mysql proxy_最近写的一个mysql读写分离的,python 小工具:angel mysql proxy

mysql 读写分离在面对一定的数据库压力下,的确有一定的帮助,读写分离方面的程序似乎也很多,mysql 官方也有个读写分离产品叫

MySQL Proxy 。 按照我理解,似乎实现基本的读写分离也不是很难。所以我按照自己的想法写了一个。目前在并发600的情况下是成功的。并发超过600后就有收割僵尸进程不完成的情况,导致进程假死状态。这个目前有个解决想法,就是把收割程序独立出来用一个进程来专门收割,这样可以防止,收割程序在并发大阻塞下响应不及时问题。~_~ 只是个想法。。

下载地址:我放phchina.com上了。 CSDN不知道咋传的郁闷

目前流程:

php客户端 --> angel.py -- ---读写分离:读均衡 ---> mysql

angel mysql proxy 在并发模型上选择了 forking 。在均衡读上的算法目前只是随机,因为开发当时遇到个问题就是,如何把子进程使用

mysql 的状态数给保存下来传给主进程,然后主进程按照目前的各mysql 连接数均衡分配客户端读。 那会第一反应就是使用 file 来进行 进程间共享。但存在个锁问题。担心效率受损。 进而想到了 共享内存。不过找不到合适的py库。今天才确定pipe 应该能解决这个问题 ~_~ 目前也只是个想法。。

在收割上,循环收割和信号收割。经过测试最后选择了信号收割,在并发下,似乎收割情况更好点

先看下配置文件,我直接使用了PY文件了。贪图方便

#!/usr/bin/python

# -*- coding:utf-8 -*-

#读mysql

rd = {'host':'127.0.0.1',

'user':'root',

'passwd':'1',

'database':'beihai365'}

#写mysql

wt = {'host':'127.0.0.1',

'user':'root',

'passwd':'1',

'database':'beihai365'}

read_mysql_server = (rd,wt)

write_mysql_server = wt

charset = 'gbk'

error_log = '/var/log/angel.log'

定义日志:默认日志是 angel.log 里面主要记录了

查询mysql 的出错信息等。可以扩展

采集部分:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ELECT * FROM salary' at line 1

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ELECT * FROM salary' at line 1

一看大概就明白了吧, 两台mysql 一台是读,一台是写,不过写的当然我们也可以读,那么等于是 read 两台 write 一台,当然按照配置文件可以放更多的read 服务器,写 mysql 目前我只允许一台,实现多台写也是比较简单的。

目前看这个配置,我只是是使用同一台mysql。。等改天有环境了再真的分离开吧。不过目前我在程序上加了调试,可以看得出,两台mysql轮流服务的效果。

目前查询的语句是这样的:select * from cdb_posts limit 20

目前这个表的数据情况是这样的:

beihai365# mysqlshow -u root -p beihai365 cdb_posts --count

Enter password:

Database: beihai365 Wildcard: cdb_posts

+-----------+----------+------------+

| Tables | Columns | Total Rows |

+-----------+----------+------------+

| cdb_posts | 21 | 11922687 |

+-----------+----------+------------+

1 row in set.

测试我使用了 webbench

1.运行 angel.py ,这个是 读写分离的服务端

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值