Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群

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

一、前言

二、MySQL Cluster基本概念

三、环境

四、配置

1.LB-Master及LB-Backup配置

2.MGM配置

3.SQL节点(SQL1和SQL2)配置

4.数据节点(NDB1和NDB2)配置

五、查看状态

六、测试

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

一、前言

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

# yum groupinstall "Additional Development"         //安装开发工具

# yum groupinstall "Development tools"

# tar -zxvf keepalived-1.2.1.tar.gz -C /usr/local/src/

# cd /usr/local/src/keepalived-1.2.1

# ./cnfigure

Keepalived configuration

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

Keepalived version       : 1.2.1

Compiler                 : gcc

Compiler flags           : -g -O2

Extra Lib                : -lpopt -lssl -lcrypto 

Use IPVS Framework       : No    //配置出现错误

IPVS sync daemon support : No

Use VRRP Framework       : Yes

Use Debug flags          : No

解决方法:

# yum install kernel-devel ipvsadm

# ln -s /usr/src/kernels/2.6.32-358.el6.i686/ /usr/src/linux

# ./cnfigure                    //再次配置环境

# make                          //编译

# make install                  //安装

  

# cd /usr/local/etc             //keepalived默认安装路径

# ll

drwxr-xr-x. 3 root root 4096 May 24 00:37 keepalived

drwxr-xr-x. 3 root root 4096 May 24 00:29 rc.d

drwxr-xr-x. 2 root root 4096 May 24 00:29 sysconfig

   

配置以系统方式service启动

# 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-Backup的keepalived主配置文档


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

# cat /etc/keepalived/keepalived.conf

#guration File for keepalived

#global define

global_defs {

        router_id HaMySQL_1

        }

vrrp_sync_group VGM {

        group {

        VI_MYSQL

        }

}

vrrp_instance VI_MYSQL {

        state MASTER             //LB-Backup设置为BACKUP

        interface eth0

        lvs_sync_daemon_inteface eth0

        virtual_router_id 55

        priority 100             //LB-Backup设置为90

        advert_int 5

        authentication {

                auth_type PASS

                auth_pass 123456

        }

        virtual_ipaddress {

                192.168.2.200/24 dev eth0

        }

}

##########  LVS  MySQL Start   ###########

virtual_server 192.168.2.200 3306 {

        delay_loop 6

        lb_algo rr

        lb_kind DR

        persistence_timeout 6

        protocol TCP

        real_server 192.168.2.50 3306 {

                weight 100

                TCP_CHECK {

                        connect_timeout 3

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 3306

                }

        }

        real_server 192.168.2.60 3306 {

                weight 100

                TCP_CHECK {

                        connect_timeout 3

                        nb_get_retry 3

                        delay_before_retry 3

                        connect_port 3306

                }

        }

}

##########  LVS MySQL END   #############

2.MGM配置

(1)安装管理节点


1

2

3

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

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

# mkdir /etc/mysql-cluster

(2)配置管理节点


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

# vim /etc/mysql-cluster/config.ini     //添加以下内容

[ndbd default]

NoOfReplicas=2

DataMemory=80M

IndexMemory=18M

# TCP/IP options:

[tcp default]

portnumber=2202

# Management process options:

[ndb_mgmd]

id=1

hostname=192.168.2.10

datadir=/var/lib/mysql-cluster

# Options for data node

[ndbd]

id=2

hostname=192.168.2.30

datadir=/var/lib/mysql

[ndbd]

id=3

hostname=192.168.2.40

datadir=/var/lib/mysql

[mysqld]

id=4

hostname=192.168.2.50

[mysqld]

id=5

hostname=192.168.2.60

(3)启动管理节点


1

2

3

4

5

# mkdir /var/lib/mysql-cluster

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

MySQL Cluster Management Server mysql-5.1.73 ndb-7.1.31

# netstat -tupln

tcp     0     0    0.0.0.0:1186   0.0.0.0:*   LISTEN     17629/ndb_mgmd

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

(1)安装数据节点


1

2

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

# mkdir /var/lib/mysql

(2)配置数据节点


1

2

3

4

5

6

7

8

9

10

11

12

13

14

# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[mysql_cluster]

ndb-connectstring=192.168.2.10

(3)启动数据节点


1

2

3

4

5

6

# ndbd --initial       //NDB1

2014-05-28 00:32:17 [ndbd] INFO     -- Angel connected to ‘192.168.2.10:1186‘

2014-05-28 00:32:17 [ndbd] INFO     -- Angel allocated nodeid: 2

# ndbd --initial       //NDB2

2014-05-28 00:33:08 [ndbd] INFO     -- Angel connected to ‘192.168.2.10:1186‘

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

4.SQL节点(SQL1和SQL2)配置

网卡及屏蔽ARP设置

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


1

2

3

4

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

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.all.arp_ignore = 1

# sysctl -p

(1)安装SQL节点


1

2

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

# rpm -ivh MySQL-Cluster-gpl-server-7.1.31-1.el6.i686.rpm //如出错,卸载与mysql有关的rpm包

(2)配置SQL节点


1

2

3

4

5

6

7

8

9

# The MySQL server 

[mysqld]

port = 3306

socket=/var/lib/mysql/mysql.sock

ndbcluster

default-storage-engine=NDBCLUSTER

skip-name-resolve

[mysql_cluster]

ndb-connectstring=192.168.2.10

(3)启动SQL节点


1

2

3

4

5

6

# service mysql start        //SQL1

Starting MySQL.. SUCCESS! 

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

Starting MySQL SUCCESS! 

# netstat -tupln |grep mysql

tcp     0     0   0.0.0.0:3306        0.0.0.0:*     LISTEN      3475/mysqld

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


1

2

3

# mysql

mysql> grant all on *.* to ‘nuo‘@‘%‘ identified by ‘123‘;

mysql> flush privileges;

启动顺序一定要遵循:MGM→NDB→SQL

五、查看状态

1.查看MGM状态


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

# ndb_mgm

-- NDB Cluster -- Management Client --

ndb_mgm> show

Connected to Management Server at: localhost:1186

Cluster Configuration

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

[ndbd(NDB)] 2 node(s)

id=2    @192.168.2.30  (mysql-5.1.73 ndb-7.1.31, Nodegroup: 0, *)

id=3    @192.168.2.40  (mysql-5.1.73 ndb-7.1.31, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)

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

[mysqld(API)]   2 node(s)

id=4    @192.168.2.50  (mysql-5.1.73 ndb-7.1.31)

id=5    @192.168.2.60  (mysql-5.1.73 ndb-7.1.31)

2.查看LB-Master状态


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# service keepalived start

Starting keepalived:                                       [  OK  ]

# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000

    link/ether 00:0c:29:22:3d:01 brd ff:ff:ff:ff:ff:ff

    inet 192.168.2.20/24 brd 192.168.2.255 scope global eth0

    inet 192.168.2.200/24 scope global secondary eth0

    inet6 fe80::20c:29ff:fe22:3d01/64 scope link 

       valid_lft forever preferred_lft forever

# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.2.200:mysql rr persistent 6

  -> 192.168.2.50:mysql           Route   100    0          0         

  -> 192.168.2.60:mysql           Route   100    0          0

3.查看LB-Backup状态


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

# service keepalived start

Starting keepalived:                                       [  OK  ]

# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000

    link/ether 00:0c:29:27:e1:98 brd ff:ff:ff:ff:ff:ff

    inet 192.168.2.21/24 brd 192.168.2.255 scope global eth0

    inet6 fe80::20c:29ff:fe27:e198/64 scope link 

       valid_lft forever preferred_lft forever

# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.2.200:mysql rr persistent 6

  -> 192.168.2.50:mysql           Route   100    0          0         

  -> 192.168.2.60:mysql           Route   100    0          0

六、测试

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# yum install mysql

# mysql -h 192.168.2.200 -u nuo -p

Enter password:

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| ndbinfo            |

test               |

+--------------------+

mysql> create database t;

mysql> use t;

mysql> create table t2(id int);

mysql> insert into t2 values(10);

mysql> insert into t2 values(20);

2.LB-Master查看连接状态


1

2

3

4

5

6

7

8

9

10

11

12

# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.2.200:mysql rr persistent 6

  -> 192.168.2.50:mysql           Route   100    1          0         

  -> 192.168.2.60:mysql           Route   100    0          0         

# ipvsadm -lcn

IPVS connection entries

pro expire state       source             virtual            destination

TCP 14:48  ESTABLISHED 192.168.2.80:49993 192.168.2.200:3306 192.168.2.50:3306

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# yum install mysql

# mysql -h 192.168.2.200 -u nuo -p

Enter password:

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| ndbinfo            |

| t                  |

test               |

+--------------------+

mysql> use t;

mysql> select * from t2;

+------+

id   |

+------+

|   20 |

|   10 |

+------+

4.LB-Master查看连接状态


1

2

3

4

5

# ipvsadm -lcn

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:36  NONE        192.168.2.81:0     192.168.2.200:3306 192.168.2.60:3306

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),所以,数据是同步的,并且是一致性的。

时间: 2024-07-31 23:33:54

Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群的相关文章

LVS基础及LVS+Keepalived实现双主高可用负载均衡

LVS基础及LVS+Keepalived实现双主高可用负载均衡 LB集群: (Load  Balancing)即负载均衡集群,其目的是为了提高访问的并发量及提升服务器的性能,其    实现方式分为硬件方式和软件方式. 硬件实现方式: 常用的有 F5公司的BIG-IP系列.A10公司的AX系列.Citrix公司的 NetScaler系列等 软件实现方式: LVS工作于传输层.nginx工作于应用层.haproxy工作于传输层和应用层 本文主要讲解LVS. 一.什么是LVS ? 1. LVS:(Li

haproxy+keepalived实现高可用负载均衡web集群

haproxy+keepalived实现高可用负载均衡web集群 负载均衡集群的概念 负载均衡是设计分布式系统架构必须要考虑的因素之一,它指的是通过调度分发的方式尽可能将"请求"."访问"的压力负载平均分摊到集群中的各个节点,避免有些节点负载太高导致访问延迟,而有些节点负载很小导致资源浪费.这样,每个节点都可以承担一定的访问请求负载压力,并且可以实现访问请求在各节点之间的动态分配,以实现负载均衡,从而为企业提供更高性能,更加稳定的系统架构解决方案. 高可用集群的概念

LVS+Keepalived+IIS 配置过程高可用负载均衡web服务器

1. 基本规划 一共5个IP地址,4台服务器,两台做LVS+Keepalived高可用负载均衡,两台做Web 服务器. LVS的IP地址是: 192.168.0.181 192.168.0.182 web服务器的IP地址是 192.168.0.183 192.168.0.184 虚拟IP(VIP)地址是: 192.168.0.188 2. 配置IIS IIS上最重要的配置就是环回网卡配置,配置完成后还需要修改一下网卡的IP和工作模式.具体步骤如下 (1)配置环回网卡 打开控制面板,点击硬件,然后

LVS+keepalived DR模式配置高可用负载均衡集群

实验环境 LVS-Master 10.0.100.201 VIP:10.0.100.203 LVS-Slave       10.0.100.204 WEB1-Tomcat 10.0.2.29 gateway:10.0.2.253 WEB2-Tomcat 10.0.100.202 (注意:应保持所有服务器的时间一致) Install LVS # ln -s /usr/src/kernels/2.6.32-431.el6.i686/ /usr/src/linux //若找不到这个目录则先安装ker

Keepalived+Haproxy双主高可用负载均衡web和mysql综合实验

日期及版本:2014.5.4v1.0 架构图 实验目的: 1.Haproxy+Keepalived双主双机高可用模型,keepalived为Haproxy主从提供高可用保证haproxy-master若挂掉haproxy-backup能无缝接管,haproxy为后端Web提供负载均衡,缓解并发压力,实现WEB站点负载均衡+高可用性: 2. Haproxy反代web做动静分离: 3. Haproxy反代mysql 算法leastconn和roundrobin的不同效果: 系统环境: OS:cent

apache+inotify-tools+keepalived+lvs-DR模式配置高可用负载均衡集群

环境:虚拟机VMware workstation 9 操作系统:Redhat 5.6 i386 一.keepalived+LVS-DR模式配置高可用负载均衡 拓扑如下: 二.服务器IP配置信息 四台服务器均有VMware虚拟机实现,两台HA主机.两台web服务器.网络方式都设置为NAT模式 1.master:192.168.80.145 2.slaver:192.168.80.137 3.web1:192.168.80.144 4.web2:192.168.80.134 5.VIP:192.16

使用Keepalived+ipvs构建(高可用+负载均衡)环境!

之前写过一个heartbeat-ldirectord实现LVS的高可用,这里引入一个轻量级的程序Keepalived基于VRRP协议工作,也能为服务提供高可用功能,这个程序的开发初衷是为了给lvs提供高可用. 下面我们来看看如何使用keepalived+ipvs实现高可用+负载均衡. 在RHEL6.4以后就提供了rpm格式的安装包,这里我们用源码编译安装. 先去官网下载源码包http://keepalived.org/ 解压源程序包,预编译配置,编译程序,安装程序. tar zxvf keepa

Nginx+Keepalived搭建高可用负载平衡WEB 集群

Nginx+Keepalived搭建高可用负载平衡WEB 集群 1.1环境规划: Nginx_master:192.168.5.129 Nginx_backup:192.168.5.131 Tomcat:192.168.5.132 端口:8080,9080 操作系统:CentOS6.5 x86_64 内核版本:2.6.32-696.el6.x86_64 Nginx版本:nginx/1.12.0 nginx-1.12.0 Keepalived版本:Keepalived v1.2.13 前端双Ngi

HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署

HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3.10.0-327.el7.x86_64 集群架构: 前端:HAProxy 1.虚拟FQDN:www.simpletime.net 2.VIP:192.168.39.1:DIP:172.16.39.50 3.调度服务器:Varnish1.Varnish2 4.调度算法:URL_Hash_Consist