redis的主从复制,读写分离,主从切换

当数据量变得庞大的时候,读写分离还是很有必要的。同时避免一个redis服务宕机,导致应用宕机的情况,我们启用sentinel(哨兵)服务,实现主从切换的功能。

redis提供了一个master,多个slave的服务。

准备三个redis服务,依次命名文件夹子master,slave1,slave2.这里为在测试机上,不干扰原来的redis服务,我们master使用6000端口。

配置文件(redis.conf)

master配置修改端口:

    port 6000

    requirepass 123456

slave1修改配置:

 

    port 6001

    slaveof 127.0.0.1 6000

    masterauth 123456 

    requirepass 123456

  

slave2修改配置:  

     port 6002

     slaveof 127.0.0.1 6000

     masterauth 123456 

     requirepass 123456

  

requirepass是认证密码,应该之后要作主从切换,所以建议所有的密码都一致, masterauth是从机对主机验证时,所需的密码。(即主机的requirepass)

启动主机

     redis-server redis.conf  

启动从机:

   redis-server redis1.conf

   redis-server redis2.conf

输入:

ps -ef |grep redis
root      6617     1  0 18:34 ?        00:00:01 redis-server *:6000
root      6647     1  0 18:43 ?        00:00:00 redis-server *:6001
root      6653     1  0 18:43 ?        00:00:00 redis-server *:6002
root      6658  6570  0 18:43 pts/0    00:00:00 grep redis

可以看到主从机的redis已经相应启动。

我们来验证下 主从复制。

master:

[[email protected] master]# redis-cli -p 6000
127.0.0.1:6000> auth 123456
OK
127.0.0.1:6000> set test chenqm
OK

slave1:

[[email protected] slave2]# redis-cli -p 6001
127.0.0.1:6001> auth 123456
OK
127.0.0.1:6001> get test
"chenqm"

slave2:

[[email protected] slave2]# redis-cli -p 6002
127.0.0.1:6002> auth 123456
OK
127.0.0.1:6002> get test
"chenqm"

  

可以看到主机执行写命令,从机能同步主机的值,主从复制,读写分离就实现了。

但是万一主机挂了怎么办,这是个麻烦事情,所以redis提供了一个sentinel(哨兵),以此来实现主从切换的功能,类似与zookeeper.

我们配置两个sentinel进程:

vi sentinel.conf 
port 26379

sentinel monitor mymaster 127.0.0.1 6000 2

sentinel auth-pass mymaster 123456

 

vi sentinel.conf

 

port 26479

sentinel monitor mymaster 127.0.0.1 6000 2

sentinel auth-pass mymaster 123456

  

启动sentinel服务(到对应的目录执行相应的命令):

redis-server sentinel.conf --sentinel

查看日志:

[7014] 11 Jan 19:42:30.918 # +monitor master mymaster 127.0.0.1 6000 quorum 2
[7014] 11 Jan 19:42:30.923 * +slave slave 127.0.0.1:6002 127.0.0.1 6002 @ mymaster 127.0.0.1 6000
[7014] 11 Jan 19:42:30.925 * +slave slave 127.0.0.1:6001 127.0.0.1 6002 @ mymaster 127.0.0.1 6000

从对应的日志观察到,一个master服务,两个slave服务

我们现在来kill master进程

[[email protected] slave1]# ps -ef|grep redis
root      6960     1  0 19:29 ?        00:00:02 redis-server *:6000
root      6968     1  0 19:30 ?        00:00:01 redis-server *:6001
root      6975     1  0 19:30 ?        00:00:01 redis-server *:6002
root      7014  6570  0 19:42 pts/0    00:00:01 redis-server *:26479
root      7017  6789  0 19:42 pts/5    00:00:01 redis-server *:26379
root      7021  6729  0 19:46 pts/3    00:00:00 grep redis
[[email protected] slave1]# kill -9 6960

 我们观察日志:

[7014] 11 Jan 19:43:41.463 # +sdown master mymaster 127.0.0.1 6000
[7014] 11 Jan 19:46:42.379 # +switch-master mymaster 127.0.0.1 6000 127.0.0.1 6001

 master切换了,当6000端口的这个服务重启的时候,他会变成6001端口服务的slave。

因为sentinel在切换master的时候,把对应的sentinel.conf和redis.conf文件的配置修改。

期间我们还需要关注的一个问题:sentinel服务本身也不是万能的,也会宕机,所以我们还得部署sentinel集群,象我这样多启动几个sentinel。

关注这个配置:

sentinel monitor mymaster 127.0.0.1 6000 2

这个后面的数字2,是指当有两个及以上的sentinel服务检测到master宕机,才会去执行主从切换的功能。
时间: 2024-10-29 19:08:54

redis的主从复制,读写分离,主从切换的相关文章

mysql数据业务垂直+水平分割+主从复制读写分离

友情提示:本人第一次写技术博客,会继续完善,尽量做到图文并茂,通俗易懂,如果有什么写的不好的地方,还请大家多多提意见,您的意见将是我宝贵的资源.如果有兴趣的话,还可以一起讨论相关技术哦,亲!一定要注意软件版本哦! 联系方式 QQ:794884160 指导老师:双星  冯德勇老师  曾勇老师 一.拓扑图: 垂直+水平分割+主从复制+读写分离完整原理图: 仅说明原理,详细拓扑及参数参考本次实验拓扑图 本次试验拓扑图:(上图左侧部分) 二.实验描述: 根据业务原型先进行数据库垂直切割,然后用户数据根据

搭建MySQL代理服务器实现读写分离+主从同步

实验需求: 1.配置2台MySQL服务器(192.168.100.2,192.168.100.3)+1台代理服务器(192.168.100.1),实现MySQL代理的读写分离. 2.用户只需要访问MySQL代理服务器,实际的SQL查询.写入操作交给后台的2台MySQL服务器来完成. 3.2台MySQL服务器实现主从同步,其中Master服务器允许SQL查询.写入,Slave服务器只允许SQL查询. 一 .MASTER数据库服务器(192.168.100.2)的配置 1.安装软件包(本实验采用My

mysql主从复制读写分离-Altas

mysql主从复制读写分离 本文读写分离使用的软件是Altas,altas是奇虎360公司开发的开源数据库代理软件.它是基于mysql-proxy开发而成的 它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行.基于此可以实现负载均衡.读写分离.高可用性等需求. mysql读写分离原理: 数据库层在高并发的情况下,i/o会产生瓶颈.而实际上用户读的请求要远远大于写的请求. 使用代理服务作为数据库前端,将不同的请求根据规则分配到不同的后端数据上面去,比如将写的请求分

【实战】Amoeba 代理 MySQL 主从复制 + 读写分离 【提供源码包】

目录简介: 1· Amoeba 的介绍2· MySQL 主从复制原理3· MySQL 读写分离原理4· 实战案例5· 总结归纳 Amoeba 的介绍 1)Amoeba 是什么: 1·Amoeba 的中文名是:变形虫.它是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy.它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行.基于此可以实现负载均衡.读写分离.高可用性等需求. 2·Amoeba相当于一个SQL请求的路由器,目的是为负载均衡.读

Mysql的主从复制读写分离--简单篇

Mysql基础拓扑图: Mysql环境准备: 一台mysql主服务器(安装mysql) 两台mysql从服务器(安装mysql) 一台mysql代理(安装amoeba和java) 一台mysql客户端(mysql客户端) 部署前先关闭所有的iptables,selinux Mysql的主从复制读写分离所需安装包: cmake-2.8.6.tar.gz mysql-5.5.22.tar.gz amoeba-mysql-binary-2.2.0.tar.gz jdk-7u65-linux-x64.t

mysql主从复制读写分离之——proxysql应用

一.说明ProxySQL是一个开源的MySQL代理服务器,这意味着它充当MySQL服务器和访问其数据库的应用程序之间的中介.ProxySQL可以通过在多个数据库服务器池之间分配流量来提高性能,并且如果一个或多个数据库服务器发生故障,还可以通过自动故障切换到备用数据库来提高可用性. 系统环境:master1:ubuntu16.04 mysql5.6 192.168.1.10 3307 master2:ubuntu16.04 mysql5.6 192.168.1.20 3307slave1: ubu

MySQL5.6主从复制(读写分离)

MySQL主从复制(读写分离)和集群的区别: 1.主从复制(读写分离):一般需要两台及以上数据库服务器即可(一台用于写入数据,一台用于同步主的数据并用于数据查询操作).局限性:(1)配置好主从复制之后,同一张表,只能对一个服务器写操作.如果在从上执行了写操作,而之后主也操作了这张表,或导致主从不同步:据说可以配置成主主方式(2)主数据库服务器宕机,需要手动将业务系统切换到从数据库服务器.无法做到高可用性(除非再通过部署keepalive做成高可用方案).2.集群是由N台数据库服务器组成,数据的写

MySQL5.6主从复制(读写分离)教程

一.前言:为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低. 为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主数据库的负载. 而且如果主数据库宕机,可快速将业务系统切换到从数据库上,可避免数据丢失. 二.MySQL主从复制(读写分离)和集群的区别: 我对MySQL也是刚开始研究,不是很专业.我的理解是: 1.主从复制(读写分离):一般需要两台及以上数据库服务器即可(一台用于写入数据,一台用于同步主

mysql主从复制+读写分离 菜鸟入门

MYsql主从复制 1.mysql主从复制原理: Master将数据变化记录到二进制日志中[binary log] Slave将master的二进制日志[binary log]拷贝到自己的中继日志[relay log]中. Slave将中继入日志[relay log]事件在做一次,将数据变化,反应到自身数据库. 简述:mysql主从复制其实就是完全备份,和二进制日志备份还原的过程.二进制日志的还原基本上是实时进行的.注意不是完全实时,而是异步实时,主从直接的执行有延迟.如果master压力过大,

mysql主从复制读写分离

一.环境 1.主服务器操作系统:Mac OS MySQL版本:5.1.6 2.从服务器操作系统:Centos 6.5 MySQL版本:5.1.6 二.实战 2.1MySQL主从复制,读写分离示意图 MySQL 复制的工作方式很简单,一台服务器作为主机,一台或多台服务器作为从机.主机会把数据库的变化记录到日志.一旦这些变化被记录到日志,就会立刻(或者以设定的时间间隔)被送到从机. 2.2 主服务器IP:172.16.151.1 从服务器IP:172.16.151.130 在两台服务器分别安装好My