1、主从(Master-Slave):
主从就是把数据库分成主库与从库,然后主库负责写入的操作,从库负责读取数据但是不能写入数据。在安装流程上直接使用mysql-community的版本就可以完成安装。
主从的搭建过程很简单,配置过程我是参考如下网站的:
https://laravel-china.org/topics/3174/mysql-master-slave-replication-simple-configuration-simple-absolutely-can-be-used
2.集群:
MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。
数据更新使用读已提交隔离级别(read-committedisolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)。
无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。
通过多个MySQL服务器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。
上图可以看出,集群主要分为三个部分:
1) SQL节点(SQL node - 下图对应为 mysqld):分布式数据库。包括自身数据和查询中心结点数据
2) 数据节点(Data node - ndbd):集群共享数据(内存中)
3) 管理服务器(Management Server - ndb_mgmd):管理集群 SQL node,Data node
集群数据存储过程:
1) Master执行提交语句时,事务被发送到slave,slave开始准备事务的提交。
2) 每个slave都要准备事务,然后向master发送OK(或ABORT)消息,表明事务已经准备好(或者无法准备该事务)。
3) Master等待所有Slave发送OK或ABORT消息,如果Master收到所有 Slave的OK消息,它就会向所有Slave发送提交消息,告诉Slave提交该事务;如果 Master收到来自任何一个Slave的ABORT消息,它就向所有 Slave发送ABORT消息,告诉Slave去中止事务。
4) 每个Slave等待来自Master的OK或ABORT消息。如果Slave收到提交请求,它们就会提交事务,并向Master发送事务已提交 的确认;如果Slave收到取消请求,它们就会撤销所有改变并释放所占有的资源,从而中止事务,然后向Masterv送事务已中止的确认。
5) Master收到来自所有Slave的确认后,就会报告该事务被提交(或中止),然后继续进行下一个事务处理。
由于同步复制一共需要4次消息传递,故mysql cluster的数据更新速度比单机mysql要慢。所以mysql cluster要求运行在千兆以上的局域网内,节点可以采用双网卡,节点组之间采用直连方式。
概念参考:
http://blog.csdn.net/wutian713/article/details/50682360
先来整理一下最后达到的效果:
目前有192.168.100.239
、192.168.100.192
两台机器,192.168.100.239
作为管理节点,两台机器都作为数据节点和sql节点,最终达到集群的效果,下面给出搭建的过程:
1) 下载mysql-cluster,我下载的版本是mysql-cluster-gpl-7.4.9-winx64.zip
,这里给出官网网所有版本的下载链接:
所有mysql产品的下载链接:
https://downloads.mysql.com/archives/
mysql-cluster下载链接:
https://downloads.mysql.com/archives/cluster/
2) 将下载的mysql集群压缩包解压到管理节点192.168.100.239
的C:\mysql目录下:
3) 在配置管理节点(192.168.100.239
)的计算机上的C:\mysql\bin
目录下建立cluster-logs
和config
两个文件夹。cluster-logs
用来存储日志文件,在config
文件夹中建立my.ini
和config.ini
两个配置文件:
my.ini
[mysql_cluster]
# Options for management node process
config-file=C:/mysql/bin/config/config.ini
config.ini
[ndbd default]
# Options affecting ndbd processes on all data nodes:
NoOfReplicas=2 # Number of replicas
DataDir=C:/mysql/bin/cluster-data # Directory for each data node's data files
# Forward slashes used in directory path,
# rather than backslashes. This is correct;
# see Important note in text
DataMemory=80M # Memory allocated to data storage
IndexMemory=18M # Memory allocated to index storage
# For DataMemory and IndexMemory, we have used the
# default values. Since the "world" database takes up
# only about 500KB, this should be more than enough for
# this example Cluster setup.
[ndb_mgmd]
# Management process options:
HostName=192.168.100.239 # Hostname or IP address of management node
DataDir=C:/mysql/bin/cluster-logs # Directory for management node log files
[ndbd]
# Options for data node "A":
HostName=192.168.100.192 # Hostname or IP address
[ndbd]
# Options for data node "B":
HostName=192.168.100.239 # Hostname or IP address
[mysqld]
# SQL node A options:
HostName=192.168.100.192 # Hostname or IP address
[mysqld]
# SQL node B options:
HostName=192.168.100.239 # Hostname or IP address
[mysqld]
[mysqld]
[mysqld]
[mysqld]
[mysqld]
3) 配置数据节点
在计算机上的C:\Mysql\Bin
目录下建立cluster-data
文件夹,用来存放数据:SQL节点不用任何配置,至此,整个MySQL集群就搭建完成了。
将管理节点192.168.100.239
电脑C:\mysql
文件拷到192.168.100.192
电脑的C盘
4) 启动mysql集群(管理节点→数据节点→sql节点)
a、在管理节点服务器(192.168.100.239
)中启动管理节点
c:\mysql\bin\ndb_mgmd.exe --configdir=c:\mysql\bin\config --config-file=c:\mysql\bin\config\config.ini --ndb-nodeid=1 --reload –initial
这里在启动的时候回抛出一个warning警告,因为配置文件中的管理节点和数据节点sql节点为在同一个IP地址,这是mysql不建议这样的,但是因为机器有限,这点就忽略咯~
b、在192.168.100.239
和192.168.100.192
中分别启动数据节点
c:\mysql\bin\ndbd.exe --ndb-connectstring=192.168.22.238
ps:这里要注意–ndb-connectstring=后面的IP地址是管理节点的地址,并不是本机的IP地址,所以这里的运行命令是一样的
c、启动每个sql节点
c:\mysql\bin\mysqld.exe --ndbcluster --ndb-connectstring=192.168.100.239 --console
ps:这里要注意–ndb-connectstring=后面的IP地址是管理节点的地址,并不是本机的IP地址,所以这里的运行命令是一样的
d、查看每个节点的状态
在cmd命令中运行:c:\mysql\bin\ndb_mgm
,再执行show
命令,可以查看到每个节点的连接状态:
参考网站:
http://blog.csdn.net/chenxiaochan/article/details/50856072
在下一篇博客中我将会在linux环境中搭建mysql集群,并使用nginx做mysql的负载均衡。