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

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                     #执行备份

e10c245f11955ad2fc393636f5290f42.png

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

其意义:

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

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

10000key更新值时每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 概述

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

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

  • 允许单个master配置多个slave

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

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

  • slavereplication期间也是非阻塞的,也可以接受来自客户端的请求,但是它用的是之前的旧数据。可以通过配置来决定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会把这份数据集发送给slaveslave会把接收到的数据进行持久化,然后再加载到内存中。然后,master再将之前缓存在内存中的命令发送给slave

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

masterslave断开重连后,一般都会对整份数据进行复制。但从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 主从测试

wKioL1jP9QezMT9AAAEgqHq56Rk010.png

wKiom1jP9VTRP8_6AAEz8t7g2Ts415.png

7.2主从切换

停止主

wKiom1jP9avAqGw-AAHij6zjxrI896.png

切换从为主

redis-cli -h localhost slaveof NO ONE

wKiom1jP9frQwHqoAAJ23aica_s403.png

恢复原来主数据库

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

启动原来的主redis

wKioL1jP9ieySz7lAABO0OJWaqg371.png

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

测试从已经切换回来

wKiom1jP9orAKHKBAAG-4RX46dY624.png


二、Redis 集群搭建

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

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

mkdir /usr/local/redis/cluster -p

再在其下创建目录 7000700170027003

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日志开启  有需要就开启,它会每次写操作都记录一条日志

wKioL1jP9wuTALJ1AAJdH_ia7q0316.png

查看服务是否已经起来

wKiom1jP907gCiFVAAVOM88BxiQ959.png

2.安装相关软件包

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

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

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节点 

wKioL1jP9-qBGHjBAAN9gZeb_hY841.png

wKiom1jP-B_yI7k7AAZgpzN7hpk902.png

./redis-trib.rb check 172.17.10.191:7000

wKioL1jP-GDCWLOhAAdfJXakOLM869.png

4.测试

redis-cli -c -p 7000

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

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

wKiom1jP-SHgz3pHAAGxK9Waces741.png

wKioL1jP-Viz50OrAAK1SPaAZBs433.png

wKioL1jP-aXAN5rLAAZnRIXXPRA368.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AutoMapperHelper

/// <summary>/// AutoMapper帮助类/// </summary>public static class AutoMapperHelper{/// <summary>/// 单个对象映射/// </summary>public static T MapTo<T>(this object obj){if (obj null) return default(T);Mapper.CreateMap(obj.Ge…

web项目开发人员配比_我如何找到Web开发人员的第一份工作

web项目开发人员配比I have always had an interest in coding for the web. I built my first site almost 15 years ago using Yahoo’s Geocities, which allowed HTML styling and a few layout choices.我一直对网络编码感兴趣。 大约15年前&#xff0c;我使用Yahoo的Geoc…

苹果手机输入屏保后锁屏_修一块手机屏幕要7080元?

这几天华为Mate X的两次开售成为大家议论的话题&#xff0c;一些抢到的人自然沉浸在快乐之中&#xff0c;想着是自己留着用&#xff0c;还是转手赚一把。而一些想抢而没抢到的人或许正在研究如何在明天的第三次开售中抓好机会吧&#xff01;当然&#xff0c;也有像小编这样的&a…

中间介(MiddleWare)

引子-Django的生命周期 在学习中间介之前&#xff0c;我们先来回顾一下Django的生命周期&#xff1a;用户发起请求&#xff0c;请求会被发送到urlconf中的url&#xff0c;然后会指向对应的views函数进行处理&#xff0c;views函数处理完成后&#xff0c;用模板渲染好html&#…

对MariaDB10.0的Sphinx进行扩展

已修改过的文件&#xff1a;http://pan.baidu.com/s/1o8DHvkA 将这两个文件放到MariaDB的解压目录后&#xff0c;再进行安装 /usr/local/mariadb-10.0.28/storage/sphinx/ 如下是修改的代码 get_rec ( byte * buf, const byte * key, uint keylen,uint a,uint b,uint c );index…

C++常用特性原理解析

在我的早期印象中&#xff0c;C这门语言是软件工程发展过程中&#xff0c;出于对面向对象语言级支持不可或缺的情况下&#xff0c;一群曾经信誓旦旦想要用C统治宇宙的极客们妥协出来的一个高性能怪咖。 它驳杂万分&#xff0c;但引人入胜&#xff0c;出于多(mian)种(shi)原因&a…

容器created状态_docker容器状态的转换实现

一 docker容器状态转换图二 实战[rootlocalhost ~]# docker infoContainers: 0Running: 0Paused: 0Stopped: 0Images: 3Server Version: 17.09.0-ceStorage Driver: overlayBacking Filesystem: xfsSupports d_type: falseLogging Driver: json-fileCgroup Driver: cgroupfsPlu…

nodejs命令行执行程序_在NodeJS中编写命令行应用程序

nodejs命令行执行程序by Peter Benjamin彼得本杰明(Peter Benjamin) 在NodeJS中编写命令行应用程序 (Writing Command-Line Applications in NodeJS) With the right packages, writing command-line apps in NodeJS is a breeze.有了合适的软件包&#xff0c;用NodeJS编写命令…

python re findall 效率_python re模块findall()详解

今天写代码&#xff0c;在写到郑泽的时候遇到了一个坑&#xff0c;这个坑是re模块下的findall()函数。下面我将结合代码&#xff0c;记录一下importrestring"abcdefg acbdgef abcdgfe cadbgfe"#带括号与不带括号的区别#不带括号regexre.compile("((\w)\s\w)&quo…

ubuntu16.04配置sonarqube+MySQL

环境&#xff1a;rootubuntu:~# uname -a Linux ubuntu 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux rootubuntu:~# rootubuntu:~# cat /etc/issue Ubuntu 16.04 LTS \n \lrootubuntu:~#安装配置mysql&#xff1a;1、更新源…

mysql 多表混全_mysql--浅谈多表查询1

这是对自己学习燕十八老师mysql教程的总结&#xff0c;非常感谢燕十八老师。依赖软件&#xff1a;mysql5.6系统环境&#xff1a;win连接查询在谈连接查询之前我们需要对数学上的笛卡尔积有一定的了解现在有两个集合m和nm (m1,m2,.....mx)n (n1,n2,.....ny)m*n得到的笛卡尔积有…

鼠标固定在屏幕中间_无线电竞黑科技,雷柏VT950Q游戏鼠标评测

雷柏作为目前小有声誉的PC外设品牌&#xff0c;其定位高性能游戏领域的VT系列产品&#xff0c;想必大家也比较熟悉了。VT系列的产品除了有超强的性能以及出色的设计感&#xff0c;同时还都是性价比非常高的产品&#xff0c;即便是采用了旗舰级传感器&#xff0c;定位最为高端的…

谈论源码_5,000名开发人员谈论他们的薪水

谈论源码Let’s dive into the most interesting results from the O’Reilly 2016 Salary Survey of 5,000 developers (which excluded managers and students).让我们来看看OReilly 2016年薪金调查对5,000名开发人员(其中不包括经理和学生)最有趣的结果。 性别工资差距是真…

WebSnapshotsHelper(HTML转换为图片)

1 /// <summary>2 /// WebBrowser Url生成图片3 /// HTML转图片4 /// </summary>5 public class WebSnapshotsHelper6 {7 Bitmap m_Bitmap;8 string m_Url;9 int m_BrowserWidth, m_BrowserHeight, m_ThumbnailWidth,…

两个多项式相乘求解系数数组算法

题目描述&#xff1a; 给出两个多项式&#xff0c;最高次幂分别为n和m&#xff0c;求解这两个系数相乘得到的系数数组。 分析&#xff1a; 最高次幂如果是m和n&#xff0c;那么他们相乘得到的系数数组的最高次幂一定是nm&#xff0c;对于其他的系数&#xff0c;不妨设a[],b[]是…

synchronized 和 reentrantlock 区别是什么_JUC源码系列之ReentrantLock源码解析

目录ReentrantLock 简介ReentrantLock 使用示例ReentrantLock 与 synchronized 的区别ReentrantLock 实现原理ReentrantLock 源码解析ReentrantLock 简介ReentrantLock 是 JDK 提供的一个可重入的独占锁&#xff0c;独占锁&#xff1a;同一时间只有一个线程可以持有锁可重入&am…

gulp 和npm_为什么我离开Gulp和Grunt去看npm脚本

gulp 和npmI know what you’re thinking. WAT?! Didn’t Gulp just kill Grunt? Why can’t we just be content for a few minutes here in JavaScript land? I hear ya, but…我知道你在想什么 WAT &#xff1f;&#xff01; 古尔普不是杀死了咕unt吗&#xff1f; 为什么…

mysql8.0递归_mysql8.0版本递归查询

1.先在mysql数据库添加数据DROP TABLE IF EXISTS dept;CREATE TABLE dept (id int(11) NOT NULL,pid int(11) DEFAULT NULL,name varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,date datetime(0) DEFAULT NULL,PRIMARY KEY (id) USING BTREE) ENGINE…

js 轮播插件

flexslider pc插件 个人用过flickerplate 移动端插件 个人用过个人觉得比较好的移动端插件swiper http://www.swiper.com.cn/ 用过个人觉得比较好的pc端插件待定

计算机中的字符编码

字符编码 什么是计算机编码 计算机只能处理二进制的数据&#xff0c;其它的数据都要进行转换&#xff0c;但转换必须要有一套字符编码(是字符与二进制的一个对应关系)。常用的字符&#xff1a;a-z、0-9、其它的符号等&#xff0c;计算机也不能直接处理。 &#xff08;字符编码类…