读写分离简介:
一:工作环境
大型网站为了软件大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库连接操作,数据库必然会崩溃,数据丢失的话,后果更是 不堪设想。这时候,我们会考虑如何减少数据库的联接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术, 如:memcached,如果资 金丰厚的话,必然会想到假设服务器群,来分担主数据库的压力。那么通过MySQL主从配置,实现读写分离,减轻数据库压力。
二:基本原理
让master来响应事务性操作,让slave来响应select非事务性操作,然后再采用主从复制来把master上的事务性操作同步到slave数据库中。
环境:
selinux 和iptables均为disabled的状态
rhel6.5
server2:172.25.254.2 master
server3:172.25.254.3 slave
server4:172.25.254.4 proxy
配置过程:
server4安装mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz -C /usr/local/ ##解压到/usr/local这个目录中
(本次实验是移动了)
cd /usr/local/
ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy ##做软连接
ll ##查看软连接
mkdir /usr/local/mysql-proxy/log ##建立日志目录
mkdir /usr/local/mysql-proxy/etc ##建立i配置文件的存放目录
cd mysql-proxy/
vim etc/mysql-proxy.conf #改写配置文件
***
[mysql-proxy]
user=root
deamon=true
keepalive=true
log-level=info
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid ##pid文件的存放目录
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log ##日志存放目录
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua ##lua脚本的存放目录
proxy-address=172.25.254.4:3306 ##调度器的ip地址
proxy-backend-addresses=172.25.254.2:3306 ##只写的(master的ip地址)
proxy-read-only-backend-addresses=172.25.254.3:3306 ##只读的(slave的ip地址)
plugins=proxy
***
chmod 660 etc/mysql-proxy.conf ##给之前配置文件改为660权限
vim share/doc/mysql-proxy/rw-splitting.lua ##编辑脚本文件
更改lua脚本的内容如下,40行改为1,41行改为2
bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/etc/mysql-proxy.conf ##打开proxy调度器
netstat -antlp ##查看3306端口是否开启
三台虚拟机安装losf监控工具,进行监控,查看3306端口哪个终端占用
yum install losf -y ##安装losf工具
lsof -i:3306 ##查看监控情况
在master上设置授权远程登陆数据库的用户(server2)
选择真机进行登陆
此时查看master(server2)上,端口3306监控
远程查看信息
远程写入
因为之前lua最大的连接数为2,所以在外部客户端连接数超过2时,就会发生读写分离
多几个数据库连接,在master中,查看监控
当server3关闭slave时
在真机连接中,增加数据并查看,会发现读不到,因为slave关闭掉了,实现了读写分离
在server3中打开slave
此时,真机中重新进入库,会发现数据
此时查看server3上的lsof监控
整个过程中,server4(proxy)中会出现如下