Redis入門基礎詳解

Redis 簡介
Redis 是完全開源免費的,遵守BSD協議,是一個高性能的key-value數據庫。
Redis 與其他 key - value 緩存產品有以下三個特點:
Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啓的時候可以再次加載進行使用。
Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
Redis支持數據的備份,即master-slave模式的數據備份;也可用作傳遞的消息隊列服務器使用。


1.安裝redis
2.redis集羣

1.安裝redis

環境準備:

centos 7.2
redis-3.2.12.tar

安裝方式編譯安裝

cd /data

tar xzf redis-3.2.12.tar.gz

cd redis-3.2.12

yum -y install gcc-c++ tcl gcc

make

可能會出現的問題:

若出現如下提示,則將make改爲make MALLOC=libc,推測是因爲編譯庫的問題

[root@localhost redis-3.2.12]# make
cd src && make allmake[1]: Entering directory /root/redis-2.8.17/src‘ CC adlist.o<br/>In file included from adlist.c:34:<br/>zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory<br/>zmalloc.h:55:2: error: #error "Newer version of jemalloc required"make[1]: *** [adlist.o] Error 1make[1]: Leaving directory/root/redis-2.8.17/src‘make: *** [all] Error 2

make完後 redis目錄下會出現編譯後的redis服務程序redis-server,還有用於測試的客戶端程序redis-cli,兩個程序位於安裝目錄 src 目錄下:

下面啓動redis服務

cd src
./redis-server
注意這種方式啓動redis 使用的是默認配置。也可以通過啓動參數告訴redis使用指定配置文件使用下面命令啓動。

redis.conf 是一個默認的配置文件。我們可以根據需要使用自己的配置文件。

在配置redis.conf中 如果需要在redis後臺運行,把該項daemonize改爲yes

2.redis集羣

簡介:redis集羣搭建一共是6個節點 3主3從 手動新建6個配置文件一致 統一使用6300 6301 端口 每臺機器上2個節點 (我使用的是2臺機器搭建集羣 也可以三臺每臺兩個節點 或者一臺上6節點)

cd /data
mkdir cluster
cd cluster
mkdir 6300 6301
cd 6300
touch redis-6300.conf

可根據自己需要對配置文件進行修改 下面是我的配置:

daemonize yes
port 6300
tcp-backlog 511
timeout 60
tcp-keepalive 0
loglevel notice
maxmemory 10gb
databases 16
dir "/home/data/cluster/6300"

slave-serve-stale-data yes

logfile "/home/data/cluster/6300/redis_6300.log"
#slave只讀
slave-read-only yes
#not use default
repl-disable-tcp-nodelay yes
slave-priority 100
#打開aof持久化
appendonly yes
#每秒一次aof寫
appendfsync everysec
#關閉在aof rewrite的時候對新的寫操作進行fsync
no-appendfsync-on-rewrite yes
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
#打開redis集羣
cluster-enabled yes
cluster-config-file "/home/data/cluster/6300/nodes-6300.conf"
#節點互連超時的閥值(單位毫秒)
cluster-node-timeout 15000
#一個主節點在擁有多少個好的從節點的時候就要割讓一個從節點出來給其他沒有從節點或者從節點掛掉的主節點
cluster-migration-barrier 1
#如果某一些key space沒有被集羣中任何節點覆蓋,最常見的就是一個node掛掉,集羣將停止接受寫入
cluster-require-full-coverage no
#部署在同一機器的redis實例,把auto-aof-rewrite搓開,防止瞬間fork所有redis進程做rewrite,佔用大量內存
auto-aof-rewrite-percentage 80
slowlog-log-slower-than 10000
slowlog-max-len 128
notify-keyspace-events "gxE"
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
#Generated by CONFIG REWRITE
maxclients 30000
bind 172.168.55.23

配置文件創建完成後複製到每個節點上 ip 和 端口注意修改

編輯完配置文件後逐一啓動各個節點的redis

進入到 redis目錄下的src

運行 ./redis-server +節點配置文件的路徑

運行之後 在每臺機器上查看運行狀態 (請提前關閉防火牆和selinux)

或者防火牆開啓6300 6300 端口
firewall-cmd --zone=public --add-port=6300/tcp --permanent

firewall-cmd --zone=public --add-port=6301/tcp --permanent

查看是否啓動成功

ps -ef | grep redis

netstat -tnlp | grep redis #可以看到redis監聽端口

lsof -i:6300 查看6300 6301 是否存在

開始創建集羣

前面已經準備好了搭建集羣的redis節點,接下來我們要把這些節點都串連起來搭建集羣。官方提供了一個工具:redis-trib.rb ,它是用ruby寫的一個程序,所以我們還得安裝ruby.

再用 gem 這個命令來安裝 redis接口    gem是ruby的一個工具包.

通過yum安裝

yum install centos-release-scl-rh 

yum install rh-ruby24

scl enable rh-ruby24 bash //必須執行

ruby -v //查看安裝版本

注意:想要開機自動啓動ruby 需要在家目錄下配置環境變量

vim ~/.bash_profile

PATH=/opt/rh/rh-ruby24/root/usr/bin/:$PATH:$HOME/

export LD_LIBRARY_PATH=/opt/rh/rh-ruby24/root/usr/lib64:${LD_LIBRARY_PATH}

下一步
gem install redis

進到redis的src目錄下

創建集羣

./redis-trib.rb create --replicas 1 172.16.54.23:6300 172.16.54.24:6300 172.16.54.25:6300 172.16.54.23:6301 172.16.54.24:6301 172.16.54.25:6301

中間會有提示 輸入yes即可

集羣搭建後可以通過

查看cluster狀態 redis-trib.rb check 172.16.54.23:6300
查看cluster信息 redis-trib.rb info 172.16.54.23:6300

測試集羣是否搭建成功

進入到redis界面

輸入 set hello world
Ok

去任意一臺從機

執行
./redis-cli -c -p 6300 -h 172.16.54.24
輸入
get hello
出現
world
集羣搭建成功

還有一種方法 redis 集羣如果出現一臺master宕機 會自動推選出一臺新的主節點
Kill -9 **** 殺掉其中的一臺主節點的進程

通過 redis-trib.rb check 172.16.54.23:6300

查看是否有新的master生成

redis cluster命令行

//集羣(cluster)  
CLUSTER INFO  打印集羣的信息  
CLUSTER NODES  列出集羣當前已知的所有節點(node),以及這些節點的相關信息。   
  
//節點(node)  
CLUSTER MEET <ip> <port> 將 ip 和 port  所指定的節點添加到集羣當中,讓它成爲集羣的一份子。  
CLUSTER FORGET <node_id>  從集羣中移除 node_id 指定的節點。  
CLUSTER REPLICATE <node_id>  將當前節點設置爲 node_id 指定的節點的從節點。  
CLUSTER SAVECONFIG  將節點的配置文件保存到硬盤裏面。   
  
//槽(slot)  
CLUSTER ADDSLOTS <slot> [slot ...]  將一個或多個槽(slot)指派(assign)給當前節點。  
CLUSTER DELSLOTS <slot> [slot ...]  移除一個或多個槽對當前節點的指派。  
CLUSTER FLUSHSLOTS  移除指派給當前節點的所有槽,讓當前節點變成一個沒有指派任何槽的節點。  
CLUSTER SETSLOT <slot> NODE <node_id>  將槽 slot 指派給 node_id 指定的節點,如果槽已經指派給另一個節點,那麼先讓另一個節點刪除該槽>,然後再進行指派。  
CLUSTER SETSLOT <slot> MIGRATING <node_id>  將本節點的槽 slot 遷移到 node_id 指定的節點中。  
CLUSTER SETSLOT <slot> IMPORTING <node_id>  從 node_id 指定的節點中導入槽 slot 到本節點。  
CLUSTER SETSLOT <slot> STABLE 取消對槽 slot 的導入(import)或者遷移(migrate)。   
  
//鍵 (key)  
CLUSTER KEYSLOT <key>  計算鍵 key 應該被放置在哪個槽上。  
CLUSTER COUNTKEYSINSLOT <slot>  返回槽 slot 目前包含的鍵值對數量。  
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 個 slot 槽中的鍵。
CLUSTER RESET [HARD|SOFT] 集羣重置

這些命令都是集羣獨有的,執行命令得通過redis-cli登錄

./redis-cli -c -p 6300 -h 172.16.54.23   //登錄  

不同的機器環境會出現不同的問題 下面是我出現過的問題 可用做參考

Redis入門基礎詳解

這個問題解決可以有兩種方法解決:
1.修改配置文件redis.conf的權限參數設置爲no,就是不需要權限驗證

protected-mode no

2.修改配置文件redis.conf的權限設置安全密碼(密碼自定義設置)

requirepass “111111”   #權限密碼

我這裏是第一解決方法,不需要權限,先kill啓動的6個redis進程,在修改配置文件。在繼續進行集羣搭建

Redis入門基礎詳解

解決方法:相關文件都在src

1.停止所有redis進程,將需要新增的節點下aof、rdb等本地備份文件刪除;
2.同時將新Node的集羣配置文件刪除,即:刪除你redis.conf裏面cluster-config-file所在的文件,一般爲nodes.conf;
3)、再次添加新節點如果還是報錯,則登錄新Node,./redis-cli –p 端口 對數據庫進行清除:
flushdb      #清空當前數據庫
啓動redis進程重新執行集羣命令

redis基礎講解到此結束 謝謝 有問題可以私信我 我會第一時間回覆

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章