第一章 Redis集羣簡介node
Remote Dictionary Server(Redis)是一個基於 key-value 鍵值對的持久化數據庫存儲系統。支持多種數據結構,包括 string (字符串)、list (鏈表)、set (集合)、zset (sorted set --有序集合)和 hash(哈希類型)。這些數據類型都支持 push/pop、add/remove 及取交集並集和差集及更豐富的操做,並且這些操做都是原子性的。c++
Redis 集羣是 Redis 的一個分佈式實現,主要是爲了實現如下這些目標(按在設計中的重要性排序):redis
在1000個節點的時候仍能表現得很好而且可擴展性是線性的。數據庫
沒有合併操做,這樣在 Redis 的數據模型中最典型的大數據值中也能有很好的表現。安全
寫入安全:那些與大多數節點相連的客戶端所作的寫入操做,系統嘗試所有都保存下來。不過公認的,仍是會有小部分寫入會丟失。是由於主從節點數據是經過網絡傳輸來完成同步,主節點忽然當機,會形成從節點沒有同步數據的問題。ruby
可用性:在絕大多數的主節點是可達的,而且對於每個不可達的主節點都至少有一個它的從節點可達的狀況下,Redis 集羣仍能進行分區操做。服務器
該集羣使用槽指法存儲數據,三臺服務器6個節點,三個主節點和三個從節點,主從複製實現從節點徹底複製關聯的主節點。三個主節點經過hash槽分配存儲命令,實現徹底去中心化。集羣支持節點的擴充和移除操做。網絡
如下爲生產環境實際部署說明:數據結構
1socket |
主機名稱 |
第一套集羣 |
第二套集羣 |
分配內存 |
IP地址 |
2 |
jdpsclb-nfppzk01 |
6379 6479 |
6579 6679 |
一致爲50G |
172.1.2.3 |
3 |
jdpsclb-nfppzk02 |
6379 6479 |
6579 6679 |
一致爲50G |
172.1.2.4 |
4 |
jdpsclb-nfppzk03 |
6379 6479 |
6579 6679 |
一致爲50G |
172.1.2.5 |
在生產環境中三臺服務器上部署了兩套redis集羣。如下文檔爲第一套rdis集羣而編寫。
第二章 Redis集羣安裝部署
redis-2.3.3
ruby-2.4.0
redis-3.2.1.gem
安裝以前運行rpm命令查詢redis依賴包,若是沒有安裝依賴包,須要使用yum安裝。
Redis查詢依賴包是否安裝命令:
rpm -q cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl zlib-devel
注意:安裝時使用root用戶安裝,實際生產環境中請新建用戶(redis或者cache等)進行管理。
yum -y install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make gcc-c++ libstdc++-devel tcl zlib-devel
安裝路徑:/home/redis/cluster/
配置文件:/home/redis/cluster/6379/redis.conf
tar –xzvf redis-3.2.9.tar.gz
make
make install
安裝完成以後進入src目錄,複製redis-trip.rb文件到/usr/local/bin (作環境變量必須須要root用戶)
cp redis-trib.rb /usr/local/bin
如下操做使用redis 用戶操做
mkdir -p /home/redis/standalone
拷貝配置文件
cp/opt/redis/redis-3.2.9/redis.conf /home/redis/standalone
修改配置文件
vi /home/redis/standalone/redis.conf
修改內容以下:
端口號:
port 6379(默認)
IP綁定,修改成服務器的ip:
bind 172.31.87.1
備份文件目錄:
dir /home/redis/standalone/
配置後臺啓動
daemonize yes
修改進程號文件
pidfile /home/redis/standalone/redis.pid
修改日誌文件路徑
logfile "/home/redis/standalone/redis.log"
修改數據庫開啓數量
databases 1
保存並退出
使用redis用戶校驗
1. 啓動redis服務,並查看redis進程
cd /home/redis/standalone
指定redis配置文件啓動redis
redis-server redis.conf
查看redis進程
ps -ef|grep redis-server
2. 鏈接客戶端測試
鏈接redis
redis-cli -h 172.22.1.155 -p 6379(實際地址以生產爲準)
存值
set key1 value1
取值
get key1
3. 測試ok後關閉redis進程,redis集羣不須要單獨的節點
pkill -9 redis-server
切換redis用戶
1. 在須要部署redis集羣的主機上建立兩個節點目錄
mkdir -p /home/redis/cluster/6379
mkdir -p /home/redis/cluster/6479
2. 複製/home/redis/standalone目錄下的redis.conf到6379節點目錄下
3. 編輯剛複製的redis.conf 文件
4. 編輯配置文件內容
修改進程號文件,以端口號區分
修改pidfile
pidfile /home/redis/cluster/6379/redis.pid
修改日誌文件存放目錄
logfile 「/home/redis/cluster/6379/redis.log」
開啓集羣
cluster-enabled yes
指定集羣的配置文件
cluster-config-file "/home/redis/cluster/6379/nodes.conf"
集羣中節點掛了,不影響整個集羣,能夠正常訪問其餘節點的數據
cluster-require-full-coverage no
此配置表示後臺啓動
daemonize yes
端口號:
port 6379(默認)
IP綁定,修改成本身服務器的ip:
bind 172.31.87.1
備份文件目錄:
dir /home/redis/cluster/6379/
開啓數據庫的數量
databases 1
5. 配置文件修改完成以後把剛修改的redis.conf文件複製到各個節點目錄下,而後修改各節點目錄下配置文件的中的ip bind屬性和端口號port屬性
編譯
make
安裝
make install
Redis-3.2.1.gem只有裝了ruby的機器上裝redis.3.2.1.gem
上傳redis-3.2.1.gem到/home/redis目錄下進行安裝
gem install –-local redis-3.2.1.gem
分別啓動三臺服務器上的六個節點
redis-server /home/redis/cluster/6379/redis.conf
redis-server /home/redis/cluster/6479/redis.conf
三臺服務器6個節點都開啓後檢查個節點開啓狀態,每一個服務器會顯示兩個節點
ps –ef|grep redis-server
在安裝ruby的服務器上執行建立命令,建立命令以下:
redis-trib.rb create –-replicas 1 172.21.26.5:6379
172.21.26.5:6479 172.21.26.6:6379 172.21.26.6:6479
172.21.26.7:6379 172.21.26.7:6479
開始建立集羣,期間會讓你輸入yes或no 輸入yes
看見下圖提示,建立集羣成功。
不要讓Redis所在機器物理內存使用超過實際內存總量的3/5。
配置redis.conf中的maxmemory選項 配置標準爲物理內存的40%。
若是一臺服務器上分主從兩個節點就分別配置20%。以下選項:
(以生產環境分配爲200G內存爲準)
maxmemory 5100000000
設置內存淘汰機制
allkeys-lru: 優先刪除掉最近不常常使用的key,用以保存新數據
maxmemory-policy allkeys-lru
開啓TCP鏈接中TIME-WAIT sockets的快速回收,有助於快速釋放TCP鏈接
修改/etc/sysctl.conf文件
修改下面的參數,若是沒有請新增此參數
net.ipv4.tcp_tw_recycle=1
鏈接redis,使用set和get來存儲和獲取數據,注意存儲節點信息
鏈接redis:
redis-cli –c –h 172.22.1.156(實際地址爲生產爲準)
存值
set key value
取值
get key
三個主節點都有相應說明建立集羣成功