Redis-3.2主从复制与集群搭建

一、Redis 主从搭建

1.下载并解压

yum install -y gcc gcc-c++ pcre zlib pcre-devel tcl
wget  http://download.redis.io/releases/redis-3.2.4.tar.gz
tar -zxvf redis-3.2.4.tar.gz
cd redis-3.2.4
make
cd src && make test && make install
mkdir /etc/redis
cp ../redis.conf /etc/redis/redis.conf

2.优化参数

vim /etc/sysctl.conf
net.core.somaxconn = 20480  #最大队列长度,应付突发的大并发连接请求,默认为128
net.ipv4.tcp_max_syn_backlog = 20480  #半连接队列长度,此值受限于内存大小,默认为1024
vm.overcommit_memory = 1
0 表示检查是否有足够的内存可用,如果是,允许分配;如果内存不够,拒绝该请求,并返回一个错误给应用程序。
1 允许分配超出物理内存加上交换内存的请求
2 内核总是返回true
sysctl -p  #使参数生效

3.配置文件说明

3.1后台运行

daemonize yes

3.2bind地址监听

默认bind的填写的127.0.0.1这样配置是只允许本地访问
bind 0.0.0.0

3.3 日志配置

logfile "/var/log/redis.log"

3.4 开机自启脚本

vim /etc/init.d/redis

# chkconfig: 2345 90 10
# description: service of redis for start and stop add by tomenerPATH=/usr/local/bin:/sbin:/usr/bin:/bin
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
REDIS_CLI=/usr/local/bin/redis-cliPIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis/redis.conf"
AUTH="Passwd"
BIND_IP='0.0.0.0'
case "$1" instart)if [ -f $PIDFILE ]thenecho "$PIDFILE exists, process is already running or crashed."elseecho "Starting Redis server..."$EXEC $CONFfiif [ "$?"="0" ]thenecho "Redis is running..."fi;;stop)if [ ! -f $PIDFILE ]thenecho "$PIDFILE exists, process is not running."elsePID=$(cat $PIDFILE)echo "Stopping..."$REDIS_CLI -h $BIND_IP -a $AUTH -p $REDISPORT  SHUTDOWNsleep 2while [ -x $PIDFILE ]doecho "Waiting for Redis to shutdown..."sleep 1doneecho "Redis stopped"fi;;restart|force-reload)${0} stop${0} start;;*)echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2exit 1
esac
chkconfig redis on
service redis restart

3.5 设置密码

编辑配置文件/etc/redis/redis.conf,重启生效

requirepass redispwd
redis-cli -p 6379 -a redispwd            #连接数据库需要-a输入密码

3.6 备份恢复

使用命令查看备份目录,此目录为服务启动时候的目录,恢复可以将文件存放到此目录下,重启启动redis服务,既可完成rdb数恢复。

CONFIG GET dir            #查看备份目录
save                     #执行备份

4.Redis持久化

4.1 rdb方式

工作原理:

当redis生成dump.rdb文件时,工作过程如下:

redis主进程fork一个子进程fork出来的子进程将内存的数据集dump到临时的RDB中

当子进程对临时的RDB文件写入完毕,redis用新的RDB文件代替旧的RDB文件

默认配置如下:

save 900 1
save 300 10
save 60 10000

其意义:

当1个key更新值时每900秒保存一次数据到硬盘

当10个key更新值时每300秒保存一次到硬盘

当10000个key更新值时每60秒保存一次到硬盘

4.2 aof方式

aof本质是redis操作(写操作)日志文件。aof默认是未开启的,需要在配置文件中进行设置,在配置文件中将这一行改为appendonly yes就可以了。

工作原理

AOF :append only file。

每当Redis执行一个改变数据集的命令时,这个命令都会被追加到AOF文件的末尾。

当redis重新启动时,程序可以通过AOF文件恢复数据。

三种appedn方式:

appendfsync always
appendfsync everysec
appendfsync no

appendfsync always每次有新命令追加到 AOF 文件时就执行一次 fsync :非常慢,也非常安全

appendfsync everysec每秒 fsync 一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失 1 秒钟的数据。

appendfsync no从不 fsync :将数据交给操作系统来处理。更快,也更不安全的选择。

推荐(并且也是默认)的措施为每秒 fsync 一次, 这种 fsync 策略可以兼顾速度和安全性。

aof能够保证数据的安全,但是在重启时比较耗时,而且aof文件的体积比rdb文件大。

5. Redis主从复制

5.1 概述

Redis的replication机制允许slave从master那里通过网络传输拷贝到完整的数据备份。具有以下特点:

  • 异步复制,从2.8版本开始,slave能不时地从master那里获取到数据。

  • 允许单个master配置多个slave

  • slave允许其它slave连接到自己。一个slave除了可以连接master外,它还可以连接其它的slave。形成一个图状的架构。

  • master在进行replication时是非阻塞的,这意味着在replication期间,master依然能够处理客户端的请求。

  • slave在replication期间也是非阻塞的,也可以接受来自客户端的请求,但是它用的是之前的旧数据。可以通过配置来决定slave是否在进行replication时用旧数据响应客户端的请求,如果配置为否,那么slave将会返回一个错误消息给客户端。不过当新的数据接收完全后,必须将新数据与旧数据替换,即删除旧数据,在替换数据的这个时间窗口内,slave将会拒绝客户端的请求和连接。

  • 一般使用replication来可以实现扩展性,例如说,可以将多个slave配置为“只读”,或者是纯粹的数据冗余备份。

  • 能够通过replication来避免master每次持久化时都将整个数据集持久化到硬盘中。只需把master配置为不进行持久化操作(把配置文件中持久化相关的配置项注释掉即可),然后连接上一个slave,这个slave则被配置持久化选项。不过需要注意的是,在这个方案中,必须确保master不会自动启动。

5.2 Master持久化功能关闭时Replication的安全性

当有需要使用到replication机制时,一般都会强烈建议把master的持久化开关打开。即使为了避免持久化带来的延迟影响,不把持久化开关打开,那么也应该把master配置为不会自动启动的。

5.3 replication工作原理

为如果你为master配置了一个slave,不管这个slave是否是第一次连接上Master,它都会发送一个SYNC命令给master请求复制数据。

master收到SYNC命令后,会在后台进行数据持久化,持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中。当持久化进行完毕以后,master会把这份数据集发送给slave,slave会把接收到的数据进行持久化,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave。

当master与slave之间的连接由于某些原因而断开时,slave能够自动重连master,如果master收到了多个slave并发连接请求,它只会进行一次持久化,而不是一个连接一次,然后再把这一份持久化的数据发送给多个并发连接的slave。

当master和slave断开重连后,一般都会对整份数据进行复制。但从redis2.8版本开始,支

5.4 主从配置

与replication相关的配置比较简单,只需要把下面一行加到slave的配置文件中:

slaveof  masterIPaddress  6379

如果master通过requirepass配置项设置了密码,slave每次同步操作都需要验证密码,可以通过在slave的配置文件中添加以下配置项:

masterauth <password>

6常用命令

启动redis:

redis-server /etc/redis/redis.conf

客户端命令工具

/usr/local/bin/redis-cli -h 192.168.1.1

192.168.1.1:6379> auth PasswdOK

登录,密码验证192.168.1.1:6379>info

查看数据库状态192.168.1.1:6379>info replication

查看slave的复制状态192.168.1.1:6379>set key 123

插入数据192.168.1.1:6379>keys *

列出数据

flushdb

清空当前数据

flushall

清除所有数据库

7.测试主从及切换

7.1 主从测试

7.2主从切换

停止主

切换从为主

redis-cli -h localhost slaveof NO ONE

恢复原来主数据库

将现在的主redis根目录下dump.rdb文件拷贝覆盖到原来主redis的根目录

启动原来的主redis

在从数据库切换主数据库redis-cli -h localhost -p 6379 slaveof 172.17.10.193 6379

测试从已经切换回来

二、Redis 集群搭建

Redis高版本使用ruby实现了集群,所以需要ruby环境,安装ruby环境和redis的gem接口后,就可以使用redis的redis-trib.rb脚本创建集群。

Redis安装成功后,创建单独目录

mkdir /usr/local/redis/cluster -p

再在其下创建目录 7000、7001、7002、7003

mkdir /usr/local/redis/cluster/7000 -p
cp redis.conf /usr/local/redis/cluster/7000/

将redis.conf分别拷贝到这几个目录下面,并分别修改redis.conf 中的端口号port和目录名一致

分别修改配置文件

daemonize    yes                          //redis后台运行
pidfile  /var/run/redis_7000.pid              //pidfile文件对应7000,7002,7003
port  7000                                //端口7000,7002,7003
cluster-enabled  yes                        //开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf          //集群的配置  配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  5000                  //请求超时  设置5秒够了
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志

查看服务是否已经起来

2.安装相关软件包

yum -y install ruby ruby-devel rubygems rpm-build

再用 gem 这个命令来安装 redis接口    gem是ruby的一个工具包

gem install redis

如果安装失败,可手动安装

wget https://rubygems.global.ssl.fastly.NET/gems/redis-3.2.1.gem
sudo gem install -l ./redis-3.2.1.gem

3.redis-trib.rb脚本创建集群

cd /root/redis-3.2.4/src
./redis-trib.rb create --replicas 1 172.17.10.191:7000 172.17.10.191:7001 172.17.10
7005 172.17.10.191:7006

--replicas  1  表示 自动为每一个master节点分配一个slave节点

./redis-trib.rb check 172.17.10.191:7000

4.测试

redis-cli -c -p 7000

设置数据,然后停止7000端口监听的redis

登录其他,查看获取数据。

Redis-3.2主从复制与集群搭建 推荐相关推荐

  1. redis主从复制和集群搭建

    redis主从复制 准备两台服务器,两台服务器可以互相ping通,可以新建两个虚拟机,然后配置网络,此处不在演示 准备两台虚拟机之后,两台虚拟机安装redis,gcc编译之后我们开始配置redis集群 ...

  2. Redis-3.2主从复制与集群搭建

    一.Redis 主从搭建 1.下载并解压 yum install -y gcc gcc-c++ pcre zlib pcre-devel tcl wget http://download.redis. ...

  3. Redis三主三从集群搭建

    一.引子 主从复制以及哨兵,他们可以提高读的并发,但是单个master容量有限,数据达到一定程度会有瓶颈,这个时候可以通过水平扩展为多master-slave集群(看原理图). 所以一起来学习redi ...

  4. Redis 多机多节点集群搭建方案(5.0版本)

    >搭建环境: a)redis的安装包,redis-5.0.8.tar.gz b)gcc安装包gcc_rpm.tar.gz c)VM10 d)CentOS镜像文件 >搭建步骤: 1.准备工作 ...

  5. Redis三主三从集群搭建(三台机器)

    介绍 redis三种模式 一.主从模式 Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构. ...

  6. Redis【第二篇】集群搭建

    第一步:准备 1.安装包 ruby-2.4.0.tar.gz rubygems-2.6.10.tgz zlib-1.2.11.tar.gz redis-3.3.2.gem 2. 架构: 名称 IP 端 ...

  7. REDIS三主三从集群搭建笔记(redis版本5.0.8)

    mkdir -p /app/redis tar -zxvf redis-5.0.8.tar.gz -C /app/redis cd /app/redis/redis-5.0.8编译安装: make & ...

  8. Redis主从、哨兵及集群搭建

    1.主从复制 目的:读写分离,主写,从读,容灾的快速恢复 主从复制原理:  Slave 启动成功连接到master后会发送-个sync命令. Master 接到命令启动后台的存盘进程,同时收集所有接收 ...

  9. Redis【有与无】【AC2】Redis 安装、配置、集群搭建

    本文章基于Redis 6.0.9版本,对Redis配置进行说明 目录 序: 1.准备阶段 2.安装阶段 3.配置 4.创建集群 5.测试 6.防火墙开放端口(选) 7.关闭redis 附录 T.术语 ...

最新文章

  1. SAP QM启用了Physical Sample Management后检验批有哪些特殊地方?
  2. open-capacity-platform 项目启动
  3. GDOI2018 总结
  4. Android之解决YouTubePlayerView启动在Android5.0左右的手机出现奔溃问题
  5. 【洛谷P2743】【poj 1743】[USACO5.1]乐曲主题Musical Themes
  6. 【多线程】:Synchronized和ReentrantLock的对比
  7. 妈妈再也不用担心别人问我是否真正用过redis了
  8. Ext JS 4 升级指南
  9. 实现教科书图7.33的程序(另加孤立顶点台北)(两城市之间的最短路径模拟)
  10. 网站安全测试报告模板
  11. win10如何安装Java虚拟机_vmware 安装win10虚拟机
  12. 白蛇传 冯梦龙 警世通言
  13. vue全局组件自动注册
  14. 16个经典面试问题回答思路
  15. 数字拼音翻译成阿拉伯数字
  16. ubuntu20.04 nvidia 460显卡安装
  17. 科技SCI论文正体斜体规定
  18. actor 模型原理 (二)
  19. 力扣(647.516)补9.15
  20. 牛客网SQL大厂面试真题(一)

热门文章

  1. 实验9 SQL Server 的触发器
  2. 教你如何玩转GitHub
  3. fastjson转换时有大括号或者冒号或者有中括号_[Python Basic] 字符串处理以及类型转换 1...
  4. C++11 右值引用与常量左值引用保存临时变量(函数返回值)的底层分析
  5. 高中数学40分怎么办_2019年第35届全国高中数学联赛试题及参考答案
  6. UVA 10588—— Queuing at the doctors
  7. C++ STL string 简单使用
  8. jffs2 启动的常见的问题
  9. 操作系统【二】死锁问题以及处理方法
  10. mmap内存映射、system V共享内存和Posix共享内存