redis主从复制

redis持久化方案解决了在硬盘不损坏的情况下宕机导致数据丢失问题

为了避免单点故障  redis提供了复制(replication)功能

将数据库复制对个副本部署在不同服务器上,即使有某台服务器出现故障其他服务器依然可以继续提供服务,这就要求当一台服务器的数据更新后,可以自动将更新的数据同步到其他服务器上

读写分离

从数据库的持久化

为了提高性能可以通过复制功能复制多个从数据库,并在从数据库中国启用持久化,同时在主库禁用持久化当从数据库崩溃时需要在从数据库中使用 slaveof no one命令将从数据库提升主数据库继续服务。并在原来主数据库启动后使用slaveof命令将其设置成新的主数据库的从数据库,即可将数据同步回来

主从同步
1. Redis 主从复制简介
Redis 支持将数据同步到多台从库上,这种特性对提高读取性能非常有益。
    1)master 可以有多个 slave。
    2)除了多个 slave 连到相同的 master 外,slave 也可以连接其它 slave 形成图状结构。
    3)主从复制不会阻塞 master。也就是说当一个或多个 slave 与 master 进行初次同步数据时,master 可以继续处理客户端发来的请求。相反 slave 在初次同步数据时则会阻塞不能处理客户端的请求。
    4)主从复制可以用来提高系统的可伸缩性,我们可以用多个 slave 专门用于客户端的读请求,比如 sort 操作可以使用 slave 来处理。也可以用来做简单的数据冗余。
    5)可以在 master 禁用数据持久化,只需要注释掉 master 配置文件中的所有 save 配置, 然后只在 slave 上配置数据持久化。

5.2. Redis 主从复制的过程介绍
当设置好 slave 服务器后,slave 会建立和 master 的连接,然后发送 sync 命令。

无论是第一次同步建立的连接还是连接断开后的重新连接,master 都会启动一个后台进程,将数据库快照保存到文件中,同时 master 主进程会开始收集新的写命令并缓存起来。

后台进程完成写文件后,master 就发送文件给 slave,slave 将文件保存到磁盘上,然后加载到内存恢复数据库快照到 slave 上。接着 master 就会把缓存的命令转发给 slave。而且后续 master 收到的写命令都会通过开始建立的连接发送给slave。 
从master到slave的同步数据的命令和从 客户端发送的命令使用相同的协议格式。当 master 和 slave 的连接断开时 slave 可以自动重新建立连接。如果 master 同时收到多个 slave 发来的同步连接命令,只会启动一个进程来写数据库镜像,然后发送给所有 slave。



配置 slave 服务器很简单,只需要在配置文件中加入如下配置
slaveof 192.168.1.1 6379    #指定 master 的 ip 和端口

Redis主从复制过程:
a.Slave与master建立连接,发送sync同步命令
b.Master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存。
c.后台完成保存后,就将此文件发送给slave
d.Slave将此文件保存到硬盘上

1)    不同服务器配置主从

    A)克隆一台linux作为从服务器
    克隆机需要进行如下操作:
            ①    vi /etc/sysconfig/network-scripts/ifcfg-eth0
                        删除MAC地址行
            ②    rm  -rf  /etc/udev/rules.d/70-persistent-net.rules
                        删除网卡和MAC地址绑定文件
            ③    注意关闭防火墙和SELinux
            ④    重启动系统

    B)在从服务器上配置
[root@localhost ~]# vi /usr/local/redis/etc/redis.conf
# slaveof<masterip><masterport>         #把此句开启,并指定主服务器ip和端口    (196行)例:
slaveof 192.168.1.1 6379    #指定 master 的 ip 和端口
masterauth flzx_3QC     #设定主服务器密码
    C)重启从服务器上redis

2
) 同一台服务器实现主从配置 这里我们以本机配置 1台Master + 1台Slave 为例子,其中: Master IP:127.0.0.1 PORT:6379 Slave1 IP:127.0.0.1 PORT:63791 A) 复制出从服务器目录 [root@localhost ~]# cp -r /usr/local/redis/ /usr/local/redis-slave1 B) 修改redis-slave1配置文件 [root@localhost ~]# vi /usr/local/redis-slave1/etc/redis.conf pidfile /usr/local/redis-slave1/redis.pid #指定pid文件 port 63791 #指定端口号 dir /usr/local/redis-slave1/ #指定服务器目录 slaveof 127.0.0.1 6379 #指定主服务器IP和端口 masterauth flzx_3QC #指定主服务器密码 C) 启动服务 /usr/local/redis-slave1/bin/redis-server /usr/local/redis-slave1/etc/redis.conf #启动从服务器,并调用从服务器配置文件 [root@localhost ~]# netstat -tlun tcp0 0 :::6379 :::* LISTEN tcp 0 0 :::63791 :::* LISTEN #验证两个端口是否都启动 D)验证 [root@localhost ~]# /usr/local/redis/bin/redis-cli -a flzx_3QC #启动主服务器,并建立一个键 127.0.0.1:6379> set bb 234 OK 127.0.0.1:6379> keys * 1) "sex" 2) "aa" 3) "name" 4) "age" 5) "bb" [root@localhost ~]# /usr/local/redis-slave1/bin/redis-cli -a flzx_3QC -p 63791 #启动从服务器,发现键已经同步 127.0.0.1:63791> keys * 1) "aa" 2) "sex" 3) "age" 4) "name" 5) "bb"
原文地址:https://www.cnblogs.com/lichihua/p/9537265.html