前言
使用一个Redis实例作为主机,其余的作为备份机。主机和备份机的数据完全一致,主机支持数据的写入和读取等各项操作,而从机则只支持与主机数据的同步和读取。也就是说,客户端可以将数据写入到主机,由主机自动将数据的写入操作同步到从机。主从模式很好的解决了数据备份问题,并且由于主从服务数据几乎是一致的,因而可以将写入数据的命令发送给主机执行,而读取数据的命令发送给不同的从机执行,从而达到读写分离的目的。
整体
首先是我们自己先创建三个文件
[root@Aw opt]# mkdir -p /opt/redis/data
[root@Aw opt]# mkdir -p /opt/redis/log
[root@Aw opt]# mkdir -p /opt/redis/conf
再把配置文件拷贝conf文件夹中
[root@Aw redis-6.2.1]# cp redis.conf /opt/redis/conf/
修改配置文件,同时将配置文件改名 并为全局配置
[root@Aw conf]# mv redis.conf redis-common.conf
[root@Aw conf]# vim redis-common.conf
#bind 127.0.0.1 -::1 注释
protected-mode no 保护关掉
#port 6379 端口号注释
daemonize yes 后台启动开启
#pidfile /var/run/redis_6379.pid 私有的文件注释
#logfile "" 日志注释掉
rdb持久化缓存打开
save 3600 1
save 300 100
save 60 10000
#dbfilename dump.rdb 文件名注释
dir /opt/redis/data 数据目录换成自己的
masterauth root 从服务器访问主服务器的密码
requirepass root 访问主服务器的密码
在创建三个单独的配置文件
[root@Aw conf]# touch redis-6379.conf
[root@Aw conf]# touch redis-6380.conf
[root@Aw conf]# touch redis-6381.conf
每个配置文件中添加配置
#引用共用配置
include /opt/redis/conf/redis-common.conf
#进程编号记录文件
pidfile /var/run/redis-6379.pid
#进程端口号
port 6379
#日志记录文件
logfile "/opt/redis/log/redis-6379.log"
#数据记录文件
dbfilename dump-6379.rdb
#追加文件名称
appendfilename "appendonly-6379.aof"
#下面的配置无需在6379里配置
#备份服务器从属6379推荐配置配局域网IP
slaveof 192.168.26.146 6379
配置完成之后 开启三个不同的服务
[root@Aw bin]# redis-server /opt/redis/conf/redis-6379.conf
[root@Aw bin]# redis-server /opt/redis/conf/redis-6380.conf
[root@Aw bin]# redis-server /opt/redis/conf/redis-6381.conf
查看进程情况
[root@Aw bin]# ps -ef|grep redis
root 2318 1 0 20:10 ? 00:00:00 redis-server *:6379
root 2332 1 0 20:10 ? 00:00:00 redis-server *:6380
root 2339 1 0 20:11 ? 00:00:00 redis-server *:6381
root 2346 1701 0 20:11 pts/0 00:00:00 grep --color=auto redis
我们创建三个新窗口
查看当前服务状态 这个是主服务器
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.26.146,port=6380,state=online,offset=434,lag=0
slave1:ip=192.168.26.146,port=6381,state=online,offset=434,lag=0
master_failover_state:no-failover
master_replid:b84927bc0c30f7eab03ed0c0e6f3f715388f634f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:434
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:434
这是子服务器
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:192.168.26.146
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:448
slave_priority:100
slave_read_only:1
connected_slaves:0
master_failover_state:no-failover
master_replid:b84927bc0c30f7eab03ed0c0e6f3f715388f634f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:448
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:448
我们在主服务器中设置一个set
127.0.0.1:6379> set name aw
OK
我们可以在子中获取到
127.0.0.1:6381> get name
"aw"
但是不能在子中设置set,因为我们并没有开启,我们的目的就是让他们实现读写分离。
127.0.0.1:6381> set age 10
(error) READONLY You can't write against a read only replica.