Redis-04-主从复制和读写分离

主从:主写、从读

  • 通过持久化功能,Redis 保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,比如硬盘坏了,也会导致数据丢失。

  • 为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。

  • 这就要求当一台服务器上的数据更新后,自动将更新的数据同步到其他服务器上,那该怎么实现呢? 使用Redis 的主从复制。

  • Redis提供了复制(replication)功能来自动实现多台 redis 服务器的数据同步(每天19 点 新闻联播,基本从 cctv1-8,各大卫视都会播放)

  • 我们可以通过部署多台 redis,并在配置文件中指定这几台 redis
    之间的主从关系,主负责写入数据,同时把写入的数据实时同步到从机器,这种模式叫做主从复制,即master/slave,并且 redis 默认 master 用于写,slave 用于读,向 slave 写数据会导致错误

  • 主从配置:(一主、二从),修改配置文件,启动时,服务器读取配置文件,并自动成为指定服务器的从服务器,从而构成主从复制的关系

redis-server redis1.conf
redis-server redis2.conf
redis-server redis3.conf

第一步:
如果 Redis 启动,先停止。
作为 Master 的 Redis 端口是 6380
作为 Slaver 的 Redis 端口分别是 6382 , 6384
创建三个配置分别命名为 redis6380.conf, redis6382.conf redis6384.conf

#进入到/root,后创建文件夹
mkdir master-slave
[root@localhost ~]# mkdir master-slave
#进入到文件夹中
cd master-slave
[root@localhost ~]# cd master-slave
[root@localhost master-slave]# 
#创建三个配置文件
touch redis638{0,2,4}.conf
[root@localhost master-slave]# touch redis638{0,2,4}.conf
[root@localhost master-slave]# ls
redis6380.conf  redis6382.conf  redis6384.conf

第二步:
编辑 Master 的配置文件 redis6380.conf : 在空文件加入如下内容:

	[root@localhost master-slave]# vim redis6380.conf
	--------------------------------------------
	include /usr/local/redis-3.2.9/redis.conf
	daemonize yes
	port 6380
	pidfile /var/run/redis_6380.pid
	logfile 6380.log
	dbfilename dump6380.rdb
include : 包含原来的配置文件内容。    	/usr/local/redis-3.2.9/redis.conf 按照自己的目录设置。
daemonize:yes 后台启动应用,相当于	 ./redis-server & , &的作用。
port : 自定义的端口号
pidfile : 自定义的文件,表示当前程序的 pid ,进程 id。
logfile:日志文件名
dbfilename:持久化的 rdb 文件名

第三步:
编辑 Slave 的配置文件 redis6382.conf 和 redis6384.conf: 在空文件加入如下内容

	[root@localhost master-slave]# vim redis6382.conf
	--------------------------------------------
	redis6382.conf:
	include /usr/local/redis-3.2.9/redis.conf
	daemonize yes
	port 6382
	pidfile /var/run/redis_6382.pid
	logfile 6382.log
	dbfilename dump6382.rdb
	slaveof 127.0.0.1 6380
配置项说明:
slaveof : 表示当前 Redis 是谁的从。当前是 127.0.0.0 端口 6380 这个 Master 的从。
	[root@localhost master-slave]# vim redis6384.conf
	--------------------------------------------
	redis6384.conf:
	include /usr/local/redis-3.2.9/redis.conf
	daemonize yes
	port 6384
	pidfile /var/run/redis_6384.pid
	logfile 6384.log
	dbfilename dump6384.rdb
	slaveof 127.0.0.1 6380

第四步:
启动方式 ./redis-server 配置文件
redis-server redis6380.conf
redis-server redis6382.conf
redis-server redis6384.conf

[root@localhost master-slave]# redis-server redis6380.conf 
[root@localhost master-slave]# redis-server redis6382.conf 
[root@localhost master-slave]# redis-server redis6384.conf 
启动 Redis,并查看启动进程
ps -ef | grep redis
[root@localhost master-slave]# ps -ef |grep redis
root       3967      1  0 03:27 ?        00:00:50 redis-server 127.0.0.1:6379
root      14311  12770  0 15:18 pts/0    00:00:00 redis-cli
root      15138  14858  0 16:10 pts/1    00:00:00 vim redis6380.conf
root      15181  14858  0 16:13 pts/1    00:00:00 vim redis6382.conf
root      15191  14858  0 16:14 pts/1    00:00:00 vim redis6384.conf
root      15193      1  0 16:14 ?        00:00:00 redis-server 127.0.0.1:6380
root      15199      1  0 16:14 ?        00:00:00 redis-server 127.0.0.1:6382
root      15214      1  0 16:15 ?        00:00:00 redis-server 127.0.0.1:6384
root      15275  14858  0 16:17 pts/1    00:00:00 grep --color=auto redis

第五步:
①: Redis 客户端使用指定端口连接 Redis 服务器
./redis-cli -p 端口
redis-cli -p 6380

②:查看服务器信息
info replication

启动主的客户端并查看信息

[root@localhost master-slave]# redis-cli -p 6380
127.0.0.1:6380> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6382,state=online,offset=253,lag=1
slave1:ip=127.0.0.1,port=6384,state=online,offset=253,lag=1
master_repl_offset:253
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:252

启动从的客户端并查看信息

[root@localhost master-slave]# redis-cli -p 6384
127.0.0.1:6384> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:449
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
进入客户端需指定端口:./redis-cli -p 6380 不配置启动默认都是主 master

第六步:
测试:主写 从读。
主的可以写,也是读

127.0.0.1:6380> set k1 v1
OK
127.0.0.1:6380> get k1
"v1"

从的只能读,不能写,写的时候会报错

127.0.0.1:6384> get k1
"v1"
127.0.0.1:6384> set k2 v2
(error) READONLY You can't write against a read only slave.
127.0.0.1:6384> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值