Linux部署LAMP+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请求整个流向的过程。

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

实验环境:

服务器运行内存均为512M,系统均为CentOS 6.9系统

LAP:192.168.8.2

mysql-proxy:192.168.8.3

mysql-master:192.168.8.5

mysql-slave:192.168.8.6

LAP安装

[root@localhost ~]# yum -y install httpd httpd-devel php php-devel php-mysql unzip 

#mysql-master端

[root@localhost ~]# yum -y install mysql mysql-devel mysql-server

#mysql-slave端

[root@localhost ~]# yum -y install mysql mysql-devel mysql-server

MySQL主从配置

mysql-master端

1、编辑vim /etc/my.cnf,在[mysqld]段添加以下内容

[root@localhost ~]# vim /etc/my.cnf

server-id=1(可自行定义)
log-bin=mysql(可自行定义)

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

#保存退出

2、启动MYSQL服务

[root@localhost ~]# service mysqld start

3、关闭防火墙、selinux(临时关闭)

[root@localhost ~]# service iptables stop

[root@localhost ~]# setenforce 0

4、添加开机自启动

[root@localhost ~]# chkconfig –add mysqld

[root@localhost ~]# chkconfig mysqld on

mysql-slave端

1、编辑vim /etc/my.cnf,在[mysqld]段添加以下内容

[root@localhost ~]# vim /etc/my.cnf

server-id=2(可自行定义)

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

#保存退出

2、启动MySQL服务

[root@localhost ~]# service mysqld start

3、关闭防火墙、selinux(临时关闭)

[root@localhost ~]# service iptables stop

[root@localhost ~]# setenforce 0

4、添加开机自启动

[root@localhost ~]# chkconfig –add mysqld

[root@localhost ~]# chkconfig mysqld on

mysql-master端

1、进入mysql终端命令行,执行以下操作命令

[root@localhost ~]# mysql

mysql> grant replication slave on *.* to tongbu@’%’ identified by ‘tongbu’;

mysql> flush privileges;

mysql> show master status;

Linux部署LAMP+Discuz+Mysql-Proxy读写分离-图片1

mysql-slave端

1、进入mysql终端命令行,执行以下操作命令

[root@localhost ~]# 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

master端,创建discuz论坛用户并授权,执行以下操作命令

mysql> create database discuz charset=utf8;

mysql> grant all on discuz.* to discuz@’%’ identified by ‘discuz’;

mysql> flush privileges;

Linux部署LAMP+Discuz+Mysql-Proxy读写分离-图片2

slave端查看是否有刚刚创建discuz库跟授权,有就代表主从已经同步

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

至此,MySQL主从部署完成。

LAP端:

1)下载discuz论坛包(官方最新版本)

[root@localhost ~]# wget -c http://mirrors.yangxingzhen.com/discuz/Discuz_X3.4_SC_UTF8.zip

2)解压论坛包

[root@localhost ~]# unzip Discuz_X3.4_SC_UTF8.zip

3)拷贝discuz论坛数据到发布目录

[root@localhost ~]# cp -a upload/* /var/www/html/

4)授权其他用户写权限(论坛需要)

[root@localhost ~]# chmod -R o+w /var/www/html/

5)关闭防火墙、selinux(临时关闭)

[root@localhost ~]# service iptables stop

[root@localhost ~]# setenforce 0

6)启动Apache

[root@localhost ~]# service httpd restart

7)添加开机自启动

[root@localhost ~]# chkconfig httpd on

配置Discuz论坛

8)访问LAP(192.168.8.2),如下图,点击我同意

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

9)点击下一步,如下图

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

10)点击下一步,如下图

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

11)填写数据库信息(前面已经授权),管理员信息,如下图

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

discuz论坛搭建完成~~~

mysql-proxy读写分离部署

#关闭防火墙、selinux(临时关闭)

[root@localhost ~]# service iptables stop

[root@localhost ~]# setenforce 0

1)下载mysql-proxy软件包

[root@localhost ~]# yum -y install wget

[root@localhost ~]# wget -c http://mirrors.yangxingzhen.com/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

#解压mysql-proxy压缩包

[root@localhost ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz

#重命名为mysql-proxy

[root@localhost ~]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy
2)创建软连接、mysql-proxy用户

[root@localhost ~]# ln -s /usr/local/mysql-proxy/bin/ /usr/bin

[root@localhost ~]# useradd -s /sbin/nologin mysql-proxy

3)修改读写分离配置文件

[root@localhost ~]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.luaLinux部署LAMP+Discuz+Mysql-Proxy读写分离mysql-proxy会检测客户端连接,当连接没有超过min_idle_connections预设值时, 不会进行读写分离, 即查询操作会发生到Master上

4)启动mysql-proxy中间件

[root@localhost ~]# /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)查看端口、进程

[root@localhost ~]# netstat -lntup | grep mysql-proxy

[root@localhost ~]# ps -ef | grep mysql-proxy

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

6)基于4041端口MySQL-Proxy查看读写分离状态,登录4041管理端口

[root@localhost ~]# mysql -h192.168.8.3 -uadmin -padmin -P4041 -e “select * from backends;”

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

7)如果状态不是up,出现unknown,则需要登陆到4040端口(这个端口的账户密码为数据库授权的账户密码)多刷新几次”show databases;”

[root@localhost ~]# mysql -h192.168.8.3 -udiscuz -pdiscuz -P4040 -e “show databases;”

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

[root@localhost ~]# mysql -h192.168.8.3 -uadmin -padmin -P4041 -e “select * from backends;”

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

8)discuz论坛实现读写分离,需要改一下数据库端口的配置

LAP端

[root@localhost ~]# vim /var/www/html/config/config_global.php

修改dbhost为192.168.60.96:4040(mysql-proxy-IP:4040)

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

保存退出,访问论坛~~

Linux部署LAMP+Discuz+Mysql-Proxy读写分离

读写分离成功~~~~

原创文章,作者:admin,如若转载,请注明出处:https://hostingchat.cn/604.html

(0)
admin的头像admin
上一篇 2017年12月14日 上午8:42
下一篇 2017年12月14日 上午8:44

相关推荐

  • Linux查看进程内存占用的6种方法汇总

    CPU和内存是机器性能好坏的关键部件,内存大了就能运行更多的程序,但是程序运行多了就会出现资源消耗竞争的关系,有时候系统出现负载过高的情况下,我们如何去判断是那个程序导致的呢?这就…

    2025年7月28日
    000
  • CentOS 6.x-7.x系统升级内核

    此篇文章主要介绍为CentOS 6.x-7.x系列升级内核,参考 elrepo(官网)提供的内核源来升级内核,有需要的朋友可以参考下 CentOS 6.x升级内核 1)查看内核版本…

    2017年12月16日
    000
  • Linux流量监控工具iftop

    在类Unix系统中可以使用top查看系统资源、进程、内存占用等信息。查看网络状态可以使用netstat、nmap等工具。若要查看实时的网络流量,监控TCP/IP连接等,则可以使用i…

    2018年11月12日
    000
  • Linux系统配置本地离线安装源的详细教程

    目的 当环境没有互联网的情况下,需要安装某个软件或相关依赖包,但是没有互联网环境,没办法从互联网直接下载安装,因此我们采用配置离线本地安装源来解决这样的问题,centos&…

    2025年9月8日
    000
  • 如何在 Linux 下快速找到被删除的文件

    日常运维过程中,我们经常需要处理磁盘空间问题,当接到告警后,第一时间会去找那些大文件,一般比如 Centos,可能大文件就是 /var/log/messages。 但有的时候,会出…

    2024年9月5日
    000
  • Linux的/etc/fstab文件详解

    一、/etc/fstab文件的作用 /etc/fstab是用来存放文件系统的静态信息的文件。位于/etc/目录下,可以用命令less /etc/fstab来查看,如果要修改的话,则…

    2022年8月23日
    000
  • Linux部署minio的详细步骤

    Linux部署minio详细步骤 最近项目上需要用到文件上传和文件下载,想到之前项目用到了minio,于是决定使用它作为我们的文件服务器,为什么选用minio呢,主要的优点就是我之…

    2025年8月14日
    000
  • Maven命令打包war包及常用基本命令

    一、打包Maven项目 先把命令行切换到Maven项目的根目录,比如:/data/springcloud/eureka,然后执行命令:mvn clean package [root…

    2020年7月29日
    000
  • CentOS 7.4禁止root用户登录并添加sudo权限管理

    系统环境:CentOS 7.4 服务器IP:192.168.8.20 目的:不能用root用户直接登录,使用普通用户管理服务器,然后用sudo提权进行操作。 1、创建管理用户,设置…

    2019年6月30日
    000
  • CentOS 6与CentOS 7区别

    一、CentOS 6与CentOS 7区别 CentOS6默认采用Sysvinit风格,Sysvinit就是system V风格的init系统,Sysvinit用术语runleve…

    2017年12月14日
    000

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注