高性能web 架构之 mysql 读写分离

时间:2021-10-23 18:35:47

高性能web架构主要保证程序的高可用性和高并发性.


高可用就是 保证程序在99.99%的情况下可以使用,不会因为单机节点故障整体崩溃. 


高并发说到底也是为了高可用服务.保证在大量并发的时候服务不会宕机.


高性能web架构主要体现在以下方面


  1. 数据库读写分离,因为大部分应用都是读多于写,可以配置多台读服务器, (目前mysql不支持多台写服务器,不过可以用其他技术解决) 
  2. 缓存常用数据,把访问量非常多的数据,缓存到分布式缓存中. 如memcached,redis 等常用缓存方案
  3. 单独文件服务器集群,减少对应用服务器压力
  4. 单独图片服务器集群, 减少对应用服务器压力
  5. web服务器和应用服务器集群分离. web 服务器并发要比应用服务器并发高很多. 缓解应用服务器压力.  
  6. 应用服务器集群,做负载均衡,对话共享.应用服务器目前都支持集群,
  7. 服务器反向代理 ,


一般高并发第一个瓶颈就在数据库所以数据库读写分离很实用.

 


 

安装虚拟机

 

安装两个linux 虚拟机 , 我是在macosx 中用vbox虚拟机安装的两个centos6.5  i386 虚拟机

安装的时候硬盘保证在20G以上,否则安装系统报错

VBox安装的时候 如果用mac 会提示CPU不支持

选择设置à系统->处理器->勾选PAE/NX

安装完系统后进入系统

安装之后保证虚拟机联网, 因为安装程序都是用yum 安装的

 

配置虚拟机

 

关闭安全策略

关闭iptables防火墙(或者打开防火墙的1186、3306端口),在Shell中运行以下命令:

 

chkconfig --level 35 iptables off 

 

设置虚拟机与主机网络为桥接网络,使虚拟机加入主机的局域网中

 

设置->网络->桥接模式

 

二  安装MySQL

1.       卸载掉原有mysql

 

// 这个命令就会查看该操作系统上是否已经安装了mysql数据库

[root@xiaoluo ~]# rpm -qa |grep mysql

有的话,我们就通过 rpm -e 命令 或者 rpm -e--nodeps 命令来卸载掉

// 普通删除模式

[root@xiaoluo ~]# rpm -emysql 

// 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除

[root@xiaoluo ~]# rpm -e--nodeps mysql

 

2.       通过yum来进行mysql的安装

[root@xiaoluo ~]# yuminstall -y mysql-server mysql mysql-deve

yum会帮我们选择好安装mysql数据库所需要的软件以及其它附属的一些软件

 高性能web 架构之 mysql 读写分离

 

此时我们可以通过如下命令,查看刚安装好的mysql-server的版本

[root@xiaoluo ~]# rpm -qimysql-server

启动mysql

[root@xiaoluo ~]# servicemysqld restart

设置开机启动

[root@xiaoluo ~]# chkconfigmysqld on

 

3.       mysql数据库的初始化及相关配置

 

这时我们会看到第一次启动mysql服务器以后会提示非常多的信息,目的就是对mysql数据库进行初始化操作,当我们再次重新启动mysql服务时,就不会提示这么多信息了.

修改root密码 ,这个只有安装第一次设置有效

[root@xiaoluo ~]# mysqladmin-u root password 'root'

此时我们就可以通过 mysql -u root -p 命令来登录我们的mysql数据库了

 

三 复制虚拟机

将安装好mysql的centos 复制一份,读写分离至少两台服务器,一个读,一个写.

 

启动两台虚拟机

四 配置读写分离数据库

在两台服务器中执行ifconfig 查看IP

在windows虚拟机中用SQLyog连接两台mysql root用户

(注意新安装的mysql root用户是不允许被非主机连接的,需要在主机上执行一个sql)

首先主机登录MySQl  用 mysql -u root –p 登录mysql

//切换数据库

mysql> use mysql

//修改权限

mysql>GRANT ALLPRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION

//使修改生效

mysql>FLUSH PRIVILEGES

//退出MySQL服务器

mysql>EXIT

 

此时就可以连了

 

 

配置master  server-1

 

首先创建一个测试数据库,并手动把这个库复制到从库mysql中

 

 

 

执行 vi /etc/my.cnf 添加以下配置:

log-bin=mysql-bin #slave基于此log-bin来做replication

server-id=1 #master的标示

执行重启

/etc/init.d/mysqld restart 

 

然后添加专门用于replication的用户:

 

最后查看master状态:

 

SHOW MASTER STATUS;

 

SHOW PROCESSLIST ; 查看用户线程状态

 

高性能web 架构之 mysql 读写分离

 

 

配置从数据库

 

执行 vi /etc/my.cnf 添加以下配置:

 

server-id=2 #slave的标示

read_only = 1

replicate-do-db=jialixin 告诉slave只做vbb数据库的更新

replicate-ignore-db=mysql #不同步的数据库

#replicate-ignore-table=vbb.users#不同步vbb数据库的users表

执行重启

/etc/init.d/mysqld restart 

 

在mysql客户端执行以下sql

 

CHANGE MASTER TO

MASTER_HOST='192.168.4.24',

MASTER_USER='repl-jialixin',

MASTER_PASSWORD='jialixin',

MASTER_LOG_FILE='mysql-bin.000002', --这个值要 在master的机器中查出来 show master status; 中

MASTER_LOG_POS=106;-- 这个值要 在master的机器中查出来 show master status; 中

 

在mysql客户端执行以下sql

START SLAVE; --开始

高性能web 架构之 mysql 读写分离

 

查看从库mysql日志,执行以下命令

cat /var/log/mysqld.log

 

如果出现下边的日志就证明没问题了

 高性能web 架构之 mysql 读写分离

在主库里边修改数据库的信息, 看看从库里边会不会跟着修改, 如果从库没有变化

在mysql客户端执行以下sql

 

SHOW SLAVE STATUS;

查看信息, 看看同步的日志MASTER_LOG_POS 是不是一致,再查看 last_sql_error有没有信息,

 

在mysql客户端执行以下sql

SHOW PROCESSLIST ;-- 查看用户线程状态

 

 

注意:

 

1,配置读写分离的时候一定停止所有对数据库的读写操作

2,开始的之前一定保证读写两个服务器的所有数据库内容相同.

3,可以配置多个从库作为读的数据库

 

以上是简单的读写分离的架构搭建更多复杂的请参考

 

http://blog.csdn.net/hguisu/article/details/7325124

 

 

配置代理读写分离

此次实战中database proxy采用amoeba ,它的相关信息可以查阅官方文档,不在此详述

 

本文使用2.0版本 请下载2.0

 

下载https://sourceforge.net/projects/amoeba/files/

 

直接下载3x https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/3.x/amoeba-mysql-3.0.5-RC-distribution.zip/download

 

直接下载2x https://sourceforge.net/projects/amoeba/files/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.1.0-RC5.tar.gz/download

 

下载后解压

 

 

打开conf/ amoeba.xml配置文件,修改以下位置

这个service是提供给访问数据库的程序使用的.也就是别人连接数据库需要配置的东西

分别为,端口,默认为8066,为了大家习惯,改成3306

用户名:可以随便写

密码:可以随便写

高性能web 架构之 mysql 读写分离

最下边把注释打开,配置server1,server2,这里边对应的是dbServers.xml 配置文件里边的两个数据库server

 

 高性能web 架构之 mysql 读写分离

 

 

打开dbServers.xml,配置 端口,用户名,密码

 

 高性能web 架构之 mysql 读写分离

 

增加一个server, 这里边的name对应上一个配置文件里边的server 读写的配置 .24是写数据库,.25是读库,因为两个库的用户名密码都一样的,所以直接继承上面的server配置的信息就可以了.如果不一样需要单独配置.最下边是连接池配置.

 高性能web 架构之 mysql 读写分离

然后保存,启动

打开cmd 切换到bin目录

amoeba start 启动, 如果配置环境变量了,可以直接启动.否则需要切换到程序目录下.

高性能web 架构之 mysql 读写分离

 

启动成功,下边用程序测试以下. 下边是spring的连接信息, 连接到amoeba

 高性能web 架构之 mysql 读写分离

运行测试

 高性能web 架构之 mysql 读写分离

 

插入成功.

 

高性能web 架构之 mysql 读写分离

 

可以看到两个数据库都已经同步了. 查看数据库日志,写发生在24上,读发生在25 上