redis 做为一个数据结构服务器,支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,对于主从、哨兵和集群几种方式傻傻分不清楚。html
主从:读写分离、备份
哨兵:检测主从健康,监控主服务状态,投票选择主节点,进行高可用
集群:均衡负载,解决单台机器资源的上限的问题,同时包含主从及哨兵特性git这篇文章意在回顾 redis 主从、安全以及性能检测方面的知识。github
官网地址: https://redis.io redis
一、此处下载的是 5.0.2 最新稳定版数据库
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
二、以后进行编译安装vim
tar zxf redis-5.0.2.tar.gz -C /usr/local/ # 解压文件到 /usr/local/ 目录 cd redis-5.0.2/ # 进入 redis 目录 make # 编译
三、为了方便放置启动文件与配置,咱们在 /usr/local 下新建一个 redis 目录,并建立 bin 目录和 conf 目录。sass
[root@reset local]# mkdir redis [root@reset local]# mkdir redis/bin [root@reset local]# mkdir redis/conf
四、把前面编译后的redis的可执行文件(在redis-5.0.2/src/
下),复制到/usr/local/redis/bin
里面去安全
[root@reset local]# cp redis-5.0.2/src/redis* redis/bin/
五、redis 提供给咱们了一个默认的配置文件 redis.conf ,把它复制到/usr/local/redis
目录下,并更名为6379.conf
bash
[root@reset local]# cp redis-5.0.2/redis.conf redis/conf/6379.conf
六、删除一些没必要要的文件(咱们只须要 redis 的可执行文件)服务器
[root@reset bin]# rm *.c *.o *.h rm: remove regular file ‘redis-benchmark.c’? y rm: remove regular file ‘redis-check-aof.c’? y rm: remove regular file ‘redis-check-rdb.c’? y rm: remove regular file ‘redis-cli.c’? y rm: remove regular file ‘redis-benchmark.o’? y rm: remove regular file ‘redis-check-aof.o’? y rm: remove regular file ‘redis-check-rdb.o’? y rm: remove regular file ‘redis-cli.o’? y rm: remove regular file ‘redisassert.h’? y rm: remove regular file ‘redismodule.h’? y [root@reset bin]# ll total 40528 -rwxr-xr-x 1 root root 4365288 Dec 8 15:26 redis-benchmark -rwxr-xr-x 1 root root 8085504 Dec 8 15:26 redis-check-aof -rwxr-xr-x 1 root root 8085504 Dec 8 15:26 redis-check-rdb -rwxr-xr-x 1 root root 4786544 Dec 8 15:26 redis-cli -rwxr-xr-x 1 root root 8085504 Dec 8 15:26 redis-sentinel -rwxr-xr-x 1 root root 8085504 Dec 8 15:26 redis-server -rwxr-xr-x 1 root root 3600 Dec 8 15:26 redis-trib.rb
一、接下来咱们就修改配置文件
vim /usr/local/redis/conf/6379.conf
修改以下几个配置:
daemonize no 修改成: daemonize yes (后台程序方式运行) pidfile /var/run/redis_6379.pid 修改成: pidfile /usr/local/redis/redis_6379.pid (把pidfile生成到有权限的目录下)
二、启动
[root@reset conf]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/6379.conf 16983:C 08 Dec 2018 15:37:54.905 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 16983:C 08 Dec 2018 15:37:54.905 # Redis version=5.0.2, bits=64, commit=00000000, modified=0, pid=16983, just started 16983:C 08 Dec 2018 15:37:54.905 # Configuration loaded [root@reset conf]# [root@reset conf]# netstat -antlp|grep 6379 tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 16984/redis-server
三、配置从节点
[root@reset conf]# cp 6379.conf 6380.conf
修改6380.conf
修改对应的端口和pid配置
而后加入slaveof 127.0.0.1 6379
port 6379 修改成: port 6380 pidfile /usr/local/redis/redis_6379.pid 修改成: pidfile /usr/local/redis/redis_6380.pid 增长一行: slaveof 127.0.0.1 6379
四、启动从节点
[root@reset conf]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/6380.conf 17031:C 08 Dec 2018 15:45:45.864 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 17031:C 08 Dec 2018 15:45:45.864 # Redis version=5.0.2, bits=64, commit=00000000, modified=0, pid=17031, just started 17031:C 08 Dec 2018 15:45:45.864 # Configuration loaded
五、确认主从链接
[root@reset conf]# netstat -antlp|grep 6380 tcp 0 0 127.0.0.1:6380 0.0.0.0:* LISTEN 17032/redis-server [root@reset conf]# [root@reset conf]# netstat -antlp|grep 6379 tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 16984/redis-server tcp 0 0 127.0.0.1:35540 127.0.0.1:6379 ESTABLISHED 17032/redis-server # 从 tcp 0 0 127.0.0.1:6379 127.0.0.1:35540 ESTABLISHED 16984/redis-server
六、启动 redis 客户端
[root@reset redis]# ./bin/redis-cli -h 127.0.0.1 -p 6379 127.0.0.1:6379> 127.0.0.1:6379> info
输入 info 命令后,咱们将看到主从信息
# Replication role:master # 主 connected_slaves:1 # 有一个从主机 slave0:ip=127.0.0.1,port=6380,state=online,offset=238,lag=1 # 从节点的IP地址加端口
七、在主节点新增值
127.0.0.1:6379> set name zhangsan OK 127.0.0.1:6379> get name "zhangsan"
八、在从节点上查看值
[root@reset redis]# ./bin/redis-cli -h 127.0.0.1 -p 6380 127.0.0.1:6380> get name "zhangsan"
如今 2 个实例已经完成了数据的同步。
九、在从上进行新增操做
127.0.0.1:6380> set name lisi (error) READONLY You can't write against a read only replica.
这里会提示在从节点上是容许只读的,咱们这里主从主要为了读写分离,因此这边对从节点不做写的配置操做。
咱们能够经过 redis 的配置文件设置密码参数,这样客户端链接到 redis 服务就须要密码验证,这样可让 redis 服务更安全。
127.0.0.1:6379> CONFIG GET requirepass # 查看密码 1) "requirepass" 2) "" 127.0.0.1:6379> CONFIG set requirepass redis123 # 设置密码 OK 127.0.0.1:6379> CONFIG GET requirepass # 这时咱们会发现已经须要认证了 (error) NOAUTH Authentication required. 127.0.0.1:6379> auth redis123 # 进行密码认证 OK 127.0.0.1:6379> CONFIG GET requirepass # 查看到密码 1) "requirepass" 2) "redis123"
这时咱们会发现主从同步失败了。
role:slave master_host:127.0.0.1 master_port:6379 master_link_status:down
因此咱们须要在配置文件中增长 masterauth 认证密码
masterauth "redis123" # 主从认证密码,不然主从不能同步
如今就能看到 master 链接状态已经成功了
# Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up
接着就能看到以前新增的 age 信息了
127.0.0.1:6380> get age "22"
Redis 性能测试是经过同时执行多个命令实现的。
redis 性能测试的基本命令以下:
redis-benchmark [option] [option value]
下面同时执行 10000 个请求来检测性能:
[root@reset redis]# bin/redis-benchmark -n 10000 -q PING_INLINE: 65359.48 requests per second PING_BULK: 68493.15 requests per second SET: 66225.17 requests per second GET: 66666.66 requests per second INCR: 67567.57 requests per second LPUSH: 65789.48 requests per second RPUSH: 66225.17 requests per second LPOP: 67114.09 requests per second RPOP: 67567.57 requests per second SADD: 66225.17 requests per second HSET: 65789.48 requests per second SPOP: 65789.48 requests per second LPUSH (needed to benchmark LRANGE): 66225.17 requests per second LRANGE_100 (first 100 elements): 66666.66 requests per second LRANGE_300 (first 300 elements): 67567.57 requests per second LRANGE_500 (first 450 elements): 66225.17 requests per second LRANGE_600 (first 600 elements): 67114.09 requests per second MSET (10 keys): 58139.53 requests per second
使用了多个参数来测试 redis 性能:
[root@reset redis]# bin/redis-benchmark -h 127.0.0.1 -p 6379 -n 10000 -t set,lpush -q SET: 62893.08 requests per second LPUSH: 64102.56 requests per second [root@reset redis]# bin/redis-benchmark -h 127.0.0.1 -p 6380 -n 10000 -t set,lpush -q SET: 59171.60 requests per second LPUSH: 61349.69 requests per second
以上实例中主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,经过 -q 参数让结果只显示每秒执行的请求数。
咱们能够从结果中看出主从的性能。
2. Redis 安全