redis 主从复制方案

环境准备

  • 准备三台系统为CentOS7的主机
    • master:192.168.152.71
    • slave1:192.168.152.72
    • slave2:192.168.152.73

一、安装

Redis软件包仓库

  1. 安装开发工具包

    yum groupinstall "Development Tools" -y
    
  2. 获取 redis 源码包

    wget http://download.redis.io/releases/redis-4.0.9.tar.gz
    
  3. 解压

    tar xf ./redis-4.0.9.tar.gz -C /opt/
    
  4. 进入源码包进行 cd /opt/redis-4.0.9 编译安装,执行下面命令

    make && make install
    

二、创建服务

创建redis服务以便用system命令管理

  1. 复制 redis_init_script 文件,到 /etc/init.d/下面,并改名为redis

    cp /opt/redis-4.0.9/utils/redis_init_script /etc/init.d/redis
    
  2. 编辑 /etc/init.d/redis 文件

    再文件第 5 行添加下面内容,以便 system 命令识别

    ##NEW###
    # chkconfig: 2345 10 90
    # description: Start and Stop redis
    ##NEW###
    

    查看下面几行信息

    EXEC=/usr/local/bin/redis-server       # 按照第 7 行指定的目录,查看文件是否存在,一般是存在的
    CLIEXEC=/usr/local/bin/redis-cli       # 按照第 8 行指定的目录,查看文件是否存在,一般是存在的
    CONF="/etc/redis/${REDISPORT}.conf"    # 按照第 11行指定的目录,查看文件是否存在,一般是没有的,${REDISPORT} 的值为 6379,再文件第 6 行 或者 9、10行显示,这也是服务的端口号
    $EXEC $CONF $						   # 更改第 20 行,再行尾加上 & 符号
    

    如果 7、8 行指定的路径不存在,更改路径

    EXEC=/opt/redis-4.0.9/src/redis-server
    CLIEXEC=/opt/redis-4.0.9/src/redis-cli
    

    第 11 行指定的路径一般不存在,执行下面两个命令,该文件为主配置文件

    mkdir /etc/redis
    cp /opt/redis-4.0.9/redis.conf /etc/redis/6379.conf
    
  3. 重新加载 systemd 配置

    systemctl daemon-reload
    
  4. 启动redis

    systemctl start redis
    
  5. 进入 redis 客户端进行测试

    redis-cli 
    

三、开启 redis 持久化

  • 开启持久化功能后,重启redis后,数据会自动通过持久化文件恢复!!
    • 两种方式
    • RDB(Redis DataBase)
    • AOF(Append Only File)

因RDB数据不实时,但同时使用两者时服务器只会找AOF文件,所以RDB留作万一的手段。

RDB 开启状态,RDB 默认已经开启

vim /etc/redis/6379.conf

#dbfilename:持久化数据存储在本地的文件
dbfilename dump.rdb

#dir:持久化数据存储在本地的路径,如果是在/redis/redis-3.0.6/src下启动的redis-cli,则数据会存储在当前src目录下
dir ./

##snapshot触发的时机,save <seconds> <changes>  
##如下为900秒后,至少有一个变更操作,才会snapshot  
##对于此值的设置,需要谨慎,评估系统的变更操作密集程度  
##可以通过“save “””来关闭snapshot功能  
#save时间,以下分别表示更改了1个key时间隔900s进行持久化存储;更改了10个key300s进行存储;更改10000个key60s进行存储。
save 900 1
save 300 10
save 60 10000

##当snapshot时出现错误无法继续时,是否阻塞客户端“变更操作”,“错误”可能因为磁盘已满/磁盘故障/OS级别异常等  
stop-writes-on-bgsave-error yes  

##是否启用rdb文件压缩,默认为“yes”,压缩往	往意味着“额外的cpu消耗”,同时也意味这较小的文件尺寸以及较短的网络传输时间  
rdbcompression yes  

开启AOF,配置文件

vim /etc/redis/6379.conf

#此选项为aof功能的开关,默认为“no”,可以通过“yes”来开启aof功能  
##只有在“yes”下,aof重写/文件同步等特性才会生效  
appendonly yes  

#指定aof文件名称  
appendfilename appendonly.aof  

#指定aof操作中文件同步策略,有三个合法值:always everysec no,默认为everysec  
appendfsync everysec  

#在aof-rewrite期间,appendfsync是否暂缓文件同步,"no"表示“不暂缓”,“yes”表示“暂缓”,默认为“no”  
no-appendfsync-on-rewrite no  

#触发aof rewrite的最小文件尺寸
auto-aof-rewrite-min-size 64mb

#当Aof log增长超过指定比例时,重写log file, 设置为0表示不自动重写Aof 日志,重写是为了使aof体积保持最小,而确保保存最完整的数据。
auto-aof-rewrite-percentage 100

将appendonly no改为appendonly yes 即可

  • 重启
systemctl restart redis

四、开启主从配置

修改 master 的主配置文件

vim /etc/redis/6379.conf 

改第 69 行 bind 127.0.0.1 为,监听所有地址。

bind 0.0.0.0

如果只监听特定的可以这样写 bind 127.0.0.1 192.168.1.100 将同时监听 127.0.0.1192.168.1.100 这两个 IP 地址。你也可以根据需要添加更多的 IP 地址。

改第 88 行 protected-mode yes 为,关闭保护模式。

protected-mode no

重启服务 systemctl restart redis

修改 slave1 和 slave2 的主配置文件

vim /etc/redis/6379.conf 

改第 69 行 bind 127.0.0.1 为,监听所有地址。

bind 0.0.0.0

如果只监听特定的可以这样写 bind 127.0.0.1 192.168.1.100 将同时监听 127.0.0.1192.168.1.100 这两个 IP 地址。你也可以根据需要添加更多的 IP 地址。

改第 88 行 protected-mode yes 为,关闭保护模式。

protected-mode no

改第 281 行 # slaveof <masterip> <masterport> 为,解除注释,并指定master主机IP地址和端口号

slaveof 192.168.152.71 6379    # 端口号再没有修改的情况下,默认 6379

重启服务 systemctl restart redis

五、测试

输入 redis-cli 进入redis 的客户端输入 info replication 查看主从状态

master 显示的状态

# Replication
role:master                # 当前节点是主节点
connected_slaves:2         # 连接的从节点数量
slave0:ip=192.168.152.73,port=6379,state=online,offset=42,lag=1  # 从节点 1 信息
slave1:ip=192.168.152.72,port=6379,state=online,offset=42,lag=1  # 从节点 2 信息
master_replid:cb46ab0a79974e3f32ceb1e25a79c3578f6a3ee4  # 主节点复制 ID
master_replid2:0000000000000000000000000000000000000000  # 第二个主节点复制 ID (全零表示未用)
master_repl_offset:42     # 主节点复制偏移量
second_repl_offset:-1     # 第二主节点复制偏移量 (未用)
repl_backlog_active:1     # 复制积压缓冲区启用状态
repl_backlog_size:1048576 # 复制积压缓冲区大小 (1 MB)
repl_backlog_first_byte_offset:1  # 缓冲区第一个字节偏移量
repl_backlog_histlen:42    # 缓冲区有效数据长度

slave 显示的状态

# Replication
role:slave                # 当前节点是从节点
master_host:192.168.152.71 # 主节点 IP 地址
master_port:6379          # 主节点端口
master_link_status:up     # 主节点连接状态 (up 表示连接正常)
master_last_io_seconds_ago:1 # 距离上次 IO 操作的秒数
master_sync_in_progress:0 # 主节点同步是否正在进行 (0 表示未进行)
slave_repl_offset:42      # 从节点复制偏移量
slave_priority:100        # 从节点优先级 (数字越小优先级越高)
slave_read_only:1         # 从节点是否只读 (1 表示只读)
connected_slaves:0        # 当前从节点连接的从节点数量
master_replid:cb46ab0a79974e3f32ceb1e25a79c3578f6a3ee4 # 主节点复制 ID
master_replid2:0000000000000000000000000000000000000000 # 第二个主节点复制 ID (全零表示未用)
master_repl_offset:42     # 主节点复制偏移量
second_repl_offset:-1     # 第二主节点复制偏移量 (未用)
repl_backlog_active:1     # 复制积压缓冲区启用状态
repl_backlog_size:1048576 # 复制积压缓冲区大小 (1 MB)
repl_backlog_first_byte_offset:1  # 缓冲区第一个字节偏移量
repl_backlog_histlen:42    # 缓冲区有效数据长度

可以使用 set 添加数据,get 获取数据来进行测试,如:

set name lty  # name 为索引,lty为值
gte name      # get 获取该索引的值
  • 14
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值