redis主从那些事

redis 作为一个数据结构服务器,支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,对于主从和集群两种方式傻傻分不清楚,这篇文章意在回顾一下 redis 主从。

 一、安装

官网地址: https://redis.io 

1、此处下载的是 5.0.2 最新稳定版

wget http://download.redis.io/releases/redis-5.0.2.tar.gz

2、之后进行编译安装

tar zxf redis-5.0.2.tar.gz -C /usr/local/      # 解压文件到 /usr/local/ 目录
cd redis-5.0.2/        # 进入 redis 编译目录
make        # 编译

3、为了方便放置启动文件与配置,我们在 /usr/local 下新建一个 redis 目录,并创建 bin 目录和 conf 目录。

[root@reset local]# mkdir redis
[root@reset local]# mkdir redis/bin
[root@reset local]# mkdir redis/conf

4、把前面编译后的redis的可执行文件(在redis-5.0.2/src/下),复制到/usr/local/redis/bin里面去

[root@reset local]# cp redis-5.0.2/src/redis* redis/bin/

5、redis 提供给我们了一个默认的配置文件 redis.conf ,把它复制到/usr/local/redis目录下,并改名为6379.conf

[root@reset local]# cp redis-5.0.2/redis.conf redis/conf/6379.conf

6、删除一些不必要的文件(我们只需要 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

二、配置主从

1、接下来我们就修改配置文件

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生成到有权限的目录下)

2、启动

[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 

3、配置从节点

[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

4、启动从节点

[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

5、确认主从连接

[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  

6、启动 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地址加端口

7、在主节点新增值

127.0.0.1:6379> set name zhangsan
OK
127.0.0.1:6379> get name
"zhangsan"

8、在从节点上查看值

[root@reset redis]# ./bin/redis-cli -h 127.0.0.1 -p 6380
127.0.0.1:6380> get name
"zhangsan"

现在 2 个实例已经完成了数据的同步。

9、在从上进行新增操作

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 参数让结果只显示每秒执行的请求数。

我们可以从结果中看出主从的性能。

参考资料

1. Redis集群 - 配置最简单的Redis主从

2. Redis 安全

3. Linux Redis安装配置及使用详解

4. Redis 主从配置密码以及哨兵

猜你喜欢

转载自my.oschina.net/u/3314358/blog/2983981