mysql集群方案

上传人:xt****7 文档编号:119675146 上传时间:2022-07-15 格式:DOCX 页数:28 大小:696.97KB
返回 下载 相关 举报
mysql集群方案_第1页
第1页 / 共28页
mysql集群方案_第2页
第2页 / 共28页
mysql集群方案_第3页
第3页 / 共28页
点击查看更多>>
资源描述
MYSQL 集群方案调研报告 调研人:罗志威、黄川MYSQL CLUSTER方案介绍方案介绍MySQL Cluster 是MySQL适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。在MyQL 5.0及以上的二进制版本中、以及与最新的Linux版本兼容的RPM中提供了该存储引擎。(注意,要想获得MySQL Cluster 的功能,必须安装 mysql-server 和 mysql-max RPM) 目前能够运行MySQL Cluster 的操作系统有Linux、Mac OS X和Solaris,最新版本支持更多操作系统,包括Windows。 MySQL Cluster所有的这些节点构成一个完成的MySQL集群体系。数据保存在“NDB存储服务器”的存储引擎中,表(结构)则保存在“MySQL服务器”中。应用程序通过“MySQL服务器”访问这些数据表,集群管理服务器通过管理工具(ndb_mgmd)来管理“NDB存储服务器”。 “NDB” 是一种“内存中”的存储引擎,它具有可用性高和数据一致性好的特点。MySQL Cluster 能够使用多种故障切换和负载平衡选项配置NDB存储引擎,但在 Cluster 级别上的存储引擎上做这个最简单。MySQL Cluster的NDB存储引擎包含完整的数据集,仅取决于 Cluster本身内的其他数据。 目前,MySQL Cluster的 Cluster部分可独立于MySQL服务器进行配置。在MySQL Cluster中, Cluster的每个部分被视为1个节点。管理(MGM)节点:这类节点的作用是管理MySQL Cluster内的其他节点,如提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节 点。MGM节点是用命令“ndb_mgmd”启动的。 数据节点:这类节点用于保存 Cluster的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。不过没有必要设 置多个副本。数据节点是用命令“ndbd”启动的。 SQL节点:这是用来访问 Cluster数据的节点。对于MySQL Cluster,客户端节点是使用NDB Cluster存储引擎的传统MySQL服务器。通常,SQL节点是使用命令“mysqld ndbcluster”启动的,或将“ndbcluster”添加到“f”后使用“mysqld”启动。 注释:在很多情况下,术语“节点”用于指计算机,但在讨论MySQL Cluster时,它表示的是进程。在单台计算机上可以有任意数目的节点,为此,我们采用术语“ Cluster主机”。 管理服务器(MGM节点)负责管理 Cluster配置文件和 Cluster日志。 Cluster中的每个节点从管理服务器检索配置数据,并请求确定管理服务器所在位置的方式。当数据节点内出现新的事件时,节点将关于这类事件的信息传输 到管理服务器,然后,将这类信息写入 Cluster日志。 此外,可以有任意数目的 Cluster客户端进程或应用程序。它们分为两种类型: 标准MySQL客户端:对于MySQL Cluster,它们与标准的(非 Cluster类)MySQL没有区别。换句话讲,能够从用PHP、Perl、C、C+、Java、Python、Ruby等编写的现有MySQL应用 程序访问MySQL Cluster。 管理客户端:这类客户端与管理服务器相连,并提供了启动和停止节点、启动和停止消息跟踪(仅调试版本)、显示节点版本和状态、启动和停止备份等的命令。测试环境信息服务器信息项项值操作系统CentOS release 5.6 64位Mysql Cluster 版本内存2GCPU3.20双核网络环境100M局域网部署4个数据节点,两个SQL节点,一个管理节点机器IP数据节点编号1223344数据节点信息SQL节点信息机器IP数据节点编号67管理节点信息机器IP数据节点编号5机器安装环境机器IP用户名、密码安装路径路径说明mysql/mysql/home/mysql/mysqlcmysql程序安装路径/home/mysql/data/mysqld_dataSql节点数据路径/home/mysql/data/ndb_data数据节点数据路径/home/mysql/conf配置文件路径mysql/mysql/home/mysql/mysqlcmysql程序安装路径/home/mysql/data/mgmd_data管理节点数据路径/home/mysql/data/ndb_data数据节点数据路径/home/mysql/conf配置文件路径mysql/mysql/home/mysql/mysqlcmysql程序安装路径/home/mysql/data/mysqld_dataSql节点数据路径/home/mysql/data/ndb_data数据节点数据路径/home/mysql/conf配置文件路径mysql/mysql/home/mysql/mysqlcmysql程序安装路径/home/mysql/data/ndb_data数据节点数据路径/home/mysql/conf配置文件路径测试环境架构图架构图说明 架构图分为了四个区域:客户端、SQL节点、数据节点、管理节点。客户端:对于MySQL簇,它们与标准的(非簇类)MySQL没有区别。换句话讲,能够从用PHP、Perl、C、C+、Java、Python、Ruby等编写的现有MySQL应用程序访问MySQL簇。SQL节点:这是用来访问簇数据的节点。对于MySQL簇,客户端节点是使用NDB簇存储引擎的传统MySQL服务器。典型情况下,SQL节点是使用命令mysqld ndbcluster启动的,或将ndbcluster添加到f后使用mysqld启动。簇中所有的表结构都保存在mysql节点中,为了保证每个数据节点中数据分布均匀,在进行数据插入的时候sql节点采用了表分片的策略将数据均匀分配到不同的数据节点上。数据节点:这类节点用于保存簇的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点(在测试环境中就采用了两个副本两个片段的策略,故有4个数据节点,此时管理节点会将数据节点进行分组,如架构图所示21和23为一组,22和24为一组,数据的备份时组内备份)。数据节点是用命令ndbd启动的。各个数据节点中都用两个检查点:本地检查点、全局检查点。本地检查点的目的是为了将内存中的数据和磁盘上的数据进行同步。全局检查点是在各节点中进行通讯,以保证事物的一致性。管理节点:管理节点是管理数据节点和sql节点的工具,在系统正常运行期间停止管理节点对整个系统的运行不会有任何影响。在管理节点提供了数据节点和sql节点的全局配置信息,包括数据、索引所占用内存大小、数据存放的目录信息、各个节点ip信息等。通过管理节点可以启动和停止节点、启动和停止消息跟踪(仅对调试版本)、显示节点版本和状态、启动和停止备份等的命令。安装配置说明 软件下载说明:1、 软件下载地址:2、 安装版本:安装步骤说明:一、 管理节点安装1、 登陆系统建立目录结构mkdir p /home/mysql/data/mgmd_datamkdir /home/mysql/confmkdir /home/mysql/mysqlc2、 解压压缩包tar zxvf cd 3mv * ./mysqlccd .rm rf 33、 设置环境变量在.bash_profile文件的PATH后面加入如下信息/home/mysql/mysqlc/binvi /.bash_profile加入后,文件如下所示加入后执行如下命令使配置生效:. /.bash_profile4、 在/home/mysql/conf目录下建立config.ini文件,然后在文件中配置各节点信息,如下所示:ndbd defaultNoOfReplicas=2 #设置冗余的分数DataMemory=100M #指定存放数据的内存段大小IndexMemory=50M#制定索引的内存段大小LockPagesInMainMemory=1 #将进程锁定在内存中TimeBetweenLocalCheckpoints=20#本地检查点时间间隔。TimeBetweenGlobalCheckpoints=1000#全局检查点时间间隔。TimeBetweenEpochs=100#复制同步的间隔时间TimeBetweenWatchdogCheckInitial=60000 MaxNoOfTables=1024 #该参数为作为整体的簇设置了最大表对象数目MaxNoOfOrderedIndexes=2048 #设置哈希索引在系统中同一时间被使用总数MaxNoOfUniqueHashIndexes=512 #设置最大的唯一索引的总数MaxNoOfAttributes=20480 #定义了可在簇中定义的属性数目MaxNoOfTriggers=10240#设置簇中触发程序对象的最大数目DiskCheckpointSpeedInRestart=100M #重启的时候本地检查点期间发送到磁#的速度 NoOfFragmentLogFiles=16 #该参数用于设置节点的REDO日志文件的个数 RedoBuffer=65M #设置redo日志缓存MaxNoOfConcurrentOperations=500000 #设置事务中同时更新的最大记录数MaxNoOfExecutionThreads=8#线程的数量 BatchSizePerLocalScan=512 #该参数用于计算锁定记录的数目SharedGlobalMemory=20M #这个参数设置用于日志缓冲、磁盘操作和表空间、#日志文件组、undo文件以及数据文件的元数据#的内存总数DiskPageBufferMemory=80M #设置硬盘上的缓存页的空间总量的大小tcp defaultportnumber=2202#通讯端口ndb_mgmd#管理节点IPdatadir=/home/mysql/data/mgmd_data#管理节点数据目录Nodeid=5#管理节点编号ndbd#数据节点IPdatadir=/home/mysql/data/ndb_data#数据节点数据目录NodeId=1#数据节点编号ndbd#数据节点IPNodeId=2#数据节点编号datadir=/home/mysql/data/ndb_data#数据节点数据目录ndbd#数据节点IPNodeId=3#数据节点编号datadir=/home/mysql/data/ndb_data#数据节点数据目录ndbd#数据节点IPNodeId=4#数据节点编号datadir=/home/mysql/data/ndb_data#数据节点数据目录mysqld#sql节点IPNodeId=6#sql节点编号mysqld#sql节点IPNodeId=7#sql节点编号MYSQLD#空闲sql节点(一般和实际SQL节点数据相同)MYSQLD 5、 管理节点启动命令第一次启动:ndb_mgmd -f /home/mysql/conf/config.ini -configdir=/home/mysql/conf/ -initial非第一次启动:ndb_mgmd -f /home/mysql/conf/config.ini -configdir=/home/mysql/conf/启动后可以输入ndb_mgm命令进入管理控制台,然后输入show命令查看节点状态,如下图所示:二、 SQL节点安装1、 登陆系统建立目录结构mkdir p /home/mysql/data/ mysqld_datamkdir /home/mysql/confmkdir /home/mysql/mysqlc2、 解压压缩包tar zxvf cd 3mv * ./mysqlccd .rm rf 33、 设置环境变量在.bash_profile文件的PATH后面加入如下信息/home/mysql/mysqlc/binvi /.bash_profile加入后,文件如下所示加入后执行如下命令使配置生效:. /.bash_profile4、 在/home/mysql/conf目录下建立f文件,然后在文件中配置各节点信息,如下所示:mysqldndbclusterdatadir=/home/mysql/data/mysqld_databasedir=/home/mysql/mysqlcport=5000socket=/tmp/mysql.sockMYSQL_CLUSTER 5、 第一次安装sql节点后要执行如下脚本,该脚本只执行一次。cd /home/mysql/mysqlc./scripts/mysql_install_db -no-defaults -datadir=$HOME/data/mysqld_data/6、 管理节点启动命令mysqld -defaults-file=/home/mysql/conf/f &7、 此配置过程在每个sql节点都一样三、 数据节点安装1、 登陆系统建立目录结构mkdir p /home/mysql/data/ndb_datamkdir /home/mysql/confmkdir /home/mysql/mysqlc2、 解压压缩包tar zxvf cd 3mv * ./mysqlccd .rm rf 33、 设置环境变量在.bash_profile文件的PATH后面加入如下信息/home/mysql/mysqlc/binvi /.bash_profile加入后,文件如下所示加入后执行如下命令使配置生效:. /.bash_profile4、 数据节点不需要任何配置,只是在启动的时候指定管理节点ip即可。5、 管理节点启动命令第一次启动命令:5.22:1186 -initial非第一次启动命令:nd5.22:1186 注意:如果在启动的时候加入initial参数,那么会将用于备份和还原的日志信息都会清空,也就是说会将数据库中的数据删除掉。在启动的时候一定要注意。方案测试一、 测试工具压力测试工具使用的是mysql自带的mysqlslap压力测试工具。mysqlslap:mysql自带的一个压力测试工具,自版本之后的MySQL client 包含了此工具,下载mysql client rpm包安装后可直接使用。在 使用mysqlslap的时候,可以指定sql语句或者是包含sql语句的文件,如果是文件,那么文件中的每一行至少有一个语句(不能一个sql语句分成 两行或多行),因为默认的分隔符(delimiter)是换行符,当然,你也可以手动重置新的分隔符。另外,你也不能在文件中添加注 释,mysqlslap不支持。Mysqlslap参数说明:-concurrency代表并发数量,多个可以用逗号隔开,当然你也可以用自己的分隔符隔开,这个时候要用到-delimiter开关。-engines代表要测试的引擎,可以有多个,用分隔符隔开。-iterations代表要运行这些测试多少次。-auto-generate-sql 代表用系统自己生成的SQL脚本来测试。-auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的 -number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。比如倒数第二个结果2=200/100。-debug-info 代表要额外输出CPU以及内存的相关信息。-number-int-cols 代表示例表中的INTEGER类型的属性有几个。-number-char-cols 意思同上。-create-schema 代表自己定义的模式(在MySQL中也就是库)。-query 代表自己的SQL脚本。-only-print 如果只想打印看看SQL语句是什么,可以用这个选项。二、 压力测试建表及存储过程1. 建库、建表脚本:Create database cluster1; CREATE TABLE ndbtest ( id int(11) NOT NULL AUTO_INCREMENT, regtime datetime DEFAULT NULL, name varchar(200) DEFAULT NULL, PRIMARY KEY (id) ENGINE=ndb AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1 PACK_KEYS=0 ;2. 存储过程脚本DELIMITER $DROP PROCEDURE IF EXISTS p_test_t1_disk $CREATE PROCEDURE p_test_t1_disk()BEGINdeclare i int default 0;test: loopinsert into cluster1.ndbtest(regtime,name) values(sysdate(),md5(rand();set i=i+1;if i=10000 thenleave test;end if;end loop;END $DELIMITER ;3. 工具运行命令mysqlslap -concurrency=1 -iterations=1 -query=call cluster1.p_test_t1_disk; -number-of-queries=1 -utest -p111111 -h 10.28.64.21 -P50004. Mysqlslap运行结果截图 三、 测试结果 总查询数 线程数 插入数据(/w)完成每个查询的平均耗时(/s) 10011001249.9341005100496.58310010100406.77910015100407.79110020100409.544MYSQL REPLICATION方案介绍方案介绍Mysql Replication(MySQL主从复制)是MySQL数据库使用率非常高的一种技术,它使用某个数据库服务器为 主,然后在其他数据库服务器上进行复制,后面复制的数据库也称从数据库。MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个 其它服务器充当从服务器。在设置链式复制服务器时,从服务器本身也可以充当主服务器,如:a-b-c,b对于a来说是从服务器,但是它又 是c的主服务器。Mysql Replication(MySQL主从复制)主要用于:1.使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新;2.解决数据库读需求很高的情况:Mysql复制架构绝大部分都是使用一个主服务器(Master)带一个或者多个从服务器(Slave)的架构模式,这样可以适用于读压力比较大的应用, 这样的架构里面只要master和slave的压力不是太大(尤其是slave端压力)的话,异步复制的延时一般都可以容忍的。尤其是自slave端的复 制方式改成两个进程处理之后,更是减小了slave端的延时。而带来的效益是,对于数据实时性要求不是特别的敏感度的应用,只需要通过廉价的pc server来扩展slave的数量,将读压力分散到多台slave的机器上面,即可解决数据库端的读压力瓶颈。这在很大程度上解决了目前很多中小型网站 的数据库压力瓶颈问题,甚至有些大型网站也在使用类似方案解决数据库瓶颈。这个架构方案的实施也会比较廉价同时易于扩展。甚至还可以使用第三方软件来专门 将MySQL的读写进行分离。这类软件有:MySQL Proxy及Amoeba。二、Mysql Replication(MySQL主从复制)的原理:1、复制进程Mysql的复制(replication)是一个异步的复制,从一个Mysql instace(称之为Master)复制到另一个Mysql instance(称之Slave)。实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(Sql进程和IO进程),另外一个进程在 Master(IO进程)上。要实施复制,首先必须打开Master端的binary log(bin-log)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。复制的基本过程如下:1)、Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始 的日志)之后的日志内容;2)、Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;3)、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。实际上在老版本的Mysql的复制实现在Slave端并不是两个进程完成的,而是由一个进程完成。但是后来发现这样做存在较大的风险和性能问题,主要如下:首先,一个进程就使复制bin-log日志和解析日志并在自身执行的过程成为一个串行的过程,性能受到了一定的限制,异步复制的延迟也会比较长。另外,Slave端从Master端获取bin-log过来之后,需要接着解析日志内容,然后在自身执行。在这个过程中,Master端可能又产生了大量变化并声称了大量的日志。如果在这个阶段Master端的存储出现了无法修复的错误,那么在这个阶段所产生的所有变更都将永远无法找回。如果在Slave端的压力比较大的时候,这个过程的时间可能会比较长。所以,后面版本的Mysql为了解决这个风险并提高复制的性能,将Slave端的复制改为两个进程来完成。提出这个改进方案的人是Yahoo!的一位工程 师“Jeremy Zawodny”。这样既解决了性能问题,又缩短了异步的延时时间,同时也减少了可能存在的数据丢失量。当然,即使是换成了现在这样两个线程处理以后,同 样也还是存在slave数据延时以及数据丢失的可能性的,毕竟这个复制是异步的。只要数据的更改不是在一个事物中,这些问题都是会存在的。如果要完全避免 这些问题,就只能用mysql的cluster来解决了。不过mysql的cluster是内存数据库的解决方案,需要将所有数据都load到内存中,这样就对内存的要求就非常大了,对于一般的应用来说可实施性不是太大。2、复制实现级别 Mysql的复制可以是基于一条语句(Statement level),也可以是基于一条记录(Row level),可以在Mysql的配置参数中设定这个复制级别,不同复制级别的设置会影响到Master端的bin-log记录成不同的形式。Row Level:日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改。优点: 在row level模式下bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了。所以row level的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解。而且不会出现某些特定情况下的存储过程,或function,以及 trigger的调用和触发无法被正确复制的问题。缺点:row level下,所有的执行的语句当记录到日志中的时 候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如有这样一条update语句:update product set owner_member_id = b where owner_member_id = a,执行之后,日志中记录的不是这条update语句所对应额事件(mysql以事件的形式来记录bin-log日志),而是这条语句所更新的每一条 记录的变化情况,这样就记录成很多条记录被更新的很多个事件。自然,bin-log日志的量就会很大。尤其是当执行alter table之类的语句的时候,产生的日志量是惊人的。因为Mysql对于alter table之类的表结构变更语句的处理方式是整个表的每一条记录都需要变动,实际上就是重建了整个表。那么该表的每一条记录都会被记录到日志中。Statement Level:每一条会修改数据的sql都会记录到 master的bin-log中。slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行。优点:statement level下的优点首先就是解决了row level下的缺点,不需要记录每一行数据的变化,减少bin-log日志量,节约IO,提高性能。因为他只需要记录在Master上所执行的语句的细节,以及执行语句时候的上下文的信息。缺点:由于他是记录的执行语句,所以,为了让这些语句在slave端也能正确执行,那么他还必须记录每条语句在执行的时候的一些相关信息,也就是上下文信 息,以保证所有语句在slave端杯执行的时候能够得到和在master端执行时候相同的结果。另外就是,由于Mysql现在发展比较快,很多的新功能不 断的加入,使mysql得复制遇到了不小的挑战,自然复制的时候涉及到越复杂的内容,bug也就越容易出现。在statement level下,目前已经发现的就有不少情况会造测试环境信息服务器信息项项值操作系统CentOS release 5.6 64位Mysql Cluster 版本内存2GCPU3.20双核网络环境100M局域网部署2个master节点,两个slave节点,一个proxy节点,两个lvs+heartbeat节点机器IP数据节点编号34master节点信息slave节点信息机器IP数据节点编号122Mysql proxy节点信息机器IP数据节点编号5Lvs+heartbeat 节点信息机器IP数据节点编号3647Lvs虚拟ip节点信息机器IP数据节点编号10.28.64.1208机器安装环境机器IP用户名、密码安装路径路径说明sqlmy/sqlmy/home/sqlmy/mysql-standlonemysql程序安装路径/home/sqlmy/data/mysqldslave节点数据路径/home/mysql/conf配置文件路径sqlmy/sqlmy/home/sqlmy/mysql-standlonemysql程序安装路径/home/sqlmy/data/mysqldslave节点数据路径/home/sqlmy/data/proxyproxy节点数据路径/home/mysql/conf配置文件路径sqlmy/sqlmy/home/sqlmy/mysql-standlonemysql程序安装路径/home/sqlmy/data/mysqldmaster节点数据路径/home/mysql/conf配置文件路径sqlmy/sqlmy/home/sqlmy/mysql-standlonemysql程序安装路径/home/sqlmy/data/mysqldmaster节点数据路径/home/mysql/conf配置文件路径root/htcdtest/etc/ha.dHeartbeat配置文件路径/etc/ha.d/confLvs配置文件路径root/htcdtest/etc/ha.dHeartbeat配置文件路径/etc/ha.d/confLvs配置文件路径测试环境架构图架构图说明 架构图分为了五个区域:客户端、proxy节点、lvs+heartbeat节点、master节点、slave节点。客户端:对于MySQL簇,它们与标准的(非簇类)MySQL没有区别。换句话讲,能够从用PHP、Perl、C、C+、Java、Python、Ruby等编写的现有MySQL应用程序访问MySQL簇。proxy节点:MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负 载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。MySQL Proxy更强大的一项功能是实现“读写分离”,基本原理是让主数据库处理事务性查询,让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。Lvs+heartbeat:由于mysql+replication方案中master和slave的关系是一对多的关系,整个系统中只有一个master节点(写入节点),多个slave节点,那么master节点一旦down机后,整个系统的数据写入操作将瘫痪,对系统造成严重后果。为此引入了lvs和heartbeat工具,让这个系统的master和slave关系是多对多的关系,对master节点进行双机热备,以达到整个系统的高可用性。其中heartbeat工具负责对两个master节点进行不间断监听,一旦工作中的master节点停止工作后,那么备份master节点就会接管 ,让这个系统正常工作。Lvs工具的目的是向外提供一个虚拟ip以供proxy访问master,虚拟ip对应了两个实ip的maser节点,lvs还有一个功能是就是在两个master之间进行负载均衡。Master节点:Master节点中有两个master服务器,服务器之间是双机热备。Master服务器主要提供数据的写入功能,并将数据操作记录为二进制日志文件,当收到slave节点数据同步请求后master节点将会根据slave请求将制定的日志文件和该日志文件制定的位置以后的日志信息发送给slave节点以达到数据同步的目的。两个master之间的数据同步也是通过日志文件来进行数据同步,同步是以异步的方式进行。Slave节点: Slave中的服务器主要是提供读数据操作。Slave中的数据是通过master的日志文件进行同步,同步是以异步的方式进行。slave节点会想maser节点发送日志同步请求后收到master同步的日志文件后,slave服务器会分析日志文件进行一个redo的操作。Slave节点的数据可以都通过master节点同步,也可以通过级联方式进行同步。级联方式同步方式是某一个或两个slave节点从master节点同步数据,其他的slave节点通过这两个slave节点进行数据同步,不用通过master节点,这样可以减轻master节点的io负载。安装配置说明 软件下载说明:1、 软件下载地址:2、 安装版本: ipvsadm-1.24安装步骤说明:一、 安装master节点(两个master节点除了f配置文件中ip有点不同,其余配置相同)1、 登陆系统建立目录结构mkdir p /home/sqlmy/data/mysqldmkdir /home/mysql/confmkdir /home/mysql/ mysql-standlone2、 解压压缩包tar zxvf cd 3mv * ./mysqlccd .rm rf 33、 设置环境变量在.bash_profile文件的PATH后面加入如下信息/home/mysql/mysqlc/binvi /.bash_profile加入后,文件如下所示加入后执行如下命令使配置生效:. /.bash_profile4、 在/home/mysql/conf目录下建立f文件,然后在文件中配置各节点信息,如下所示:clientport = 4000socket = /home/sqlmy/mysql-standlone/mysql.sock#由于一台机器上启动了多个mysql服务,所有指定不同的socketmysqldport = 4000socket = /home/sqlmy/mysql-standlone/mysql.sock#由于一台机器上启动了多个mysql服务,所有指定不同的socketskip-lockingkey_buffer_size = 16Mmax_allowed_packet = 1Mtable_open_cache = 64sort_buffer_size = 512Knet_buffer_length = 8Kread_buffer_size = 256Kread_rnd_buffer_size = 512Kmyisam_sort_buffer_size = 8Mthread_cache_size=16basedir=/home/sqlmy/mysql-standlonedatadir=/home/sqlmy/data/mysqldbinlog-do-db=mm#同步的数据库thread_concurrency = 4log-bin=mysql-binbinlog_format=mixedserver-id = 3log-slave-updatesreplicate-do-db=mmslave-skip-errors=allmaster-host = 10.28.65.24# master-host =3,在24机器上应该用该配置master-user = replicationmaster-password = 111111master-port = 4000master-connect-retry = 2mysqldumpquickmax_allowed_packet = 16Mmysqlno-auto-rehashmyisamchkkey_buffer_size = 20Msort_buffer_size = 20Mread_buffer = 2Mwrite_buffer = 2Mmysqlhotcopyinteractive-timeoutsync_binlog=1auto_increment_increment=2auto_increment_offset=18、 第一次安装master节点后要执行如下脚本,该脚本只执行一次。cd /home/sqlmy/mysql-standlone./scripts/mysql_install_db -no-defaults -datadir=$HOME/data/mysqld_data/5、 master节点启动命令mysqld-defaults-file=/home/sqlmy/conf/f -socket=/home/sqlmy/mysql-standlone/mysql.sock &启动后用root账户连接到master节点后查看master信息:连接sql服务命令:mysql -uroot -P4000 -socket=/home/sqlmy/mysql-standlone/mysql.sock6、 建立sql日志同步用户并赋权限 create user replication identified by 111111; grant all on *.* to replication% IDENTIFIED BY 111111; grant all on *.* to replicationlocalhost IDENTIFIED BY 111111;FLUSH PRIVILEGES; 用户建立成功后可以用如下脚本连接mysql服务mysql ureplication p111111-P4000 -socket=/home/sqlmy/mysql-standlone/mysql.sock进入mysql控制台后可以用show master statusg查看master状态信息,如下图:用show slave statusG命令查看slave状态信息,如下图所示:如果要修改slave节点部分信息,可以用change master to parameter =value进行修改,如下所示:change master tomaster_host=10.28.65.24,Master_Port=4000,master_user=replication,master_password=111111,master_log_file=mysql-bin.000007,master_log_pos=728;二、 安装mysql proxy1、 登陆系统建立目录结构mkdir p /home/sqlmy/data/proxymkdir /home/mysql/confmkdir /home/sqlmy/mysql-proxy2、 解压压缩包cd mv * ./mysql-proxycd .rm rf 3、 设置环境变量在.bash_profile文件的PATH后面加入如下信息/home/mysql/ mysql-proxy /binvi /.bash_profile加入后,文件如下所示加入后执行如下命令使配置生效:. /.bash_profile4、 在/home/mysql/conf目录下建立mysql-f文件,然后在文件中配置各节点信息,如下所示:mysql-proxydaemon = truekeepalive = trueproxy-address=10.28.65.23:3306#对外提供访问的地址和端口proxy-backend-addresses=10.28.65.21:4000#写数据的ip和端口proxy-read-only-backend-addresses = 10.28.65.22:4000#读数据的ip和端口proxy-lua-script = /home/sqlmy/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lualog-level = debugadmin-username=proxyadmin-password=111111admin-lua-script=/home/sqlmy/mysql-proxy/lib/mysql-proxy/lua/admin.lua 5、 Mysql-proxy启动命令mysql-proxy -defaults-file=/home/sqlmy/conf/mysql-f &启动过后系统中出现如下两个进程代表启动成功:启动后可以通过代理ip和端口可以通过proxy管理端口连接到proxy服务查看代理的mysql服务信息连接进去后执行如下sql可以查看代理的mysql服务信息:select * from backends;结果如下图:三、 Lvs+heartbeat安装1、 为了安装方便,我们采用yum方式安装,所有在安装过程中要保证计算机能连接网络,并且都用root账号安装yum -y install libnetyum -y install heartbeatyum -y install heartbeat-ldirectordyum -y install ipvsadmyum y install heartbeat-guiyum y install heartbeat-develyum -y install heartbeat执行完上面安装后查看安装结果rpm -qa |grep heartbeat显示如下则证明安装成功modprobe softdog #加载软件狗驱动程序2、 建立目录拷贝配置配置文件 查看Heartbeat安装到那里rpm -q heartbeat d根据目录执行下面命令将原始配置文件拷贝到/etc/ha.d目录下面:mkdir /etc/ha.d/conf mkdir /etc/logcp cp ha.cf /etc/ha.dcp haresources /etc/ha.dcp 3、 在hosts文件中加入热备机器的ip和hostname(/etc/hosts)4、 修改ha.cf配置文件配置文件目录/etc/ha.d/ha.cf 修改后的配置文件如下所示: 其中信息为另一台热备机器的ip地址5、 修改haresources配置文件在该配置文件中加入如下信息:slaver3 IPaddr:10.28.65.120/24/eth0:0 ldirectord其中的ip是虚拟ip地址6、 修改ldirectord.cf配置文件(/etc/ha.d/conf/ldirectord.cf)修改后的信息如下所示:在修改配置文件过程中最好不要修改缩进方式,以防怪异错误信息。7、 启动lvs和heartbeatservice heartbeat start启动过后查看系统有如下进程则证明启动成功:查看ipvsadm服务是否正常,执行ipvsadm命令后如下图所示:如果没有包含虚拟ip和热备机器信息,则执行如下命令:/etc/ha.d/resource.d/ldirectord stopservice ipvsadm stopservice heartbeat stop/etc/ha.d/resource.d/ldirectord startservice ipvsadm startservice heartbeat start一切正常之后可以试图用如下方式检测热备是否生效:通过虚拟ip连接mysql服务: 如果出现上图所示,则证明lvs和heartbeat配置成功。四、 安装slave节点(所有slave节点配置都相同)1、 登陆系统建立目录结构mkdir p /home/sqlmy/data/mysqldmkdir /home/mysql/confmkdir /home/mysql/ mysql-standlone2、 解压压缩包tar zxvf cd 3mv * ./mysqlccd .rm rf 33、 设置环境变量在.bash_profile文件的PATH后面加入如下信息/home/mysql/mysqlc/binvi /.bash_profile加入后,文件如下所示加入后执行如下命令使配置生效:. /.bash_profile4、 在/home/mysql/conf目录下建立f文件,然后在文件中配置各节点信息,如下所示:clientport = 4000socket = /home/sqlmy/mysql-standlone/mysql.sockmysqldport = 4000socket = /home/sqlmy/mysql-standlone/mysql.sockskip-lockingkey_buffer_size
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!