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 安全