高并发的企业架构
在高并发下企业架构主要是由集群支撑的。本文主要是讨论主从复制的数据库集群搭建。
主从复制的数据库集群架构
详解:
数据库的操作主要分为两种,联机事务处理(OLTP):增删改,联机分析处理(OLAP):查,这里主要是将这两种操作用数据库路由器分开,有写服务器集群和读服务器集群。
对于读服务器集群来说,只是读取数据,并不会对数据的一致性造成影响。但是对于写操作来说,在写操作完成之后,必须让所有的服务器同步此操作,因此才有了主从复制的架构。
如图,写操作的服务器为双主服务器,当然也可以为多主服务器。(须知:在整体架构上,写服务器为主服务器群,读服务器为从服务器群,在主服务器群中,又分为主服务器和从服务器)。在一台写服务器写完成操作后,会产生一个二进制日志,之后将二进制日志分发给其他写服务器和性能较好的读服务器,收的日志我们称之为中继日志,这些服务器会根据中继日志来更新数据库中的数据,保持数据的一致性,较好的读服务器收到中继日志后先对自己进行数据更新,之后产生二进制日志再分发给其他的读服务器,这样来保持整个服务器群的数据一致性。
详细配置
说明:这里我们使用两台windows server2008来模拟两台数据库服务器,每台windows server2008上装有一台mysql(免安装版,自己配置集群方便)。
第一步:准备两台windowsserver2008并把免安装版的mysql放在c盘。
第二步:修改配置文件
这里提供了两个.ini简要配置文件(my-master.ini和my-slave.ini),重命名为my.ini后分别放在mysql根目录下,并修改内部的相应配置项。
第三步:在两台服务器上安装并启动mysql服务
命令名字--install 服务名字 --defaults-file="配置文件"
mysqld.exe--install MySQL0930 --defaults-file="my文件的路径"
第四步:进入master服务器,并添加用户
登录
mysql-u root -p
添加用户
mysql>create user jk;
添加用户的权限
mysql>grant replication slave on *.*to jk identified by '密码';
第五步:登入slave服务器,并修改配置
先用root用户登入
再修改:
changemaster to
master_host='192.168.57.128',
master_port=3306,
master_user='cll',
master_password='123456';
最后开启主从复制
startslave;
第六步:验证,在主数据库上创建数据库后,从数据库会也会有相应的改变。
附录
【my-master.ini】[client]
port=3306
default-character-set=utf8
[mysqld]
port=3306
character_set_server=utf8
#character_set_server=utf8 一定要这样写;
basedir=C:\Program Files\MySQL\mysql-5.6.16-win32
#解压目录
datadir=C:\Program Files\MySQL\mysql-5.6.16-win32\data
#解压目录下data目录,必须为data目录
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 这个有问题,在创建完新用户登录时报错
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#主服务器的配置
#开启二进制日志
log-bin=master-bin
#使用二进制日志的索引文件
log-bin-index=master.bin.index
#为服务器添加唯一的编号
server-id=1
【my-slave.ini】
[client]
port=3306
default-character-set=utf8
[mysqld]
port=3306
character_set_server=utf8
#character_set_server=utf8 一定要这样写;
basedir=C:\Program Files\MySQL\mysql-5.6.16-win32
#解压目录
datadir=C:\Program Files\MySQL\mysql-5.6.16-win32\data
#解压目录下data目录,必须为data目录
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 这个有问题,在创建完新用户登录时报错
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
server-id=2
relay-log=slave-relay-log-bin
relay-log-index=slave-relay-log-bin.index