您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页mysql集群

mysql集群

来源:华佗小知识
Lvs+Keepalived+MySQL Cluster架设高可用负载均衡

Mysql集群

MySQL Cluster 是MySQL适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster存储引擎,允许在1个Cluster中运行多个MySQL服务器。在MyQL5.0 及以上的二进制版本中、以及与最新的Linux版本兼容的RPM中提供了该存储引擎。

一、前言

MySQL Cluster 是MySQL适合于分布式计算环境的高实用、高冗余版本。它采用了NDB Cluster存储引擎,允许在1个Cluster中运行多个MySQL服务器。在MyQL5.0 及以上的二进制版本中、以及与最新的Linux版本兼容的RPM中提供了该存储引擎。MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster。通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求。此外,由于每个组件有自己的内存和磁盘,不存在单点故障。MySQL Cluster由一组计算机构成,每台计算机上均运行着多种进程,包括MySQL服务器,NDB Cluster的数据节点,管理服务器,以及(可能)专门的数据访问程序。

二、MySQL Cluster基本概念

NDB是一种“内存中”的存储引擎,它具有可用性高和数据一致性好的特点。

MySQL Cluster能够使用多种故障切换和负载平衡选项配置NDB存储引擎,但在Cluster 级别上的存储引擎上做这个最简单。MySQL Cluster的NDB存储引擎包含完整的数据集,仅取决于Cluster本身内的其他数据。

目前,MySQL Cluster的Cluster部分可于MySQL服务器进行配置。在MySQL Cluster中,Cluster

的每个部分被视为1个节点。

管理(MGM)节点:这类节点的作用是管理MySQL Cluster内的其他节点,如提供配置数据、启动并停止节点、运行备份等。由于这类节点负责管理其他节点的配置,应在启动其他节点之前首先启动这类节点。MGM节点是用命令“ndb_mgmd”启动的。

数据(NDB)节点:这类节点用于保存Cluster的数据。数据节点的数目与副本的数目相关,是片段的倍数。例如,对于两个副本,每个副本有两个片段,那么就有4个数据节点。不过没有必要设置多个副本。数据节点是用命令“ndbd”启动的。

客户(SQL)节点:这是用来访问Cluster数据的节点。对于MySQL Cluster,客户端节点是使用NDB Cluster 存储引擎的传统MySQL服务器。通常,SQL节点是使用命令“mysqld -ndbcluster”启动的,或将“ndbcluster”添加到“my.cnf”后使用“mysqld”启动。

注释:在很多情况下,术语“节点”用于指计算机,但在讨论MySQL Cluster时,它表示的是进程。在单台计算机上可以有任意数目的节点,为此,我们采用术语“Cluster主机”。

管理服务器(MGM节点)负责管理Cluster配置文件和Cluster日志。Cluster中的每个节点从管理服务器检索配置数据,并请求确定管理服务器所在位置的方式。当数据节点内出现新的事件时,节点将关于这类事件的信息传输到管理服务器,然后将这类信息写入Cluster日志。

三、环境

系统:CentOS6.4 32位 9台

软件包(可以去mysql官网下载http://dev.mysql.com/downloads/cluster/): MGM:

MySQL-Cluster-gpl-management-7.1.31-1.el6.i686.rpm MySQL-Cluster-gpl-tools-7.1.31-1.el6.i686.rpm SQL节点:

MySQL-Cluster-gpl-client-7.1.31-1.el6.i686.rpm MySQL-Cluster-gpl-server-7.1.31-1.el6.i686.rpm NDB节点:

MySQL-Cluster-gpl-storage-7.1.31-1.el6.i686.rpm 拓扑图:

IP规划:

四、配置(请先卸载掉与mysql有关的所有RPM包) 1.LB-Master及LB-Backup配置

(1)LB-Master及LB-Backup安装keepalived和ipvsadm

1. # yum groupinstall \"Additional Development\" //安装开发工具 2. # yum groupinstall \"Development tools\"

3. # tar -zxvf keepalived-1.2.1.tar.gz -C /usr/local/src/ 4. # cd /usr/local/src/keepalived-1.2.1 5. # ./cnfigure

6. Keepalived configuration 7. ------------------------

8. Keepalived version : 1.2.1 9. Compiler : gcc 10. Compiler flags : -g -O2

11. Extra Lib : -lpopt -lssl -lcrypto 12. Use IPVS Framework : No //配置出现错误 13. IPVS sync daemon support : No

14. Use VRRP Framework : Yes 15. Use Debug flags : No 16. 解决方法:

17. # yum install kernel-devel ipvsadm

18. # ln -s /usr/src/kernels/2.6.32-358.el6.i686/ /usr/src/linux 19. # ./cnfigure //再次配置环境 20. # make //编译 21. # make install //安装 22.

23. # cd /usr/local/etc //keepalived默认安装路径 24. # ll

25. drwxr-xr-x. 3 root root 4096 May 24 00:37 keepalived 26. drwxr-xr-x. 3 root root 4096 May 24 00:29 rc.d 27. drwxr-xr-x. 2 root root 4096 May 24 00:29 sysconfig 28.

29. 配置以系统方式service启动

30. # cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ 31. # cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ 32. # mkdir /etc/keepalived

33. # cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ 34. # cp /usr/local/sbin/keepalived /usr/sbin/

(2)LB-Master及LB-Backup的keepalived主配置文档

1. # cat /etc/keepalived/keepalived.conf 2. #guration File for keepalived 3. #global define 4. global_defs {

5. router_id HaMySQL_1 6. }

7. vrrp_sync_group VGM { 8. group { 9. VI_MYSQL 10. } 11. }

12. vrrp_instance VI_MYSQL {

13. state MASTER //LB-Backup设置为BACKUP 14. interface eth0

15. lvs_sync_daemon_inteface eth0 16. virtual_router_id 55

17. priority 100 //LB-Backup设置为90 18. advert_int 5 19. authentication { 20. auth_type PASS

21. auth_pass 123456 22. }

23. virtual_ipaddress {

24. 192.168.2.200/24 dev eth0 25. } 26. }

27. ########## LVS MySQL Start ########### 28. virtual_server 192.168.2.200 3306 { 29. delay_loop 6 30. lb_algo rr 31. lb_kind DR

32. persistence_timeout 6 33. protocol TCP 34.

35. real_server 192.168.2.50 3306 { 36. weight 100 37. TCP_CHECK {

38. connect_timeout 3 39. nb_get_retry 3 40. delay_before_retry 3 41. connect_port 3306 42. } 43. }

44. real_server 192.168.2.60 3306 { 45. weight 100 46. TCP_CHECK {

47. connect_timeout 3 48. nb_get_retry 3 49. delay_before_retry 3 50. connect_port 3306 51. } 52. } 53. }

54. ########## LVS MySQL END #############

2.MGM配置 (1)安装管理节点

1. # rpm -ivh MySQL-Cluster-gpl-management-7.1.31-1.el6.i686.rpm 2. # rpm -ivh MySQL-Cluster-gpl-tools-7.1.31-1.el6.i686.rpm 3. # mkdir /etc/mysql-cluster

(2)配置管理节点

1. # vim /etc/mysql-cluster/config.ini //添加以下内容 2. [ndbd default] 3. NoOfReplicas=2 4. DataMemory=80M 5. IndexMemory=18M 6. # TCP/IP options: 7. [tcp default] 8. portnumber=2202

9. # Management process options: 10. [ndb_mgmd] 11. id=1

12. hostname=192.168.2.10

13. datadir=/var/lib/mysql-cluster 14. # Options for data node 15. [ndbd] 16. id=2

17. hostname=192.168.2.30 18. datadir=/var/lib/mysql 19. [ndbd] 20. id=3

21. hostname=192.168.2.40 22. datadir=/var/lib/mysql 23. [mysqld] 24. id=4

25. hostname=192.168.2.50 26. [mysqld] 27. id=5

28. hostname=192.168.2.60

(3)启动管理节点

1. # mkdir /var/lib/mysql-cluster

2. # ndb_mgmd -f /etc/mysql-cluster/config.ini

3. MySQL Cluster Management Server mysql-5.1.73 ndb-7.1.31 4. # netstat -tupln

5. tcp 0 0 0.0.0.0:1186 0.0.0.0:* LISTEN 17629/ndb_mg

md

3.数据节点(NDB1和NDB2)配置 (1)安装数据节点

1. # rpm -ivh MySQL-Cluster-gpl-storage-7.1.31-1.el6.i686.rpm 2. # mkdir /var/lib/mysql

(2)配置数据节点

1. # vim /etc/my.cnf 2. [mysqld]

3. datadir=/var/lib/mysql

4. socket=/var/lib/mysql/mysql.sock 5. user=mysql

6. # Disabling symbolic-links is recommended to prevent assorted securit

y risks

7. symbolic-links=0 8.

9. [mysqld_safe]

10. log-error=/var/log/mysqld.log 11. pid-file=/var/run/mysqld/mysqld.pid 12.

13. [mysql_cluster]

14. ndb-connectstring=192.168.2.10

(3)启动数据节点

1. # ndbd --initial //NDB1

2. 2014-05-28 00:32:17 [ndbd] INFO -- Angel connected to '192.168.2.

10:1186'

3. 2014-05-28 00:32:17 [ndbd] INFO -- Angel allocated nodeid: 2 4. # ndbd --initial //NDB2

5. 2014-05-28 00:33:08 [ndbd] INFO -- Angel connected to '192.168.2.

10:1186'

6. 2014-05-28 00:33:08 [ndbd] INFO -- Angel allocated nodeid: 3

4.SQL节点(SQL1和SQL2)配置 网卡及屏蔽ARP设置

在现有网卡基础上添加一块lo:0网卡

1. # vim /etc/sysctl.conf //添加以下两行

2. net.ipv4.conf.all.arp_announce = 2 3. net.ipv4.conf.all.arp_ignore = 1 4. # sysctl -p

(1)安装SQL节点

1. # rpm -ivh MySQL-Cluster-gpl-client-7.1.31-1.el6.i686.rpm

2. # rpm -ivh MySQL-Cluster-gpl-server-7.1.31-1.el6.i686.rpm //如出错,卸

载与mysql有关的rpm包

(2)配置SQL节点

1. # The MySQL server 2. [mysqld] 3. port = 3306

4. socket=/var/lib/mysql/mysql.sock 5. ndbcluster

6. default-storage-engine=NDBCLUSTER 7. skip-name-resolve 8. [mysql_cluster]

9. ndb-connectstring=192.168.2.10

(3)启动SQL节点

1. # service mysql start //SQL1 2. Starting MySQL.. SUCCESS!

3. # service mysql start //SQL2,如无法启动,执行pkill -9 mysql再启

4. Starting MySQL SUCCESS! 5. # netstat -tupln |grep mysql

6. tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3475/

mysqld

(4)配置远程连接(SQL1和SQL2配置一致)

1. # mysql

2. mysql> grant all on *.* to 'nuo'@'%' identified by '123'; 3. mysql> flush privileges;

启动顺序一定要遵循:MGM→NDB→SQL 五、查看状态 1.查看MGM状态

1. # ndb_mgm

2. -- NDB Cluster -- Management Client -- 3. ndb_mgm> show

4. Connected to Management Server at: localhost:1186 5. Cluster Configuration 6. --------------------- 7. [ndbd(NDB)] 2 node(s)

8. id=2 @192.168.2.30 (mysql-5.1.73 ndb-7.1.31, Nodegroup: 0, *) 9. id=3 @192.168.2.40 (mysql-5.1.73 ndb-7.1.31, Nodegroup: 0) 10.

11. [ndb_mgmd(MGM)] 1 node(s)

12. id=1 @192.168.2.10 (mysql-5.1.73 ndb-7.1.31) 13.

14. [mysqld(API)] 2 node(s)

15. id=4 @192.168.2.50 (mysql-5.1.73 ndb-7.1.31) 16. id=5 @192.168.2.60 (mysql-5.1.73 ndb-7.1.31)

2.查看LB-Master状态

1. # service keepalived start

2. Starting keepalived: [ OK ]

3. # ip addr

4. 1: lo: mtu 136 qdisc noqueue state UNKNOWN

5. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 6. inet 127.0.0.1/8 scope host lo 7. inet6 ::1/128 scope host

8. valid_lft forever preferred_lft forever

9. 2: eth0: mtu 1500 qdisc pfifo_fast

state UNKNOWN qlen 1000

10. link/ether 00:0c:29:22:3d:01 brd ff:ff:ff:ff:ff:ff 11. inet 192.168.2.20/24 brd 192.168.2.255 scope global eth0 12. inet 192.168.2.200/24 scope global secondary eth0 13. inet6 fe80::20c:29ff:fe22:3d01/ scope link 14. valid_lft forever preferred_lft forever 15. # ipvsadm

16. IP Virtual Server version 1.2.1 (size=4096) 17. Prot LocalAddress:Port Scheduler Flags

18. -> RemoteAddress:Port Forward Weight ActiveConn InActConn

19. TCP 192.168.2.200:mysql rr persistent 6

20. -> 192.168.2.50:mysql Route 100 0 0

21. -> 192.168.2.60:mysql Route 100 0 0

3.查看LB-Backup状态

1. # service keepalived start

2. Starting keepalived: [ OK ]

3. # ip addr

4. 1: lo: mtu 136 qdisc noqueue state UNKNOWN

5. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 6. inet 127.0.0.1/8 scope host lo 7. inet6 ::1/128 scope host

8. valid_lft forever preferred_lft forever

9. 2: eth0: mtu 1500 qdisc pfifo_fast

state UNKNOWN qlen 1000

10. link/ether 00:0c:29:27:e1:98 brd ff:ff:ff:ff:ff:ff 11. inet 192.168.2.21/24 brd 192.168.2.255 scope global eth0 12. inet6 fe80::20c:29ff:fe27:e198/ scope link 13. valid_lft forever preferred_lft forever 14. # ipvsadm

15. IP Virtual Server version 1.2.1 (size=4096) 16. Prot LocalAddress:Port Scheduler Flags

17. -> RemoteAddress:Port Forward Weight ActiveConn InActConn

18. TCP 192.168.2.200:mysql rr persistent 6

19. -> 192.168.2.50:mysql Route 100 0 0

20. -> 192.168.2.60:mysql Route 100 0 0

六、测试

1.客户端1(CentOS6.4 32位,IP:192.168.2.80/24)

1. # yum install mysql

2. # mysql -h 192.168.2.200 -u nuo -p 3. Enter password:

4. mysql> show databases; 5. +--------------------+ 6. | Database | 7. +--------------------+ 8. | information_schema | 9. | mysql | 10. | ndbinfo |

11. | test | 12. +--------------------+ 13. mysql> create database t; 14. mysql> use t;

15. mysql> create table t2(id int); 16. mysql> insert into t2 values(10); 17. mysql> insert into t2 values(20);

2.LB-Master查看连接状态

1. # ipvsadm

2. IP Virtual Server version 1.2.1 (size=4096) 3. Prot LocalAddress:Port Scheduler Flags

4. -> RemoteAddress:Port Forward Weight ActiveConn InActConn

5. TCP 192.168.2.200:mysql rr persistent 6

6. -> 192.168.2.50:mysql Route 100 1 0

7. -> 192.168.2.60:mysql Route 100 0 0

8. # ipvsadm -lcn

9. IPVS connection entries

10. pro expire state source virtual destinat

ion

11. TCP 14:48 ESTABLISHED 192.168.2.80:49993 192.168.2.200:3306 192.168.

2.50:3306

12. TCP 00:54 NONE 192.168.2.80:0 192.168.2.200:3306 192.168.

2.50:3306

3.客户端2(CentOS6.4 32位,IP:192.168.2.81/24)

1. # yum install mysql

2. # mysql -h 192.168.2.200 -u nuo -p 3. Enter password:

4. mysql> show databases; 5. +--------------------+ 6. | Database | 7. +--------------------+ 8. | information_schema | 9. | mysql | 10. | ndbinfo | 11. | t | 12. | test | 13. +--------------------+

14. mysql> use t;

15. mysql> select * from t2; 16. +------+ 17. | id | 18. +------+ 19. | 20 | 20. | 10 | 21. +------+

4.LB-Master查看连接状态

1. # ipvsadm -lcn

2. IPVS connection entries

3. pro expire state source virtual destinat

ion

4. TCP 00:36 NONE 192.168.2.81:0 192.168.2.200:3306 192.168.

2.60:3306

5. TCP 14:18 ESTABLISHED 192.168.2.81:42435 192.168.2.200:3306 192.168.

2.60:3306

总结:在客户端1上插入数据后,服务器显示客户端1连接的是SQL1(192.168.2.50),在客户端2上进行查询,能查询到客户端1输入的数据,服务器显示客户端2连接的是SQL2(192.168.2.60),所以,数据是同步的,并且是一致性的。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务