Redis是一个高性能的key-value数据库,它支持丰富的数据类型,包括字符串(String), 哈希(Hash), 列表(list), 集合(sets)和有序集合(sorted sets)。本文将从源码安装Redis并配置成系统服务,最后进行主从复制测试,这个流程展开
1. 下载Redis并解压
Redis最新稳定版本是4.0
1 | wget http://download.redis.io/releases/redis-4.0.2.tar.gz |
2. 编译安装
切换至Redis源码目录,执行make
命令编译和安装
1 | cd redis-4.0.2 |
安装完成之后,我们会在/usr/local/bin
目录下看见Redis相关的程序:
1 | ls -al /usr/local/bin | grep -i redis |
程序名 | 作用 | 常用用法 |
---|---|---|
redis-server | redis服务端 | redis-server /etc/redis.conf |
redis-cli | redis客户端 | redis-cli -h host -p port [command] |
redis-benchmark | redis基准测试工具 | redis-benchmark -h host -p port -c 并发数 -n 请求数 |
redis-check-aof | 修复AOF文件工具 | – |
redis-check-rdb | 修复dump.rdb工具 | – |
redis-sentinel | 集群管理工具 | – |
编译安装成功后,我们来配置Redis服务端,并启动它。首先将源码的里面的redis.conf拷贝到/etc目录下,然后编辑vi /etc/redis.conf
, 关键几项配置如下:
1 | # /etc/redis.conf |
配置修改完成之后,运行命令/usr/local/bin/redis-server /etc/redis.conf
来启动redis服务。
redis后台服务启动后,我们就可以/usr/local/bin/redis-cli -p
进入redis客户端交互界面,进行相关redis操作了
3. 将Redis配置成系统服务
这里如何将Redis配置成Systemd服务,然后通过systemctl来管理redis。
创建redis服务文件vi /usr/lib/systemd/system/redis.service
,写入以下内容
1 | # /usr/lib/systemd/system/redis.service |
注意上面User配置,需要保证该用户有redis.conf配置里面pidfile,dir对应的读写权限。Tips:Systemd service如何编写,可参见openSUSE:How to write a systemd service
redis服务配置文件弄好之后,重启systemd服务
1 | systemctl daemon-reload |
至此,我们可以通过systemctl管理redis服务了
1 | systemctl start redis // 启动redis服务 |
4. Redis主从复制测试
Redis支持主从同步,可以从主服务器向任意数量的从服务器同步数据,而从服务器之下可以继续关联其他从服务器,进而组成Redis服务器级联架构。Redis不支持主主同步,这就意味着我们不能同时向多台Master服务器写数据时候,通过他们之间相互同步来保证数据一致性。
Redis主从复制,一台主库可以拥有多个从库,但一个从库只能隶属于一个主库。通过主从复制,实现读写分离,提高了系统的负载能力。由于数据同步到其他从库,如果主库发生单点故障,可以快速到从库进行修复。
下面我们将测试主从复制。这里将测试一主一从,即一台Redis服务器(192.168.0.103)作为主库, 另外一台(10.211.55.3)作为从库的情况。配置Redis主从复制非常简单,只需要从库的redis配置文件中加上如下命令即可,主库不需要修改任何配置:
1 | slaveof 主服务器地址 主服务器端口 |
实验1. 主从复制
1 | [tinker@centos-linux ~]$ redis-cli -h 192.168.0.103 -p 6379 -a 123 get k1 |
通过实验1.我们可以看到主服务器的数据同步到从服务器上面了。info replication
命令可以查看服务器类型(master还是slave),主从关系信息(master_host或slave信息)
实验2. 将从服务器动态设置成主服务器,主服务器保持不变
1 | [tinker@centos-linux ~]$ redis-cli -h 10.211.55.3 -p 6379 -a 123 SLAVEOF NO ONE |
通过实验2.我们使用命令SLAVEOF NO ONE
将从服务器改变通过主服务器(从服务器配置文件里面的主从配置没有改变)。原先主从服务器之间不会再同步数据了。
实验3. 主从关系互换
1 | [tinker@centos-linux ~]$ redis-cli -h 192.168.0.103 -p 6379 -a 123 SLAVEOF 10.211.55.3 6379 |
在实验2的基础知识上,通过实验3.我们使用命令SLAVEOF 10.211.55.3 6379
将原先的主服务器设置成原先的从服务器的从服务器,实现主从关系互换。
**注意: **如果非本地连接redis服务器,需要配置redis设置绑定ip,允许特定ip才能访问
1 | # 10.211.55.3 /etc/redis.conf |
或者设置redis密码
1 | # 10.211.55.3 /etc/redis.conf |