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

高性能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 读写分离_第1张图片

 

此时我们可以通过如下命令,查看刚安装好的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 读写分离_第2张图片

 

 

配置从数据库

 

执行 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 读写分离_第3张图片

 

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

cat /var/log/mysqld.log

 

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

 高性能web 架构之 mysql 读写分离_第4张图片

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

在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 读写分离_第5张图片

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

 

 高性能web 架构之 mysql 读写分离_第6张图片

 

 

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

 

 高性能web 架构之 mysql 读写分离_第7张图片

 

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

 高性能web 架构之 mysql 读写分离_第8张图片

然后保存,启动

打开cmd 切换到bin目录

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

高性能web 架构之 mysql 读写分离_第9张图片

 

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

 高性能web 架构之 mysql 读写分离_第10张图片

运行测试

 高性能web 架构之 mysql 读写分离_第11张图片

 

插入成功.

 

高性能web 架构之 mysql 读写分离_第12张图片

 

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

你可能感兴趣的:(高性能web 架构之 mysql 读写分离)