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(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),所以,数据是同步的,并且是一致性的。
Lvs+Keepalived+MySQL Cluster架设高可用负载均衡Mysql集群的更多相关文章
- Lvs+Keepalived+Bind+web构建高可用负载均衡系统
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://hatech.blog.51cto.com/8360868/1417899 --- ...
- 【线上测试之后的应用】基于MySQL+MHA+Haproxy构建高可用负载均衡数据库集群(详解)
这里我们先介绍一下MHA是什么,其次就是它的应用与测试,同时为了大家呈现了数据备份案例,最后总结了使用情况以及注意事项和解决办法 一.MHA 概述 MHA(Master High Availabili ...
- 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 gat ...
- Linux 系统中部署 LNMP 高可用负载均衡架构集群实现动态博客
(一)设计思路 高可用:keepalived 解决方案 负载均衡:(lvs)DR做轮询,需要一个调度器,后端节点两个(部署nginx动态博客),通过一个vip去访问动态博客 后端节点需要部署动态博客作 ...
- Nginx(haproxy)+keepalived+Tomcat双主高可用负载均衡
周末的时候一个正在学Linux的朋友问我,高可用怎么玩?我和他微信了将近三个小时,把Nginx和haproxy双主高可用教给他了,今天突然想把这个给写进博客里,供给那些正在学习Linux系统的朋友们, ...
- 搭建 Keepalived + Nginx + Tomcat 的高可用负载均衡架构
1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...
- Keepalived + Nginx + Tomcat 的高可用负载均衡架构搭建
Keepalived + Nginx + Tomcat 的高可用负载均衡架构搭建 Nginx 是一个高性能的 HTTP反向代理服务器 Keepalived 是一个基于VRRP协议来实现的LVS服务高可 ...
- 搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构
1 概述 初期的互联网企业由于业务量较小,所以一般单机部署,实现单点访问即可满足业务的需求,这也是最简单的部署方式,但是随着业务的不断扩大,系统的访问量逐渐的上升,单机部署的模式已无法承载现有的业务量 ...
- HAProxy+Varnish+LNMP实现高可用负载均衡动静分离集群部署
HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3. ...
随机推荐
- Kafka集群安装Version2.10
Kafka集群安装,基于版本2.10, 使用kafka_2.10-0.10.1.0.tgz安装包. 1.安装规划 Storm集群模式,安装到下面三台机器 IP Hostname 10.43.159.2 ...
- Unity——火烧+水波纹效果(噪音图)
使用噪声图实现火烧和水波纹效果: 1.溶解 关闭裁剪,根据noise纹理取样,r通道和_BurnAmount比较,裁剪掉小于_BurnAmount的片元: 通过菲尼尔得到裁剪边缘,添加火焰燃烧的颜色进 ...
- 【白话科普】10s 从零看懂 H5
最近大家有没有发现,很多微信公众号的动态内容变多了?我们常常可以看到,公众号内容中有很多动态图片甚至动画,还可以通过手指滑动切换页面,或者有一些小的点击互动. 这种看起来有点高级的小作品,其实是都是& ...
- solr - 安装ik中文分词 和初始化富文本检索
1.下载安装包 https://repo1.maven.org/maven2/org/apache/solr/solr-dataimporthandler/7.4.0/solr-dataimporth ...
- Java语言学习案例雷霆战机
1.Java雷霆战机学习笔记(一)-资源加载 https://www.toutiao.com/i6631331313259381255/ 2.Java雷霆战机学习笔记(二)-音乐播放 https:// ...
- SQL安全执行
begin tran begin -----------执行SQL开始----------------- update Audioset Name =3 -----------执行SQL结束----- ...
- T-SQL的游标和fetch
很多时候我们sql操作会得到一个结果集合,当我们需要依次查看集合内的内容时,我们便需要游标特性了. 所以,sql的游标类似c++里容器的迭代器,下面举个例子来辅助理解: DECLARE vend_cu ...
- VUE3 之 组件间事件通信 - 这个系列的教程通俗易懂,适合新手
1. 概述 相关定律告诉我们:这个世界上的任何事物之间都会存在一定联系,"城门失火,殃及池鱼"就是一个很好的例子.因此如果我们能够尽早发现这些看不见的联系,就能很好的解决更多遇见的 ...
- Nginx搭建游戏
目录 一:Nginx搭建<小游戏> 1.上传<象棋游戏>代码 2.编辑配置文件(尾部必须要加 .conf<文件>) 3.测试配置文件是否正常 4.重启Nginx 5 ...
- linux正则sed实战案例详解
目录 1. 将nginx.conf中的注释全部去掉 2. 将nginx.com中每一行之前增加注释 3.要求一键修改本机的ip 4.将/etc/passwd中的root修改成ROOT 1. 将ngin ...