mysql集群.pdf

avatar
作者
筋斗云
阅读量:8

该【mysql集群 】是由【zkusha】上传分享,文档一共【18】页,该文档可以免费在线阅读,需要了解更多关于【mysql集群 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..19负载均衡、高可用的MySQL集群本章我们来介绍MySQL数据库服务器的集群。网上基于Debian或者Ubuntu的MySQL数据库集群教程,几乎都是下载MySQL源代码,自行编译、安装;这样做的坏处前面已经介绍过,就是安全更新很麻烦。所以,在条件允许的情况下,要尽量使用Ubuntu官方的软件包。Ubuntu带的MySQL服务器软件包,已经包含了MySQL集群所需的3个组件,所以我们根本不需要去从源代码编译安装MySQL。这3个组件分别是:?MySQL?MySQLNDB?MySQLNDBManagementMySQL使用NDB来实现集群。NDB是一种“内存中”的存储引擎,可用性高、数据一致性好。。通过该架构图,你就很容易理解MySQL集群是怎么工作的了。数据保存在存储节点(DataNodes)中,也就是图中的ndbd节点。

SQL语句在SQL节点上执行,也就是图中的mysqld节点。集群的管理者是右下角的NDB管理服务器,也就是ndb_mgmd节点。关于MySQL集群的3个主要组成部分,我们再来介绍一下。(1)负载均衡节点(mysql)?负载均衡节点(也叫SQL节点)是用来访问集群数据的。相关的软件,就是我们平时所使用的MySQL数据库软件;也就是由/etc/。(2)存储节点(ndbd)?数据存储节点是用来保存集群数据的,其服务的启停是由脚本/etc/-ndb来管理的。:..最佳方案(3)管理节点(ndbd-mgm)?管理节点是用来管理集群内其他节点的,比如提供配置信息、启动或停止节点、执行备份等。其服务的启停是由/etc/-ndb-mgm脚本来管理的。由于这类节点是管理者,所以管理节点必须首先启动,然后其他两类节点再启动。,我们将使用5台Ubuntu服务器,它们的作用和IP配置如下:?mysql-mgm.:,管理节点?mysql-lb1.:,负载均衡节点1?mysql-lb2.:,负载均衡节点2?mysql-data1.:,数据节点1?mysql-data2.:,数据节点2此外,我们需要有一个虚拟IP地址,作为整个集群对外的一个IP地址;各种应用程序都通过该IP地址来访问MySQL。

请你先设置好以上服务器的hostname和IP地址。你可以在5台物理服务器上做实验,也可以在虚拟机里面做。下面我们分别来安装、配置这些服务器。(MGM)。在软件包mysql-server-,不仅携带292:..第19章负载均衡、高可用的MySQL集群了集群服务器管理程序(ndb_mgmd),还携带了集群管理客户端(ndb_mgm)。客户端ndb_mgm可以用来显示集群的状态,让你了解集群的工作情况。本节我们来安装、配置mysql-mgm.()。-,安装MySQL服务器:$sudoapt-getupdateinstallmysql-server安装时,安装程序会要求你设置MySQL的root口令。请设置好,并记住该口令。,该文件路径为/etc/mysql/f:$sudonano/etc/mysql/ff输入如下内容:[NDBDDEFAULT]NoOfReplicas=2[MYSQLDDEFAULT][NDB_MGMDDEFAULT][TCPDEFAULT][NDB_MGMD]#管理节点HostName=#本机(管理节点)的IP地址[NDBD]#存储节点1HostName==/var/lib/mysql-clusterBackupDataDir=/var/lib/mysql-cluster/backup[NDBD]#存储节点2HostName==/var/lib/mysql-clusterBackupDataDir=/var/lib/mysql-cluster/backup#有几个存储节点,就写几行[MYSQLD][MYSQLD][MYSQLD]文件保存后,即可启动MySQL的mgm服务了:$sudo/etc/-ndb-mgmstart以后,如果要停止MySQL集群,只需要停止该mgm服务即可。

293:..(NDB)的安装及配置本节我们来安装、配置mysql--data2.。-data1和mysql-data2两台服务器上,分别安装MySQL服务器:$sudoapt-getupdateinstallmysql-server安装时,安装程序会要求你设置MySQL的root口令。请设置好,并记住该口令。程序安装完成后,请先停止MySQL服务:$sudo/etc/.f在mysql-data1和mysql-data2两台服务器上,要执行相同的操作。首先,备份原有的/etc/mysql/f:$sudomv/etc/mysql/f/etc/mysql/f-back然后,f:$sudonano/etc/mysql/f内容如下:[client]socket=/var/run/mysqld/=3306[mysqld]ndbclusterndb-connectstring=#管理节点的IP地址default-storage-engine=NDBCLUSTER[mysql_cluster]ndb-connectstring=#管理节点的IP地址文件保存后,就可以启动ndb服务了:$sudo/etc/-ndbstart-initialndb/etc/-ndbstart/etc/-ndbstart-initial294:..第19章负载均衡、高可用的MySQL集群?ndb?如果你在启动ndb服务时遇到下列错误:*StartingMySQLNDBDataNodendbderror=23502009-02-1522:20:55[ndbd]INFO--Errorhandlerrestartingsystem2009-02-1522:20:55[ndbd]INFO--pleted-exitingsphase=0exit=-1则说明ndb服务已经启动了。

使用下面的命令可以查看ndb服务是否已经启动:$psaux|grepndb|grep-vgrep现在,可以启动mysql服务了:$sudo/etc/,存储的集群已经做好了(负载均衡还没有做)。现在,我们来进行一些必要的测试。,我们回到管理节点(mysql-mgm.)上。在该服务器上,执行下面的命令:$ndb_mgm命令执行后,就会进入MGM的客户端界面,并显示mgm提示符:--NDBCluster--ManagementClient--ndb_mgm>在该提示符下,输入show命令,来查看当前连接状态:ndb_mgm>show在正常情况下,应该显示如下内容:ConnectedtoManagementServerat:localhost:1186ClusterConfiguration---------------------[ndbd(NDB)]2node(s)id=******@(Version:,Nodegroup:0)id=******@(Version:,Nodegroup:0,Master)[ndb_mgmd(MGM)]1node(s)id=******@(Version:)295:..最佳方案[mysqld(API)]2node(s)id=******@(Version:)id=******@(Version:)从上述内容我们可以看到,。

配置成功!执行quit或者exit命令,退出MGM客户端:ndb_mgm>,让我们来看看集群在数据存储方面是否正常。我们将分别在两个存储节点上进行数据操作。,我们在节点mysql-,创建一个数据库,并插入一行数据。$mysql-uroot-p输入密码后,就进入了MySQL客户端的命令行界面。在该界面中,输入如下命令:mysql>CREATEDATABASEclustertest;QueryOK,1rowaffected()mysql>USEclustertest;Databasechangedmysql>CREATETABLEtesttable(CountINT)ENGINE=NDBCLUSTER;QueryOK,0rowsaffected()mysql>INSERTINTOtesttable()VALUES(1);QueryOK,1rowaffected()mysql>SELECT*FROMtesttable;+-------+|Count|+-------+|1|+-------+1rowinset()上述命令创建了一个叫做clustertest的数据库,在该数据库中创建了一个名为testtable的表,该表的类型为NDBCLUSTER,也就是采用NDBCLUSTER作为数据库引擎。

该表中有一个字段叫做Count。我们还向该表插入了一条数据,其Count字段的值为1。现在,我们再到mysql-,创建一个同名的数据库。我们仅需要296:..第19章负载均衡、高可用的MySQL集群创建数据库,然后,该数据库的所有数据都会自动复制过来。$mysql-uroot-p输入密码后,就进入了MySQL客户端的命令行界面。在该界面中,输入如下命令:mysql>CREATEDATABASEclustertest;QueryOK,1rowaffected()mysql>USEclustertest;pletionoftableandcolumnnamesYoucanturnoffthisfeaturetogetaquickerstartupwith-ADatabasechangedmysql>SELECT*FROMtesttable;+-------+|Count|+-------+|1|+-------+1rowinset()看到了吧,数据已经从mysql--。现在,我们在mysql-,再向数据库插入一条数据:mysql>INSERTINTOtesttable()VALUES(2);QueryOK,1rowaffected()mysql>quitBye数据插入后,我们回到mysql-,看看数据是否同步过去了:mysql>SELECT*FROMtesttable;+-------+|Count|+-------+|2||1|+-------+2rowsinset()mysql>quitBye很好!在mysql-。

也就是说,两个NDB节点,始终会保持互相同步,保持相同的数据。297:..,会怎么样呢?另一个节点上面的数据能够查询得到吗?现在我们来测试一下。首先,我们把mysql-,来看看在另外一个节点mysql-。在mysql-:$sudo/etc/-ndbstop然后,到管理节点mysql-:$ndb_mgm--NDBCluster--ManagementClient--ndb_mgm>showConnectedtoManagementServerat:localhost:1186ClusterConfiguration---------------------[ndbd(NDB)]2node(s)id=2(notconnected,)id=******@(Version:,Nodegroup:0,Master)[ndb_mgmd(MGM)]1node(s)id=******@(Version:)[mysqld(API)]2node(s)id=******@(Version:)id=******@(Version:)可以看到,(mysql-data1.)确实已经断开连接了。输入quit或者exit命令退出MGM界面:ndb_mgm>quit现在,我们在mysql-:$mysql-uroot-p输入密码后,就进入了MySQL客户端的命令行界面。

在该界面中,输入如下命令:mysql>USEclustertest;pletionoftableandcolumnnamesYoucanturnoffthisfeaturetogetaquickerstartupwith-ADatabasechangedmysql>SELECT*FROMtesttable;+-------+|Count|298:..第19章负载均衡、高可用的MySQL集群+-------+|2||1|+-------+2rowinset()很好,在mysql-,在mysql-。我们再向mysql-:mysql>INSERTINTOtesttable()VALUES(3);QueryOK,1rowaffected()mysql>SELECT*FROMtesttable;+-------+|Count|+-------+|1||2||3|+-------+3rowsinset()mysql>quitBye现在,我们重新启动mysql-data1.,看看刚才插入的数据能否查到:$sudo/etc/-ndbstart$mysql-uroot-p输入密码后,就进入了MySQL客户端的命令行界面。

在该界面中,输入如下命令:mysql>USEclustertest;pletionoftableandcolumnnamesYoucanturnoffthisfeaturetogetaquickerstartupwith-ADatabasechangedmysql>SELECT*FROMtesttable;+-------+|Count|+-------+|2||3||1|+-------+3rowsinset()mysql>quitBye非常好!这说明,如果有NDB节点发生故障,故障期间在其他NDB节点上新插入的299:..最佳方案数据,在故障节点恢复后,仍然可以成功地进行数据同步。,“集群”本身已经安装好了。不过,这个集群还没有一个统一的对外IP地址;所以,现在要使用该集群的话,你只能配置一部分程序使用mysql-,另外一部分程序则使用mysql-data2.。这样做的坏处是,两台数据库服务器的工作量很难做到“平衡”。而且,最大的问题是:万一某台数据库服务器发生故障,会导致所有使用它的程序停止工作。解决该问题的方法,就是在数据库服务器的前面,放置“负载均衡”服务器。负载均衡服务器使用一个虚拟IP地址连接两台数据库服务器,所有应用程序都使用该虚拟IP地址作为数据库服务器地址。

这样一来,即便某台数据库服务器宕机,也不会影响应用程序,只要有一台数据库服务器能正常工作,整个系统就不会停止运转。不过,新的问题又来了。万一负载均衡服务器本身发生故障怎么办?那样岂不是整个系统就瘫痪了。是的,为了防止发生这种问题,我们需要配置两个负载均衡节点(它们分别是mysql--lb2.);它们以“主/从”模式配合工作,平时只有“主服务器”在工作,“从服务器”在待命;一旦“主服务器”宕机,“从服务器”马上进入工作状态。要实现负载均衡,所使用的主要软件有heartbeat和ldirectord,下面我们来分别介绍。+,我们要放置一台服务器专门来做负载调度的任务(为了称呼简单和便于理解,我们将这样的负载调度服务器简称为“导演”),用来把访问需求分发给两台Apache服务器。这个“导演”的任务,正是由ldirectord来完成的。“ldirectord”(LinuxDirectorDaemon)可以对服务和物理服务器进行监测,被广泛地用于http和https等服务。它是专门为LVS(LinuxVirtualServer)监控而编写的,不仅能从heartbeat的配置文件/etc/(IPVirtulServer)路由表配置的信息,还可以方便地被heartbeat管理(比如由heartbeat来启动和停止ldirectord服务)。

“高可用性”,所以要考虑到“导演”突然罢工的情形;因此我们要安排两个导演,也就是要有两个调度服务器节点。这两个节点的地位不同,其中一个是主节点,另外一个是辅节点(可以看成是一个“主导演”和一个“副导演”)。这两个节点正是用heartbeat来互相监测对方的。heartbeat可以通过以太网(或者串行接口)来监控节点的“健康”状况。如果有多个heartbeat节点(),我们既可以使用串300:..第19章负载均衡、高可用的MySQL集群行线又可以使用以太网连接它们,这样将大大提高系统的可用性。heartbeat的核心功能有两个部分:心跳监测和资源接管。通过心跳监测,节点之间相互“打招呼”(发送报文)来告诉对方自己当前的状态;如果在指定的时间内没“听”到对方“打招呼”(没收到报文),那么就认为对方罢工了,这时heartbeat会自动启动资源接管模块,运行相关的shell脚本来接管运行在对方主机上的资源或者服务。,我们必须让mysql--(IPVirtualServer)。通过IPVS,我们可以在Linux内核级别上实现传输层的负载均衡。在mysql--,执行下面的命令:$sudomodprobeip_vs_dh$sudomodprobeip_vs_ftp$sudomodprobeip_vs$sudomodprobeip_vs_lblc$sudomodprobeip_vs_lblcr$sudomodprobeip_vs_lc$sudomodprobeip_vs_nq$sudomodprobeip_vs_rr$sudomodprobeip_vs_sed$sudomodprobeip_vs_sh$sudomodprobeip_vs_wlc$sudomodprobeip_vs_wrr然后,我们还需要修改/etc/modules,添加这些模块,以便系统在重新启动时能够自动加载它们。

在mysql--,执行下面的命令:$sudonano/etc/modules在文件末尾,添加下列内容:ip_vs_dhip_vs_ftpip_vsip_vs_lblcip_vs_lblcrip_vs_lcip_vs_nqip_vs_rrip_vs_sedip_vs_ship_vs_wlcip_vs_wrr此外,我们还需要启用内核的包转发功能。在mysql--,执行下面的命令:$sudonano/etc/:..:=1文件保存后,运行命令使之立即生效:$sudosysctl-、ldirectord等软件下面我们来安装heartbeat、ldirectord,以及要用到的其他软件。在mysql--,执行下面的命令:$sudoapt-getinstallheartbeatldirectord$sudoapt-getinstalllibdbi-perllibdbd-mysql-perllibmysqlclient15-。首先,我们需要调整两个负载均衡节点上的/etc/hosts文件,将主机名写进去:$sudonano/etc/----lb2好,现在来配置heartbeat。我们需要为heartbeat创建3个配置文件(在两个节点mysql--)。

第一个文件是/etc/。我们来创建它:$sudonano/etc/.-lb1nodemysql-lb2respawnhacluster/usr/lib/heartbeat/ipfailapiauthipfailgid=haclientuid=haclusternodemysql-lb1mysql-lb2uname-n第二个文件是/etc/,用来设置虚拟IP地址。我们来创建它:$suodnano/etc/-lb1302:..第19章负载均衡、高可用的MySQL集群ldirectord::::masterIPaddr2::.,既可以设置为mysql-lb1,也可以设置为mysql-lb2;但是两台服务器的设置要相同。第三个文件是/etc/,用于认证。我们来创建它:$sudonano/etc/-lb1和mysql-lb2之间认证的密码,请你设置为自己的字符串。为了安全,我们要设置该文件的权限,使root以外的用户无法访问:$sudochmod600/etc/.5配置ldirectordldirectord是用来实现两台数据库服务器的负载均衡的。以下操作,在mysql--。首先,我们来定义/etc/:$sudonano/etc/#GlobalDirectiveschecktimeout=10checkinterval=2autoreload=nologfile="local0"quiescent=yesvirtual=:3306service=mysqlreal=:3306gatereal=:3306gatechecktype=negotiatelogin="ldirector"passwd="ldirectorpassword"database="ldirectordb"request="SELECT*FROMconnectioncheck"scheduler=wrr在上面配置中,,端口为3306(MySQL的默认端口);,端口都是3306。

还定义了一个用户ldirector,密码为ldirectorpassword,一个数据库ldirectordb,一个SQL语句。ldirectord将用这些信息来检测两台数据库服务器是否正常。稍后,我们会创建该数据库和用户。接下来,我们禁止ldirectord服务自动启动(我们用heartbeat来控制ldirectord服务);303:..最佳方案然后修改heartbeat服务的启动顺序,让其推后启动,以等待其他服务先行启动:$sudoupdate--fldirectordremove$sudoupdate--fheartbeatremove$sudoupdate-,我们来创建ldirectordb数据库,并把该数据库的权限赋予ldirector用户。ldirector将使用该数据库来检查两个数据库节点的运行状态。在mysql-,创建该数据库:$mysql-uroot-p在MySQL命令行界面中,输入如下命令:mysql>GRANTALLONldirectordb.*TO'ldirector'@'%'IDENTIFIEDBY'ldirectorpassword';mysql>FLUSHPRIVILEGES;mysql>CREATEDATABASEldirectordb;mysql>USEldirectordb;mysql>CREATETABLEconnectioncheck(StatusINT)ENGINE=NDBCLUSTER;mysql>INSERTINTOconnectioncheck()VALUES(1);mysql>quit然后,在mysql-,数据会自动从mysql-data1上复制过来:$mysql-uroot-p在MySQL命令行界面中,输入如下命令:mysql>GRANTALLONldirectordb.*TO'ldirector'@'%'IDENTIFIEDBY'ldirectorpassw

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!