redis主從那些事

redis 做爲一個數據結構服務器,支持網絡、可基於內存亦可持久化的日誌型、Key-Value 數據庫,對於主從、哨兵和集羣幾種方式傻傻分不清楚。html

主從:讀寫分離、備份
哨兵:檢測主從健康,監控主服務狀態,投票選擇主節點,進行高可用
集羣:均衡負載,解決單臺機器資源的上限的問題,同時包含主從及哨兵特性git

這篇文章意在回顧 redis 主從、安全以及性能檢測方面的知識。github

1、安裝

官網地址: 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.confbash

[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

 

2、配置主從

一、接下來咱們就修改配置文件

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.

這裏會提示在從節點上是容許只讀的,咱們這裏主從主要爲了讀寫分離,因此這邊對從節點不做寫的配置操做。

 

3、安全

咱們能夠經過 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"

 

4、性能測試

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 主從配置密碼以及哨兵

5. Redis的集羣與主從複製(附Redis持久化)

6. redis(二)集羣 redis-cluster & redis主從同步

相關文章
相關標籤/搜索