当前位置: 首页 > 科技观察

Lvs+Keepalived+MySQLCluster搭建高可用负载均衡Mysql集群

时间:2023-03-15 01:11:13 科技观察

1.前言MySQLCluster是适用于分布式计算环境的高实用高冗余版本的MySQL。它使用NDBCluster存储引擎,允许多个MySQL服务器在一个Cluster中运行。存储引擎在MyQL5.0及以上的二进制版本中提供,并在与最新Linux发行版兼容的RPM中提供。MySQLCluster是一种允许在无共享系统中部署“内存中”数据库集群的技术。通过sharednothing架构,系统可以使用廉价的硬件,对软硬件没有特殊要求。此外,由于每个组件都有自己的内存和磁盘,因此不存在单点故障。MySQLCluster由一组计算机组成,每台计算机运行各种进程,包括MySQL服务器、NDBCluster的数据节点、管理服务器和(可能的)专用数据访问程序。二、MySQLCluster的基本概念NDB是一个“内存中”的存储引擎,具有可用性高、数据一致性好的特点。MySQLCluster可以使用各种故障转移和负载平衡选项配置NDB存储引擎,但在Cluster级别的存储引擎上执行此操作最简单。MySQLCluster的NDB存储引擎包含完整的数据集,只依赖于Cluster本身内的其他数据。目前,MySQLCluster的Cluster部分可以独立于MySQL服务器进行配置。在MySQLCluster中,Cluster的每个部分都被视为1个节点。管理(MGM)节点:这类节点的作用是管理MySQLCluster中的其他节点,比如提供配置数据、启停节点、运行备份等。由于此类节点负责管理其他节点的配置,因此应先启动它们,然后再启动其他节点。MGM节点使用命令“ndb_mgmd”启动。数据(NDB)节点:这类节点用来保存Cluster的数据。数据节点数与副本数有关,副本数是分片的倍数。例如,有两个副本,每个副本有两个分片,则有4个数据节点。但是,没有必要设置多个副本。数据节点使用命令“ndbd”启动。客户端(SQL)节点:这是用于访问集群数据的节点。对于MySQLCluster,客户端节点是使用NDBCluster存储引擎的传统MySQL服务器。通常,SQL节点是用命令“mysqld-ndbcluster”启动的,或者在“my.cnf”中添加“ndbcluster”后用“mysqld”启动。注意:在许多上下文中,术语“节点”用于指代计算机,但在讨论MySQLCluster时,它指的是进程。一台计算机上可以有任意数量的节点,对此我们使用术语“集群主机”。管理服务器(MGM节点)负责管理Cluster配置文件和Cluster日志。集群中的每个节点都从管理服务器检索配置数据,并请求确定管理服务器所在位置的方法。当数据节点发生新的事件时,该节点将有关此类事件的信息传递给管理服务器,然后将这些信息写入Clusterlog。3、环境系统:CentOS6.432位9软件包(可到mysql官网下载http://dev.mysql.com/downloads/cluster/):MGM:MySQL-Cluster-gpl-management-7.1.31-1.el6.i686.rpmMySQL-Cluster-gpl-tools-7.1.31-1.el6.i686.rpmSQL节点:MySQL-Cluster-gpl-client-7.1.31-1.el6.i686。rpmMySQL-Cluster-gpl-server-7.1.31-1.el6.i686.rpmNDB节点:MySQL-Cluster-gpl-storage-7.1.31-1.el6.i686.rpm拓扑图:IP规划:4.配置(请卸载与mysql相关的所有RPM包)1.LB-Master和LB-Backup配置(一)LB-Master和LB-Backup安装keepalived和ipvsadm#yumgroupinstall"AdditionalDevelopment"//安装开发工具#yumgroupinstall"Developmenttools"#tar-zxvfkeepalived-1.2.1.tar.gz-C/usr/local/src/#cd/usr/local/src/keepalived-1.2.1#./cnfigureKeepalivedconfiguration---------------------------Keepalivedversion:1.2.1Compiler:gccCompilerflags:-g-O2ExtraLib:-lpopt-lssl-lcryptoUseIPVSFramework:No//配置错误IPVSsyncdaemonsupport:NoUseVRRPFramework:YesUseDebugflags:No解决方法:#yuminstallkernel-developvsadm#ln-s/usr/src/kernels/2.6.32-358.el6.i686//usr/src/linux#./cnfigure//重新配置环境#make//compile#makeinstall//install#cd/usr/local/etc//keepalived默认安装路径#lldrwxr-xr-x.3rootroot4096May2400:37keepaliveddrwxr-xr-x.3rootroot4096May2400:29rc.ddrwxr-xr-x.2rootroot4096May2400:29sysconfig配置以系统模式启动服务#cp/usr/local/etc/rc.d/init.d/keepalived/etc/rc.d/init.d/#cp/usr/local/etc/sysconfig/keepalived/etc/sysconfig/#mkdir/etc/keepalived#cp/usr/local/etc/keepalived/keepalived.conf/etc/keepalived/#cp/usr/local/sbin/keepalived/usr/sbin/(2)LB-Master和LB-Backupkeepalived主配置文件#cat/etc/keepalived/keepalived.conf#gurationFileforkeepalived#globaldefineglobal_defs{router_idHaMySQL_1}vrrp_sync_groupVGM{group{VI_MYSQL}}vrrp_instance/VI_MAYSQL{BBackup设置为BACKUPinterfaceeth0lvs_sync_daemon_intefaceeth0virtual_router_id55priority100//LB-Backup设置为90advert_int5authentication{auth_typePASSauth_pass123456}virtual_ipaddress{192.168.2.200/24deveth0}}##########LVSMySQLStart###########virtual_server192.168.2。2003306{delay_loop6lb_algorrlb_kindDRpersistence_timeout6protocolTCPreal_server192.168.2.503306{weight100TCP_CHECK{connect_timeout3nb_get_retry3delay_before_retry3connect_port3306}}real_server192.168.2.603306{weight100TCP_CHECK{connect_timeout3nb_get_retry3delay_before_retry3connect_port3306}}}##########LVSMySQLEND#############2.MGM配置(1)安装管理节点#rpm-ivhMySQL-Cluster-gpl-management-7.1.31-1.el6.i686.rpm#rpm-ivhMySQL-Cluster-gpl-tools-7.1.31-1.el6.i686.rpm#mkdir/etc/mysql-cluster(2)配置管理节点#vim/etc/mysql-cluster/config.ini//添加以下内容[ndbddefault]NoOfReplicas=2DataMemory=80MIndexMemory=18M#TCP/IPoptions:[tcpdefault]portnumber=2202#Managementprocessoptions:[ndb_mgmd]id=1hostname=192.168.2.10datadir=/var/lib/mysql-cluster#Optionsfordatanode[ndbd]id=2hostname=192.168.2.30datadir=/var/lib/mysql[ndbd]id=3hostname=192.168.2.40datadir=/var/lib/mysql[mysqld]id=4hostname=192.168.2.50[mysqld]id=5主机名=192.168.2.60(3)启动管理节点#mkdir/var/lib/mysql-cluster#ndb_mgmd-f/etc/mysql-cluster/config.iniMySQLClusterManagementServermysql-5.1.73ndb-7.1.31#netstat-tuplntcp000.0.0。0:11860.0.0.0:*LISTEN17629/ndb_mgmd3。数据节点(NDB1和NDB2)配置(一)安装数据节点#rpm-ivhMySQL-Cluster-gpl-storage-7.1.31-1.el6.i686.rpm#mkdir/var/lib/mysql(2)配置数据节点#vim/etc/my.cnf[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockuser=mysql#Disablingsymbolic-linksisrecommendedtopreventassortedsecurityriskssymbolic-links=0[mysqld_safe]log-error=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid[mysql_cluster]ndb-connectstring=192.168.2.10(3)启动数据节点#ndbd--initial//NDB12014-05-2800:32:17[ndbd]INFO--Angelconnectedto'192.168.2.10:1186'2014-05-2800:32:17[ndbd]INFO--Angelallocatednodeid:2#ndbd--initial//NDB22014-05-2800:33:08[ndbd]INFO--Angelconnectedto'192.168.2.10:1186'2014-05-2800:33:08[ndbd]INFO--Angelallocatednodeid:3#p#4.SQL节点(SQL1和SQL2)配置网络cardsandshieldARPsettings在现有网卡的基础上添加一个lo:0网卡#vim/etc/sysctl.conf//添加下面两行net.ipv4.conf.all.arp_announce=2net.ipv4.conf.all.arp_ignore=1#sysctl-p(1)安装SQL节点#rpm-ivhMySQL-Cluster-gpl-client-7.1.31-1.el6.i686.rpm#rpm-ivhMySQL-Cluster-gpl-server-7.1.31-1.el6.i686.rpm//如果有错误,卸载相关的rpm包mysql(2)配置SQL节点#TheMySQLserver[mysqld]port=3306socket=/var/lib/mysql/mysql.sockndbclusterdefault-storage-engine=NDBCLUSTERskip-name-resolve[mysql_cluster]ndb-connectstring=192.168.2.10(3)启动SQL节点#servicemysqlstart//SQL1StartingMySQL..SUCCESS!#servicemysqlstart//SQL2,如果不能启动,执行pkill-9mysql,然后启动StartingMySQLSUCCESS!#netstat-tupln|grepmysqltcp000.0.0.0:33060.0.0.0:*LISTEN3475/mysqld(4)配置远程连接(SQL1和SQL2配置一致)#mysqlmysql>grantallon*.*to'nuo'@'%'identifiedby'123';mysql>flushprivileges;启动顺序必须遵循:MGM→NDB→SQL5,查看状态1.查看MGMstatus#ndb_mgm--NDBCluster--ManagementClient--ndb_mgm>showConnectedtoManagementServerat:localhost:1186ClusterConfiguration----------------------[ndbd(NDB)]2node(s)id=2@192.168.2.30(mysql-5.1.73ndb-7.1.31,Nodegroup:0,*)id=3@192.168.2.40(mysql-5.1.73ndb-7.1.31,Nodegroup:0)[ndb_mgmd(MGM)]1node(s)id=1@192.168.2.10(mysql-5.1.73ndb-7.1.31)[mysqld(API)]2node(s)id=4@192.168.2.50(mysql-5.1.73ndb-7.1.31)id=5@192.168。2.60(mysql-5.1.73ndb-7.1.31)2.查看LB-Master状态#servicekeepalivedstartStartingkeepalived:[OK]#ipaddr1:lo:mtu16436qdiscnoqueuestateUNKNOWNlink/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet127.0.0.1/8scopehostloinet6::1/128scopehostvalid_lftforeverpreferred_lftforever2:eth0:mtu1500qdiscpfifo_faststateUNKNOWNqlen1000link:ether29:2c:3d:01brdff:ff:ff:ff:ff:ffinet192.168.2.20/24brd192.168.2.255scopeglobaleth0inet192.168.2.200/24scopeglobalsecondaryeth0inet6fe80::20c:29ff:fe22:3d01/64scopelinkvalid_lftforeverpreferred_vvsversionIP#2(size=4096)ProtLocalAddress:PortSchedulerFlags->RemoteAddress:PortForwardWeightActiveConnInActConnTCP192.168.2.200:mysqlrrpersistent6->192.168.2.50:mysqlRoute10000->192.168.2.60:mysqlRoute100003.查看LB-Backup状态#servicekeepalivedstartStartingkeepalived:[OK]#ipaddr1:lo:mtu16436qdiscnoqueuestateUNKNOWNlink/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet127.0.0.1/8scopehostloinet6::1/128scopehostvalid_lftforeverpreferred_lftforever2:eth0:mtu1500qdiscpfifo_faststate1UN000WN链接/ether00:0c:29:27:e1:98brdff:ff:ff:ff:ff:ffinet192.168.2.21/24brd192.168.2.255scopeglobaleth0inet6fe80::20c:29ff:fe27:e198/64scopelinkvalid_lftforeverpreferred_lftforever#ipvsadmIPVirtualServerversion1.2.1(size=4096)ProtLocalAddress:PortSchedulerFlags->RemoteAddress:PortForwardWeightActiveConnInActConnTCP192.168.2.200:mysqlrrpersistent6->192.168.2.50:mysqlRoute10000->192.168.2.60:mysqlRoute10000六、测试1.客户端1(CentOS6.432位,IP:192.168.2.80/24)#yuminstallmysql#mysql-h192.168.2.200-unuo-p输入密码:mysql>showdatabases;+--------------------+|数据库|+--------------------+|information_schema||mysql||ndbinfo||测试|+--------------------+mysql>createdatabaset;mysql>用户集;mysql>createtablet2(idint);mysql>insertintot2values(10);mysql>insertintot2values(20);2.LB-Master查看连接状态#ipvsadmIPVirtualServerversion1.2.1(size=4096)ProtLocalAddress:PortSchedulerFlags->RemoteAddress:PortForwardWeightActiveConnInActConnTCP192.168.2.200:mysqlrrpersistent6->192.168.2.50:mysqlRoute10010->192.168.2.60:mysqlRoute10000#ipvsadm-lcnIPVSconnectionentriesproexpirestatesourcevirtualdestinationTCP14:48ESTABLISHED192.168.2.80:49993192.168.2.200:3306192.168.2.50:3306TCP00:54NONE192.168.2.80:0192.168.2.200:3306192.168.2.50:33063.客户端2(CentOS6.432位,IP:192.168.2.81/24)#yuminstallmysql#mysql-h192.168.2.200-unuo-p输入密码:mysql>showdatabases;+---------------------+|数据库|+--------------------+|information_schema||mysql||ndbinfo||吨||测试|+----------------------+mysql>uset;mysql>选择*fromt2;+------+|编号|+------+|20||10|+-------+4.lb-master视图连接状态#ipvsadm-lcnipvSconNectionEntriesproexpirestatesourcevirtualDestinationtcp00:36none192.168.2.81:0192.168.2.2002.60:3306总结:在客户端1插入数据后,服务器显示客户端1连接的是SQL1(192.168.2.50),在客户端2上查询可以查询到客户端1输入的数据,服务器显示客户端2是连接到SQL2(192.168.2.60),所以数据同步一致。博客:http://yinuoqianjin.blog.51cto.com/8360868/1418711

最新推荐
猜你喜欢