MySQL集群安装、负载均衡及备份恢复

MYSQL集群安装学习笔记

【一】服务器准备(操作系统linux皆可,我用的是RHEL6.4):
一个管理节点 10.101.4.32
两个数据节点 10.101.4.33 10.101.4.34
两个查询节点 10.101.4.36 10.101.4.37
 
下载最新版本的mysql(我用的是 mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar)

【二】所有节点配置:
1、hosts配置,增加所有节点IP与主机名对应

2、增加mysql用户和组, 并将mysql用户添加到sudo组
groupadd mysql
useradd mysql -g mysql

3、关闭防火墙
chkconfig iptables off
service iptables stop

4、关闭selinux
vi /etc/sysconfig/selinux
设置 SELINUX=disabled

5、安装mysql
上传tar包到 /tmp 目录下
cd /tmp
tar -xvf mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar
mv mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64 /usr/local/mysql
rm -rf mysql-cluster-gpl-7.3.7-linux-glibc2.5-x86_64.tar
chown -R mysql:mysql /usr/local/mysql
su - mysql
cd /usr/local/mysql
scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

6、设定环境变量
vi /etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH
source /etc/profile

【三】管理节点配置:
1、建立配置文件
mkdir /var/lib/mysql-cluster
vi /var/lib/mysql-cluster/config.ini
粘贴下面内容,服务器IP信息换成你实际的地址,这里只是简单配置,详细的config参数配置自行百度

[TCP DEFAULT]
SendBufferMemory=256k
ReceiveBufferMemory=64k
#PortNumber=2202

[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=2500M
IndexMemory=500M

#MaxNoOfConcurrentTransactions=
MaxNoOfConcurrentOperations=327680
#MaxNoOfLocalOperations=3276800
MaxNoOfAttributes=5120

TimeBetweenLocalCheckpoints=6

FileSystemPath=/usr/local/mysql/
BackupDataDir=/usr/local/mysql/data/
BackupDataBufferSize=2M
BackupLogBufferSize=2M
BackupMemory=4M
BackupWriteSize=32k

[NDB_MGMD]
NodeId=1
HostName=10.101.4.32
LogDestination=FILE:filename=/var/lib/mysql-cluster/mgmd.log
DataDir=/var/lib/mysql-cluster

[NDBD]
NodeId=11
HostName=10.101.4.33
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=12
HostName=10.101.4.34
DataDir=/usr/local/mysql/data

[MYSQLD DEFAULT]
ArbitrationRank=0
ArbitrationDelay=0

[MYSQLD]
NodeId=21
HostName=10.101.4.36
[MYSQLD]
NodeId=22
HostName=10.101.4.37
# null mysqld node for backup-restore
[MYSQLD]

2、启动管理节点
chown -R mysql:mysql /var/lib/mysql-cluster
su - mysql
/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini  # 如果配置文件发生变化,启动时需要加  --reload

3、验证节点是否启动成功
ps -ef|grep mgmd
netstat -lnput | grep 1186

【四】数据节点配置:
1、增加配置文件
vi /etc/my.cnf
粘贴下面内容

[mysqld]
ndbcluster
ndb-connectstring=10.101.4.32
default_storage_engine=ndb
default_tmp_storage_engine=ndb

[mysql_cluster]
ndb-connectstring=10.101.4.32

2、启动数据节点
su - mysql
/usr/local/mysql/bin/ndbd --initial   # 仅第一次启动需要加 --initial 参数

3、验证节点是否启动成功
ps -ef|grep ndbd
netstat -lnput | grep 2202

【五】查询节点配置:
1、增加配置文件
vi /etc/my.cnf
粘贴下面内容

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
ndbcluster
ndb-connectstring=10.101.4.32
default_storage_engine=ndb
default_tmp_storage_engine=ndb

wait_timeout=86400
interactive_timeout=86400
max_allowed_packet=400M

max_open_files=8192
table_cache=2000

skip-name-resolve
lower_case_table_names=1
init_connect=‘SET AUTOCOMMIT=0‘

tmp_table_size=1024M
max_heap_table_size=1024M

[mysql_cluster]
ndb-connectstring=10.101.4.32

2、启动mysql
第一次启动最好用
/usr/local/mysql/bin/mysqld_safe &

添加到开机自启动
cp -rf /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chown mysql:mysql /etc/init.d/mysqld
service mysqld restart

3、验证节点是否启动成功
ps -ef|grep mysqld
netstat -lnput | grep 3306

4、在tmp下增加mysql.sock软链
cd /tmp
ln -s /var/lib/mysql/mysql.sock mysql.sock

5、修改mysql root用户密码
su - mysql
mysqladmin -u root password ‘mysql‘

【六】管理节点操作
1、查看集群是否运行正常
su - mysql
用ndb_mgm进入控制台
show
如果出现下面信息,那么恭喜你了

Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=11   @10.101.4.33  (mysql-5.6.21 ndb-7.3.7, Nodegroup: 0, *)
id=12   @10.101.4.34  (mysql-5.6.21 ndb-7.3.7, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.101.4.32  (mysql-5.6.21 ndb-7.3.7)

[mysqld(API)]   2 node(s)
id=21   @10.101.4.36  (mysql-5.6.21 ndb-7.3.7)
id=22   @10.101.4.37  (mysql-5.6.21 ndb-7.3.7)

2、停止集群管理节点和数据节点
shutdown

3、查看数据节点使用状况
all report memory

4、查看表数据存储的分区情况
ndb_desc -c 10.101.4.32 -d erp2014 xt_product -p

【七】查询节点操作
1、创建数据库
create database erp2014;
2、增加数据库远程访问
因user表非ndbcluster引擎,所以每个节点上都要执行一下
GRANT ALL PRIVILEGES ON erp2014.* TO ‘admin‘@‘localhost‘ IDENTIFIED BY ‘admin‘ WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON erp2014.* TO ‘admin‘@‘10.101.50.30‘ IDENTIFIED BY ‘admin‘ WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON erp2014.* TO ‘admin‘@‘10.101.4.32‘ IDENTIFIED BY ‘admin‘ WITH GRANT OPTION;
FLUSH PRIVILEGES;

更换*.*可单独对数据库以及表进行授权访问,更换%为固定主机,则只允许该主机连接,这些跟mysql非集群版管理一致

2、建表时必须指定数据库表的引擎为NDB或者NDBCLUSTER,否则同步失败。

3、哪位大神能告诉我一台查询节点上创建的存储过程和函数如何能自动同步到其他查询节点呢???

【八.一】负载均衡设置——Nginx
1、下载最新版的nginx
cd /usr/local
wget http://nginx.org/download/nginx-1.7.7.tar.gz

2、由于nginx属于七层架构,支持的是http协议,本身对tcp协议没有支持,所以不能代理mysql等实现负载均衡(lvs和haproxy可以),因此需要下载一个支持tcp的module
wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zip

3、解压、打补丁
tar -xvf nginx-1.7.7.tar.gz
unzip master.zip
mv nginx-1.7.7 nginx
cd nginx
patch -p1 < /usr/local/nginx_tcp_proxy_module-master/tcp.patch

4、编译、安装
./configure --add-module=/usr/local/nginx_tcp_proxy_module-master/ --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf
过程中可能会提示下面的错误
./configure: error: the HTTP rewrite module requires the PCRE library.
./configure: error: SSL modules require the OpenSSL library.
那么安装一下吧
sudo apt-get install pcre-devel openssl-devel
make
make install

5、修改配置文件,由于开始指定了conf-path=/usr/local/nginx/, 所以也要修改该目录下的配置文件,而非/usr/local/nginx/conf/目录中的那个,另外server中的那个监听端口如果也配置为3306的话,会导致nginx启动不了端口,换个不一样的就好了
vi nginx.conf
添加下面内容
tcp {
    timeout 1d;
    proxy_read_timeout 10d;
    proxy_send_timeout 10d;
    proxy_connect_timeout 30;

upstream mysql {
        server 10.101.4.36:3306 weight=1;
        server 10.101.4.37:3306 weight=1;
        check interval=60000 rise=2 fall=5 timeout=10000 type=tcp;
    }

server {
        server_name 10.101.4.32;
        listen 10.101.4.32:13306;
        proxy_pass mysql;
        so_keepalive on;
        tcp_nodelay on;
    }
}

6、启动nginx
cd /usr/local/nginx/xbin
./nginx
lsof | grep 13306
如果发现13306端口已经处于监听状态,那么配置成功了。

【八.二】负载均衡设置——HAProxy
1、安装haproxy
上传haproxy-1.5.3.tar.gz到/usr/local/下,我是放在mgmt(10.101.4.32)节点上,正式部署需单独服务器
cd /usr/local
tar -xvf haproxy-1.5.3.tar.gz
mv haproxy-1.5.3 haproxy
cd /usr/local/haproxy
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

2、建立配置文件
mkdir haproxy/etc
vi haproxy.cfg
粘贴下面内容:

# this config needs haproxy-1.1.28 or haproxy-1.2.1

global
  log 127.0.0.1   local0 info
  log 127.0.0.1   local1 notice
  maxconn         40960
  chroot          /usr/local/haproxy
  uid             root
  gid             root
  daemon
  pidfile         /usr/local/haproxy/haproxy.pid

defaults
  log             global
  mode            http
  option          dontlognull
  option          redispatch  
  retries         3
  balance         roundrobin
  #balance        source
  #balance        leastconn

timeout connect 5000
  timeout client  50000
  timeout server  50000
  timeout check   2000

listen mysql
  mode            tcp
  bind            0.0.0.0:23306
  balance         roundrobin
  #option mysql-check
  server mysql36 10.101.4.36:3306 weight 1 check inter 1s rise 3 fall 3
  server mysql37 10.101.4.37:3306 weight 1 check inter 1s rise 3 fall 3

listen stats
  bind            0.0.0.0:8888
  mode            http
  stats           enable
  stats uri       /admin
  stats refresh   5s
  stats realm     Haproxy\ statistics
  stats auth      admin:admin

3、启动haproxy
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg
访问 http://10.101.4.32:8888/admin,可看到每个查询节点是否都可以正常访问
应用程序需要连接的IP为 10.101.4.32, 端口为 23306(可在上面配置中变更)

【九】在线添加数据节点
1、修改管理节点的config.ini文件,增加两个数据节点
[NDBD]
NodeId=13
HostName=10.101.4.36
DataDir=/usr/local/mysql/data
[NDBD]
NodeId=14
HostName=10.101.4.37
DataDir=/usr/local/mysql/data

2、准备两台新机器(本例采用两台查询节点兼职),执行步骤【二】
复制已有数据节点上my.cnf文件
顺序重启原cluster中所有节点, 管理节点——>数据节点——>查询节点
启动新的数据节点 ndbd --initial

3、增加结点组
进入管理节点控制台
create nodegroup 13,14

4、数据重新分片
ALTER ONLINE TABLE erp2014.cwpos_detail REORGANIZE PARTITION;

【十】备份恢复
1、在管理节点上执行备份
su - mysql
ndb_mgm
start backup
执行完后会在/usr/local/mysql/data/目录下生成一个BACKUP文件夹,里面还有一个BACKUP-1文件夹,其中1为备份集编号

2、进行一些删数据或者删表的操作后,关闭集群
shutdown

3、按顺序重新启动集群
管理节点:  
su - mysql
/usr/local/mysql/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
数据节点:
su - mysql
ndbd (注意如果有需要恢复表、视图、存储过程等元数据信息,则需要采用 ndbd --initial 启动)

4、恢复数据
因为数据是分片存储在每个数据节点上的,因此在每个数据节点上都要执行一次恢复指令(参数说明: -c指定管理节点ip,-n指定数据节点的id,-b指定备份集编号,-m指定需要恢复元数据,-r指定需要恢复数据记录,--backup_path指定备份集所在的路径)
数据节点11:
su - mysql
ndb_restore -c10.101.50.44 -n11 -b1 -m -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1/

数据节点12:
su - mysql
ndb_restore -c10.101.50.44 -n12 -b1 -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1/

数据节点13:
su - mysql
ndb_restore -c10.101.50.44 -n13 -b1 -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1/

数据节点14:
su - mysql
ndb_restore -c10.101.50.44 -n14 -b1 -r --backup_path=/usr/local/mysql/data/BACKUP/BACKUP-1/

5、查看数据
登录到查询节点,发现备份的数据都回来了,但是这只能将数据恢复到备份时的那个时间点,假如在备份集产生后,我又误删除了一些数据,就不知道怎么恢复了,这个留待后面研究

【十一】利用binlog实现闪回功能
1、接第十章的疑问,找了下资料,发现可以利用mysql的binlog功能来实现误操作数据恢复

2、首先在查询节点上my.cnf文件中添加参数启动binlog
log_bin=/usr/local/mysql/data/binlog/mysql-bin.log

3、重启数据库后,就会发现目录下存在 mysql-bin.000001的二进制文件(每次重启数据库或执行flush logs后都会让文件流水号增加),然后对数据表进行增删改等DML操作的步骤都会北记录到这里。

4、然后可通过mysql自带的mysqlbinlog命令来进行管理
su - mysql
直接在终端显示指定区间的日志信息
mysqlbinlog -D /usr/local/mysql/data/binlog/mysql-bin.000001 --start-position=4 --stop-position=1862 --database=aabc
将指定区间的日志信息写到sql文件
mysqlbinlog -D /usr/local/mysql/data/binlog/mysql-bin.000001 --start-position=4 --stop-position=1862 --database=aabc > oper.sql
将指定区间的日志信息在数据库中再次执行一遍(-D参数为disable-log-bin, 用意为这个再次执行的指令不记录日志)
mysqlbinlog -D /usr/local/mysql/data/binlog/mysql-bin.000001 --start-position=4 --stop-position=1862 --database=aabc | mysql -uroot -p

技巧:
  1) 可通过正则表达式来指定日志文件,如 mysql-bin.[0-9]*
  2) 可通过在 mysql -uroot -ppwd 后增加参数 --one-database dbname 来恢复指定数据库

5、日志的相关指令
su - mysql
mysql -uroot -p

show master status;    -- 查看当前数据库日志写在第几个日志文件,以及下个position号
show master logs;     -- 查看二进制文件列表和文件大小,也可用 show binary logs
show binlog events in ‘mysql-bin.000001‘;   -- 查看日志中的event_type以及起始position号, 可用 limit 参数过滤行数
flush logs;   -- 启动新的日志文件,一般在数据库备份后使用
reset master;   -- 清除所有日志文件(也可设定expire_logs_days参数来实现)
purge master logs to ‘mysql-bin.000008‘;            -- 删除mysql-bin.000008之前的二进制日志文件
purge master logs before ‘2014-12-10 04:07:00‘      -- 删除该日期之前的日志

时间: 2024-10-07 04:53:15

MySQL集群安装、负载均衡及备份恢复的相关文章

mysql集群安装(centos)

永不放弃,一切皆有可能!!! 只为成功找方法,不为失败找借口! mysql集群安装(centos) mysql cluster : 1. 基于NDB Cluster 的分布式数据库系统 2. mysql集群中各服务器节点不共享数据 3. 在mysql cluster中节点指的是进程,区别于其他的集群中节点指的是计算机的情况, 因而在单台计算机上可以有任意多的节点 4. 三种节点: 1)管理节点: 管理cluster内其他节点; 包括启动,停止, 备份,配置等; 在启动其他节点前需要先启动管理节点

MySQL集群安装与配置

MySQL集群安装与配置 文章目录 [隐藏] 一.mysql集群安装 二.节点配置 三.首次启动节点 四.测试服务是否正常 五.安全关闭和重启 MySQL Cluster 是 MySQL 适合于分布式计算环境的高实用.高冗余版本.它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器.MySQL Cluster 能够使用多种故障切换和负载平衡选项配置NDB存储引擎,但在 Cluster 级别上的存储引擎上做这个最简单.下面我们简单介绍MySQL Clus

通过Apache+mod_JK+Tomcat集群实现负载均衡

通过Apache+mod_JK+Tomcat集群实现负载均衡 1.概念 通过Apache+mod_JK+Tomcat集群搭建起来的环境主要用来实现负载均衡和高可用性.使用apache作为反向代理服务器实现负载均衡,使用mod_jk可以实现节点的故障恢复功能,达到高可用性.使用tomcat集群功能实现sessionID共享复制.用户访问数据在到达apache后,如果是静态内容,直接由apache处理,如果是动态请求,就通过mod_jk调用后端的一台tomcat服务器去处理请求,可以通过黏性Sess

使用LVS+NAT搭建集群实现负载均衡

使用LVS+NAT搭建集群实现负载均衡 LVS集群简介    计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式.集群计算机通常用来改进单个计算机的计算速度和/或可靠性.一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多        LVS集群分布图   集群有三种类型:           

用apache和tomcat搭建集群,实现负载均衡

型的企业应用每天都需要承受巨大的访问量,在着巨大访问量的背后有数台服务器支撑着,如果一台服务器崩溃了,那么其他服务器可以使企业应用继续运行,用户对服务器的运作是透明化的,如何实现这种透明化呢?由如下问题需要解决. 一.Session的复制 二.如何将请求发送到正常的服务器 针对以上问题,可以使用群集和负载均衡来解决,整体架构如下:  中间由一台服务器做负载均衡(Load Balancer),它将所有请求,根据一定的负载均衡规则发送给指定的群集服务器(Cluster),群集服务器拥有着相同的状态和

Nginx实现tomcat集群进行负载均衡

一.背景 随着业务量和用户数量的激增,单一的tomcat部署应用已经无法满足性能需求,而且对于每次发布项目期间服务不可用的问题也凸显,既然出现了这个问题,那么我们本文就借助nginx来完美的解决这个问题. 二.基本概念 1.说明:关于Nginx的概念和介绍以及Centos7下安装步骤,请移步:Centos7安装Nginx实战 2.正向代理和反向代理 假设我们给定客户端A.代理服务器B.以及最终服务器C 正向代理:代理服务器B来代替客户端A来访问最终服务器C并将最终结果转发给客户端A,站在客户端A

在Linux上使用Nginx为Solr集群做负载均衡

在Linux上使用Nginx为Solr集群做负载均衡 在Linux上搭建solr集群时需要用到负载均衡,但测试环境下没有F5 Big-IP负载均衡交换机可以用,于是先后试了weblogic的proxyserver,和Apache,效果均很差,两台服务器做了负载均衡之后并发响应速度还没单台不做负载均衡的速度快.最后使用nginx,效果很不错,下面将在Linux上安装步骤记述一下. 1        安装准备 nginx软件版本:nginx 1.2.5 安装包:rhel_nginx-1.2.5-1.

“集群和负载均衡”等的通俗解释

在"高并发,海量数据,分布式,NoSql,云计算......"概念满天飞的年代,相信不少朋友都听说过甚至常与人提起"集群,负载均衡"等,但不是所有人都有机会真正接触到这些技术,也不是所有人都真正理解了这些"听起来很牛的"技术名词.下面简单解释一下吧.       集群(Cluster) 所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信.应用程序可以通过网络共享内存进行消息传送,实现分布式计算机.通俗

使用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡出现的无法加载mod_jk.conf文件的问题

用Apache + mod_jk + tomcat来实现tomcat集群的负载均衡的 如果出现了问题,可以用cmd  cd到Apache安装文件的bin下,运行httpd文件,错误信息就会打印出来. 我这里出现的问题是  Include conf/mod_jk.conf无法加载该配置文件(英文翻译过来就是这个问题) 为什么呢? 经过反复的检查发现是我建立的关于mode_jk.conf文件跟work.properties文件格式不对, 经过检查,用文本文件创建了这两个文件之后,文件的后缀名都是.c