MySQL数据库集群的原理与搭建


【1.应用背景】


    在最近做的项目中,因为有一个短时间内很多人访问服务,会频繁访问数据库,看到这里不免有些人会想起数据库集群。我们组长也想到了用数据库集群,于是就带着我们几个研究起来了mysql数据库集群的搭建。因为我们几个的电脑都是windows的系统,所以搭建的是windows下的集群环境。

    当提到大数据,高并发。大家都会想到分布式,集群。那么两者都是用来处理大批量数据操作的,其工作原理是有很大区别的,分布式会缩短单个任务的执行时间来提升工作效率,而集群强调的是提高单位时间内执行操作数的增加来提高效率。更简单的来说,分布式是将步骤分到每台电脑上,不考虑依赖关系。集群方案是指几个任务同时在处理。


MySQL数据库集群的原理与搭建_第1张图片


【2.为什么需要数据库集群】


    当数据量很大的时候,即使服务器在没有任何压力的情况下,某些复杂的查询操作都会非常缓慢,影响了最终用户的体验。通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术(反正就是个啥算法,我是不明白它内部是如何处理这些请求的)。MySQL集群技术在分布式系统中为MySQL数据提供了冗余特性,增强了安全性,使得单个MySQL服务器故障不会对系统产生巨大的负面效应,系统的稳定性得到保障。讲到这里,我想到memcached的应用,介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。缓存的使用也在一定程度上减少了对服务器读操作。

    上午听到一位很厉害的架构师传授经验,他就讲到服务器的资源是很宝贵的,不是所有请求都有必要通过服务器来接收,回复。在资源和效率之间我们需要做一个权衡,那频繁访问需要用到的数据需要存储到缓存中,那服务器缓存是相对安全的。潜在的安全风险 Cookie 可能会被篡改。用户可能会操纵其计算机上的 Cookie,这意味着会对安全性造成潜在风险或者导致依赖于 Cookie 的应用程序失败。另外,虽然 Cookie 只能被将它们发送到客户端的域访问,历史上黑客已经发现从用户计算机上的其他域访问 Cookie 的方法。题外话了,接着说我们搭建集群。


【3.mysql集群原理】


   管理节点,数据节点,sql节点,这三种节点只是在逻辑上的划分,所以它们不一定和物理计算机是一一对应的关系。比如说,管理节点可以也当做sql节点用。


MySQL数据库集群的原理与搭建_第2张图片

  • 管理节点(ndb_mgmd)
   管理节点(也可以称管理服务器)主要负责管理数据节点和SQL节点,还有集群配置文件和集群日志文件。它监控其他节点的工作状态,能够启动、关闭或重启某个节点。其他节点从管理节点检索配置数据,当数据节点有新事件时就把事件信息发送给管理节点并写入集群日志。提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。MGM节点是用命令ndb_mgmd启动的。

  • 数据节点(ndbd)
   数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。没有必要有一个以上的副本。数据节点是用命令ndbd启动的。


  • sql节点(mysqld)

   客户端节点是使用NDB簇存储引擎的传统MySQL服务器。典型情况下,SQL节点是使用命令mysqld –ndbcluster启动的,或将ndbcluster添加到my.cnf后使用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 

MySQL数据库集群的原理与搭建_第3张图片


4.启动数据节点:

   c:\mysql\bin\ndbd.exe --ndb-connectstring=192.168.21.114
MySQL数据库集群的原理与搭建_第4张图片



5.启动sql节点(目前还有问题,但是命令没错)

c:\mysql\bin\mysqld.exe --ndbcluster --ndb-connectstring=192.168.21.114 --console


MySQL数据库集群的原理与搭建_第5张图片



6.查看各个节点信息:

c:\mysql\bin\ndb_mgm

show


到这里所有节点就都启动成功了。可以测试一下,在节点A上面存数据,节点B就可以查到数据。

MySQL数据库集群的原理与搭建_第6张图片



【5.总结】


   1.假如一个数据节点宕机,并不会影响整个集群的运行,任何一个数据节点死掉甚至物理损坏都不用担心,因为每个数据节点保存的数据都是完整的一份数据。

   2.每一个数据库服务器都有一套完整的数据,这样数据节点就可以分配数据请求到各个sql节点上,提高了操作效率。




你可能感兴趣的:(3.ITOO,集群,数据库,mysql,应用)