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

时间:2017-03-27 12:29 来源:武松娱乐整理 字体:[ ] 评论:
Redis-3.2主从复制与集群搭建。 一、Redis 主从搭建 1.下载并解压 yuminstall-ygccgcc-c++pcrezlibpcre-develtcl wgethttp://download.redis.io/releases/redis-3.2.4.tar.gz tar-zxvfredis-3.2.4.tar.gz cdredis-3.2.4 make cdsrc&&maketest&&makeinstall 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后台运行 daemonizeyes   3.2bind地址监听 默认bind的填写的127.0.0.1这样配置是只允许本地访问 bind0.0.0.0   3.3 日志配置 logfile"/var/log/redis.log" 3.4 开机自启脚本 vim /etc/init.d/redis #chkconfig:23459010 #description:serviceofredisforstartandstopaddbytomener PATH=/usr/local/bin:/sbin:/usr/bin:/bin REDISPORT=6379 EXEC=/usr/local/bin/redis-server REDIS_CLI=/usr/local/bin/redis-cli PIDFILE=/var/run/redis_6379.pid CONF="/etc/redis/redis.conf" AUTH="Passwd" BIND_IP='0.0.0.0' case"$1"in start) if[-f$PIDFILE] then echo"$PIDFILEexists,processisalreadyrunningorcrashed." else echo"StartingRedisserver..." $EXEC$CONF fi if["$?"="0"] then echo"Redisisrunning..." fi ;; stop) if[!-f$PIDFILE] then echo"$PIDFILEexists,processisnotrunning." else PID=$(cat$PIDFILE) echo"Stopping..." $REDIS_CLI-h$BIND_IP-a$AUTH-p$REDISPORTSHUTDOWN sleep2 while[-x$PIDFILE] do echo"WaitingforRedistoshutdown..." sleep1 done echo"Redisstopped" fi ;; restart|force-reload) ${0}stop ${0}start ;; *) echo"Usage:/etc/init.d/redis{start|stop|restart|force-reload}">&2 exit1 esac chkconfigredison serviceredisrestart 4.Redis持久化   4.1 rdb方式 工作原理: 当redis生成dump.rdb文件时,工作过程如下: redis主进程fork一个子进程fork出来的子进程将内存的数据集dump到临时的RDB中 当子进程对临时的RDB文件写入完毕,redis用新的RDB文件代替旧的RDB文件 默认配置如下: save9001 save30010 save6010000   其意义: 当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方式: appendfsyncalways appendfsynceverysec appendfsyncno 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 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.1936379 测试从已经切换回来 wKiom1jP9orAKHKBAAG-4RX46dY624.png   二、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 cpredis.conf/usr/local/redis/cluster/7000/ 将redis.conf分别拷贝到这几个目录下面,并分别修改redis.conf 中的端口号port和目录名一致 分别修改配置文件 daemonizeyes//redis后台运行 pidfile/var/run/redis_7000.pid//pidfile文件对应7000,7002,7003 port7000//端口7000,7002,7003 cluster-enabledyes//开启集群把注释#去掉 cluster-config-filenodes_7000.conf//集群的配置配置文件首次启动自动生成7000,7001,7002 cluster-node-timeout5000//请求超时设置5秒够了 appendonlyyes//aof日志开启有需要就开启,它会每次写操作都记录一条日志 wKioL1jP9wuTALJ1AAJdH_ia7q0316.png 查看服务是否已经起来 wKiom1jP907gCiFVAAVOM88BxiQ959.png 2.安装相关软件包 yum-yinstallrubyruby-develrubygemsrpm-build 再用 gem 这个命令来安装 redis接口 gem是ruby的一个工具包 geminstallredis 如果安装失败,可手动安装 wgethttps://rubygems.global.ssl.fastly.NET/gems/redis-3.2.1.gem sudogeminstall-l./redis-3.2.1.gem   3.redis-trib.rb脚本创建集群 cd/root/redis-3.2.4/src ./redis-trib.rbcreate--replicas1172.17.10.191:7000172.17.10.191:7001172.17.10 7005172.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
    Top_arrow
    武松娱乐注册