一、 概述 (一) LVS 1. 概述 使用LVS架设的服务器集群系统从体系结构上看是透明的,最终用户只感觉到一个虚拟服务器。物理服务器之间可以通过高速的LAN或分布在各地的WAN相连。最前端是负载均衡器,它负责将各种服务请求分发给后面的物理服务器,让整个集群表现得象一个服务于同一IP地址的虚拟服务器。 一个完整的负载均衡项目,由虚拟服务器、故障隔离及失败切换3个功能框架组成。 虚拟服务器是负载均衡体系的基本结构,分为:负载均衡器和真实服务器。 虚拟服务器最主要的功能是提供包转发和负载均衡,由ipvsadm脚本来具体实现。 故障隔离:虚拟服务器中的某个真实服务器失效,系统将自动从转发队列中清理出来,从而保证用户访问正确性,当故障处理后,系统再自动加入转发队列。 失败切换:针对负载均衡器采取的措施,当猪负载均衡器出现故障,备用自动接管主负载均衡器的工作,恢复后恢复到初始角色。 实现虚拟服务器、故障隔离及失败切换由ipvsdam和keepalived来实行。(也可以使用heartbeat来实现,但复杂) LVS集群系统具有良好的可扩展性和高可用性。 可扩展性是指,LVS集群建立后,可以很容易地根据实际的需要增加或减少物理服务器。而高可用性是指当检测到服务器节点或服务进程出错、失效时,集群系统能够自动进行适当的重新调整系统。 Linux Virtual Server的主要是在负载均衡器上实现的,负载均衡器是一台加了LVS Patch的2.2.x版另外,还需要根据LVS应用对物理服务器进行恰当的配置。 以下将分别讲述一下三种模式的工作原理和优缺点。 1) NAT Virtual Server via NAT方法的最大优点是集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。 这种实现方法的最大的缺点是扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。 Virtual Server via NAT能够满足许多服务器的服务性能需求。即使是是负载均衡器成为整个系统的瓶颈,如果是这样也有两种方法来解决它。一种是混合处理,另一种是采用Virtual Server via IP tunneling或Virtual Server via direct routing。如果采用混合处理的方法,将需要许多同属单一的RR DNS域。你采用Virtual Server via IP tunneling或Virtual Server via direct routing以获得更好的可扩展性。也可以嵌套使用负载均衡器,在最前端的是VS-Tunneling 或VS-Drouting的负载均衡器,然后后面采用VS-NAT的负载均衡器。 2) TUN 采用VS-NAT方式,请求与应答包都需要经过负载均衡器,那么当服务器节点增长到20个或更多时,这个负载均衡器就可能成为新的瓶颈。我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。 而使用VS-TUN方式的话,负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。 IP tunneling(IP隧道)能够用于架构一个高性能的virtual server,非常适合构建virtual proxy server,因为当代理服务器收到了请求,能够让最终用户直接与服务器联系。 但是,这种方式需要所有的服务器支持IP Tunneling(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。 3) DR 就象VS-TUN一下,在VS-DR方式下,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。这种方式能够大大提高Virtual Server的可扩展性。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,但它要求负载均衡器的网卡必须与物理网卡在一个物理段上。 而且VS-DR模式,可以使用大多数操作系统做为物理服务器,其中包括:Linux 2.0.36、 2.2.9、2.2.10、2.2.12;Solaris 2.5.1、2.6、2.7;FreeBSD 3.1、3.2、3.3;NT4.0无需打补丁;IRIX 6.5;HPUX11等 3. 负载均衡调度算法 目前系统有八种负载均衡调度算法,具体如下: 1) rr 轮叫(Round Robin)调度器通过‖轮叫‖调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载. 2) wrr 加权轮叫(Weighted Round Robin)调度器通过‖加权轮叫‖调度算法根据真实服务器的不同处理能力来调度访问请求.这样可以保证处理能力强的服务器处理更多的访问流量.调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。 3) lc 最少链接(Least Connections)调度器通过‖最少连接‖调度算法动态地将网络请求调度到已建立的链接数最少的服务器上.如果集群系统的真实服务器具有相近的系统性能,采用‖最小连接‖调度算法可以较好地均衡负载. 4) wlc 加权最少链接(Weighted Least Connections)在集群系统中的服务器性能差异较大的情况下,调度器采用‖加权最少链接‖调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载.调度器可以自动问询真实服务器的负载情况,并动态地调整其权值. 5) lblc 基于局部性的最少链接(Locality-Based Least Connections)―基于局部性的最少链接‖ 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统.该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发 送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用‖最少链接‖的原则选出一个可用的服务器,将请求发送到该服务器. 6) lblcr 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)―带复制的基于局部性最少链接‖调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统.它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射.该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按‖最小连接‖原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按‖最小连接‖原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器.同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度. 7) dh 目标地址散列(Destination Hashing)―目标地址散列‖调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空. 8) sh 源地址散列(Source Hashing)―源地址散列‖调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空. 4. IPVS IPVS是整个负载均衡的基础,如果没有这个基础的话,故障隔离与失败切换毫无意义。IPVS有IPVSADM来实现的。 LVS客户端是指负载均衡器/转发器后面提供服务的服务器。 负载均衡分为直接路由模式DR、网络地址转发模式NAT及隧道模式TUN三种。 LVS客户端的配置是根据其采用的负载均衡种类来做相应操作的。 为了获得最高性能,采用直接路由模式DR。 (二) Keepalived 1. 概述 Keepalived是运行在lvs之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败切换FailOver。 (三) MySQL Cluster 1. 概述 MySQL Cluster是MySQL适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器。在MyQL 5.0及以上的二进制版本中、以及与最新的Linux版本兼容的RPM中提供了该存储引擎。 MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署―内存中‖数据库的 Cluster 。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。 MySQL Cluster 由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDB Cluster 的数据节点,管理服务器,以及(可能)专门的数据访问程序。关于 Cluster 中这些组件的关系,请参见下图: 所有的节点构成一个完成的MySQL集群体系。数据保存在―NDB存储服务器‖的存储引擎中,表(结构)则保存在―MySQL服务器‖中。应用程序通过―MySQL服务器‖访问这些数据表,集群管理服务器通过管理工具(ndb_mgmd)来管理―NDB存储服务器‖。 通过将MySQL Cluster 引入开放源码世界,MySQL为所有需要它的人员提供了具有高可用性、高性能和可缩放性的 Cluster 数据管理。 1) 优点 99.999,的高可用性 快速的自动失效切换 灵活的分布式体系结构,没有单点故障 高吞吐量和低延迟 可扩展性强,支持在线扩容 2) 缺点: 存在很多限制,如:不支持外键,数据行不能超过8K(不含BLOB和text的数据) 部署、管理、配置很复杂占用磁盘空间大,MySQL Cluster 能够使用多种故障切换和负载平衡选项配置NDB存储引擎,但在 Cluster 级别上的存储引擎上做这个最简单。MySQL Cluster的NDB存储引擎包含完整的数据集,仅取决于 Cluster本身内的其他数据。 目前,MySQL Cluster的 Cluster部分可独立于MySQL服务器进行配置。在MySQL Cluster中, Cluster的每个部分被视为1个节点。 1) 管理(MGM)节点 这类节点的作用是管理MySQL Cluster内的其他节点,如提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。MGM节点是用命令―ndb_mgmd‖启动的。 2) 数据节点 这类节点用于保存 Cluster的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。不过没有必要设置多个副本。数据节点是用命令―ndbd‖启动的。 3) SQL节点 这是用来访问 Cluster数据的节点。对于MySQL Cluster,客户端节点是使用NDB Cluster存储引擎的传统MySQL服务器。通常,SQL节点是使用命令―mysqld –ndbcluster‖启动的,或将―ndbcluster‖添加到―my.cnf‖后使用―mysqld‖启动。 3. 注意事项 所有的节点的主机上尽量和确保环境一致,包括数据库版本~ 在MYSQLD节点上需要安装支持cluster的Mysql server。 在安装NDB节点时,如果需要各个节点环境尽可能保存一致,建议在NDB和mysql 节点一样安装整个带有NDB cluster储存引擎。 (四) 搭建环境说明 2. 网络拓扑 二、 LVS (一) LVS核心-IPVS 1. 安装IPVSADM 1) 下载ipvsadm,在172.16.1.100进行操作 wget 2) 创建连接文件 ln -sv /usr/src/kernels/2.6.32-71.29.1.el6.i686 /usr/src/Linux ln -sv /usr/src/kernels/2.6.32-71.29.1.el6.i686 /usr/src/linux 注: a、红色字体部分可根据实际情况予以修改,可用ls /usr/src/kernels/ 进行查看。 b、连个命令必须都执行,不然将出现找不到*.h这个错误,成为无法安装~ 3) 解压包 tar zxvf ipvsadm-1.24.tar.gz 4) 编译及安装,需要安装gcc软件 yum -y install gcc* make cd ipvsadm-1.24 make make install 5) 检验安装是否正确 执行ipvsadm,提示: IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn 6) 配置ipvsadm的启动文件 vi /usr/local/sbin/lvs-dr.sh,内容如下: #!/bin/bash # description: start LVS of DirectorServer #Written by :NetSeek GW=172.16.1.1 # website director vip. MySQL_VIP=172.16.1.99 MySQL_RIP1=172.16.1.101 MySQL_RIP2=172.16.1.102 source /etc/rc.d/init.d/functions logger $0 called with $1 case "$1" in start) # set squid vip /sbin/ipvsadm --set 30 5 60 /sbin/ifconfig eth0:0 $MySQL_VIP broadcast $MySQL_VIP netmask 255.255.255.255 broadcast $MySQL_VIP up /sbin/route add -host $MySQL_VIP dev eth0:0 /sbin/ipvsadm -A -t $MySQL_VIP:3306 -s wrr -p 3 /sbin/ipvsadm -a -t $MySQL_VIP:3306 -r $MySQL_RIP1:3306 -g -w 1 /sbin/ipvsadm -a -t $MySQL_VIP:3306 -r $MySQL_RIP2:3306 -g -w 1 touch /var/lock/subsys/ipvsadm >/dev/null 2>&1; stop) /sbin/ipvsadm -C /sbin/ipvsadm -Z ifconfig eth0:0 down route del $MySQL_VIP rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1 echo "ipvsadm stoped" status) if [ ! -e /var/lock/subsys/ipvsadm ];then echo "ipvsadm stoped" exit 1 else echo "ipvsadm OK" fi ;; *) echo "Usage: $0 {start|stop|status}" exit 1 esac exit 0 7) 配置自启动 chmod +x /usr/local/sbin/lvs-dr.sh vi /etc/rc.local,添加如下内容: sleep 10 /usr/local/sbin/lvs-dr.sh start 8) 在172.16.1.101和172.16.1.102上添加如下脚本 vi /usr/local/bin/lvs_real,内容如下: #!/bin/bash #description : start realserver VIP=172.16.1.99 source /etc/rc.d/init.d/functions case "$1" in start) echo "start LVS of REALServer" /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce; stop) /sbin/ifconfig lo:0 down echo "close LVS Directorserver" echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce ;; *) echo " Usage: $0 {start|stop} " exit 1 esac 参数说明: a、vip(virtual ip)。直接路由模式的vip必须跟服务器对外提供服务的ip地址在同一个网段,并且lvs 负载均衡器和其他所有提供相同功能的服务器都使用这个vip. b、vip被绑定在环回接口lo0:0上,其广播地址是其本身,子网掩码是255.255.255.255。 这与标准的网络地址设置有很大的不同。采用这种可变长掩码方式把网段划分成只含一个主机地址的目的是避免ip地址冲突。 c、echo ―1‖,echo ―2‖ 这段的作用是抑制arp广播。 9) 在172.16.1.101和172.16.1.102上执行如下命令 chmod +x /usr/local/bin/lvs_real 10) 在172.16.1.101和172.16.1.102的执行如下命令 vi /etc/rc.local,添加如下内容: /usr/local/bin/lvs_real start 三、 故障隔离、失败切换框架keepalived(172.16.1.100) (一) 安装Keepalived 1. 下载keepalived wget 2. 解压包 tar zxvf keepalived-1.2.2.tar.gz 3. 编辑及安装 cd keepalived-1.2.2 ./configure -prefix=/usr/local/keepalived make ; make install (二) 添加keepalived为系统服务 cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ chkconfig --add keepalived chkconfig keepalived on (三) 添加配置文件keepalived.conf 1. 配置文件 mkdir /etc/keepalived vi /etc/keepalived/keepalived.conf,添加如下内容: ! Configuration File for keepalived global_defs { notification_email { admin@mail.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.1.201 smtp_connect_timeout 30 router_id LVS_MYSQL } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 2 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.16.1.99 } } virtual_server 172.16.1.99 3306 { delay_loop 2 lb_algo rr lb_kind DR persistence_timeout 60 protocol TCP real_server 172.16.1.101 3306 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } real_server 172.16.1.102 3306 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 3306 } } } 2. 配置文件说明 1) 全局定义块 A、email通知。作用:有故障,发邮件报警。这是可选项目。 B、Lvs负载均衡器标识(lvs_id)。在一个网络内,它应该是唯一的。 C、花括号―{}‖。如果写漏了,keepalived运行时,不会得到预期的结果。由于定义块内存在嵌套关系,因此很容易遗漏结尾处的花括号,这点要特别注意。 2) VRRP定义块 A、同步vrrp组vrrp_sync_group。作用:确定失败切换(FailOver)包含的路由实例个数。 B、实例组group.至少包含一个vrrp实例。 C、Vrrp实例vrrp_instance.实例名出自实例组group所包含的那些名字。 a、实例状态state:只有MASTER和BACKUP两种状态,并且需要大写。其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的系统会自动把它的状态有BACKUP变换成MASTER;当失效的MASTER所在的系统恢复时,BACKUP从MASTER恢复到BACKUP状态。 b、通信接口interface。对外提供服务的网络接口,在选择服务接口时,一定要核实清楚。 c、lvs_sync_daemon_inteface。负载均衡器之间的监控接口,类似于HA HeartBeat的心跳线。但它的机制优于Heartbeat,因为它没有―裂脑‖这个问题,它是以优先级这个机制来规避这个麻烦的。在DR模式中,lvs_sync_daemon_inteface 与服务接口interface 使用同一个网络接口。 d、虚拟路由标识virtual_router_id.这个标识是一个数字,并且同一个vrrp实例使用唯一的标识。即同一个vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同时在整个vrrp内是唯一的。 e、优先级priority.这是一个数字,数值愈大,优先级越高。在同一个vrrp_instance里,MASTER 的优先级高于BACKUP。若MASTER的priority值为150,那么BACKUP的priority 只能是140或更小的数值。 f、同步通知间隔 advert_int .MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位为秒。 g、验证authentication。包含验证类型和验证密码。类型主要有PASS、AH两种,通常使用的类型为PASS,据说AH使用时有问题。验证密码为明文,同一vrrp实例MASTER与BACKUP 使用相同的密码才能正常通信。 D、虚拟ip地址virtual_ipaddress :可以有多个地址,每个地址占一行,不需要指定子网掩码。注意:这个ip必须与我们在lvs客户端设定的vip相一致~ a、虚拟服务器virtual_server定义块:虚拟服务器定义是keepalived框架最重要的项目了,是keepalived.conf必不可少的部分。 b、虚拟服务器virtual_server:这个ip来自于vrrp定义块的第―4‖步,后面一个空格,然后加上端口号。定义一个vip,可以实现多个tcp端口的负载均衡功能。 c、delay_loop。健康检查时间间隔,单位是秒。 d、lb_algo. 负载均衡调度算法,互联网应用常使用wlc或rr。 e、lb_kind. 负载均衡转发规则。一般包括DR,NAT,TUN3种,在我的方案中,都使用DR的方式。 f、persistence_timeout会话保持时间,单位是秒。这个选项对动态网站很有用处:当用户从远程用帐号进行登陆网站时,有了这个会话保持功能,就能把用户的请求转发给同一个应用服务器。在这里,我们来做一个假设,假定现在有一个lvs 环境,使用DR转发模式,真实服务器有3个,负载均衡器不启用会话保持功能。当用户第一次访问的时候,他的访问请求被负载均衡器转给某个真实服务器,这样他看到一个登陆页面,第一次访问完毕;接着他在登陆框填写用户名和密码,然后提交;这时候,问题就可能出现了—登陆不能成功。因为没有会话保持,负载均衡器可能会把第2次的请求转发到其他的服务器。 g、转发协议protocol.一般有tcp和udp两种。实话说,我还没尝试过udp协议类的转发。 h、真实服务器real_server.也即服务器池。Real_server的值包括ip地址和端口号。多个连续的真实ip,转发的端口相同。 i、权重weight.权重值是一个数字,数值越大,权重越高。使用不同的权重值的目的在于为不同性能的机器分配不同的负载,性能较好的机器,负载分担大些;反之,性能差的机器,则分担较少的负载,这样就可以合理的利用不同性能的机器资源。 j、Tcp检查 tcp_check。 四、 MySQL Cluster 1. 安装MySQL Cluster 1) 在172.16.1.100载并安装,MySQL-Cluster-gpl-management,MySQL-Cluster-gpl-tools。 rpm -ivh MySQL-Cluster-gpl-management-7.1.15-1.rhel5.i386.rpm rpm -ivh MySQL-Cluster-gpl-tools-7.1.15-1.rhel5.i386.rpm 2) 在172.16.1.101和172.16.1.102下载并安装MySQL-Cluster-gpl-server、 MySQL-Cluster-gpl-client和MySQL-Cluster-gpl-storage rpm -ivh MySQL-Cluster-gpl-server-7.1.15-1.rhel5.i386.rpm rpm -ivh MySQL-Cluster-gpl-client-7.1.15-1.rhel5.i386.rpm rpm -ivh MySQL-Cluster-gpl-storage-7.1.15-1.rhel5.i386.rpm 2. 配置管理节点(172.16.1.100) mkdir /var/lib/mysql-cluster vi /var/lib/mysql-cluster/cluster.conf,添加如下内容: [NDBD DEFAULT] NoOfReplicas=2 DataMemory=300M IndexMemory=75M TransactionDeadLockDetectionTimeOut=60000 [TCP DEFAULT] portnumber=1186 [NDB_MGMD] nodeid=1 hostname=172.16.1.100 datadir=/var/lib/mysql-cluster [NDBD] nodeid=2 hostname=172.16.1.101 datadir=/var/lib/mysql-cluster MaxNoOfOrderedIndexes=2048 MaxNoOfAttributes=50000 [NDBD] nodeid=3 hostname=172.16.1.102 datadir=/var/lib/mysql-cluster MaxNoOfOrderedIndexes=2048 MaxNoOfAttributes=50000 [MYSQLD] nodeid=4 hostname=172.16.1.101 [MYSQLD] nodeid=5 hostname=172.16.1.102 3. 配置sql节点和db节点 1) 172.16.1.101和172.16.1.102节点 vi /etc/my.conf,添加并覆盖= 3306 socket = /var/lib/mysql/mysql.sock # Here follows entries for some specific programs # The MySQL server [mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock skip-locking skip-name-resolve key_buffer_size = 16M max_allowed_packet = 1M table_open_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M character_set_server = utf8 ndbcluster ndb-connectstring = 172.16.1.100:1186 [mysql_cluster] ndb-connectstring = 172.16.1.100:1186 # Don‘t listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! # #skip-networking # Replication Master Server (default) # binary logging is required for replication #log-bin=mysql-bin # binary logging format - mixed recommended #binlog_format=mixed # required unique id between 1 and 2 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted #server-id = 1 # Replication Slave (comment out master section to use this) # # To configure this host as a replication slave, you can choose between # two methods : # # 1) Use the CHANGE MASTER TO command (fully described in our manual) - # the syntax is: # # CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>, # MASTER_USER=<user>, MASTER_PASSWORD=<password> ; # # where you replace <host>, <user>, <password> by quoted strings and # <port> by the master‘s port number (3306 by default). # # Example: # # CHANGE MASTER TO MASTER_HOST=?125.564.12.1‘, MASTER_PORT=3306, # MASTER_USER=?joe‘, MASTER_PASSWORD=?secret‘; # # OR # # 2) Set the variables below. However, in case you choose this method, then # start replication for the first time (even unsuccessfully, for example # if you mistyped the password in master-password and the slave fails to # connect), the slave will create a master.info file, and any later # change in this file to the variables‘ values below will be ignored and # overridden by the content of the master.info file, unless you shutdown # the slave server, delete master.info and restart the slaver server. # For that reason, you may want to leave the lines below untouched # (commented) and instead use CHANGE MASTER TO (see above) # # required unique id between 2 and 2 - 1 # (and different from the master) # defaults to 2 if master-host is set # but will not function as a slave if omitted #server-id = 2 # # The replication master for this slave - required #master-host = <hostname> # # The username the slave will use for authentication when connecting # to the master - required #master-user = <username> # # The password the slave will authenticate with when connecting to # the master - required #master-password = <password> # # The port the master is listening on. # optional - defaults to 3306 #master-port = <port> # # binary logging - not required for slaves, but recommended #log-bin=mysql-bin # Uncomment the following if you are using InnoDB tables #innodb_data_home_dir = /var/lib/mysql #innodb_data_file_path = ibdata1:10M:autoextend #innodb_log_group_home_dir = /var/lib/mysql # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high #innodb_buffer_pool_size = 16M #innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size #innodb_log_file_size = 5M #innodb_log_buffer_size = 8M #innodb_flush_log_at_trx_commit = 1 #innodb_lock_wait_timeout = 50 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout 2) 在172.16.1.101和172.16.1.102节点执行如下命令: useradd -M -d /dev/null -s /sbin/nologin -c "Mysql Cluster" mysql chown mysql:mysql /var/lib/mysql-cluster 4. 启动集群 1) 启动管理节点 ndb_mgmd -f /var/lib/mysql-cluster/cluster.conf 2) 启动数据节点 ndbd --initial 注: 红色字体部分尽在第一次启动数据节点时执行。 3) 启动sql节点 /etc/init.d/mysql start /usr/bin/mysqladmin -u root password ?MyMysqlPassword‘ 5. 确认集群状态,在管理节点(ClusterMgm)里执行 ndb_mgm -- NDB Cluster -- Management Client -- ndb_mgm> show Connected to Management Server at: localhost:1186 Cluster Configuration --------------------- [ndbd(NDB)] 3 node(s) id=2 @172.16.1.101 (mysql-5.1.56 ndb-7.1.15, Nodegroup: 0, *) id=3 @172.16.1.102 (mysql-5.1.56 ndb-7.1.15, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @192.168.0.100 (mysql-5.1.56 ndb-7.1.15) [mysqld(API)] 3 node(s) id=4 @172.16.1.101 (mysql-5.1.56 ndb-7.1.15) id=5 @172.16.1.102 (mysql-5.1.56 ndb-7.1.15) ?非常重要: 1.在建表的时候一定要用ENGINE=NDB或ENGINE=NDBCLUSTER指定使用NDB集群 存储引擎,或用ALTER TABLE选项更改表的存储引擎,否则数据节点无法进行数据同步。 2.NDB表必须有一个主键,因此创建表的时候必须定义主键,否则NDB存储引擎将自动 生成隐含的主键。 6. 其他命令: 1) 关闭管理节点: ndb_mgm -e shutdown 2) 启动管理并重新加载配置: ndb_mgm -f /var/lib/mysql-cluster/cluster.conf --reload
信息发布:广州名易软件有限公司 http://www.myidp.net
|