1、安装单机版redis
[root@redis-master ~]# mkdir -p /data/application #创建工作目录 [root@redis-master ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz #下载redis [root@redis-master ~]# tar xzf redis-4.0.9.tar.gz -C /data/application/ #指定解压到创建的文件夹里 [root@redis-master ~]# cd /data/application/ [root@redis-master application]# mv redis-4.0.9/ redis #改名 [root@redis-master application]# cd redis/ [root@redis-master redis]# yum install -y gcc gcc-c++ #安装编译工具 要先安装编译工具在安装 [root@redis-master redis]# make #安装 注:如果报错请将刚才解压的安装包删除掉,再次重新解压并进行make安装即可。 [root@redis-master redis]# cp redis.conf redis.conf.bak [root@redis-master redis]# vim redis.conf —修改如下 bind 192.168.246.202 #只监听内网IP 就是允许谁访问 如允许所有人访问就0.0.0.0 daemonize yes #开启后台模式将on改为yes slave-read-only no #这个是只读的权限把yes修改为no。 timeout 300 #连接超时时间 port 6379 #端口号 dir /data/application/redis/data #本地数据库存放持久化数据的目录该目录—待会要手动创建 pidfile /var/run/redis_6379.pid #定义pid文件 logfile /var/log/redis.log #定义log文件 创建存放数据的目录 [root@redis-master redis]# mkdir /data/application/redis/data 配置redis为systemctl启动 [root@redis-master redis]# cd /usr/lib/systemd/system [root@redis-master system]# vim redis.service [Unit] Description=Redis After=network.target
[Service] ExecStart=/data/application/redis/src/redis-server /data/application/redis/redis.conf --daemonize no ExecStop=/data/application/redis/src/redis-cli -h 127.0.0.1 -p 6379 shutdown
[Install] WantedBy=multi-user.target
参数详解: • [Unit] 表示这是基础信息 • Description 是描述 • After 是在那个服务后面启动,一般是网络服务启动后启动
• [Service] 表示这里是服务信息 • ExecStart 是启动服务的命令 • ExecStop 是停止服务的指令
• [Install] 表示这是是安装相关信息 • WantedBy 是以哪种方式启动:multi-user.target表明当系统以多用户方式(默认的运行级别)启动时,这个服务需要被自动运行。
启动服务: [root@redis-master system]# systemctl daemon-reload [root@redis-master system]# systemctl start redis.service
登陆redis [root@redis-master system]# cd /data/application/redis/src/ [root@redis-master src]# ./redis-cli -h 192.168.246.202 -p 6379 192.168.246.202:6379> ping #测试redis是否可以用 PONG 192.168.246.202:6379> set name newrain #设置key–name,并设置值 OK 192.168.246.202:6379> get name #获取到key “newrain” 192.168.246.202:6379> 单机版redis已经部署完成。将ip和端口发给开发就可以了。
redis持久化 – 两种方式 一、redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。
RDB(Redis DataBase):是在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上; 特点: 1.周期性 2.不影响数据写入 #RDB会启动子进程,备份所有数据。当前进程,继续提供数据的读写。当备份完成,才替换老的备份文件。 3.高效 #一次性还原所有数据 4.完整性较差 #故障点到上一次备份,之间的数据无法恢复。
AOF(Append Only File)则是换了一个角度来实现持久化,那就是将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。 特点: 1.实时性 2.完整性较好 3.体积大 #记录数据的指令,删除数据的指令都会被记录下来。 二、RDB和AOF两种方式也可以同时使用,在这种情况下,如果redis重启的话,则会优先采用AOF方式来进行数据恢复,这是因为AOF方式的数据恢复完整度更高。 如果你没有数据持久化的需求,也完全可以关闭RDB和AOF方式,这样的话,redis将变成一个纯内存数据库,就像memcache一样。
三、如何选择方式? 缓存:不用开启任何持久方式 双开:因RDB数据不实时,但同时使用两者时服务器只会找AOF文件,所以RDB留作万一的手段。 redis持久化 – 如何选择RDB和AOF 对于我们应该选择RDB还是AOF,官方的建议是两个同时使用。这样可以提供更可靠的持久化方案。 写入速度快 ------------AOF 写入速度慢 ------------RDB
持久化配置
1、RDB默认开启: [root@redis-master src]# cd … [root@redis-master redis]# vim redis.conf #dbfilename:持久化数据存储在本地的文件 dbfilename dump.rdb #dir:持久化数据存储在本地的路径 dir /data/application/redis/data ##snapshot触发的时机,save ##如下为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 2、客户端使用命令进行持久化save存储:
auth
方式一 [root@redis-master src]# ./redis-cli -h 192.168.246.202 -p 6379 #前台进行存储 OK 方式二 ./redis-cli -h ip -p port bgsave #后台进行存储 注意:每次快照持久化都是将内存数据完整写入到磁盘一次,并不是增量的只同步新数据。如果数据量大的话,而且写操作比较多,必然会引起大量的磁盘io操作,可能会严重影响性能。 save方式:持久化前面的所有数据(rdb模式没开时,后续的数据不会进行备份)
部署三台机器redis—主从同步
redis-master----192.168.246.202 redis-slave-1-----192.168.246.203 redis-slave-2-----192.168.246.204 1.首先三台服务器将redis部署完成。 2.编辑master的redis配置文件: [root@redis-master ~]# cd /data/application/redis/ [root@redis-master redis]# vim redis.conf 2.修改slave1的配置文件: [root@redis-slave-1 ~]# cd /data/application/redis/ [root@redis-slave-1 redis]# vim redis.conf —修改如下: 3.修改slave2的配置文件 [root@redis-slave-2 ~]# cd /data/application/redis/ [root@redis-slave-2 redis]# vim redis.conf #和slave1一样
4.重启三台redis
5.测试主从 1.在master上面执行 [root@redis-master redis]# cd src/ [root@redis-master src]# ./redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set name xuan OK 127.0.0.1:6379> get name “xuan” 127.0.0.1:6379> 2.分别在slave-1和slave-2上面执行: [root@redis-slave-1 redis]# cd src/ [root@redis-slave-1 src]# ./redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> get name “xuan” 127.0.0.1:6379> [root@redis-slave-2 src]# ./redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> get name “xuan” 127.0.0.1:6379> 查看复制状态 master执行: 127.0.0.1:6379> info replication #Replication role:master connected_slaves:2 slave0:ip=192.168.246.203,port=6379,state=online,offset=490,lag=0 slave1:ip=192.168.246.204,port=6379,state=online,offset=490,lag=1
slave上面执行: 127.0.0.1:6379> info replication #Replication role:slave master_host:192.168.246.202 master_port:6379 master_link_status:up
配置哨兵模式
1.每台机器上修改redis主配置文件redis.conf文件设置:bind 0.0.0.0 —已经操作 2.每台机器上修改sentinel.conf配置文件:修改如下配置 [root@redis-master src]# cd … [root@redis-master redis]# vim sentinel.conf sentinel monitor mymaster 10.0.0.137 6379 2 #当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了。 (slave上面写的是master的ip,master写自己ip) sentinel down-after-milliseconds mymaster 3000 #单位毫秒 sentinel failover-timeout mymaster 10000 #若sentinel在该配置值内未能完成failover(故障转移)操作(即故障时master/slave自动切换),则认为本次failover失败。 protected-mode no #关闭加密模式–新添加到sentinel配置文件中 3.每台机器启动哨兵服务: 4.将master的哨兵模式退出,再将redis服务stop了,在两台slave上面查看其中一台是否切换为master:(没有优先级,为随机切换) 去从的里面查看 [root@redis-master src]# ./redis-cli 192.168.246.202:6379>info replication
