运维老司机:LAP+MYSQL+Discuz+Mysql-proxy读写分离部署实战
一、简介MYSQL读写分离的原理其实就是让Master数据库处理事务性增、删除、修改、更新操作(CREATE、INSERT、UPDATE、DELETE),而让Slave数据库处理SELECT操作,MYSQL读写分离前提是基于MYSQL主从复制,这样可以保证在Master上修改数据,Slave同步之后,WEB应用可以读取到Slave端的数据。
实现MYSQL读写分离可以基于第三方插件,也可以通过开发修改代码实现,具体实现的读写分离的常见方式有如下四种:
1)MySQL-Proxy读写分离;
2)Amoeba读写分离;
3)Mycat读写分离;
4)基于程序读写分离(效率很高,实施难度大,开发改代码)
Amoeba是以MySQL为底层数据存储,并对WEB、APP应用提供MySQL协议接口的proxy。它集中地响应WEB应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行,基于此可以实现负载均衡、读写分离、高可用性等需求。
Amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。
Mysql-Proxy是MySQL官方提供的mysql中间件服务,支持无数客户端连接,同时后端可连接若干台Mysql-Server服务器,MYSQL-Proxy自身基于MySQL协议,连接MYSQL-Proxy的客户端无需修改任何设置, 跟正常连接MYSQL Server没有区别,无需修改程序代码。
MySQL Proxy是App应用(客户端)与MYSQL Server之间的一个连接代理,MySQL Proxy负责将APP应用的SQL请求根据转发规则,转发至相应的后端数据库,基于lua脚本,可以实现复杂的连接控制和过滤,从而实现数据读写分离和负载均衡的需求。
Mysql-Proxy允许用户指定Lua脚本对SQL请求进行拦截,对请求进行分析与修改,还允许用户指定Lua脚本对服务器的返回结果进行修改,加入一些结果集或者去除一些结果集,对SQL的请求通常为读请求、写请求,基于Lua脚本,可以实现将SQL读请求转发至后端Slave服务器,将SQL写请求转发至后端Master服务器。
MYSQL-PROXY读写分离架构图,通过架构图可以清晰看到SQL请求整个流向的过程。
http://p3.pstatp.com/large/pgc-image/c439fe99920044b29daf5e12e4fafb9c1
二、实战如下:
实验环境:服务器运行内存均为512M,系统均为Centos6.7最小化安装
LAP:192.168.8.2
mysql-proxy:192.168.8.3
mysql-master:192.168.8.5
mysql-slave:192.168.8.6
1、LAP安装,详细查阅centos用yum搭建LAMP教程
# yum -y install httpd httpd-devel php php-devel php-mysql unzip
#mysql-master
# yum -y install mysql mysql-devel mysql-server
#mysql-slave
# yum -y install mysql mysql-devel mysql-server
2、mysql主从配置,详细查阅MYSQL主从部署与排错方法分析
mysql-master端
编辑vim /etc/my.cnf,在段添加以下内容
# vim /etc/my.cnf
server-id=1(自定义)
log-bin=mysql(自定义)
http://p3.pstatp.com/large/pgc-image/bf0a417ef08648c4997b613c1626a07e2
保存退出,启动Mysql
# service mysqld start
关闭防火墙、selinux(临时关闭)
# service iptables stop
# setenforce 0
添加开机自启动
# chkconfig –add mysqld
# chkconfig mysqld on
mysql-slave端
编辑vim /etc/my.cnf,在段添加以下内容
# vim /etc/my.cnf
server-id=2(自定义)
http://p3.pstatp.com/large/pgc-image/265a4527454548098d01deab06764a613
保存退出,启动Mysql
# service mysqld start
关闭防火墙、selinux(临时关闭)
# service iptables stop
# setenforce 0
添加开机自启动
# chkconfig –add mysqld
# chkconfig mysqld on
mysql-master端
# mysql
进入mysql终端命令行,执行以下操作命令
mysql> grant replication slave on *.* to tongbu@'%' identified by 'tongbu';
mysql> flush privileges;
mysql> show master status;
http://p9.pstatp.com/large/pgc-image/3a6efb756e204f9bbd47cc78a87959624
mysql-slave端
# mysql
进入mysql终端命令行,执行以下操作命令
mysql> change master to master_host='192.168.8.5′,master_user='tongbu',master_password='tongbu',master_log_file='mysql.000004′,master_log_pos=408;
mysql> start slave;
mysql> show slave status\G
http://p1.pstatp.com/large/pgc-image/a3a28183ffdf48158373892f67a7089f5
master端,创建discuz论坛用户并授权,执行以下操作命令
mysql> create database discuz charset=utf8;
mysql> grant all on discuz.* to discuz@'%' identified by 'discuz';
mysql> flush privileges;
http://p1.pstatp.com/large/pgc-image/84a969c4b60e42448e4b7081a9b675616
slave端查看是否有刚刚创建discuz库跟授权,有就代表主从已经同步
http://p1.pstatp.com/large/pgc-image/181f37b630404008a8c4c8f039edb0aa7
mysql主从部署完成~~~
3、开始部署discuz论坛
LAP端:
1)下载discuz论坛包(官方最新版本)
# wget Discuz_X3.4_SC_UTF8.zip
2)解压论坛包
# unzip Discuz_X3.4_SC_UTF8.zip
3)拷贝discuz论坛数据到发布目录
# cp -a upload/* /var/www/html/
4)授权其他用户写权限(论坛需要)
# chmod -R o+w /var/www/html/
5)关闭防火墙、selinux(临时关闭)
# service iptables stop
# setenforce 0
6)启动Apache
# service httpd restart
7)添加开机自启动
# chkconfig httpd on
配置discuz论坛
8)访问LAP(192.168.8.2),如下图,点击我同意
http://p1.pstatp.com/large/pgc-image/c2d3e4709c9d4206a84b5554d2b22b0b8
9)点击下一步,如下图
http://p1.pstatp.com/large/pgc-image/32215590e3e94f82b82caa516698347d9
10)点击下一步,如下图
http://p1.pstatp.com/large/pgc-image/17fc1c682b4747cdb416f0635a7c7c1210
11)填写数据库信息(前面已经授权),管理员信息,如下图
http://p3.pstatp.com/large/pgc-image/6579606e34d44cd39ecc44c9fae2ec9d11
http://p1.pstatp.com/large/pgc-image/a60106be9e56457ea8e432bd9842fc1312
http://p9.pstatp.com/large/pgc-image/dcd09d3e148242c8b0e49032f6b864fc13
discuz论坛搭建完成
4、mysql-proxy读写分离部署,详细查看Mysql-Proxy读写分离部署教程分享
#关闭防火墙、selinux(临时关闭)
# service iptables stop
# setenforce 0
1)下载mysql-proxy软件包
# yum -y install wget
# wget mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
#解压mysql-proxy压缩包
# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
#重命名为mysql-proxy
# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
2)创建软连接、mysql-proxy用户
# ln -s /usr/local/mysql-proxy/bin/ /usr/bin
# useradd -s /sbin/nologin mysql-proxy
3)修改读写分离配置文件
# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
http://p3.pstatp.com/large/pgc-image/c27ef984aa554772bf5b5ab60749f96314
mysql-proxy会检测客户端连接,当连接没有超过min_idle_connections预设值时, 不会进行读写分离, 即查询操作会发生到Master上
4)启动mysql-proxy中间件
# /usr/local/mysql-proxy/bin/mysql-proxy --daemon --log-level=debug --user=mysql-proxy --keepalive --log-file=/var/log/mysql-proxy.log --plugins="proxy" --proxy-backend-addresses="192.168.8.5:3306" --proxy-read-only-backend-addresses="192.168.8.6:3306" --proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua" --plugins="admin" --admin-username="admin" --admin-password="admin" --admin-lua-script="/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua"
5)查看端口、进程
# netstat -lntup | grep mysql-proxy
# ps -ef | grep mysql-proxy
http://p1.pstatp.com/large/pgc-image/1e0c5e8d299c4d438592220faec8243615
6)基于4041端口MySQL-Proxy查看读写分离状态,登录4041管理端口
# mysql -h192.168.8.3 -uadmin -padmin -P4041 -e "select * from backends;"
http://p1.pstatp.com/large/pgc-image/9266bee66ba4487a85c97db555fa7b0816
7)如果状态不是up,出现unknown,则需要登陆到4040端口(这个端口的账户密码为数据库授权的账户密码)多刷新几次"show databases;"
# mysql -h192.168.8.3 -udiscuz -pdiscuz -P4040 -e "show databases;"
http://p1.pstatp.com/large/pgc-image/6e51cb728f8c4fea918b6a7cb0687ae217
# mysql -h192.168.8.3 -uadmin -padmin -P4041 -e "select * from backends;"
http://p3.pstatp.com/large/pgc-image/c726a4340a92489db1354e5133bd9bc718
8)discuz论坛实现读写分离,需要改一下数据库端口的配置
LAP端
# vvim /var/www/html/config/config_global.php
修改dbhost为192.168.60.96:4040(mysql-proxy-IP:4040)
http://p1.pstatp.com/large/pgc-image/c0e96e25f52747ba8eac10f94d289a0619
保存退出,访问论坛~~
http://p1.pstatp.com/large/pgc-image/67f106bf97c549ab8323b3bed342767720
读写分离成功~~~~
分享完成,谢谢支持,多评多转
现做IDC售前业务,司有“独立服务器机房托管“,”华为云”等服务器托管运维业务,感兴趣的可私信。
对Linux感兴趣的小伙伴私信“Linux资料”,免费获取视频文档资料。
页:
[1]