仓酷云 发表于 2015-1-16 20:12:16

公布设置高可用性的MySQL服务器负载平衡聚集

有的时候,一些缺失的功能可以通过别的办法来实现,例如,在MySQL4.1以前,你可以通过使用join方法来替代子查询的功能。在MySQL5.0中,大多数关系型数据库所要求的功能已经都具备。这篇论坛文章(赛迪网手艺社区)次要先容了设置一个高可用性的MySQL服务器负载平衡聚集的详细历程,具体内容请参考下文:<Pstyle="TEXT-INDENT:2em">本文将告知你怎样设置一个三个节点的MySQL5数据库服务器聚集:两个存储节点和一个<Pstyle="TEXT-INDENT:2em">办理节点。这个聚集是由用供应“heartbeat心跳”(用来反省别的一个节点是不是举动)和<Pstyle="TEXT-INDENT:2em">“ldirectord”(将哀求分发到MySQL聚集的节点)的UltraMonkey安装包的两个节点构成的<Pstyle="TEXT-INDENT:2em">一个高可用性负载平衡器。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">本文我们的每一个节点利用DebianSargelinux体系。别的Linux刊行版本的安装大概一点点<Pstyle="TEXT-INDENT:2em">区分。MySQL的版本我们利用5.0.19。假如你不想利用MySQL5,你也能够利用MySQL4.1,尽<Pstyle="TEXT-INDENT:2em">管我还没有测试过。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">本文是一篇理论使用引导;它没有触及太多的实际。关于聚集的实际你能够在网上找到良多。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">一服务器<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">我利用上面的Debian服务器,它们都在统一个网段(本比方:192.168.0.x):<Pstyle="TEXT-INDENT:2em">sql1.test.com:192.168.0.101MySQL聚集节点1<Pstyle="TEXT-INDENT:2em">sql2.test.com:192.168.0.102MySQL聚集节点2<Pstyle="TEXT-INDENT:2em">loadb1.test.com:192.168.0.103负载平衡1/MySQL聚集办理服务器<Pstyle="TEXT-INDENT:2em">loadb2.test.com:192.168.0.104负载平衡2<Pstyle="TEXT-INDENT:2em">别的我们必要一个假造ip地点:192.168.0.105。它会布置给这个MySQL聚集的负载平衡,以便于<Pstyle="TEXT-INDENT:2em">使用程序经由过程一致独自的IP地点来会见聚集。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">只管我们想在MySQL聚集中利用两个节点,可是我们仍旧必要第三个节点,MySQL聚集办理服务器<Pstyle="TEXT-INDENT:2em">,次要的一个缘故原由是:假如个中一个MySQL聚集节点坏了,而MySQL聚集办理服务器没有运转,那<Pstyle="TEXT-INDENT:2em">么两个聚集节点上的数据将会纷歧致(“splitbrain”)。我们必要它来设置MySQL聚集.<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">因而我们的安装一样平常必要五台呆板:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">2个MySQL聚集节点+1个聚集办理服务器+2个负载平衡=5<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">由于聚集办理服务器没有利用几资本,体系将会空着甚么都不做,以是我们能够把我们的第一<Pstyle="TEXT-INDENT:2em">个负载平衡和它一同放在统一台呆板上,如许能够勤俭我们一台服务器,以是最好我们只必要四台<Pstyle="TEXT-INDENT:2em">呆板。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">二设置MySQL聚集办理服务器<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">起首我们要下载MySQL5.0.19,并安装聚集办理服务器(ndb_mgmd)和聚集办理客户端(ndb_mgm-它<Pstyle="TEXT-INDENT:2em">能够用来监控聚集的运转情形).上面的步骤是在loadb1.test.com(192.168.0.103)长进行的:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mkdir/usr/src/mysql-mgm<Pstyle="TEXT-INDENT:2em">cd/usr/src/mysql-mgm<Pstyle="TEXT-INDENT:2em">wgethttp://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.19-linux-i686-<Pstyle="TEXT-INDENT:2em">glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/<Pstyle="TEXT-INDENT:2em">tarxvfzmysql-max-5.0.19-linux-i686-glibc23.tar.gz<Pstyle="TEXT-INDENT:2em">cdmysql-max-5.0.19-linux-i686-glibc23<Pstyle="TEXT-INDENT:2em">mvbin/ndb_mgm/usr/bin<Pstyle="TEXT-INDENT:2em">mvbin/ndb_mgmd/usr/bin<Pstyle="TEXT-INDENT:2em">chmod755/usr/bin/ndb_mg*<Pstyle="TEXT-INDENT:2em">cd/usr/src<Pstyle="TEXT-INDENT:2em">rm-rf/usr/src/mysql-mgm<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">下一步,我们必需创立聚集的设置文件,/var/lib/mysql-cluster/config.ini:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mkdir/var/lib/mysql-cluster<Pstyle="TEXT-INDENT:2em">cd/var/lib/mysql-cluster<Pstyle="TEXT-INDENT:2em">viconfig.ini<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">―――-<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">NoOfReplicas=2<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">#Sectionfortheclustermanagementnode<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">#IPaddressofthemanagementnode(thissystem)<Pstyle="TEXT-INDENT:2em">HostName=192.168.0.103<Pstyle="TEXT-INDENT:2em">#Sectionforthestoragenodes<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">#IPaddressofthefirststoragenode<Pstyle="TEXT-INDENT:2em">HostName=192.168.0.101<Pstyle="TEXT-INDENT:2em">DataDir=/var/lib/mysql-cluster<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">#IPaddressofthesecondstoragenode<Pstyle="TEXT-INDENT:2em">HostName=192.168.0.102<Pstyle="TEXT-INDENT:2em">DataDir=/var/lib/mysql-cluster<Pstyle="TEXT-INDENT:2em">#oneperstoragenode<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">―――-实践使用中请将文件中的IP地点换成你响应的IP。

<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">然后我们启动聚集办理服务器:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndb_mgmd-f/var/lib/mysql-cluster/config.ini<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">我们应当也必要在服务器启动时可以主动启动办理服务器,以是我们创立了一个十分复杂的初始化<Pstyle="TEXT-INDENT:2em">剧本和响应的启动毗连:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">echo‘ndb_mgmd-f/var/lib/mysql-cluster/config.ini’>/etc/init.d/ndb_mgmd<Pstyle="TEXT-INDENT:2em">chmod755/etc/init.d/ndb_mgmd<Pstyle="TEXT-INDENT:2em">update-rc.dndb_mgmddefaults<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">三设置MySQL聚集节点(存储节点)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今我们将分离在sql1.test.com和sql2.test.com上安装mysql-max-5.0.19:<Pstyle="TEXT-INDENT:2em">sql1.example.com/sql2.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">groupaddmysql<Pstyle="TEXT-INDENT:2em">useradd-gmysqlmysql<Pstyle="TEXT-INDENT:2em">cd/usr/local/<Pstyle="TEXT-INDENT:2em">wgethttp://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-max-5.0.19-linux-i686-<Pstyle="TEXT-INDENT:2em">glibc23.tar.gz/from/http://www.mirrorservice.org/sites/ftp.mysql.com/<Pstyle="TEXT-INDENT:2em">tarxvfzmysql-max-5.0.19-linux-i686-glibc23.tar.gz<Pstyle="TEXT-INDENT:2em">ln-smysql-max-5.0.19-linux-i686-glibc23mysql<Pstyle="TEXT-INDENT:2em">cdmysql<Pstyle="TEXT-INDENT:2em">scripts/mysql_install_dbCuser=mysql<Pstyle="TEXT-INDENT:2em">chown-Rroot:mysql.<Pstyle="TEXT-INDENT:2em">chown-Rmysqldata<Pstyle="TEXT-INDENT:2em">cpsupport-files/mysql.server/etc/init.d/<Pstyle="TEXT-INDENT:2em">chmod755/etc/init.d/mysql.server<Pstyle="TEXT-INDENT:2em">update-rc.dmysql.serverdefaults<Pstyle="TEXT-INDENT:2em">cd/usr/local/mysql/bin<Pstyle="TEXT-INDENT:2em">mv*/usr/bin<Pstyle="TEXT-INDENT:2em">cd../<Pstyle="TEXT-INDENT:2em">rm-fr/usr/local/mysql/bin<Pstyle="TEXT-INDENT:2em">ln-s/usr/bin/usr/local/mysql/bin<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">然后我们在每一个节点上创立MySQL设置文件/etc/my.cnf:<Pstyle="TEXT-INDENT:2em">vi/etc/my.cnf<Pstyle="TEXT-INDENT:2em">C<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndbcluster<Pstyle="TEXT-INDENT:2em">#IPaddressoftheclustermanagementnode<Pstyle="TEXT-INDENT:2em">ndb-connectstring=192.168.0.103<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">#IPaddressoftheclustermanagementnode<Pstyle="TEXT-INDENT:2em">ndb-connectstring=192.168.0.103<Pstyle="TEXT-INDENT:2em">C<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">确认你在聚集办理服务器中输出的是准确的IP地点。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">下一步我们分离在每一个聚集节点上创立数据目次和启动MySQL服务器:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql1.test.com/sql2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mkdir/var/lib/mysql-cluster<Pstyle="TEXT-INDENT:2em">cd/var/lib/mysql-cluster<Pstyle="TEXT-INDENT:2em">ndbdCinitial<Pstyle="TEXT-INDENT:2em">/etc/init.d/mysql.serverstart<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">(请记着:我们只是在第一次启动MySQL时或loadb1.test.com下面的<Pstyle="TEXT-INDENT:2em">/var/lib/mysql-cluster/config.ini产生改动时,才利用ndbdCinitial)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今,是时分给MySQLroot帐号设置暗码了:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql1.test.com/sql2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysqladmin-urootpassWordyourrootsqlpassword<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">我们必要在服务器启动时,启动聚集节点,以是我们创立一个ndbd初始化剧本和响应的<Pstyle="TEXT-INDENT:2em">体系启动毗连:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql1.test.com/sql2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">echo‘ndbd’>/etc/init.d/ndbd<Pstyle="TEXT-INDENT:2em">chmod755/etc/init.d/ndbd<Pstyle="TEXT-INDENT:2em">update-rc.dndbddefaults<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">四测试MySQL聚集<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">我们的MySQL聚集设置事情已完成,如今是测试它的工夫了。在聚集办理服务器<Pstyle="TEXT-INDENT:2em">(loadb1.test.com)上,运转聚集办理客户端ndb_mgm来反省聚集节点是不是毗连:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndb_mgm<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">你将会看到这些:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">CNDBCluster―ManagementClientC<Pstyle="TEXT-INDENT:2em">ndb_mgm><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">在命令行输出show;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">show;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">输入的信息应当是如许的:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndb_mgm>show;<Pstyle="TEXT-INDENT:2em">ConnectedtoManagementServerat:localhost:1186<Pstyle="TEXT-INDENT:2em">ClusterConfiguration<Pstyle="TEXT-INDENT:2em">―――――――<Pstyle="TEXT-INDENT:2em">2node(s)<Pstyle="TEXT-INDENT:2em">id=2@192.168.0.101(Version:5.0.19,Nodegroup:0,Master)<Pstyle="TEXT-INDENT:2em">id=3@192.168.0.102(Version:5.0.19,Nodegroup:0)<Pstyle="TEXT-INDENT:2em">1node(s)<Pstyle="TEXT-INDENT:2em">id=1@192.168.0.103(Version:5.0.19)<Pstyle="TEXT-INDENT:2em">2node(s)<Pstyle="TEXT-INDENT:2em">id=4@192.168.0.101(Version:5.0.19)<Pstyle="TEXT-INDENT:2em">id=5@192.168.0.102(Version:5.0.19)<Pstyle="TEXT-INDENT:2em">ndb_mgm><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">假如你看到你的节点都已毗连上了。那末统统都很顺遂!<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">输出<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">quit;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">加入ndb_mgm客户端把持台。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今我们在sql1.test.com节点上创立一个测试数据库,并创立一个测试表,<Pstyle="TEXT-INDENT:2em">填进一些测试数据:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql-uroot-p<Pstyle="TEXT-INDENT:2em">CREATEDATABASEmysqlclustertest;<Pstyle="TEXT-INDENT:2em">USEmysqlclustertest;<Pstyle="TEXT-INDENT:2em">CREATETABLEtesttable(iINT)ENGINE=NDBCLUSTER;<Pstyle="TEXT-INDENT:2em">INSERTINTOtesttable()VALUES(1);<Pstyle="TEXT-INDENT:2em">SELECT*FROMtesttable;<Pstyle="TEXT-INDENT:2em">quit;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">(看看下面这个CREATE语句:我们想聚集起来的一切数据库的表,必需利用ENGINE=NDBCLUSTER!<Pstyle="TEXT-INDENT:2em">假如你利用别的的ENGINE,那末聚集将不会事情!)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">SELECT出的了局应当是:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql>SELECT*FROMtesttable;<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">|i|<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">|1|<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">1rowinset(0.03sec)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今我们在sql2.test.com节点上创立不异的数据库(是,我们仍旧要创立它,可是在testtable创立以后<Pstyle="TEXT-INDENT:2em">数据将会被复制到sql2.test.com,由于testtable是利用ENGINE=NDBCLUSTER):<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql-uroot-p<Pstyle="TEXT-INDENT:2em">CREATEDATABASEmysqlclustertest;<Pstyle="TEXT-INDENT:2em">USEmysqlclustertest;<Pstyle="TEXT-INDENT:2em">SELECT*FROMtesttable;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">SELECT出的了局应当是和下面的sql1.test.com的了局不异:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql>SELECT*FROMtesttable;<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">|i|<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">|1|<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">1rowinset(0.04sec)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">我们看到数据已从sql1.test.com节点复制到sql2.example.com节点了。如今我们<Pstyle="TEXT-INDENT:2em">向testtable中拔出别的一行:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">INSERTINTOtesttable()VALUES(2);<Pstyle="TEXT-INDENT:2em">quit;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今让我们回到sql1.example.com节点上,反省是不是可以瞥见新拔出的那一行:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql1.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql-uroot-p<Pstyle="TEXT-INDENT:2em">USEmysqlclustertest;<Pstyle="TEXT-INDENT:2em">SELECT*FROMtesttable;quit;

<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">你应当看到像如许的输入:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql>SELECT*FROMtesttable;<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">|i|<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">|1|<Pstyle="TEXT-INDENT:2em">|2|<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">2rowsinset(0.05sec)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">以是每一个聚集节点都有着不异的数据!<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今让我们看看假如我们中断节点1(sql1.example.com):运转<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql1.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">killallndbd<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">并反省<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">psaux|grepndbd|grep-ivgrep<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">看看一切的ndbd历程已停止了。假如你仍旧瞥见ndbd历程,再运转<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">killallndbd<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">直到一切的ndbd历程都停止。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今让在我们的办理服务器上,反省聚集的形态(loadb1.example.com):<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndb_mgm<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">在ndb_mgm把持台上输出<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">show;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">你应当看到这些:<Pstyle="TEXT-INDENT:2em">ndb_mgm>show;<Pstyle="TEXT-INDENT:2em">ConnectedtoManagementServerat:localhost:1186<Pstyle="TEXT-INDENT:2em">ClusterConfiguration<Pstyle="TEXT-INDENT:2em">―――――――<Pstyle="TEXT-INDENT:2em">2node(s)<Pstyle="TEXT-INDENT:2em">id=2(notconnected,acceptingconnectfrom192.168.0.101)<Pstyle="TEXT-INDENT:2em">id=3@192.168.0.102(Version:5.0.19,Nodegroup:0,Master)<Pstyle="TEXT-INDENT:2em">1node(s)<Pstyle="TEXT-INDENT:2em">id=1@192.168.0.103(Version:5.0.19)<Pstyle="TEXT-INDENT:2em">2node(s)<Pstyle="TEXT-INDENT:2em">id=4@192.168.0.101(Version:5.0.19)<Pstyle="TEXT-INDENT:2em">id=5@192.168.0.102(Version:5.0.19)<Pstyle="TEXT-INDENT:2em">ndb_mgm><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">你瞥见,sql1.example.com节点没有毗连上了。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">输出:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">quit;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">加入ndb_mgm把持台。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">让我们反省sql2.example.com节点:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql2.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql-uroot-p<Pstyle="TEXT-INDENT:2em">USEmysqlclustertest;<Pstyle="TEXT-INDENT:2em">SELECT*FROMtesttable;<Pstyle="TEXT-INDENT:2em">quit;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">SELECT查询出的了局应当仍然是:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql>SELECT*FROMtesttable;<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">|i|<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">|1|<Pstyle="TEXT-INDENT:2em">|2|<Pstyle="TEXT-INDENT:2em">+――+<Pstyle="TEXT-INDENT:2em">2rowsinset(0.17sec)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">Ok,一切的测试都一般,如今让我们再次启动sql1.test.com节点:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql1.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndbd<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">五怎样从头启动聚集<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今让我们假想你因为修正了loadb1.test.com节点上的/var/lib/mysql-cluster/config.ini<Pstyle="TEXT-INDENT:2em">大概别的缘故原由,必要从头启动MySQL聚集。为了如许做,你要利用loadb1.example.com节点上的<Pstyle="TEXT-INDENT:2em">ndb_mgm聚集办理客户端:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndb_mgm<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">在ndb_mgm把持台上,你输出<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">shutdown;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">你将看到像如许的信息:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndb_mgm>shutdown;<Pstyle="TEXT-INDENT:2em">Node3:Clustershutdowninitiated<Pstyle="TEXT-INDENT:2em">Node2:Nodeshutdowncompleted.<Pstyle="TEXT-INDENT:2em">2NDBClusternode(s)haveshutdown.<Pstyle="TEXT-INDENT:2em">NDBClustermanagementservershutdown.<Pstyle="TEXT-INDENT:2em">ndb_mgm><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">这意味着聚集节点sql1.test.com和sql2.test.com,已聚集办理服务器都已封闭。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">运转<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">quit;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">加入ndb_mgm把持台。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">为启动聚集办理服务器,在loadb1.test.com上如许做:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndb_mgmd-f/var/lib/mysql-cluster/config.ini<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">并在sql1.test.com和sql2.test.com上运转:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql1.example.com/sql2.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndbd<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">大概,你刚修正过loadb1.test.com上的/var/lib/mysql-cluster/config.ini文件:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndbdCinitial<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">在这以后,你能够在loadb1.test.com上反省看看聚集是不是已重启:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ndb_mgm<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">在ndb_mgm把持台,输出<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">show;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">来检察以后聚集的形态。一切节点重启后大概必要一点点工夫来呈报已毗连上。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">输出:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">quit;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">加入ndb_mgm把持台。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">六设置负载平衡<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">我们的MySQL聚集已如今完成了,你如今能够入手下手利用它了。但是,我们没有一个会见聚集的<Pstyle="TEXT-INDENT:2em">独自的IP地点,这意味着你必需设置使用程序一部分利用MySQL聚集节点1(sql1.test.com),另<Pstyle="TEXT-INDENT:2em">外的部分利用节点2(sql2.test.com).固然,一切的使用程序只是必要利用一个节点,但假如你<Pstyle="TEXT-INDENT:2em">不想在聚集节点之间分流负载,那你具有一个聚集的目标是甚么?别的一个成绩是,假如一个聚集<Pstyle="TEXT-INDENT:2em">节点坏失落了怎样办?那末利用这个聚集节点的使用程序将基本不克不及够事情了。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">这里的办理计划是在MySQL聚集前端设置一个负载平衡器来在每一个MySQL聚集节点之间均衡负载。<Pstyle="TEXT-INDENT:2em">负载平衡器在聚集节点之间设置一个共享的假造IP地点,一切你的使用程序利用这个假造IP地点来<Pstyle="TEXT-INDENT:2em">会见聚集。假如个中一个节点坏失落,那末你的使用程序将仍旧能够事情,由于负载平衡器将哀求转移<Pstyle="TEXT-INDENT:2em">到了事情一般的别的一个节点。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今在这个例子中负载平衡器成了瓶颈。假如这个负载平衡器坏失落了怎样办呢?因而我们将以(active/passive)<Pstyle="TEXT-INDENT:2em">自动/主动安装体例来设置两个负载平衡器。这意味着我们有一个负载平衡器是自动的,别的一个是<Pstyle="TEXT-INDENT:2em">热备的,当自动的谁人坏失落了,它将会变成自动。每一个负载平衡器都利用heartbeat(心跳)来反省<Pstyle="TEXT-INDENT:2em">别的一个负载平衡器的举动情形,同时负载平衡器也利用ldirectord,它卖力将流量分派到聚集节点。<Pstyle="TEXT-INDENT:2em">heartbeat和ldirectord都在我们将要安装的UltraMonkey安装包中。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com和loadb2.test.com节点的体系内核撑持IPVS(IP假造服务器)十分主要。<Pstyle="TEXT-INDENT:2em">IPVS是在Linux内核的传输层实行负载平衡的。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">6.1安装UltraMonkey<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">好,如今让我们入手下手:起首我们启用loadb1.test.com和loadb2.test.com节点上IPVS:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.example.com/loadb2.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">modPRobeip_vs_dh<Pstyle="TEXT-INDENT:2em">modprobeip_vs_ftp<Pstyle="TEXT-INDENT:2em">modprobeip_vs<Pstyle="TEXT-INDENT:2em">modprobeip_vs_lblc<Pstyle="TEXT-INDENT:2em">modprobeip_vs_lblcr<Pstyle="TEXT-INDENT:2em">modprobeip_vs_lc<Pstyle="TEXT-INDENT:2em">modprobeip_vs_nq<Pstyle="TEXT-INDENT:2em">modprobeip_vs_rr<Pstyle="TEXT-INDENT:2em">modprobeip_vs_sed<Pstyle="TEXT-INDENT:2em">modprobeip_vs_sh<Pstyle="TEXT-INDENT:2em">modprobeip_vs_wlc<Pstyle="TEXT-INDENT:2em">modprobeip_vs_wrr<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">为了在启动时IPVS模块,我们在/etc/modules枚举了模块:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">vi/etc/modules<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ip_vs_dh<Pstyle="TEXT-INDENT:2em">ip_vs_ftp<Pstyle="TEXT-INDENT:2em">ip_vs<Pstyle="TEXT-INDENT:2em">ip_vs_lblc<Pstyle="TEXT-INDENT:2em">ip_vs_lblcr<Pstyle="TEXT-INDENT:2em">ip_vs_lc<Pstyle="TEXT-INDENT:2em">ip_vs_nq<Pstyle="TEXT-INDENT:2em">ip_vs_rr<Pstyle="TEXT-INDENT:2em">ip_vs_sed<Pstyle="TEXT-INDENT:2em">ip_vs_sh<Pstyle="TEXT-INDENT:2em">ip_vs_wlc<Pstyle="TEXT-INDENT:2em">ip_vs_wrr<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今我们编纂/etc/apt/sources.list,增加UltraMonkey的下载点,然后我们安装UltraMonkey:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">vi/etc/apt/sources.list<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">debhttp://www.ultramonkey.org/download/3/sargemain<Pstyle="TEXT-INDENT:2em">deb-srchttp://www.ultramonkey.org/download/3sargemain<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">apt-getupdate<Pstyle="TEXT-INDENT:2em">apt-getinstallultramonkeylibdbi-perllibdbd-mysql-perllibmysqlclient14-dev<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今UltraMonkey已安装了,假如你看到上面如许的告诫:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">|libsensors3notfunctional<Pstyle="TEXT-INDENT:2em">|<Pstyle="TEXT-INDENT:2em">|Itappearsthatyourkernelisnotcompiledwithsensorssupport.Asa<Pstyle="TEXT-INDENT:2em">|result,libsensors3willnotbefunctionalonyoursystem.<Pstyle="TEXT-INDENT:2em">|<Pstyle="TEXT-INDENT:2em">|Ifyouwanttoenableit,havealookat“I2CHardwareSensorsChip<Pstyle="TEXT-INDENT:2em">|support”inyourkernelconfiguration.<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">你能够疏忽它。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">回覆上面的成绩:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">DoyouwanttoautomaticallyloadIPVSrulesonboot?<Pstyle="TEXT-INDENT:2em"><--No<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">Selectadaemonmethod.<Pstyle="TEXT-INDENT:2em"><--none<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">我刚安装的libdbd-mysql-perl安装包不克不及够在MySQL5(我们在MySQL聚集上利用MySQL5),因而我们安装最新的DBD::mysqlPerl安装包:

<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">cd/tmp<Pstyle="TEXT-INDENT:2em">wgethttp://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-3.0002.tar.gz<Pstyle="TEXT-INDENT:2em">tarxvfzDBD-mysql-3.0002.tar.gz<Pstyle="TEXT-INDENT:2em">cdDBD-mysql-3.0002<Pstyle="TEXT-INDENT:2em">perlMakefile.PL<Pstyle="TEXT-INDENT:2em">make<Pstyle="TEXT-INDENT:2em">makeinstall<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">我们必需先启用packetforwarding:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.example.com/loadb2.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">vi/etc/sysctl.conf<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">#Enablespacketforwardingnet.ipv4.ip_forward=1<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">6.2设置heartbeat(心跳)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">我们经由过程创立三个文件(loadb1.test.com和loadb2.test.com的文件必需完整一样)来设置heartbeat:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">vi/etc/ha.d/ha.cf<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">logfacilitylocal0<Pstyle="TEXT-INDENT:2em">bcasteth0<Pstyle="TEXT-INDENT:2em">mcasteth0225.0.0.169410<Pstyle="TEXT-INDENT:2em">auto_failbackoff<Pstyle="TEXT-INDENT:2em">nodeloadb1<Pstyle="TEXT-INDENT:2em">nodeloadb2<Pstyle="TEXT-INDENT:2em">respawnhacluster/usr/lib/heartbeat/ipfail<Pstyle="TEXT-INDENT:2em">apiauthipfailgid=haclientuid=hacluster<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">请记着:你必需列出节点称号(本例中是loadb1和loadb2)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">uname-n<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">除这些,我们不必要对这个文件做任何修正。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">vi/etc/ha.d/haresources<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1<Pstyle="TEXT-INDENT:2em">ldirectord::ldirectord.cf<Pstyle="TEXT-INDENT:2em">LVSSyncDaemonSwap::master<Pstyle="TEXT-INDENT:2em">IPaddr2::192.168.0.105/24/eth0/192.168.0.255<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">你必需枚举个中一个负载平衡节点称号(这里是:loadb1),而且列出<Pstyle="TEXT-INDENT:2em">假造IP地点(192.168.0.105)和播送地点(192.168.0.255).<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">vi/etc/ha.d/authkeys<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">auth3<Pstyle="TEXT-INDENT:2em">3md5somerandomstring<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">somerandomstring是loadb1和loadb2用来互相认证的两个heartbeat保卫历程的暗码。<Pstyle="TEXT-INDENT:2em">这里设置成你本人的暗码。你能够选择3种加密体例。我一样平常利用md5来加密。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">/etc/ha.d/authkeys应当是root帐号只读,这里我们如许做:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">chmod600/etc/ha.d/authkeys<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">6.3设置ldirectord<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今我们为ldirectord创立设置文件,负载平衡器:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.example.com/loadb2.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">vi/etc/ha.d/ldirectord.cf<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">#GlobalDirectives<Pstyle="TEXT-INDENT:2em">checktimeout=10<Pstyle="TEXT-INDENT:2em">checkinterval=2<Pstyle="TEXT-INDENT:2em">autoreload=no<Pstyle="TEXT-INDENT:2em">logfile="local0"<Pstyle="TEXT-INDENT:2em">quiescent=yes<Pstyle="TEXT-INDENT:2em">virtual=192.168.0.105:3306<Pstyle="TEXT-INDENT:2em">service=mysql<Pstyle="TEXT-INDENT:2em">real=192.168.0.101:3306gate<Pstyle="TEXT-INDENT:2em">real=192.168.0.102:3306gate<Pstyle="TEXT-INDENT:2em">checktype=negotiate<Pstyle="TEXT-INDENT:2em">login="ldirector"<Pstyle="TEXT-INDENT:2em">passwd="ldirectorpassword"<Pstyle="TEXT-INDENT:2em">database="ldirectordb"<Pstyle="TEXT-INDENT:2em">request="SELECT*FROMconnectioncheck"<Pstyle="TEXT-INDENT:2em">scheduler=wrr<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">请填进准确的假造IP地点(192.168.0.105)和准确的MySQL聚集节点的IP地点(192.168.0.101和192.168.0.102)。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">3306是MySQL运转时默许的端口。我们也指定了一个MySQL用户(ldirector)和暗码(ldirectorpassword),一个数据库(ldirectordb)和<Pstyle="TEXT-INDENT:2em">一条SQL查询。ldirectord利用这些信息来测试MySQL聚集节点,以此来反省它们的是不是一向可用。下一步我们将用ldirector用户来<Pstyle="TEXT-INDENT:2em">创立ldirectordb数据库。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今我们为heartbeat创立体系必须的启动毗连,并移除ldirectord(由于ldirectord将由heartbeat来启动):<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">update-rc.d-fheartbeatremove<Pstyle="TEXT-INDENT:2em">update-rc.dheartbeatstart752345.stop05016.<Pstyle="TEXT-INDENT:2em">update-rc.d-fldirectordremove<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">6.4创立数据库ldirector<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">上面我们在MySQL聚集节点sql1.test.com和sql2.test.com上创立ldirector数据库。这个数据库将会用于我们的负载平衡器来反省<Pstyle="TEXT-INDENT:2em">MySQL聚集节点的可用性。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql1.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql-uroot-p<Pstyle="TEXT-INDENT:2em">GRANTALLONldirectordb.*TOldirector@%IDENTIFIEDBYldirectorpassword;<Pstyle="TEXT-INDENT:2em">FLUSHPRIVILEGES;<Pstyle="TEXT-INDENT:2em">CREATEDATABASEldirectordb;<Pstyle="TEXT-INDENT:2em">USEldirectordb;<Pstyle="TEXT-INDENT:2em">CREATETABLEconnectioncheck(iINT)ENGINE=NDBCLUSTER;<Pstyle="TEXT-INDENT:2em">INSERTINTOconnectioncheck()VALUES(1);<Pstyle="TEXT-INDENT:2em">quit;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql-uroot-p<Pstyle="TEXT-INDENT:2em">GRANTALLONldirectordb.*TOldirector@%IDENTIFIEDBYldirectorpassword;<Pstyle="TEXT-INDENT:2em">FLUSHPRIVILEGES;<Pstyle="TEXT-INDENT:2em">CREATEDATABASEldirectordb;<Pstyle="TEXT-INDENT:2em">quit;<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">6.4为负载平衡筹办MySQL聚集节点<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">最初我们必需设置MySQL聚集节点sql1.test.com和sql2.test.com来承受假造IP地点192.168.0.105。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql1.test.com/sql2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">apt-getinstalliproute<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">在/etc/sysctl.conf内里增加上面的内容:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">vi/etc/sysctl.conf<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">#Enableconfigurationofarp_ignoreoption<Pstyle="TEXT-INDENT:2em">net.ipv4.conf.all.arp_ignore=1<Pstyle="TEXT-INDENT:2em">#Whenanarprequestisreceivedoneth0,onlyrespondifthataddressis<Pstyle="TEXT-INDENT:2em">#configuredoneth0.Inparticular,donotrespondiftheaddressis<Pstyle="TEXT-INDENT:2em">#configuredonlo<Pstyle="TEXT-INDENT:2em">net.ipv4.conf.eth0.arp_ignore=1<Pstyle="TEXT-INDENT:2em">#Dittoforeth1,addforallARPinginterfaces<Pstyle="TEXT-INDENT:2em">#net.ipv4.conf.eth1.arp_ignore=1<Pstyle="TEXT-INDENT:2em">#Enableconfigurationofarp_announceoption<Pstyle="TEXT-INDENT:2em">net.ipv4.conf.all.arp_announce=2<Pstyle="TEXT-INDENT:2em">#WhenmakinganARPrequestsentthrougheth0Alwaysuseanaddressthat<Pstyle="TEXT-INDENT:2em">#isconfiguredoneth0asthesourceaddressoftheARPrequest.Ifthis<Pstyle="TEXT-INDENT:2em">#isnotset,andpacketsarebeingsentouteth0foranaddressthatison<Pstyle="TEXT-INDENT:2em">#lo,andanarprequestisrequired,thentheaddressonlowillbeused.<Pstyle="TEXT-INDENT:2em">#AsthesourceIPaddressofarprequestsisenteredintotheARPcacheon<Pstyle="TEXT-INDENT:2em">#thedestination,ithastheeffectofannouncingthisaddress.Thisis<Pstyle="TEXT-INDENT:2em">#notdesirableinthiscaseasadressesonloonthereal-serversshould<Pstyle="TEXT-INDENT:2em">#beannouncedonlybythelinux-director.<Pstyle="TEXT-INDENT:2em">net.ipv4.conf.eth0.arp_announce=2<Pstyle="TEXT-INDENT:2em">#Dittoforeth1,addforallARPinginterfaces<Pstyle="TEXT-INDENT:2em">#net.ipv4.conf.eth1.arp_announce=2<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sysctl-p<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">将上面这段到场到/etc/network/interfaces:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">sql1.test.com/sql2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">vi/etc/network/interfaces<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">autolo:0<Pstyle="TEXT-INDENT:2em">ifacelo:0inetstatic<Pstyle="TEXT-INDENT:2em">address192.168.0.105<Pstyle="TEXT-INDENT:2em">netmask255.255.255.255<Pstyle="TEXT-INDENT:2em">pre-upsysctl-p>/dev/null<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ifuplo:0<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">七.启动负载平衡器并测试<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">如今我们启动两个负载平衡办理器:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">/etc/init.d/ldirectordstop<Pstyle="TEXT-INDENT:2em">/etc/init.d/heartbeatstart<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">假如你没有瞥见毛病,你必要如今重启每一个负载平衡器:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">shutdown-rnow<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">重启以后我们能够反省是不是两个负载平衡器象希冀一样事情:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ipaddrsheth0<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">自动的负载平衡器应当列出了假造IP地点(192.168.0.105):<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">2:eth0:mtu1500qdiscpfifo_fastqlen1000<Pstyle="TEXT-INDENT:2em">link/ether00:16:3e:45:fc:f8brdff:ff:ff:ff:ff:ff<Pstyle="TEXT-INDENT:2em">inet192.168.0.103/24brd192.168.0.255scopeglobaleth0<Pstyle="TEXT-INDENT:2em">inet192.168.0.105/24brd192.168.0.255scopeglobalsecondaryeth0<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">主动(热备)的负载平衡器应当显现以下:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">2:eth0:mtu1500qdiscpfifo_fastqlen1000<Pstyle="TEXT-INDENT:2em">link/ether00:16:3e:16:c1:4ebrdff:ff:ff:ff:ff:ff<Pstyle="TEXT-INDENT:2em">inet192.168.0.104/24brd192.168.0.255scopeglobaleth0<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ldirectordldirectord.cfstatus<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">自动负载平衡器上的输入:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ldirectordfor/etc/ha.d/ldirectord.cfisrunningwithpid:1603<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">主动负载平衡器上的输入:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ldirectordisstoppedfor/etc/ha.d/ldirectord.cf<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.example.com/loadb2.example.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">ipvsadm-L-n<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">自动负载平衡器上的输入:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">IPVirtualServerversion1.2.1(size=4096)<Pstyle="TEXT-INDENT:2em">ProtLocalAddress:PortSchedulerFlags<Pstyle="TEXT-INDENT:2em">->RemoteAddress:PortForwardWeightActiveConnInActConn<Pstyle="TEXT-INDENT:2em">TCP192.168.0.105:3306wrr<Pstyle="TEXT-INDENT:2em">->192.168.0.101:3306Route100<Pstyle="TEXT-INDENT:2em">->192.168.0.102:3306Route100<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">主动负载平衡器上的输入:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">IPVirtualServerversion1.2.1(size=4096)<Pstyle="TEXT-INDENT:2em">ProtLocalAddress:PortSchedulerFlags<Pstyle="TEXT-INDENT:2em">->RemoteAddress:PortForwardWeightActiveConnInActConn<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">loadb1.test.com/loadb2.test.com:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">/etc/ha.d/resource.d/LVSSyncDaemonSwapmasterstatus<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">自动负载平衡器上的输入:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">masterrunning<Pstyle="TEXT-INDENT:2em">(ipvs_syncmasterpid:1766)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">主动负载平衡器上的输入:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">masterstopped<Pstyle="TEXT-INDENT:2em">(ipvs_syncbackuppid:1440)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">假如你的测试都是一般的,你如今能够从不异收集(192.168.0.x)中的别的服务器用假造IP地点192.168.0.105来会见MySQL数据库:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">mysql-h192.168.0.105-uldirector-p<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">(请记着:你的MySQL客户端必需最少是4.1版本的;旧的版本不克不及运转MySQL5。)<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">你如今能够关失落一个MySQL聚集节点来测试;你应当仍旧能够毗连到MySQL数据库。<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">八注解<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">运转一个MySQL聚集时,这里有一些主要的器材必要记着:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">C一切的数据都是存在内存!因而你的聚集节点上必要年夜容量的内存。这里有每一个节点必要内存<Pstyle="TEXT-INDENT:2em">容量的盘算公式:<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">(数据库巨细SizeofDatabase*复制数目NumberOfReplicas*1.1)/数据节点数目NumberOfDataNodes<Pstyle="TEXT-INDENT:2em"><Pstyle="TEXT-INDENT:2em">以是假如你有一个数据库的巨细是1GB,你应当为每一个节点装备1.1GB内存!<Pstyle="TEXT-INDENT:2em">C聚集办理节点在监听1186端口上的恣意毗连。以是这意味着不是很平安,以是你应该在一个自力的收集上运转MySQL聚集。
即使对于MySQL的商业化的企业版来说,也没有高昂的许可证成本,当你将其与像甲骨文和微软之类的大型专有商业数据库比较的话。

老尸 发表于 2015-1-18 18:33:59

数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。

谁可相欹 发表于 2015-1-24 20:10:25

还不是性能有问题!否则面向对象的数据库早就实现了!建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。

莫相离 发表于 2015-2-2 13:05:32

你可以简单地认为适合的就是好,不适合就是不好。

精灵巫婆 发表于 2015-2-7 20:59:18

原来公司用过MYSQL自己也只是建个表写个SQL

分手快乐 发表于 2015-2-23 11:46:19

一直以来个人感觉SQLServer的优化器要比Oracle的聪明。SQL2005的更是比2k聪明了不少。(有次作试验发现有的语句在200万级时还比50万级的相同语句要快show_text的一些提示没有找到解释。一直在奇怪。)

admin 发表于 2015-3-7 08:57:35

varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。

不帅 发表于 2015-3-14 20:19:41

然后最好有实践机会,能够把实践到的和实践结合起来,其实理论思考是个非常困扰和痛苦的事情

金色的骷髅 发表于 2015-3-21 15:19:22

SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
页: [1]
查看完整版本: 公布设置高可用性的MySQL服务器负载平衡聚集