Myql集群-单主多从

服务端常用技术

1.动静分离、反向代理

2.SOA服务治理框架(dubbo)

3.mycat+mysql主从(读写分离)

1. mysql的主从架构介绍

1.单主多从

应用场景:MySQL复制90%以上都是一个Master复制到一个或者多个Slave的架构模式,主要用于读压力比较大的应用的数据库端廉价扩展解决方案。因为只要Master和Slave的压力不是太大(尤其是Slave端压力)的话,异步复制的延时一般都很少很少。

缺点:当slave特别多时,master就会遇到网络瓶颈。

2.双主架构

应用场景:一个应用前台和后台用的不同的服务器,数据库大多数是主从结构,但是日志数据库,需要共用一个,这个时候可以把两边的日志数据库设为双主。

缺点:主动的Master-Master复制有一些特殊的用处。例如,地理上分布的两个部分都需要自己的可写的数据副本。这种结构最大的问题就是更新冲突。假设一个表只有一行(一列)的数据,其值为1,如果两个服务器分别同时执行如下语句:

在第一个服务器上执行:mysql> UPDATE tbl SET col=col + 1;

在第二个服务器上执行:mysql> UPDATE tbl SET col=col * 2;

那么结果是多少呢?一台服务器是4,另一个服务器是3,但是,这并不会产生错误。

3.主动-被动模式的Master-Master

这是master-master结构变化而来的,它避免了M-M的缺点,实际上,这是一种具有容错和高可用性的系统。它的不同点在于其中一个服务只能进行只读操作。

4.级联复制架构 Master –Slaves - Slaves

应用场景:在有些应用场景中,可能读写压力差别比较大,读压力特别的大,一个Master可能需要上10台甚至更多的Slave才能够支撑注读的压力。这时候,Master就会比较吃力了,因为仅仅连上来的SlaveIO线程就比较多了,这样写的压力稍微大一点的时候,Master端因为复制就会消耗较多的资源,很容易造成复制的延时。

操作:在Slave端记录复制所产生变更的BinaryLog信息的功能,也就是打开—log-slave-update选项。然后,通过二级(或者是更多级别)复制来减少Master端因为复制所带来的压力。也就是说,我们首先通过少数几台MySQL从Master来进行复制,这几台机器我们姑且称之为第一级Slave集群,然后其他的Slave再从第一级Slave集群来进行复制。从第一级Slave进行复制的Slave,我称之为第二级Slave集群。如果有需要,我们可以继续往下增加更多层次的复制。这样,我们很容易就控制了每一台MySQL上面所附属Slave的数量。这种架构我称之为Master-Slaves-Slaves架构

缺点:Slave并没有减少写的量,所有Slave实际上仍然还是应用了所有的数据变更操作,没有减少任何写IO。相反,Slave越多,整个集群的写IO总量也就会越多,我们没有非常明显的感觉,仅仅只是因为分散到了多台机器上面,所以不是很容易表现出来。

此外,增加复制的级联层次,同一个变更传到最底层的Slave所需要经过的MySQL也会更多,同样可能造成延时较长的风险。

5.带从服务器的Master-Master-Slaves结构

最大的好处就是既可以避免主Master的写入操作不会受到Slave集群的复制所带来的影响,同时主Master需要切换的时候也基本上不会出现重搭Replication的情况。但是,这个架构也有一个弊端,那就是备用的Master有可能成为瓶颈,因为如果后面的Slave集群比较大的话,备用Master可能会因为过多的SlaveIO线程请求而成为瓶颈。当然,该备用Master不提供任何的读服务的时候,瓶颈出现的可能性并不是特别高,如果出现瓶颈,也可以在备用Master后面再次进行级联复制,架设多层Slave集群。当然,级联复制的级别越多,Slave集群可能出现的数据延时也会更为明显,所以考虑使用多层级联复制之前,也需要评估数据延时对应用系统的影响。

说明:http://www.111cn.net/database/mysql/120444.htm

2.主从原理介绍

复制的基本过程如下:

1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置;

3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master- info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”

4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave 端执行了同样的 Query,所以两端的数据是完全一样的。

简单来讲就是从库先通过io线程读取主库的二进制文件(Master_Log_File)和位置(Read_Master_Log_Pos)然后缓存到本地(从库服务器)的中继文件(Relay_Log_File)中并记录已经读取到的位置(Relay_Log_Pos),再通过从库的sql线程去读取中继文件(Relay_Log_File),这个sql线程执行会记录已经执行到了哪个文件(Relay_Master_Log_File)和哪个位置(Exec_Master_Log_Pos)。

图解为:

2.安装mysql

2.1 下载安装包

> tar -zxvf mysql-5.6.32-linux-glibc2.5-x86_64.tar.gz    //解压

把mysql文件夹移动到 /usr/local/ 下

> mv mysql-5.6.32-linux-glibc2.5-x86_64 /usr/local/mysql

2.2 创建MySQL用户和组

> groupadd mysql

> adduser -r -g mysql mysql

> chown -R mysql.mysql /usr/local/mysql  //修改mysql目录所属mysql用户

2.3 安装 

> /usr/local/mysql/scripts/mysql_install_db

上面命令在cenos 7下面会报错,用以下命令替换:

> /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

修改配置文件my.cnf,必须要修改才能使用mycat

最后一行添加

lower_case_table_names = 1

2.4 设置mysql服务

> cp -f /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld

2.5 启动mysql 

> service mysqld start

2.6 把mysql命令加入环境变量

修改/etc/profile文件,最后行添加export PATH=$PATH:/usr/local/mysql/bin

然后执行 

> source /etc/profile   //使配置立即生效

登陆mysql如果提示错误 Can't connect to local MySQL server through socket '/tmp/mysql.sock'

执行命令

> ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock 后再登陆

root用户初始密码为空,修改密码使用mysqladmin命令

> mysqladmin -uroot -p password 密码

登陆客户端 

>mysql -uroot -p

创建测试数据库

CREATE database db1;

CREATE database db2;

CREATE database db3;

至此mysql已经安装完成了

常见问题链接:

http://www.cnblogs.com/kerrycode/p/4368312.html

3. 设置mysql主从

3.1 主数据库配置

1)在Master MySQL上创建一个用户‘devinmaster’,并允许其他Slave服务器可以通过远程访问Master,通过该用户读取二进制日志,实现数据同步。

>create user devinmaster;

2)为新建的用户赋权限

mysql> GRANT ALL PRIVILEGES ON *.* TO 'devinmaster'@'%' IDENTIFIED BY  'devin123' WITH GRANT OPTION;

说明:一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.57.0-192.168.57.255的Server都可以以devinmaster用户登陆主服务器。当然你也可以指定固定Ip。修改密码命令:update user set password=password('devin123'),host='192.168.57.%' where user='devinmaster';

3)查看主数据库日志配置:

> SHOW MASTER STATUS;

4)修改配置文件

log_bin = mysql-bin  #记录操作日志

binlog_ignore_db =  mysql  #不同步mysql系统数据库

server_id = 1

3.2 从数据库配置

1)找到my.conf文件夹,增加如下配置:

[mysqld]

log_bin = mysql-bin  #记录操作日志

replicate_ignore_db = mysql #不同步mysql系统数据库

slave_skip_errors = all

server_id = 3

2)链接主数据库

change master to master_host='192.168.57.129',master_port=3306,master_user='devinmaster',master_password='devin123', master_log_file='master-bin.000025',master_log_pos=120;


说明:

Slave_IO_Running: NO 问题排查:http://www.111cn.net/database/mysql/79902.htm

关于主从设置的说明:

http://www.xuebuyuan.com/698098.html

mysql集群与mysql主从区别

http://blog.csdn.net/wutian713/article/details/50682360

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容