设为首页 收藏本站
查看: 524|回复: 0

[经验分享] Mysql-proxy 实现读写分离

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-15 08:58:18 | 显示全部楼层 |阅读模式
   背景:如下图所示,主要通过mysql-proxy实现对两台mysql服务器的读写分离操作,两台mysql提供的测试数据库内容一致(这里主要通过手工同步两台mysql测试数据库的内容,没有使用mysql主从,主要是方便测试)
wKiom1X2dpWg4It8AADsrqrbI4E828.jpg
一、环境软件
1、 安装pkg-config
[iyunv@web1 srv]yum install pkgconfig
2、安装glib2
[iyunv@web1 src]yum install glib2
3、安装 libevent
[iyunv@web1 srv]tar zxvf libevent-1.4.14b-stable.tar.gz
[iyunv@web1 libevent-2.0.22-stable]./configure --prefix=/usr/local/libevent
[iyunv@web1 libevent-2.0.22-stable]make
[iyunv@web1 libevent-2.0.22-stable]make install
4、安装mysql-devel(只需安装mysql开发包)
[iyunv@web1 src]yum install mysql-devel  
5、LUA
yum install -y readline-devel ncurses-devel
[iyunv@web1 src]#tar -zxvf lua-5.3.1.tar.gz
[iyunv@web1 lua-5.3.1]# vim Makefile
INSTALL_TOP= /usr/local/lua
[iyunv@web1 lua-5.3.1]make linux
[iyunv@web1 lua-5.3.1]make install
如果你的服务器是64位的,这时要调整一下Makefile:vi src/Makefile,在CFLAGS里加上-fPIC,否则会出错
6、设置mysql-proxy运行的环境变量
Vim /etc/profile
export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
export CPPFLAGS="-I/usr/local/libevent/include"
export CFLAGS="-I/usr/local/libevent/include"
export PKG_CONFIG_PATH=/usr/lib/pkgconfig  #rpm -ql pkgconfig查看其安装路径
然后执行 source /etc/profile
二、Mysql-proxy安装
Wget ftp://mirror.switch.ch/mirror/my ... -proxy-0.8.4.tar.gz
[iyunv@web1 mysql-proxy-0.8.4]#
./configure --prefix=/usr/local/mysql-proxy --with-lua
[iyunv@web1 mysql-proxy-0.8.4]make
[iyunv@web1 mysql-proxy-0.8.4]make install

设置mysql-proxy环境变量
Vim /etc/profile
export PATH=$PATH:/usr/local/mysql-proxy/bin
Source /etc/profile

查看安装信息
[iyunv@web1 mysql-proxy-0.8.4]# mysql-proxy -V
mysql-proxy 0.8.4
  chassis: 0.8.4
  glib2: 2.28.8
  libevent: 2.0.22-stable
  LUA: Lua 5.1.4
    package.path: /usr/local/mysql-proxy/lib/mysql-proxy/lua/?.lua
    package.cpath: /usr/local/mysql-proxy/lib/mysql-proxy/lua/?.so
-- modules
  proxy: 0.8.4
三、mysql-proxy读写分离测试
1、读,写数据库信息一致
wKioL1X2eRWTZqBoAAEyfbVHvRo865.jpg

2、在192.168.1.121和192.168.1.124对mysql-proxy授权
mysql> grant all on jiang.* to 'proxyuser'@'192.168.1.120' identified by 'jiang';

3、配置mysql-proxy,实现读写分离(后台启动该程序&)

mysql-proxy --proxy-read-only-backend-addresses=192.168.1.124:3306
--proxy-backend-addresses=192.168.1.121:3306
--proxy-lua-script=/usr/local/mysql-proxy/lib/rw-splitting.lua" &

[iyunv@web1 lib]# netstat -an | grep 4040     //确保已经启动了mysql-proxy
tcp        0      0 0.0.0.0:4040                0.0.0.0:*                   LISTEN

vim /usr/local/mysql-proxy/lib/rw-splitting.lua
proxy.global.config.rwsplit = {
   min_idle_connections = 1,      
   max_idle_connections = 2,        
   is_debug = false
}

说明:这是因为mysql-proxy会检测客户端连接, 当连接没有超过min_idle_connections预设值时, 不会进行读写分离, 即查询操作会发生到Master上(可通过show processlist查询连接情况)

参数说明:

--proxy-read-only-backend-addresses=192.168.1.124:3306 \ //定义后端只读从服务器地址
--proxy-backend-addresses=192.168.1.121:3306 \ //定义后端主服务器地址
--proxy-lua-script=/usr/local/mysql-proxy/lib/rw-splitting.lua" \ //定义lua读写分离脚本路径

4、远程连接mysql-proxy

[iyunv@web1 lib]# mysql -uproxyuser -pjiang -h192.168.1.120 -P4040

wKiom1X2duyzjwSRAABL8u77IQE473.jpg

5、插入数据,分析读写情况
mysql> INSERT INTO `jiang`.`personal_info` (`pi_id` ,`pi_name` ,`pi_tel` ,`pi_qq` ,`pi_email`)
VALUES ('2', 'mysqlproxy', '111111111111', '22222222', 'test@mysqlproxy.com');

5.1 此次检查192.168.1.121和192.168.1.124的数据库jiang的情况。
192.168.1.121:如下数据
wKioL1X2eSqg1_TmAADoOL4D0rY081.jpg
192.168.1.124:如下数据
wKioL1X2eTTSAcgtAAC8tu3N76I426.jpg

说明:在192.168.1.120 mysql-proxy上,写的数据在192.168.1.121,而192.168.1.124没有写入数据。

接下来,为了实现分离状态的查看,需要重新打开客户端重新连接mysql-proxy,如下所示

[iyunv@mysql ~]# mysql -uproxyuser -pjiang -h192.168.1.120 -P4040

如下所示,表示读取的数据库,那么该数据中并没有新插入的数据,其原因在于此时读取的数据在192.168.1.124上,而根据测试环境,192.168.1.124为只读数据库,所以插入的数据并没有写入到192.168.1.124上。
wKiom1X2dw_TkvIdAADayOzphpk094.jpg



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-113750-1-1.html 上篇帖子: 使用cron定时调用mysql库函数过程 下篇帖子: mysql数据库主从不同步的解决方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表