|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
有的时候,一些缺失的功能可以通过别的办法来实现,例如,在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">[NDBDDEFAULT]<Pstyle="TEXT-INDENT:2em">NoOfReplicas=2<Pstyle="TEXT-INDENT:2em">[MYSQLDDEFAULT]<Pstyle="TEXT-INDENT:2em">[NDB_MGMDDEFAULT]<Pstyle="TEXT-INDENT:2em">[TCPDEFAULT]<Pstyle="TEXT-INDENT:2em">#Sectionfortheclustermanagementnode<Pstyle="TEXT-INDENT:2em">[NDB_MGMD]<Pstyle="TEXT-INDENT:2em">#IPaddressofthemanagementnode(thissystem)<Pstyle="TEXT-INDENT:2em">HostName=192.168.0.103<Pstyle="TEXT-INDENT:2em">#Sectionforthestoragenodes<Pstyle="TEXT-INDENT:2em">[NDBD]<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">[NDBD]<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">#one[MYSQLD]perstoragenode<Pstyle="TEXT-INDENT:2em">[MYSQLD]<Pstyle="TEXT-INDENT:2em">[MYSQLD]<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">[mysqld]<Pstyle="TEXT-INDENT:2em">ndbcluster<Pstyle="TEXT-INDENT:2em">#IPaddressoftheclustermanagementnode<Pstyle="TEXT-INDENT:2em">ndb-connectstring=192.168.0.103<Pstyle="TEXT-INDENT:2em">[mysql_cluster]<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">[ndbd(NDB)]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">[ndb_mgmd(MGM)]1node(s)<Pstyle="TEXT-INDENT:2em">id=1@192.168.0.103(Version:5.0.19)<Pstyle="TEXT-INDENT:2em">[mysqld(API)]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">[ndbd(NDB)]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">[ndb_mgmd(MGM)]1node(s)<Pstyle="TEXT-INDENT:2em">id=1@192.168.0.103(Version:5.0.19)<Pstyle="TEXT-INDENT:2em">[mysqld(API)]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的商业化的企业版来说,也没有高昂的许可证成本,当你将其与像甲骨文和微软之类的大型专有商业数据库比较的话。 |
|