redis的简介
redis 是一个高性能的 key-value 数据库。 redis 的出现,很大程度补偿了memcached 这类 key/value 存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了 Python,Ruby,Erlang,PHP 客户端,使用很方便。Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个 appendonly file(aof)里面(这称为“全持久化模式”)。
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
redis的安装
1.安装依赖gcc依赖,否则加压的包可能会有问题
[root@redis1 ~]# yum install gcc -y
2.获取安装包,并解压
[root@redis1 ~]# tar zxf redis-5.0.3.tar.gz
[root@redis1 ~]# ls
redis-5.0.3 redis-5.0.3.tar.gz
3.进行编译安装
[root@redis1 ~]# cd redis-5.0.3
[root@redis1 redis-5.0.3]# make
[root@redis1 redis-5.0.3]# make install
4.配置并启动服务
[root@red[root@redis1 utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis serverPlease select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!
is1 redis-5.0.3]# cd utils/
5.查看端口占用情况
redis占用端口6379
6.redis2、rediss3和redis1做相同的操作
配置并启动服务
redis的主从配置
1.编辑配置文件
redis1(master):
[root@redis1 ~]# vim /etc/redis/6379.conf
bind 0.0.0.0 # 绑定的主机地址,可以绑定单一接口,如果没有绑定,所有接口都会监听到来的连接[root@redis1 ~]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
redis2(slave):
[root@redis2 ~]# vim /etc/redis/6379.conf
bind 0.0.0.0
slaveof 172.25.60.1 6379 #配置master主机IP和端口[root@redis2 ~]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
2.测试
master写入:
[root@redis1 ~]# redis-cli
127.0.0.1:6379> set age 18
OK
127.0.0.1:6379> get age
"18"
slave查看:
[root@redis2 utils]# redis-cli
127.0.0.1:6379> get age
"18"
常用命令
1. redis-cli命令
Redis 命令用于在 redis 服务上执行操作,要在 redis 服务上执行命令需要一个 redis 客户端
Redis 客户端的基本语法为:
$ redis-cli如果需要在远程 redis 服务上执行命令,同样我们使用的也是 redis-cli 命令。
$ redis-cli -h host -p port -a password2. slaveof 命令
SLAVEOF 命令用于在 Redis 运行时动态地修改复制(replication)功能的行为。
通过执行 SLAVEOF host port 命令,可以将当前服务器转变为指定服务器的从属服务器(slave server)。
如果当前服务器已经是某个主服务器(master server)的从属服务器,那么执行 SLAVEOF host port 将使当前服务器停止对旧主服务器的同步,丢弃旧数据集,转而开始对新主服务器进行同步。
另外,对一个从属服务器执行命令 SLAVEOF NO ONE 将使得这个从属服务器关闭复制功能,并从从属服务器转变回主服务器,原来同步所得的数据集不会被丢弃。
利用『 SLAVEOF NO ONE 不会丢弃同步所得数据集』这个特性,可以在主服务器失败的时候,将从属服务器用作新的主服务器,从而实现无间断运行。
redis的故障切换
1.部署第二台slave
redid3(slave):
[root@redis3 ~]# vim /etc/redis/6379.conf
bind 0.0.0.0
slaveof 172.25.60.1 6379
2.编辑监控sentinel的配置文件
[root@server1 redis-5.0.3]# cp sentinel.conf /etc/redis/
[root@server1 redis-5.0.3]# cd /etc/redis/
[root@server1 redis]# ls
6379.conf sentinel.conf[root@server1 redis]# vim sentinel.conf
protected-mode no
#关闭保护模式,允许访问
sentinel monitor mymaster 172.25.60.1 6379 2
#配置指示 Sentinel 去监视一个名为 mymaster 的主服务器,这个主服务器的IP为172.25.60.1,端口为6379,而将这个主服务器判断为失效至少需要2个Sentinel同意(只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行),这里的2是指 quorum=2sentinel down-after-milliseconds mymaster 10000
#表示 Sentinel 认为服务器已经断线所需的毫秒数。在指定时间内没有返回响应,则视为下线。sentinel parallel-syncs mymaster 1
#表示刚设定为新主时,允许同时有多少个从向主发起同步请求sentinel failover-timeout mymaster 180000
#表示当master故障时,把新的从提升为master,多长时间切换不过去就认为故障转移失败了
3.先将文件复制给server2和server3,然后再开启监控
[root@server1 redis]# scp sentinel.conf server2:/etc/redis/
sentinel.conf 100% 9710 9.5KB/s 00:00
[root@server1 redis]# scp sentinel.conf server3:/etc/redis/
sentinel.conf 100% 9710 9.5KB/s 00:00
将三台redis开启监控
[root@server1 redis]# redis-server /etc/redis/sentinel.conf --sentinel
注意:
每多开一个监控,就会多出一条这个消息
2114:X 02 Mar 2019 08:10:08.825 * +sentinel sentinel
90d1153cfba9f2ba064283ef1f91c9a609c27ba6 172.25.60.1 26379 @ mymaster 172.25.60.1 6379
监控如下:
master
slave
查看状态:
master
slave
测试:当我们把master中的redis宕掉之后,此时监控中,我们可以看到master切换到其它server3主机上, 而此时server2中配置文件的slaveof的值也变为server3了。
[root@redis1 ~]# redis-cli
127.0.0.1:6379> info127.0.0.1:6379> shutdown
将redis1 SHUTDOWN
查看监控:
查看redis3上的信息,发现redis3已经变成master
4.将server1开启,并写改配置文件添加slaveof 172.25.27.3 6379
再次观察redis3的info
原理参考链接
链接一