redis学习笔记-安装redis/主从复制/哨兵模式
详细转载:https://www.jianshu.com/p/8af6177f4c23?utm_source=desktop&utm_medium=timeline
redis部署
①一台新的centos云服务器安装redis前提:
1、需要安装wget: yum -y install wget
2、安装rz sz上传下载文件: yum -y install lrzsz
3、解压命令tar:yum -y install tar
4、gcc:yum -y install gcc
②下载与安装
下载: wget http://download.redis.io/releases/redis-5.0.8.tar.gz
解压:tar -xvf redis-5.0.8.tar.gz
建立软连接:
ln -s redis-5.0.8 redis
编译:进入 redis ,执行编译。命令:cd redis
, 然后直接输入: make&&make install
。
③启动
/root/redis/src/redis-server /root/redis/redis.conf
修改守护进程,则可以后台运行redis:vi /root/redis/redis.conf
daemonize yes
测试
启动
-
启动方式1:
redis-server
, 默认端口为 6379 -
启动方式2:
redis-server --port 6380
,指定端口启动 -
启动方式3:通过配置文件启动,也是我们推荐的启动方式,方便管理
-
命令
redis-server redis-xxxx.conf
-
在安装的redis目录中新建 data 文件。
mkdir data
方便我们存储数据 -
在安装的redis目录中新建 config 文件。
mkdir config
-
复制 redis 目录中 redis.conf 文件到 config/ 目录中。
cp redis.conf ./config
-
进入 config 目录。
cd config
-
主从复制:
过程:
1. 副本库通过slaveof 10.0.0.51 6379命令,连接主库,并发送SYNC给主库
2. 主库收到SYNC,会立即触发BGSAVE,后台保存RDB,发送给副本库
3. 副本库接收后会应用RDB快照
4. 主库会陆续将中间产生的新的操作,保存并发送给副本库
5. 到此,我们主复制集就正常工作了
6. 再此以后,主库只要发生新的操作,都会以命令传播的形式自动发送给副本库.
7. 所有复制相关信息,从info信息中都可以查到.即使重启任何节点,他的主从关系依然都在.
8. 如果发生主从关系断开时,从库数据没有任何损坏,在下次重连之后,从库发送PSYNC给主库
9. 主库只会将从库缺失部分的数据同步给从库应用,达到快速恢复主从的目的
主从模式搭建
本例采用单例的1主2从的搭建方式。
服务类型 | 角色 | IP地址 | 端口 |
---|---|---|---|
Redis | master | 127.0.0.1 | 6379 |
Redis | slave | 127.0.0.1 | 6380 |
Redis | slave | 127.0.0.1 | 6381 |
1、首先准备一个redis实例
2、准备一份主配置文件,端口是6379
1 # 包含文件(redis-base.conf,文件从redis安装目录中拷贝的) 2 include /data/soft/redis-sentinel/redis-base.conf 3 4 # 将redis-base.conf文件中,bind注释,需要在外网访问,将protected-model改为no 5 protected-mode no
6 7 # 端口 8 port 6379 9 10 # 后台运行 11 daemonize yes 12 13 # pid文件 14 pidfile redis_6379.pid 15 16 # 日志文件 17 logfile /usr/local/redis/log/6381/redis_6381.log
18 19 # 主认证密码 20 masterauth 123456 21 22 # 认证密码 23 requirepass 123456 24 25 # 最大内存10M,一般为机器内存的3/4 26 maxmemory 10mb 27 28 # 内存达到最大时策略,可选择其他策略 29 maxmemory-policy volatile-lru 30 31 # 目录 32 dir /usr/local/redis/data/6379 33 34 # 快照文件 35 dbfilename dump_6379.rdb
3、准备一份从配置文件,端口是6380,6381,在主配置文件的基础上,修改相应配置,并加上以下2行
1 # 从节点要跟随的主节点 2 slaveof 192.168.0.17 6380 3 4 # 主节点认证密码,如果设置了密码,就要设置 5 masterauth 123456
4、目录结构如图:
5、先启动主节点,然后启动从节点
主节点启动命令:/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis_6379.conf
从节点启动命令:/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis_6380.conf
6、redis客户端链接主节点,查看信息
命令:redis-5.0.5/src/redis-cli -c -h 192.168.0.3 -p 17007 -a 123456
主节点信息:
登录从节点:
./bin/redis-cli -c -h 192.168.0.17 -p 6380
查看从节点信息
7、验证主从复制是否成功:
这里我们假设Master-Slave已经建立。
#启动master服务器。
[root@Stephen-PC redis]# redis-cli -p 6379
redis 127.0.0.1:6379>
#情况Master当前数据库中的所有Keys。
redis 127.0.0.1:6379> flushdb
OK
#在Master中创建新的Keys作为测试数据。
redis 127.0.0.1:6379> set mykey hello
OK
redis 127.0.0.1:6379> set mykey2 world
OK
#查看Master中存在哪些Keys。
redis 127.0.0.1:6379> keys *
1) "mykey"
2) "mykey2"
#启动slave服务器。
[root@Stephen-PC redis]# redis-cli -p 6380
#查看Slave中的Keys是否和Master中一致,从结果看,他们是相等的。
redis 127.0.0.1:6380> keys *
1) "mykey"
2) "mykey2"
#在Master中删除其中一个测试Key,并查看删除后的结果。
redis 127.0.0.1:6379> del mykey2
(integer) 1
redis 127.0.0.1:6379> keys *
1) "mykey"
#在Slave中查看是否mykey2也已经在Slave中被删除。
redis 127.0.0.1:6380> keys *
1) "mykey"
硝兵常用命令:
故障转移:
如果发现启动其中某个实例后,ps没有进程,那就是启动失败,需要到对应的日志看:
问题1:dir 路径写错了,
少了个/
redis运行路径-/usr/local/redis/bin
问题2:启动从节点6382时,报错:Increased maximum number of open files to 10032 (it was originally set to 1024).
针对如上错误,作如下处理:
1)查看打开文件的上限和redis服务进程,修改上限:
输入如下命令,查看其上限:
ulimit -a
其中"open files"数量为4864,设置其上限:
ulimit -n 10032
问题3:运行6382时报错:Creating Server TCP listening socket *:6381: bind: Address already in use
解决:可能配置文件配错了,配成6381端口,或者执行启动命令时,写错配置文件名称了。
dump.rdb是由Redis服务器自动生成的
默认情况下 每隔一段时间redis服务器程序会自动对数据库做一次遍历,把内存快照写在一个叫做“dump.rdb”的文件里,这个持久化机制叫做SNAPSHOT。有了SNAPSHOT后,如果服务器宕机,重新启动redis服务器程序时redis会自动加载dump.rdb,将数据库状态恢复到上一次做SNAPSHOT时的状态。
至于多久做一次SNAPSHOT,SNAPSHOT文件的路径和文件名,你可以在redis的conf文件里指定。