redis集羣部署

Redis 是一個開源的 key-value 存儲系統,因爲出衆的性能,大部分互聯網企業都用來作服務器端緩存。Redis 在3.0版本前只支持單實例模式,雖然支持主從模式、哨兵模式部署來解決單點故障,可是如今互聯網企業動輒大幾百G的數據,可徹底是無法知足業務的需求,因此,Redis 在 3.0 版本之後就推出了集羣模式。
Redis 集羣採用了P2P的模式,徹底去中心化。Redis 把全部的 Key 分紅了 16384 個 slot,每一個 Redis 實例負責其中一部分 slot 。集羣中的全部信息(節點、端口、slot等),都經過節點之間按期的數據交換而更新。
Redis 客戶端能夠在任意一個 Redis 實例發出請求,若是所需數據不在該實例中,經過重定向命令引導客戶端訪問所需的實例。node

資源準備:cluster的前提條件是必需要有6個nodes,可是這裏並無這麼多機器,因此起了兩個機器,每一個機器各起三個實例,使用端口來區分,端口分別是6379,6380,6381web

redis下載地址:https://redis.io/download,這裏使用redis的版本是:redis-4.0.11
redis

1. 建立存放目錄centos

mkdir /usr/local/redis-cluster
cd /usr/local/redis-cluster
mkdir 6379/data  6380/data 6381/data -pv

2.安裝redis緩存

安裝依賴包:yum install gcc tcl -y
mv redis-4.0.11.tar.gz  /usr/local/
cd /usr/local/
tar xf redis-4.0.11.tar.gz 
cd redis-4.0.11/
make
make PREFIX=/usr/local/redis install

測試:
cd src/
make test

  編譯產生的錯誤ruby

錯誤處理:
make[1]: Entering directory `/usr/local/redis-4.0.11/src'
    LINK redis-server
cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory
make[1]: *** [redis-server] Error 1
make[1]: Leaving directory `/usr/local/redis-4.0.11/src'
make: *** [all] Error 2
解決:
yum install jemalloc gcc jemalloc-devel -y
cd redis-4.0.11/deps/jemalloc/
./configure 
make

cc: error: ../deps/hiredis/libhiredis.a: No such file or directory
cc: error: ../deps/lua/src/liblua.a: No such file or directory
cc: error: ../deps/jemalloc/lib/libjemalloc.a: No such file or directory
make[1]: *** [redis-server] Error 1
make[1]: Leaving directory `/usr/local/redis-4.0.11/src'
make: *** [all] Error 2
則進入redis下的deps下的運行以下命令,就OK了。
[root@web]# cd redis-4.0.11/deps/
[root@web deps]# make lua hiredis linenoise


collect2: error: ld returned 1 exit status
make[1]: *** [redis-server] Error 1
make[1]: Leaving directory `/usr/local/redis-4.0.11/src'
make: *** [all] Error 2
解決:
編輯src/.make-settings裏的OPT,改成OPT=-O2 -march=x86-64
[root@web redis-4.0.11]# grep OPT src/.make-settings 
OPT=-O2 -march=x86-64

3.分發配置文件bash

cd  /usr/local/redis-4.0.11
cp redis.conf /usr/local/redis-cluster/6379/
cp redis.conf /usr/local/redis-cluster/6380/
cp redis.conf /usr/local/redis-cluster/6381/

如下操做:在不一樣的機器修改ip地址
cat /usr/local/redis-cluster/6379/redis.conf
port 6379
daemonize yes
bind 10.0.1.4
dir /usr/local/redis-cluster/6379/data/
pidfile /var/run/redis_6379.pid
cluster-enabled yes
cluster-config-file nodes-6379.conf
cluster-node-timeout 15000
appendonly yes

cat /usr/local/redis-cluster/6380/redis.conf
port 6380
daemonize yes
bind 10.0.1.4
dir /usr/local/redis-cluster/6380/data/
pidfile /var/run/redis_6380.pid
cluster-enabled yes
cluster-config-file nodes-6380.conf
cluster-node-timeout 15000
appendonly yes

cat /usr/local/redis-cluster/6381/redis.conf
port 6381 
daemonize yes
bind 10.0.1.4
dir /usr/local/redis-cluster/6381/data/
pidfile /var/run/redis_6381.pid
cluster-enabled yes
cluster-config-file nodes-6381.conf
cluster-node-timeout 15000
appendonly yes

4. 啓動redis服務器

/usr/local/redis/bin/redis-server /usr/local/redis-cluster/6379/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/6380/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis-cluster/6381/redis.conf

5. 檢查app

檢查是否有三個實例啓動
ps aux|grep redis
netstat -ant|grep 6379
netstat -ant|grep 6380
netstat -ant|grep 6381

6.部署ruby環境(redis-trib.rb是ruby寫的)工具

yum install centos-release-scl-rh centos-release-scl -y
 yum install rh-ruby22 rubygems  -y
 scl enable rh-ruby22 bash
 ruby -v         #注意ruby的版本,可能要求大於2.2.2的

gem install redis

7.建立集羣(redis-trib.rb是redis官方推出的管理redis集羣的工具,集成在redis的源碼src目錄下,是基於redis提供的集羣命令封裝成簡單、便捷、實用的操做工具。)

把redis-trib腳本放在系統路徑上
cp /usr/local/redis-4.0.11/src/redis-trib.rb /usr/local/bin/redis-trib
把相應的命令放在系統路徑下
cp /usr/local/redis/bin/* /usr/local/bin/

建立集羣
 redis-trib create --replicas 1 10.0.1.4:6379 10.0.1.4:6380 10.0.1.4:6381 10.0.1.6:6379 10.0.1.6:6380 10.0.1.6:6381 
Can I set the above configuration? (type 'yes' to accept):yes

8.檢查

redis-cli -c -h 10.0.1.4 -p 6379
CLUSTER NODES  #把相關的主從列出來
CLUSTER INFO  ---》看狀態

9.添加節點

添加節點:前面是要建立的節點,後面是集羣中的節點
redis-trib add-node 10.0.1.4:6382 10.0.1.4:6383
相關文章
相關標籤/搜索