实践:搭建基于Load Balancer的MySql Cluster

服务器规划: 整套系统全部在rhel5u1 server 64位版本下,由基于xen的虚拟机搭建,其中集群管理节点*2、SQL节点*2、数据节点*4、Web服务节点*2组成,其中数据节点做成2个组,每组两台的形式:

  1. 虚拟机mysql_mgm-1, 192.168.20.5:集群管理节点,id=1
  2. 虚拟机mysql_mgm-2, 192.168.20.6:集群管理节点,id=2
  3. 虚拟机mysql_sql-1,192.168.20.7:SQL节点,mysql服务器节点,id=3
  4. 虚拟机mysql_sql-2,192.168.20.8:SQL节点,mysql服务器节点,id=4
  5. 虚拟机mysql_ndb-1:192.168.20.9:ndb数据节点,id=5
  6. 虚拟机mysql_ndb-2:192.168.20.10:ndb数据节点,id=6
  7. 虚拟机mysql_ndb-3:192.168.20.11:ndb数据节点,id=7
  8. 虚拟机mysql_ndb-4:192.168.20.12:ndb数据节点,id=8
  9. 虚拟机mysql_lb-1:192.168.20.15:LVS负载均衡节点1
  10. 虚拟机mysql_lb-2:192.168.20.16:LVS负载均衡节点2
  11. 集群的虚拟IP是:192.168.20.17
  12. 负载均衡使用rhel自带的软件做。

-----------------------------------------------------------------------------------------------------------
安装过程:
1. 在所有节点上安装mysql: 我没有下载mysql源代码再编译安装,感觉机器太多编译太麻烦。我去mysql.com上下载社区版本,并且是针对我的rhel 5.1 server 64位版本的mysql软件,下载地址是: http://dev.mysql.com/downloads/m ... hel5-x86-64bit-rpms 下载这下面所有rpm包并安装,其中Shared libraries和Shared compatibility libraries只能二选一安装,装好以后mysql服务、集群相关工具等都有了,很方便。
2. (1) 在所有管理 Node上建立配置文件/etc/config.ini(注:这个文件只有管理节点上需要,其它节点上是不需要的):

  1. [NDBD DEFAULT]
  2. NoOfReplicas=2
  3. DataMemory=600M
  4. IndexMemory=100M
  5. [NDB_MGMD]
  6. id=1
  7. hostname=192.168.20.5
  8. DataDir=/var/lib/mysql-cluster
  9. [NDB_MGMD]
  10. id=2
  11. hostname=192.168.20.6
  12. DataDir=/var/lib/mysql-cluster
  13. [MYSQLD]
  14. id=3
  15. HostName=192.168.20.7
  16. [MYSQLD]
  17. id=4
  18. HostName=192.168.20.8
  19. [NDBD]
  20. id=5
  21. HostName=192.168.20.9
  22. [NDBD]
  23. id=6
  24. HostName=192.168.20.10
  25. [NDBD]
  26. id=7
  27. HostName=192.168.20.11
  28. [NDBD]
  29. id=8
  30. HostName=192.168.20.12

-----------------------------------------------------------------------------------------------------------

(2) 分别开启管理node上的管理程序ndb_mgmd(本地监听1186端口),先启动id=1的节点,再启动id=2的节点,整个集群以id=2的节点为主要管理节点(谁后启动谁就是主要管理节点,关于这一点我还需要论证一下): ndb_mgmd -f  /etc/config.ini 注:本server上不需要启动mysql服务(所以不需要配置/etc/my.cnf文件)。必须在在开启ndb node和sql node上的服务以前开启ndb_mgmd。
3.(1) 在所有ndb node上原有的/etc/my.cnf文件里增加以下内容:

  1. [mysqld]
  2. ndbcluster
  3. # IP address of the cluster management node
  4. ndb-connectstring=192.168.20.5
  5. ndb-connectstring=192.168.20.6
  6. [mysql_cluster]
  7. # IP address of the cluster management node
  8. ndb-connectstring=192.168.20.5
  9. ndb-connectstring=192.168.20.6

-----------------------------------------------------------------------------------------------------------

注:ndb节点上不需要/etc/config.ini文件。
(2) 在所有ndb node上第一次执行命令: mkdir /var/lib/mysql-cluster cd /var/lib/mysql-cluster ndbd --initial
注:ndb node上不启动mysql服务。正常情况下使用“ndbd”命令启动ndb node,只有节点发生改变或者其它情况才需要带--initial参数。
4. (1)在sql node上建立新的my.cnf文件:

  1. [mysqld]
  2. port=3306
  3. ndbcluster
  4. ndb-connectstring=192.168.20.5
  5. ndb-connectstring=192.168.20.6
  6. [ndbd]
  7. connect-string=192.168.20.9
  8. [ndbd]
  9. connect-string=192.168.20.10
  10. [ndbd]
  11. connect-string=192.168.20.11
  12. [ndbd]
  13. connect-string=192.168.20.12
  14. [ndbd_mgm]
  15. connect-string=192.168.20.5
  16. connect-string=192.168.20.6
  17. [ndbd_mgmd]
  18. config-file=/etc/config.ini
  19. [mysql_cluster]
  20. ndb-connectstring=192.168.20.5
  21. ndb-connectstring=192.168.20.6

-----------------------------------------------------------------------------------------------------------

注:sql node上只需要启动Mysql服务:/etc/init.d/mysql start,不需要配置/etc/my.cnf文件。
5. (1) 在所有管理 node上运行集群管理程序: ndb_mgm
在提示符这里输入命令“show”,命令的输出结果中可以看到四个ndb node全部连到管理节点,两个管理节点上的输出是一样的:

  1. Connected to Management Server at: 192.168.20.5:1186
  2. Cluster Configuration
  3. ---------------------
  4. [ndbd(NDB)]     4 node(s)
  5. id=5    @192.168.20.9  (Version: 5.1.22, Nodegroup: 0, Master)
  6. id=6    @192.168.20.10  (Version: 5.1.22, Nodegroup: 0)
  7. id=7    @192.168.20.11  (Version: 5.1.22, Nodegroup: 1)
  8. id=8    @192.168.20.12  (Version: 5.1.22, Nodegroup: 1)
  9. [ndb_mgmd(MGM)] 2 node(s)
  10. id=1    @192.168.20.5  (Version: 5.1.22)
  11. id=2    @192.168.20.6  (Version: 5.1.22)
  12. [mysqld(API)]   2 node(s)
  13. id=3    @192.168.20.7  (Version: 5.1.22)
  14. id=4    @192.168.20.8  (Version: 5.1.22)

可以看到,所有节点都已连接到管理节点上。如果出现“not connected, accepting connect from any host)”,表示某个节点还没有连到管理节点上。
从netstat命令的输出结果也可以看出所有节点都连到管理节点上:

  1. tcp        0      0 192.168.20.5:1186           192.168.20.7:48066          ESTABLISHED
  2. tcp        0      0 192.168.20.5:1186           192.168.20.7:48065          ESTABLISHED
  3. tcp        0      0 192.168.20.5:1186           192.168.20.12:48677         ESTABLISHED
  4. tcp        0      0 192.168.20.5:1186           192.168.20.9:37060          ESTABLISHED
  5. tcp        0      0 192.168.20.5:1186           192.168.20.9:37061          ESTABLISHED
  6. tcp        0      0 192.168.20.5:1186           192.168.20.9:37062          ESTABLISHED
  7. tcp        0      0 192.168.20.5:1186           192.168.20.9:50631          ESTABLISHED
  8. tcp        0      0 192.168.20.5:1186           192.168.20.11:33977         ESTABLISHED
  9. tcp        0      0 192.168.20.5:1186           192.168.20.10:55260         ESTABLISHED

(2) 在任一ndb node上看连接(以20.9为例),都可以看到本node和其他3个ndb node(10/11/12)、管理node(5/6)、sql node(7/8)都有连接,除了和管理node的连接是到1186端口,其它连接都是随机端口。

  1. tcp        0      0 192.168.20.9:59318          192.168.20.11:49124         ESTABLISHED
  2. tcp        0      0 192.168.20.9:37593          192.168.20.7:33593          ESTABLISHED
  3. tcp        0      0 192.168.20.9:55146          192.168.20.10:46643         ESTABLISHED
  4. tcp        0      0 192.168.20.9:48657          192.168.20.12:46097         ESTABLISHED
  5. tcp        0      0 192.168.20.9:55780          192.168.20.8:41428          ESTABLISHED
  6. tcp        0      0 192.168.20.9:58185          192.168.20.5:1186           ESTABLISHED
  7. tcp        0      0 192.168.20.9:54535          192.168.20.6:1186           ESTABLISHED

(3) 在任一sql node上看连接(以20.7为例),可以看到两个sql node都连接到管理node 20.6上(管理node中20.5先启动,20.6后启动):

  1. tcp        0      0 192.168.20.7:49726          192.168.20.6:1186           ESTABLISHED
  2. tcp        0      0 192.168.20.7:38498          192.168.20.10:58390         ESTABLISHED
  3. tcp        0      0 192.168.20.7:54636          192.168.20.12:40206         ESTABLISHED
  4. tcp        0      0 192.168.20.7:33593          192.168.20.9:37593          ESTABLISHED
  5. tcp        0      0 192.168.20.7:57676          192.168.20.11:37717         ESTABLISHED

7. mysql高可用性集群搭建完成,接下来用ipvs搭建负载均衡。
在所有mysql_sql节点上建立空库: create database loadbalancing;
设置权限,允许所有mysql_lb节点有select权限(用于心跳测试): grant select on loadbalancing.* to [email protected] identified by ‘abcdefg‘; grant select on loadbalancing.* to [email protected] identified by ‘abcdefg‘;
8.(1) 在管理节点上加载IPVS模块:

  1. modprobe ip_vs_dh
  2. modprobe ip_vs_ftp
  3. modprobe ip_vs
  4. modprobe ip_vs_lblc
  5. modprobe ip_vs_lblcr
  6. modprobe ip_vs_lc
  7. modprobe ip_vs_nq
  8. modprobe ip_vs_rr
  9. modprobe ip_vs_sed
  10. modprobe ip_vs_sh
  11. modprobe ip_vs_wlc
  12. modprobe ip_vs_wrr

(2) 在管理节点上配置LVS(20.15和20.16是两个负载均衡的节点,realserver是20.7和20.8,虚拟IP是20.17,端口是 3306)。可以启动/etc/init.d/piranha-gui,然后在http://localhost:3636里设置集群,最终生成配置文件 /etc/sysconfig/ha/lvs.cf,也可以直接生成这个文件/etc/sysconfig/ha/lvs.cf:

  1. serial_no = 37
  2. primary = 192.168.20.15
  3. service = lvs
  4. backup_active = 1
  5. backup = 192.168.20.16
  6. heartbeat = 1
  7. heartbeat_port = 539
  8. keepalive = 6
  9. deadtime = 18
  10. network = direct
  11. debug_level = NONE
  12. monitor_links = 1
  13. virtual MySql {
  14. active = 1
  15. address = 192.168.20.17 eth0:1
  16. vip_nmask = 255.255.255.0
  17. port = 3306
  18. expect = "OK"
  19. use_regex = 0
  20. send_program = "/usr/local/bin/mysql_running_test %h"
  21. load_monitor = none
  22. scheduler = wlc
  23. protocol = tcp
  24. timeout = 6
  25. reentry = 15
  26. quiesce_server = 0
  27. server mysql_sql-1 {
  28. address = 192.168.20.7
  29. active = 1
  30. weight = 1
  31. }
  32. server mysql_sql-2 {
  33. address = 192.168.20.8
  34. active = 1
  35. weight = 1
  36. }
  37. }

必须确保lvs.cf文件在两个负载均衡节点上都有,并且内容完全相同。
两个负载均衡节点上的探测脚本/usr/local/bin/mysql_running_test:

  1. #!/bin/sh
  2. # We use $1 as the argument in the TEST which will be the various IP‘s
  3. # of the real servers in the cluster.
  4. # Check for mysql service
  5. TEST=`echo ‘select "" as abcdefg‘ | mysql -uloadbalancing -pabcdefg -h $1 | grep abcdefg`
  6. if [ $TEST != ‘1‘ ]; then
  7. echo "OK"
  8. else
  9. echo "FAIL"
  10. # /bin/echo | mail [email][email protected][/email] -s "NOTICE: $1 failed to provide email service"
  11. fi

注:两个探测节点上需要装mysql client。 原理说明:lvs.cf里指定这个脚本,其实是给负载均衡节点上的nanny程序调用,lvs.cf里的%h参数表示调用这个脚本的时候加上hostname/ip地址的参数。 这个脚本的作用是连接到mysql server上执行select语句回显一个字符串abcdefg,通过判断回显是否正确来确认real server是否运行正常。
(3) 启动LVS服务: /etc/init.d/pulse start
其中一个节点上的/var/log/messages里的内容:

  1. Dec 27 14:57:15 mysql_lb-1 pulse[8606]: STARTING PULSE AS MASTER
  2. Dec 27 14:59:29 mysql_lb-1 pulse[8606]: Terminating due to signal 15
  3. Dec 27 14:59:30 mysql_lb-1 pulse: SIOCGIFADDR failed: Cannot assign requested address
  4. Dec 27 14:59:30 mysql_lb-1 pulse[8659]: STARTING PULSE AS MASTER

另一节点上/var/log/messages里的内容:

  1. Dec 27 14:59:06 mysql_lb-2 pulse[16729]: STARTING PULSE AS BACKUP
  2. Dec 27 14:59:08 mysql_lb-2 pulse[16729]: primary inactive (link failure?): activating lvs
  3. Dec 27 14:59:08 mysql_lb-2 lvs[16731]: starting virtual service MySql active: 3306
  4. Dec 27 14:59:08 mysql_lb-2 nanny[16734]: starting LVS client monitor for 192.168.20.17:3306
  5. Dec 27 14:59:08 mysql_lb-2 lvs[16731]: create_monitor for MySql/mysql_sql-1 running as pid 16734
  6. Dec 27 14:59:08 mysql_lb-2 nanny[16737]: starting LVS client monitor for 192.168.20.17:3306
  7. Dec 27 14:59:08 mysql_lb-2 lvs[16731]: create_monitor for MySql/mysql_sql-2 running as pid 16737
  8. Dec 27 14:59:08 mysql_lb-2 nanny[16737]: making 192.168.20.8:3306 available
  9. Dec 27 14:59:08 mysql_lb-2 nanny[16734]: making 192.168.20.7:3306 available
  10. Dec 27 14:59:13 mysql_lb-2 pulse[16740]: gratuitous lvs arps finished

2007-12-27 11:33 上传

下载次数: 26

时间: 2024-10-08 13:04:49

实践:搭建基于Load Balancer的MySql Cluster的相关文章

大数据项目实践:基于hadoop+spark+mongodb+mysql开发医院临床知识库系统

一.前言 从20世纪90年代数字化医院概念提出到至今的20多年时间,数字化医院(Digital Hospital)在国内各大医院飞速的普及推广发展,并取得骄人成绩.不但有数字化医院管理信息系统(HIS).影像存档和通信系统(PACS).电子病历系统(EMR)和区域医疗卫生服务(GMIS)等成功实施与普及推广,而且随着日新月异的计算机技术和网络技术的革新,进一步为数字化医院带来新的交互渠道譬如:远程医疗服务,网上挂号预约. 随着IT技术的飞速发展,80%以上的三级医院都相继建立了自己的医院信息系统

说干就干——搭建基于Windows + Apache + PHP + MySQL的Moodle平台

说起Moodle,我相信学习教育技术的同学应该都不陌生,在大学的网络与远程教育课中,我有幸与传说中的Moodle相遇,然后相知,但是我绝对不会跟你们说一直到我毕业,我都没有找到一个合适的时间与这位Ms.Moodle相识,尽管我知道她对我蛮有好感!这是为什么呢?为什么呢?为……呢?好吧,我承认,我之所以没能好好认识一下Moodle,无外乎Moodle一直以来给我的感觉就一个:配置起来异常繁琐,不仅安装步骤甚多,需要安装的软件甚多,而且稍不注意就会出错,出错不要紧呀,要紧的是一个芝麻大的错还需要花大

centos7 mysql cluster集群搭建基于docker

1.准备 mn:集群管理服务器用于管理集群的其他节点.我们可以从管理节点创建和配置集群上的新节点.重新启动.删除或备份节点. db2/db3:这是节点间同步和数据复制的过程发生的层. db4/db5:应用程序使用的接口服务器连接到数据库集群. [[email protected] ~]# docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

搭建基于MySQL的读写分离工具Amoeba

搭建基于MySQL的读写分离工具Amoeba: Amoeba工具是实现MySQL数据库读写分离的一个工具,前提是基于MySQL主从复制来实现的: 实验环境(虚拟机): 主机 角色 10.10.10.20 多实例加主从复制 10.10.10.30 Amoeba服务器 10.10.10.40 客户端(最后测试使用) 1.首先搭建MySQL的主从复制(不在多提):需要注意的是:在主从库上需要创建一个用户,在主库上创建的用户为amoeba,权限是create,update,insert,delete:

MySQL集群---②Windows平台搭建MySQL CLUSTER集群

本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. MySQL集群支持多台电脑,本文搭建的MySQL集群以两台机子为例,其中一台(IP为192.168.24.33)部署管理节点.数据节点和SQL节点,另一台(IP为192.168.24.82)部署数据节点和SQL节点. 实际应用中,不要将管理节点跟数据节点部署到一台机子上,因为如果数据节点宕机会导致管理节点不可用,同时整个MySQL群集也就都不可用了.所以一个MySQL群集理想情况下至少有三台服务器,将管理节点单独放到一台

搭建mysql cluster

虚拟机搭建Mysql Cluster 参考文档:http://www.cnblogs.com/jackluo/archive/2013/01/19/2868152.html http://www.cnblogs.com/StanBlogs/archive/2011/06/14/2080986.html 需要三台服务器.一个管理节点服务器.另外两个均充当数据节点和sql节点. 这里选用ubuntu64位操作系统.mysql cluster 对应也必须是64位的.去官方站点下载mysql-clust

CentOS 6.8搭建mysql cluster(7.3)

CentOS 6.8搭建mysql cluster(7.3): 注:共5台,1台管理节点(10.0.0.21),2台SQL节点(10.0.0.22.10.0.0.23),2台数据节点(10.0.0.24.10.0.0.25) 参考网址:http://blog.itpub.net/9034054/viewspace-2097706 下载网址(选择Red Hat的tar包并进行解压):https://dev.mysql.com/downloads/cluster/7.3.html#downloads

mysql cluster搭建

一.网络top图: 一共要5台机器:管理节点.数据节点1.数据节点2.sql节点1.sql节点2 mysql 管理结点:63.cn   IP:192.168.146.4(安装server.client) mysql 数据结点:64.cn   IP:192.168.146.7 (安装server.client) mysql 数据结点:65.cn   IP:192.168.146.3 (安装server.client) msyql SQL节点:66.cn   IP:192.168.146.44 (安

NDB Cluster (分布式存储引擎)存储引擎简单简介及Mysql cluster的实现

一.NDB Cluster (分布式存储引擎)存储引擎简单简介 NDB 存储引擎也叫NDB Cluster 存储引擎,主要用于MySQL Cluster 分布式集群环境, Cluster 是MySQL 从5.0 版本才开始提供的新功能.这部分我们可能并不仅仅只是介绍NDB存储引擎,因为离开了MySQL CLuster 整个环境,NDB 存储引擎也将失去太多意义.所以 接下来会和MySQL Cluster的搭建一块介绍. Mysql Cluster 是一种技术,其主要功能是在无共享的相关系统中部署