mysql集群一:主从复制,通过mysql-proxy做负载均衡

mysql集群架构方式很多,根据不同的需求做不一样的架构,简单一点的就是mysql的replication,也就是Mysql的复制功能,模式有:master-slaves,master-slaves-slaves,master-master-slaves等可以有多个分层,那么现在我所要说的是master-slaves的模式(其他的模式原理基本都一样),然后再通过mysql官方提供的Mysql-proxy实现读写分离,达到负载均衡的效果。

环境:

  主机:master:192.168.1.109,slave1:192.168.1.110,mysqlProxy:192.168.1.112。(workstation10平台创建虚拟机模拟)

  操作系统:Red Hat Enterprise Linux Server release 5.8

  mysql:mysql-5.5.37-linux2.6-i686.tar.gz

  mysql-proxy:mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz

1、安装mysql:

[[email protected] ~]# cd /usr/local  //进入到安装目录

[[email protected] local]# tar -zxvf mysql-5.5.37-linux2.6-i686.tar.gz
   //解压mysql二进制包

[[email protected] local]# ln -s mysql-5.5.37-linux2.6-i686
mysql  //解压之后加上链接

[[email protected] local]# groupadd mysql  //增加mysql用户组

[[email protected] local]# useradd -g mysql mysql  //增加mysql用户帐号

[[email protected] local]# cd mysql  //进入安装之后的mysql目录

[[email protected] mysql]# chown -R root:mysql
.  //修改文件属组和属主,注意该命令后面有一个点,表示当前目录

[[email protected] mysql]# chown -R mysql:mysql data/  //把data目录的属主改为mysql

[[email protected] mysql]# cp support-files/my-large.cnf
/etc/my.cnf  //拷贝mysql配置文件放在etc目录下并改名为my.cnf

[[email protected] mysql]# cp support-files/mysql.server
/etc/init.d/mysqld  //拷贝mysql的启动脚本放在/etc/init.d/目录下

[[email protected] mysql]# service mysqld start  //启动mysql

至此mysql安装已经结束,接下来就是mysql的主从配置。(其他两台主机也照此安装mysql)

2、配置master:

[[email protected] mysql]# vi /etc/my.cnf  //编辑配置文件

server-id=1  //默认是1,不是的话则改为1

thread_concurrency = 2  //线程并发数(CPU*2)

log-bin=mysql-bin  //打开二进制日志功能

保存退出,重新启动mysql。

登入mysql:

[[email protected] mysql]# mysql -uroot -p  //默认密码空,直接敲回车进入

mysql> grant replication slave on *.* to [email protected]‘192.168.1.%‘ identified by
‘123456‘;

mysql>flush privileges;

mysql>show grants for ‘repl‘@‘192.168.1.%‘;  //查看授权,有记录说明ok

mysql>show master status\G;  //查看master服务器状态,有二进制日志文件名和记录位置(position)

至此mysql配置完成。

3、配置slave

[[email protected] mysql]#vi /etc/my.cnf  //编辑配置文件

server-id=11  //设置与master不一样就行,

thread_concurrency = 2  //线程并发数(CPU*2)

relay-log=mysql-log  //打开中继日志

relay-log-index=mysql-log.index  //设置relay-log-index文件名

保存退出,重新启动mysql。

登入mysql:

[[email protected] mysql]# mysql -uroot -p  //默认密码空,直接敲回车进入

mysql>change master to

->master_host=‘192.168.1.109‘,  //master服务器ip

   ->mastet_user=‘repl‘,  //用户名

   ->mastet_password=‘123456‘,  //密码

   ->master_log_file=‘mysql-bin.000001‘,  //master服务器二进制日志名

   ->master_log_pos=107;

mysql>slave start;  //启动slave

mysql> SHOW SLAVE STATUS\G;  //查看slave状态

*************************** 1. row
***************************

Slave_IO_State:

Master_Host: 192.168.1.109

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File:
mysql-bin.000001

Read_Master_Log_Pos:
4

Relay_Log_File:
mysql-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File:
mysql-bin.000001

Slave_IO_Running:
yes

Slave_SQL_Running:
yes

...omitted...

Seconds_Behind_Master:
NULL

如果 Slave_IO_Running和Slave_SQL_Running显示为yes则配置ok,过程中可能会出现:

Slave I/O: error connecting to master
‘[email protected]:3306‘ - retry-time: 60  retries: 86400, Error_code:
2003

引起问题原因是防火墙拦截了,解决办法就是修改防火墙配置,简单直接的办法就是把master服务器的防火墙关掉,执行/etc/init.d/iptables
stop命令。

接下来测试,在master中创建一个数据库db_test,查看slave中是是否存在db_test。

至此slave配置结束,其他从服务器按此方式配置。

4、配置mysql-proxy,代理服务最好另外部署一台机器,尤其是上线运行后,所以这里测试也是用了单独一台虚拟机,没有部署在master或slave机器上。

[[email protected] local]# tar -zxvf
mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit.tar.gz  //解压

[[email protected] local]# ln -s
 mysql-proxy-0.8.4-linux-glibc2.3-x86-32bit  mysql-proxy
 //加一个快捷链接

[[email protected] local]# groupadd mysql-proxy  //创建用户组

[[email protected] local]# useradd -g mysql-proxy
 mysql-proxy  //创建用户

[[email protected] local]# cd mysql-proxy  //进入mysql-proxy目录

[[email protected] mysql-proxy]# chown -R root:mysql-proxy
.  //更改目录属主和属组,命令后面有一个点(.)表示当前目录

[[email protected] mysql-proxy]# vi
/etc/profile.d/mysql-proxy.sh  //把mysql的bin目录加到PATH变量中,

export PATH=$PATH:/usr/local/mysql-proxy/bin

[[email protected] mysql-proxy]# source /etc/profile
  //让配置文件立刻生效

[[email protected] mysql-proxy]# mysql-proxy
--help-all  //查看mysql-proxy命令,出现如下信息:


下面我们启动mysql-proxy,做一个简单测试,不过我们先要简单介绍一下mysql-proxy命令。

mysql-proxy 命令

  • --help-all ———— 用于获取全部帮助信息

  • --proxy-address=host:port ———— 代理服务监听的地址和端口

  • --admin-address=host:port ———— 管理模块监听的地址和端口

  • --proxy-backend-addresses=host:port ————
    后端mysql服务器的地址和端口(主服务器)

  • --proxy-read-only-backend-addresses=host:port ————
    后端只读mysql服务器的地址和端口(从服务器)

  • --proxy-lua-script=file ———— 完成mysql代理功能的Lua脚本

  • --daemon ———— 以守护进程模式启动mysql-proxy

  • --defaults-file=/path/to/conf_file_name ————
    默认使用的配置文件路径

  • --log-file=/path/to/log_file_name ———— 日志文件名称

  • --log-level=level ———— 日志级别

  • --log-use-syslog ———— 基于syslog记录日志

  • --user=user_name ———— 运行mysql-proxy进程的用户

[[email protected] mysql-proxy]#
mysql-proxy  --daemon --log-level=debug --log-file=/var/log/mysql-proxy.log
--plugins="proxy" --proxy-backend-addresses="192.168.1.109:3306"
--proxy-read-only-backend-addresses="192.168.1.110:3306"  //启动mysql-proxy

[[email protected] mysql-proxy]# tail
/var/log/mysql-proxy.log  //查看启动日志

2014-05-10 00:09:22: (critical) plugin proxy 0.8.4 started
2014-05-10
00:09:22: (debug) max open file-descriptors = 1024
2014-05-10 00:09:22:
(message) proxy listening on port :4040
2014-05-10 00:09:22: (message) added
read/write backend: 192.168.1.109:3306
2014-05-10 00:09:22: (message) added
read-only backend: 192.168.1.110:3306

[[email protected] mysql-proxy]#netstat -ntulp | grep :4040  //查看监听的端口

tcp        0      0 0.0.0.0:4040  
             0.0.0.0:*      
            LISTEN    
 10056/mysql-proxy

现在我们需要在master服务器中创建一个远程登入的mysql账号

master:

mysql> GRANT
ALL ON *.* TO [email protected]
‘192.168.1.%‘ IDENTIFIED BY ‘123456‘

Query OK, 0 rows
affected (0.07 sec)

mysql> FLUSH
PRIVILEGES; 

Query OK, 0 rows
affected (0.04 sec)

在从服务器上做测试:

slave:

[[email protected]
~]
# mysql -uroot -p123456 -h192.168.1.112
--port=4040 

这样就连上了Mysql-Proxy服务器了,如果出现错误:ERROR 2003
(HY000): Can‘t connect to MySQL server on ‘192.168.1.112‘
(113),请修改防火墙配置或关闭。

下面我们来实现读写分离,Mysql-Proxy本身不会实现读写分离,主要是依靠
Lua 脚本实现的。

[[email protected] mysql-proxy]# killall
mysql-proxy  //杀掉mysql-proxy进程

[[email protected] mysql-proxy]# netstat
-ntlup | grep 4040  //查看进程是否停掉

[[email protected] mysql-proxy]# cd
share/doc/mysql-proxy/

[[email protected] mysql-proxy]# ls
| grep rw-splitting.lua  //查看读写分离脚本,lua语言实现

rw-splitting.lua

[[email protected] mysql-proxy]# mysql-proxy
--daemon --log-level=debug --log-file=/var/log/mysql-proxy.log --plugins="proxy"
--proxy-backend-addresses="192.168.1.109:3306"
--proxy-read-only-backend-addresses="192.168.1.110:3306"
--proxy-lua-script="/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua"

[[email protected] mysql-proxy]#

在slave
服务器上做测试,ok,完成了,mysql-proxy实现mysql集群的读写分离完成了,这种模式是MySQL集群最为基本的一种模式,也能够实现负载均衡,后续研究MySQL更深层次的集群,一同分享一同进步。^_^

mysql集群一:主从复制,通过mysql-proxy做负载均衡,布布扣,bubuko.com

时间: 2024-12-12 15:19:12

mysql集群一:主从复制,通过mysql-proxy做负载均衡的相关文章

【MySQL集群】——Java程序连接MySQL集群

上篇简介了怎样在Windows环境下建立配置MySQL集群,这里用一个实现注冊功能的小Demo通过jdbc的方式连接到MySQL集群中. 外部程序想要远程连接到mysql集群,还须要做的一个操作就是设置sql节点的mysql能够被远程连接. 详细操作为: mysql> grant all privileges on MySQL_Cluster_Test.* to [email protected]'%' identified by ''; mysql> flush privileges; 表示

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

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

高可用性、负载均衡的mysql集群解决方案

一.mysql的市场占有率 二.mysql为什么受到如此的欢迎 三.mysql数据库系统的优缺点 四.网络服务器的需求 五.什么是mysql的集群 六.什么是负载均衡 七.mysql集群部署和实现方法 八.负载均衡的配置和测试 九.Mysql集群系统的测试(测试方案+测试脚本+测试结果分析) l mysql的市场占有率 MySQL是世界上最流行的开源数据库,已有1100多万的击活安装,每天超过五万的下 载.MySQL为全球开发者.DBA和IT管理者在可靠性.性能.易用性方面提供了选 择. 第三方

【转】高可用性、负载均衡的mysql集群解决方案

高可用性.负载均衡的mysql集群解决方案 一.mysql的市场占有率 二.mysql为什么受到如此的欢迎 三.mysql数据库系统的优缺点 四.网络服务器的需求 五.什么是mysql的集群 六.什么是负载均衡 七.mysql集群部署和实现方法 八.负载均衡的配置和测试 九.Mysql集群系统的测试(测试方案+测试脚本+测试结果分析) l mysql的市场占有率 MySQL是世界上最流行的开源数据库,已有1100多万的击活安装,每天超过五万的下 载.MySQL为全球开发者.DBA和IT管理者在可

MySQL集群(一)之主从复制

我们要学习的就是MySQL Replication 回到顶部(go to top) 一.配置mysql主从模式的原因 1)Mysql内建的复制功能是构建大型.高性能应用程序的基础.在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的. 譬如当服务器发生故障,而没有备份服务器来提供服务时,业务就必须得停止,这样会对企业带来巨大的损失.2)为了提高数据库服务器的稳定性,加快数据处理的效率,保护数据免受意外的损失,我们采用mysql的主从复制方式,分离对数据库的查询和更新操作,使用从

MySQL集群结构说明

在以前,数据库的集群配置一直很难,难点在于MySQL主从结构的高可用和读写分离.万幸的是,Galera/GR的出现,让整个集群的配置都极大程度地简化了. 以下是一个简单的MySQL集群拓扑图: 1.MySQL中间件:对MySQL Server的读写操作进行路由(即读写分离):分库分表(sharding) (1).MySQL Router:MySQL官方提供的轻量级MySQL代理(路由),只提供读写分离功能,前身为SQL Proxy. (2).ProxySQL:类似于MySQL Router,轻量

mycat实现简单的mysql集群负载均衡

什么是mycat呢? 简单理解为一个MySQL中间件,它支持分流.基于心跳的自动故障切换,支持读写分离,支持mysql主从,基于Nio管理线程的高并发- 详见官网:http://www.mycat.io/ 为什么需要mysql集群? 一个庞大的分布式系统的性能瓶颈中,最脆弱的就是连接,一个是客户端与后端的连接,另一个是后端与数据库的连接,说白了就是发送端请求太多,接收端能够的接收和处理的请求并不多,在客户端与后端中可以利用类似nginx的负载均衡解决,而在后端与数据库中可以利用类似mycat的负

mysql集群7.4.1

一:mysql集群原理: 1 mysql集群分为三个节点: 1.1 控制节点:本身不提供服务只是控制整个集群的开启与关闭 1.2 数据节点:真正提供数据库的存储,并和其他数据节点关联用 1.3 sql节点:和平常数据库一样提供正常服务 二:mysql集群要点与思路: 1 最好将现有的mysql或MariaDB卸载干净, rpm -qa | grep mysql 找出含有mysql的软件包 rpm -e  --nodeps mysql   删除后再查一下是否删除干净 2 关闭防火墙/selinux

2-20 MySQL集群搭建实现高可用

MySQL集群概述和安装环境 MySQL Cluster是MySQL适合于分布式计算环境的高实用.高冗余版本.Cluster的汉语是"集群"的意思.它采用了NDB Cluster 存储引擎,允许在1个 Cluster 中运行多个MySQL服务器. MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署"内存中"数据库的 Cluster .通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件无特殊要求.此外,由于每个组件有自己的内存和磁盘,不存在单