【1.应用背景】
在最近做的项目中,因为有一个短时间内很多人访问服务,会频繁访问数据库,看到这里不免有些人会想起数据库集群。我们组长也想到了用数据库集群,于是就带着我们几个研究起来了mysql数据库集群的搭建。因为我们几个的电脑都是windows的系统,所以搭建的是windows下的集群环境。
当提到大数据,高并发。大家都会想到分布式,集群。那么两者都是用来处理大批量数据操作的,其工作原理是有很大区别的,分布式会缩短单个任务的执行时间来提升工作效率,而集群强调的是提高单位时间内执行操作数的增加来提高效率。更简单的来说,分布式是将步骤分到每台电脑上,不考虑依赖关系。集群方案是指几个任务同时在处理。
【2.为什么需要数据库集群】
当数据量很大的时候,即使服务器在没有任何压力的情况下,某些复杂的查询操作都会非常缓慢,影响了最终用户的体验。通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术(反正就是个啥算法,我是不明白它内部是如何处理这些请求的)。MySQL集群技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障。讲到这里,我想到memcached的应用,介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。缓存的使用也在一定程度上减少了对服务器读操作。
上午听到一位很厉害的架构师传授经验,他就讲到服务器的资源是很宝贵的,不是所有请求都有必要通过服务器来接收,回复。在资源和效率之间我们需要做一个权衡,那频繁访问需要用到的数据需要存储到缓存中,那服务器缓存是相对安全的。潜在的安全风险 Cookie 可能会被篡改。用户可能会操纵其计算机上的 Cookie,这意味着会对安全性造成潜在风险或者导致依赖于 Cookie 的应用程序失败。另外,虽然 Cookie 只能被将它们发送到客户端的域访问,历史上黑客已经发现从用户计算机上的其他域访问 Cookie 的方法。题外话了,接着说我们搭建集群。
【3.mysql集群原理】
管理节点,数据节点,sql节点,这三种节点只是在逻辑上的划分,所以它们不一定和物理计算机是一一对应的关系。比如说,管理节点可以也当做sql节点用。
- 管理节点(ndb_mgmd)
- 数据节点(ndbd)
- sql节点(mysqld)
【4.如何搭建】
三步骤:管理节点——>数据节点——>sql节点
1.节点信息: 管理节点:192.168.21.114 数据节点A:192.168.21.83 数据节点B:192.168.21.88 SQL节点A:192.168.21.83 SQL节点B:192.168.21.88
2.将安装包解压到C:盘,起名mysql文件夹,在bin目录下创建三个文件夹
---config---cluster-logs---cluster-data
在config下填写配置文件信息:
- 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.21.114 # 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.21.83 # Hostname or IP address
[ndbd]
# Options for data node "B":
HostName=192.168.21.88 # Hostname or IP address
[mysqld]
# SQL node A options:
HostName=192.168.21.83 # Hostname or IP address
[mysqld]
# SQL node B options:
HostName=192.168.21.88 # Hostname or IP address
3.启动管理节点:
c:\mysql\bin\ndb_mgmd.exe --configdir=c:\mysql\bin\config --config-file=c:\mysql\bin\config\config.ini --ndb-nodeid=1 --reload –initial
4.启动数据节点:
c:
\mysql\bin\ndbd.exe --ndb-connectstring=192.168.21.114
5.启动sql节点(目前还有问题,但是命令没错)
c:\mysql\bin\mysqld.exe --ndbcluster --ndb-connectstring=192.168.21.114 --console
6.查看各个节点信息:
c:\mysql\bin\ndb_mgm
show
【5.总结】
1.假如一个数据节点宕机,并不会影响整个集群的运行,任何一个数据节点死掉甚至物理损坏都不用担心,因为每个数据节点保存的数据都是完整的一份数据。
2.每一个数据库服务器都有一套完整的数据,这样数据节点就可以分配数据请求到各个sql节点上,提高了操作效率。