《MYSQL集群解决方案.doc》由会员分享,可在线阅读,更多相关《MYSQL集群解决方案.doc(33页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MYSQL集群解决方案-高可用性、负载均衡一、mysql的市场占有率二、mysql为什么受到如此的欢迎三、mysql数据库系统的优缺点四、网络服务器的需求五、什么是mysql的集群六、什么是负载均衡七、mysql集群部署和实现方法八、负载均衡的配置和测试九、Mysql集群系统的测试(测试方案+测试脚本+测试结果分析)lmysql的市场占有率MySQL是世界上最流行的开源数据库,已有1100多万的击活安装,每天超过五万的下载。MySQL为全球开发者、DBA和IT管理者在可靠性、性能、易用性方面提供了选择。第三方市场调查机构EvansDataCorporation调查显示,过去两年内在开发者使用的
2、所有数据库中,MySQL已经拥有了25%的市场占有率。开源已经成为当今IT结构中不可或缺的重要部分,而且开源的市场占有率将继续增加。如下图所示:lmysql为什么受到如此的欢迎Sun公司今天1月份花了10亿美元将mysql收购,准备进军开源和数据库。数据库系统OracleSQLServerMySQLDB2是否免费收费收费免费收费存储过程支持支持支持支持视图支持支持支持支持快照支持支持不支持支持触发器支持支持支持支持安全强中中强复杂查询强中弱中索引丰富一般弱中数据类型多多多多事务处理强强弱中lmysql数据库系统的优缺点每个系统都有自身的不足和发展历程,mysql也一样。优点缺点1.源码公开,免
3、费2.跨平台3.为多种开发语言和包提供了API4.支持多线程5.小巧、灵活、速度较快6.支持各种字符集7.提供各种连接、优化的工具包1.不完善,很多数据库特性不支持2.只适合中小型应用,对于大型应用,可以跟其他数据库互补;3.数据库系统数据量只能达到千万级别;l网络服务的需求随着Internet的飞速发展和对我们生活的深入影响,越来越多的个人在互联网上购物、娱乐、休闲、与人沟通、获取信息;越来越多的企业把他们与顾客和业务伙伴之间的联络搬到互联网上,通过网络来完成交易,建立与客户之间的联系。互联网的用户数和网络流量正以几何级数增长,这对网络服务的可伸缩性提出很高的要求。例如,比较热门的Web站点
4、会因为被访问次数急剧增长而不能及时处理用户的请求,导致用户进行长时间的等待,大大降低了服务质量。另外,随着电子商务等关键性应用在网上运行,任何例外的服务中断都将造成不可估量的损失,服务的高可用性也越来越重要。所以,对用硬件和软件方法实现高可伸缩、高可用网络服务的需求不断增长,这种需求可以归结以下几点:1)可伸缩性(Scalability),当服务的负载增长时,系统能被扩展来满足需求,且不降低服务质量。2)高可用性(Availability),尽管部分硬件和软件会发生故障,整个系统的服务必须是每天24小时每星期7天可用的。3)可管理性(Manageability),整个系统可能在物理上很大,但应
5、该容易管理。4)价格有效性(Cost-effectiveness),整个系统实现是经济的、易支付的。单服务器显然不能处理不断增长的负载。这种服务器升级方法有下列不足:一是升级过程繁琐,机器切换会使服务暂时中断,并造成原有计算资源的浪费;二是越往高端的服务器,所花费的代价越大;三是一旦该服务器或应用软件失效,会导致整个服务的中断。通过高性能网络或局域网互联的服务器集群正成为实现高可伸缩的、高可用网络服务的有效结构。这种松耦合结构比紧耦合的多处理器系统具有更好的伸缩性和性能价格比,组成集群的PC服务器或RISC服务器和标准网络设备因为大规模生产,价格低,具有很高的性能价格比。但是,这里有很多挑战性
6、的工作,如何在集群系统实现并行网络服务,它对外是透明的,它具有良好的可伸缩性和可用性。针对上述需求,我们给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在Linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的服务器集群,我们称之为Linux虚拟服务器(LinuxVirtualServer)。在LVS集群中,使得服务器集群的结构对客户是透明的,客户访问集群提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响不需作任何修改。系统的伸缩性通过在服务机群中透明地加入和删除一个节点来达到,通过检测节点或服务进程故障和正确地重置系统达到
7、高可用性。l什么是mysql集群分为同步集群和异步集群。同步集群(mysqlcluster)结构:(data+sql+mgm节点)特点:1)内存级别的,对硬件要求较低,但是对内存要求较大。换算比例为:1:1.1;2)数据同时放在几台服务器上,冗余较好;3)速度一般;4)建表需要声明为engine=ndbcluster5)扩展性强;6)可以实现高可用性和负载均衡,实现对大型应用的支持;7)必须是特定的mysql版本,如:已经编译好的max版本;8)配置和管理方便,不会丢失数据;异步集群(mysqlreplication)结构:(master+slave)特点:1)主从数据库异步数据;2)数据放在
8、几台服务器上,冗余一般;3)速度较快;4)扩展性差;5)无法实现高可用性和负载均衡(只能在程序级别实现读写分离,减轻对主数据库的压力);6)配置和管理较差,可能会丢失数据;l什么是负载均衡通过director,将用户的请求分发到realserver服务器上,然后返回给用户。负载均衡部署灵活、能够满足各种需求。实现方式:硬件:BIG/IP、Cisco、IBM(昂贵)软件:LVS(免费)LVS系统将用户的请求的数据包在数据层和网络层进行了封装和转发,由三种方式满足各种需求。1)DR:直接路由2)Tuning:tcp/ip隧道3)NAT:网络地址转换需求:免费的软件包1)2台低端的director(
9、active和standby)2)心跳线:连接2台director,检测活动情况3)2台以上的realservers通用结构:有兴趣的可以分别研究上面的三种LVS结构。lmysql集群部署和实现方法1)假设现在有4台服务器(mysql官方推荐的最小配置)服务器开启的服务角色192.168.131.164Ndb1MysqldMysqlAPINdb_mgmd管理节点(master)HeartbeatDirector(master)192.168.131.26Ndb2MysqldMysqlAPINdb_mgmd管理节点(backup)HeartbeatDirector(standby)192.168
10、.131.77Sql1MysqldMysqlAPI(realserver)Ndbd存储节点Arptables访问路由192.168.131.101Sql2MysqldMysqlAPI(realserver)Ndbd存储节点Arptables访问路由2)服务器安装配置和网络连接(以下为所有服务器各操作一遍,共4遍)安装:将4台服务器安装CentOS5.2,选择下面的包:ClusteringStorageClusteringmysql不需要安装,但perl-mysql-xxx的所有包需要安装开发工具包和类库sshd服务SElinux=disable语言支持包不安装,默认美国英语设定主机名:Vi/e
11、tc/sysconfig/networkHostname=xxx:wq检查主机名:Uname-a必须和上表中的一一对应。否则有问题。Vi/etc/hostsNdb1 192.168.131.164Ndb2 192.168.131.26Sql1 192.168.131.77Sql2 192.168.131.101更新:#rpm-importhttp:/dries.ulyssis.org/rpm/RPM-GPG-KEY.dries.txt#yumupdate-y&yum-yinstalllynxlibawtxorg-x11-deprecated-libsnxfreenxarptables_jfht
12、tpd-devel下载:Mysqlcluster版本(我下载的5.0.67社区版本):rootndb1RHEL5#ls-lhMySQL*|awkprint$9MySQL-client-community-5.0.67-0.rhel5.i386.rpmMySQL-clusterextra-community-5.0.67-0.rhel5.i386.rpmMySQL-clustermanagement-community-5.0.67-0.rhel5.i386.rpmMySQL-clusterstorage-community-5.0.67-0.rhel5.i386.rpmMySQL-cluste
13、rtools-community-5.0.67-0.rhel5.i386.rpmMySQL-devel-community-5.0.67-0.rhel5.i386.rpmMySQL-server-community-5.0.67-0.rhel5.i386.rpmMySQL-shared-community-5.0.67-0.rhel5.i386.rpmMySQL-shared-compat-5.0.67-0.rhel4.i386.rpmMySQL-shared-compat-5.0.67-0.rhel5.i386.rpmMySQL-test-community-5.0.67-0.rhel5.i
14、386.rpmperl-HTML-Template-2.9-1.el5.rf.noarch.rpmrootndb1RHEL5#在服务器上安装以上包,在安装的过程中如果缺少包或者库,采用:yuminstallxxxx自行安装。建立目录:#mkdir/var/lib/mysql-cluster-p以下分别操作:安装cluster组件:#Rpm-UvhMySQL-xx-xx.rpm,根据不同,可以少安装部分组件。根据你需要而定。163、26上,我安装了:rootndb1RHEL5#rpm-aq|grepMySQLMySQL-clusterstorage-community-5.0.67-0.rhel
15、5MySQL-clustertools-community-5.0.67-0.rhel5MySQL-clustermanagement-community-5.0.67-0.rhel5MySQL-shared-community-5.0.67-0.rhel5perl-DBD-MySQL-3.0007-1.fc6MySQL-server-community-5.0.67-0.rhel5rootndb1RHEL5#101、77上,我安装了:rootsql1#rpm-aq|grepMySQLMySQL-clusterstorage-community-5.0.67-0.rhel4MySQL-deve
16、l-community-5.0.67-0.rhel4MySQL-server-community-5.0.67-0.rhel4MySQL-client-community-5.0.67-0.rhel4MySQL-shared-community-5.0.67-0.rhel4rootsql1#以下在ndb1(164)和ndb2(26)上操作rootndb1#vi/var/lib/mysql-cluster/config.iniNDBDDEFAULTNoOfReplicas=2DataMemory=800MIndexMemory=400MMYSQLDDEFAULTNDB_MGMDDEFAULTTC
17、PDEFAULT#SectionfortheclustermanagementnodeNDB_MGMD#IPaddressofthemanagementnode(thissystem)ID=1HostName=192.168.131.164NDB_MGMD#IPaddressofthemanagementnode(thissystem)ID=2HostName=192.168.131.26#SectionforthestoragenodesNDBD#IPaddressofthefirststoragenodeHostName=192.168.131.77DataDir=/var/lib/mys
18、ql-clusterNDBD#IPaddressofthesecondstoragenodeHostName=192.168.131.101DataDir=/var/lib/mysql-cluster#oneMYSQLDperstoragenodeMYSQLDMYSQLDMYSQLDMYSQLDMYSQLDMYSQLDMYSQLD:wq以下在mysqlAPI上操作(这里,我设定了7个API,以后可以随时加入)MysqldAPI的配置文件:Vi/etc/frootndb1#cat/etc/fmysqldndbclusterndb-connectstring=host=192.168.131.16
19、4,host=192.168.131.26ndb_mgmconnect-string=host=192.168.131.164,host=192.168.131.26ndbdconnect-string=host=192.168.131.164,host=192.168.131.26:wq分别启动ndb_mgmd/ndbd/mysqld164/26:ndb_mgmd-f/var/lib/mysql-cluster/config.ini77/101:Ndbd-initial164/26/77/101:/etc/rc.d/init.d/mysqlstart在管理节点ndb1(164)和ndb2(2
20、6)上查看各节点的情况:rootndb1#ndb_mgm-NDBCluster-ManagementClient-ndb_mgmshowConnectedtoManagementServerat:192.168.131.164:1186ClusterConfiguration-ndbd(NDB)2node(s)id=3192.168.131.77(Version:5.0.67,Nodegroup:0,Master)id=4192.168.131.101(Version:5.0.67,Nodegroup:0)ndb_mgmd(MGM)2node(s)id=1192.168.131.164(Ver
21、sion:5.0.67)id=2192.168.131.26(Version:5.0.67)mysqld(API)7node(s)id=5192.168.131.101(Version:5.0.67)id=6192.168.131.26(Version:5.0.67)id=7192.168.131.164(Version:5.0.67)id=8192.168.131.77(Version:5.0.67)id=9(notconnected,acceptingconnectfromanyhost)id=10(notconnected,acceptingconnectfromanyhost)id=1
22、1(notconnected,acceptingconnectfromanyhost)ndb_mgm以上说明一切正常。将服务增加到开机启动服务项中:164/26:echondb_mgmd-f/var/lib/mysql-cluster/config.ini/etc/rc.d/init.d/ndb_mgmdchmod755/etc/rc.d/init.d/ndb_mgmd77/101:Echondbd/etc/rc.d/init.d/ndbdChmod755/etc/rc.d/init.d/ndbdChkconfig-level2345ndbdonOK,到此mysqlcluster配置完成。强调
23、:1)由于数据放在内存中,需要在ndb节点上加大内存的数量。按照1:1.1的比例,如果数据量达到3.6GB,需要4GB的内存。2)由于NDB和mysqld(API)都很耗费内存,所以建议将NDB放在164和26上。可能启动的时候会有警告,但是没关系的。查看数据和内存情况:77:rootsql2#toptop-16:39:36up1:59,1user,loadaverage:1.37,0.76,0.60Tasks:80total,2running,78sleeping,0stopped,0zombieCpu(s):4.0%us,4.0%sy,0.0%ni,87.3%id,2.9%wa,0.2%h
24、i,1.5%si,0.0%stMem:ktotal,kused,69732kfree,68256kbuffersSwap:ktotal,0kused,kfree,kcachedPIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+COMMAND2306mysql250119m15m3952S220.810:20.94mysqld23791root1501587m484m31mR2023.99:34.97ndbd由于77只有2GB的内存,而在config.ini中,把1.2GB的内存分配给了NDB,所以,加上mysqld用掉的,2GB的内存似乎已经所剩无几了。查看77上的数据大小
25、:rootsql2#cd/var/lib/mysql-cluster/ndb_4_fs/rootsql2ndb_4_fs#du-lh1.3GB连接API创建数据库:由于上面4台都做为mysqld的API,所以创建数据库的时候,都需要创建一遍。以下操作在4台API上都需要操作:#Mysql-uroot-pxxxxxxxxxxxx-AMysqlcreatedatabasetestdatabase;Mysqlgrantallon*.testdatabasetoroot192.168.131.%identifiedbyxxxxxxxxxxxxxxx;Mysqlflushprivileges;Mysql
26、createtabletest(int(1);Mysqlinsertintotest(1);Mysqlquit;以上做完以后,可以通过任意一台API上创建表,并写数据到表中,其他数据库都会同步写入。分别连接每台服务器进行检查:#Mysql-uroot-pxxxxxxxxxxxx-AMysqlusetestdatabase;Mysqlselect*fromtest;如果输出结果完全相同,表明mysqlcluster已经可以正常工作了。在2台API上设置LVSMysqlcluster做好以后,数据库分别建立同名的数据库以后,权限分配好,然后只要在一台上写入数据,其他的NDB就存储了相同的数据。用程
27、序连接任意一台API写数据,如果程序中未设置API的选择和判断,只使用了其中一个API,一旦API当机,则无法写入数据,必须修改程序。即便做了API的判断和选择,因为没有实现负载均衡,服务器的性能没有充分利用。高可用性也没有达到目标。所以,我们现在在2台API之间做LVS。LVS采用ultramonkey(http:/www.ultramonkey.org)首先在NDB1(164)和NDB2(26)上下载heartbeat的软件包:下载所有的rpm包:Cd/usr/local/srcMkdirheartbeatCdheartbeat#Wgetxxx.xxx.rpm我下载了如下的软件包:root
28、ndb1heartbeat#ls-lh*.rpm|awkprint$9;arptables-noarp-addr-0.99.2-1.rh.el.um.1.noarch.rpmheartbeat-1.2.3.cvs.-1.rh.el.um.4.i386.rpmheartbeat-ldirectord-1.2.3.cvs.-1.rh.el.um.4.i386.rpmheartbeat-pils-1.2.3.cvs.-1.rh.el.um.4.i386.rpmheartbeat-stonith-1.2.3.cvs.-1.rh.el.um.4.i386.rpmipvsadm-1.21-1.rh.el.
29、1.um.1.i386.rpmlibnet-1.1.2.1-1.rh.el.um.1.i386.rpmperl-Authen-SASL-2.08-1.rh.el.um.1.noarch.rpmperl-Convert-ASN1-0.18-1.rh.el.um.1.noarch.rpmperl-IO-Socket-SSL-0.96-1.rh.el.um.1.noarch.rpmperl-ldap-0.3202-1.rh.el.um.1.noarch.rpmperl-Mail-IMAPClient-2.2.9-1.rh.el.um.1.noarch.rpmperl-Net-SSLeay-1.25-
30、1.rh.el.um.1.i386.rpmperl-Parse-RecDescent-1.94-1.el5.rf.noarch.rpmperl-Parse-RecDescent-1.94-1.rh.el.um.1.noarch.rpmperl-XML-NamespaceSupport-1.08-1.rh.el.um.1.noarch.rpmperl-XML-SAX-0.12-1.rh.el.um.1.noarch.rpmrootndb1heartbeat#Heartbeat中包含以下几部分:1)MasterDirector(分发器)-MD2)BackupDirector(备份分发器)-BD3)
31、Realserver(真实服务器,可以有2个以上)-RSIP设置并确认:MD:Eth0:192.168.131.164/24/GW:192.168.131.1Eth1:10.9.30.1/24MD:Eth0:192.168.131.26/24/GW:192.168.131.1Eth1:10.9.30.2VIP:192.168.131.105/24/GW:192.168.131.1-用户访问的统一虚拟IPRS1:192.168.131.101/24/GW:192.168.131.1RS2:192.168.131.77/24/GW:192.168.131.1。等等以下操作在所有服务器上执行:主机名
32、确认:分别执行:#uname-a主机名对应表中所列。在MD和BD修改IP转发:#vimodprobe.shmodprobeip_vs_dhmodprobeip_vs_ftpmodprobeip_vsmodprobeip_vs_lblcmodprobeip_vs_lblcrmodprobeip_vs_lcmodprobeip_vs_nqmodprobeip_vs_rrmodprobeip_vs_sedmodprobeip_vs_shmodprobeip_vs_wlcmodprobeip_vs_wrr:wq#chmod755modprobe.sh#shmodprobe.sh#vi/etc/modu
33、lesip_vs_dhip_vs_ftpip_vsip_vs_lblcip_vs_lblcrip_vs_lcip_vs_nqip_vs_rrip_vs_sedip_vs_ship_vs_wlcip_vs_wrr:wq#Vi/etc/sysctl.confnet.ipv4.ip_forward=0改为:net.ipv4.ip_forward=1使修改生效:/sbin/sysctl-p在MD和BD上安装heartbeat软件包#Rpm-Uvhperl-xx-xx-xx.rpm#Yuminstallheartbeat#Rpm-Uvharptables-noarp-addr-0.99.2-1.rh.e
34、l.um.1.noarch.rpm#rpm-Uvhperl-Mail-POP3Client-2.17-1.el5.centos.noarch.rpm缺少perl包,就使用yuminstallperl-xx-xx#Perl-CPAN-eshell这样安装的perl包不知道为何不好使?奇怪这里VIP实际上是绑定在2台director上。所以director之间需要做心跳处理。心跳线使用eth1口,用交叉线连接起来。这样可以避免影响其他服务器。配置heartbeatHeartbeat有3个配置文件:Ha.cfAuthkeysHaresourcesldirectord进程的配置文件Ldirectord
35、.cf一共需要配置4个配置文件。#viha.cflogfacilitylocal0bcasteth1mcasteth1225.0.0.169410auto_failbackoffnodendb1nodendb2respawnhacluster/usr/lib/heartbeat/ipfailapiauthipfailgid=haclientuid=hacluster:wq#viauthkeysauth33md5514a49f83820e34c877ff48770e48ea7:wq#viharesourcesndb1ldirectord:ldirectord.cfLVSSyncDaemonSwa
36、p:masterIPaddr2:192.168.131.105/24/eth0/192.168.131.255Ndb2上需要将主机名更改一下。:wq设置属性并使heartbeat开机启动#chmod600/etc/ha.d/authkeys#/sbin/chkconfig-level2345heartbeaton#/sbin/chkconfig-delldirectord启动heartbeat:/etc/init.d/ldirectordstop/etc/init.d/heartbeatstart在MD和BD上检查VIP是否生效:ipaddrsheth0rootndb1ha.d#ipaddrs
37、heth02:eth0:mtu1500qdiscpfifo_fastqlen1000link/ether00:30:48:28:c6:85brdff:ff:ff:ff:ff:ffinet192.168.131.164/24brd192.168.131.255scopeglobaleth0inet192.168.131.105/24brd192.168.131.255scopeglobalsecondaryeth0inet6fe80:230:48ff:fe28:c685/64scopelinkvalid_lftforeverpreferred_lftforeverrootndb1ha.d#roo
38、tndb2#ipaddrsheth02:eth0:mtu1500qdiscpfifo_fastqlen1000link/ether00:30:48:28:c4:afbrdff:ff:ff:ff:ff:ffinet192.168.131.26/24brd192.168.131.255scopeglobaleth0inet6fe80:230:48ff:fe28:c4af/64scopelinkvalid_lftforeverpreferred_lftforeverrootndb2#现在在MD(164)上已经生效了。检查ldirectored进程rootndb1ha.d#/usr/sbin/ldir
39、ectordldirectord.cfstatusldirectordfor/etc/ha.d/ldirectord.cfisrunningwithpid:5596rootndb1ha.d#rootndb2#/usr/sbin/ldirectordldirectord.cfstatusldirectordisstoppedfor/etc/ha.d/ldirectord.cfrootndb2#VIP生效的director应该是running状态,standby应该是stop状态。利用ipvs检查包转发是否生效rootndb1ha.d#/sbin/ipvsadm-L-nIPVirtualServe
40、rversion1.2.1(size=4096)ProtLocalAddress:PortSchedulerFlags-RemoteAddress:PortForwardWeightActiveConnInActConnTCP192.168.131.105:3306wrr-192.168.131.77:3306Route133034-192.168.131.101:3306Route133038rootndb1ha.d#rootndb2#/sbin/ipvsadm-L-nIPVirtualServerversion1.2.1(size=4096)ProtLocalAddress:PortSch
41、edulerFlags-RemoteAddress:PortForwardWeightActiveConnInActConnrootndb2#在MB上已经生效了。在MD和BD上检查LVSSyncDaemonSwap的状态:rootndb1ha.d#/etc/ha.d/resource.d/LVSSyncDaemonSwapmasterstatusmasterrunning(ipvs_syncmasterpid:5689)rootndb1ha.d#rootndb2#/etc/ha.d/resource.d/LVSSyncDaemonSwapmasterstatusmasterstopped(ipvs_syncbackuppid:5493)rootndb2#同样,standby的处于stopped状态。以下在RS服务器上执行:ARP转发限制MD或者BD采用ARP欺骗将ARP包转发给下面的realse