1. Redis主从复制2. 主从复制的作用3. 环境配置4. 伪集群搭建4.1 复制文件4.2 修改文件4.2.1 修改redis79.conf 4.2.2 修改redis80.conf 4.2.3 修改redis81.conf 4.3 启动4.3.1 第一个窗口启动4.3.2 在第二个窗口启动4.3.3 在第三个窗口启动4.3.4 查看,4.4 一主二从4.4.1 窗口80上执行4.4.2 窗口79上执行4.4.2 窗口81上执行4.4.4 窗口79上执行5. 使用伪集群6. 从机变为主节点
1. Redis主从复制
数据的复制是单向的,只能从主节点复制到从节点。Master以写为主,Slave以写为主。
主从复制,读写分离。80%的情况都是在进行读操作,减少服务器的压力。
三台Redis的内存不应超过20GB,使用集群。
2. 主从复制的作用
- 数据冗余
- 故障恢复
- 负载均衡
- 高可用
3. 环境配置
只配置从库,不用配置主库。
127.0.0.1:6379> info replication # 查看当前库的信息 # Replication role:master # 角色 connected_slaves:0 # 没有从机 master_replid:b8d5a8efc1776693d8bb37ca5caaacf44e55958d master_replid2:0000000000000000000000000000000000000000 master_repl_offset:0 second_repl_offset:-1 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0
4. 伪集群搭建
一台机器以不同配置文件开三个redis端口服务
4.1 复制文件
/etc/redis/redis.conf
复制3份root@redis:~# cd /etc/redis root@redis:/etc/redis# ls redis.conf root@redis:/etc/redis# cp redis.conf redis79.conf root@redis:/etc/redis# cp redis.conf redis80.conf root@redis:/etc/redis# cp redis.conf redis81.conf root@redis:/etc/redis# ls redis79.conf redis80.conf redis81.conf redis.conf
4.2 修改文件
4.2.1 修改redis79.conf
- 端口号
- pid名字
- log文件名字
- dump.rdb文件名字
logfile /var/log/redis/redis-server6379.log
dbfilename dump6379.rdb
4.2.2 修改redis80.conf
4.2.3 修改redis81.conf
4.3 启动
4.3.1 第一个窗口启动
root@redis:/etc/redis# redis-server /etc/redis/redis79.conf # 查看,生成redis-server6379.log,成功启动 root@redis:/var/log/redis# ls redis-server6379.log redis-server.log
4.3.2 在第二个窗口启动
root@redis:~# redis-server /etc/redis/redis80.conf root@redis:~#
4.3.3 在第三个窗口启动
root@redis:~# redis-server /etc/redis/redis81.conf root@redis:~#
4.3.4 查看,
启动了三个redis端口
l连接测试
4.4 一主二从
默认情况下,每台Redis服务器都是主节点。一般情况下只用配置从机。
- 主机:79
- 从机1:80
- 从机2:81
4.4.1 窗口80上执行
# 认主机 127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 OK 127.0.0.1:6380> info replication # Replication role:slave # 当前角色是从机 master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:7 master_sync_in_progress:0 slave_repl_offset:14 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:450c0c51bfee7b76e5a12002d50efbe7872604cb master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:14
4.4.2 窗口79上执行
127.0.0.1:6379> info replication # Replication role:master connected_slaves:1 # 现在多了一个从机的配置 slave0:ip=127.0.0.1,port=6380,state=online,offset=56,lag=0 master_replid:450c0c51bfee7b76e5a12002d50efbe7872604cb master_replid2:0000000000000000000000000000000000000000 master_repl_offset:56 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:56
4.4.2 窗口81上执行
127.0.0.1:6381> info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:224 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:450c0c51bfee7b76e5a12002d50efbe7872604cb master_replid2:0000000000000000000000000000000000000000 master_repl_offset:224 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:225 repl_backlog_histlen:0
4.4.4 窗口79上执行
127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6380,state=online,offset=322,lag=0 slave1:ip=127.0.0.1,port=6381,state=online,offset=322,lag=0 master_replid:450c0c51bfee7b76e5a12002d50efbe7872604cb master_replid2:0000000000000000000000000000000000000000 master_repl_offset:322 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:322
真实的主从配置是在配置文件
/etc/redis/redis.conf
中配置,这样的话是永久的,这里使用命令,是暂时的。5. 使用伪集群
主机可以写,从机只能读。
# 主机79设置值 127.0.0.1:6379> set k1 v1 OK 127.0.0.1:6379> keys * 1) "k1 # 从机80 127.0.0.1:6380> keys * 1) "k1" # 从机81 127.0.0.1:6381> keys * 1) "k1" 127.0.0.1:6381> set k2 v2 (error) READONLY You can't write against a read only replica. # 从机不可以写
主机宕机,从机可以保存数据。
主机宕机,从机还是从机。
当主机重新连接,从机依旧可以获取主机的值。
如果用命令行设置从机,断开重新连接,就会自动变为主机。只要变为从机,会从主机中获取值。
6. 从机变为主节点
127.0.0.1:6381> SLAVEOF no one OK 127.0.0.1:6381> info replication # Replication role:master connected_slaves:0 master_replid:b858b373fa252b395b08f1dc55947ac2cb064de9 master_replid2:450c0c51bfee7b76e5a12002d50efbe7872604cb master_repl_offset:2015 second_repl_offset:2016 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:225 repl_backlog_histlen:1791