天天看點

Redis5.0叢集部署

作者:潇灑sword

前言:

2018年10月Redis釋出了穩定版本的5.0,推出了各種新特性,其中有一點就是放棄使用Ruby建立叢集的方式,改為使用C語言編寫的redis-cli指令建立叢集的方式,避免了ruby軟體版本的要求和安裝,使叢集的建構方式複雜度大大降低。

在使用redis新版本的redis-trib.rb指令建立叢集時會有如下提示:

[root@Redis ~]# redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006

WARNING: redis-trib.rb is not longer available! --->提示redis-trib.rb指令不再可用

You should use redis-cli instead. --->提示應該使用redis-cli指令代替

All commands and features belonging to redis-trib.rb have been moved to redis-cli.

--->提示所有redis-trib.rb指令和特性已經移動到redis-cli

In order to use them you should call redis-cli with the --cluster

option followed by the subcommand name, arguments and options.

Use the following syntax:

redis-cli --cluster SUBCOMMAND [ARGUMENTS] [OPTIONS]

Example:

redis-cli --cluster create 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 --cluster-replicas 1

To get help about all subcommands, type:

redis-cli --cluster help

[root@Redis ~]#

如圖:

Redis5.0叢集部署

下面進行Redis5.0的叢集搭建說明

0、安裝 gcc

[root@Redis ~]# yum install gcc gcc-c++ tcl -y

1、首先下載下傳 redis軟體

[root@Redis ~]# wget http://download.redis.io/releases/redis-5.0.13.tar.gz

2、解壓編譯安裝 redis軟體

[root@Redis ~]# tar zxvf redis-5.0.0.tar.gz

[root@Redis ~]# mv redis-5.0.13 redis && cd redis

[root@Redis redis]# make

[root@Redis redis]# make test

[root@Redis redis]# make install PREFIX=/usr/local/redis

3、建立叢集目錄

mkdir -p /usr/local/redis/redis-cluster

cd /usr/local/redis/redis-cluster

mkdir -p 7001/{data,log}

mkdir -p 7002/{data,log}

mkdir -p 7003/{data,log}

mkdir -p 7004/{data,log}

mkdir -p 7005/{data,log}

mkdir -p 7006/{data,log}

4、拷貝redis配置檔案和可執行檔案

cp /usr/local/redis/redis.conf /usr/local/redis/redis-cluster/7001

cp /usr/local/redis/redis.conf /usr/local/redis/redis-cluster/7002

cp /usr/local/redis/redis.conf /usr/local/redis/redis-cluster/7003

cp /usr/local/redis/redis.conf /usr/local/redis/redis-cluster/7004

cp /usr/local/redis/redis.conf /usr/local/redis/redis-cluster/7005

cp /usr/local/redis/redis.conf /usr/local/redis/redis-cluster/7006

cp -r /usr/local/redis/bin/* /usr/local/redis/redis-cluster/7001

cp -r /usr/local/redis/bin/* /usr/local/redis/redis-cluster/7002

cp -r /usr/local/redis/bin/* /usr/local/redis/redis-cluster/7003

cp -r /usr/local/redis/bin/* /usr/local/redis/redis-cluster/7004

cp -r /usr/local/redis/bin/* /usr/local/redis/redis-cluster/7005

cp -r /usr/local/redis/bin/* /usr/local/redis/redis-cluster/7006

5、修改各個配置檔案(redis.conf)

port 7001 #端口

# bind 127.0.0.1 #注釋該行使其他電腦可以通路

bind 172.16.90.11 #主機ip

cluster-enabled yes #啟用叢集模式

cluster-config-file nodes.conf #自動生成的節點配置

cluster-node-timeout 15000 #叢集節點不可用的最長時間,超過該時間進行從庫故障轉移

appendonly yes

daemonize yes #執行個體背景運作

protected-mode no #非保護模式

pidfile /usr/local/redis/redis-cluster/7001/redis_7001.pid

#其中 port 和 pidfile 需要随着目錄的不同而調整的

6、啟動各個redis服務

[root@Redis bin]# more start-all.sh

/usr/local/redis/redis-cluster/7001/redis-server /usr/local/redis/redis-cluster/7001/redis.conf

/usr/local/redis/redis-cluster/7002/redis-server /usr/local/redis/redis-cluster/7002/redis.conf

/usr/local/redis/redis-cluster/7003/redis-server /usr/local/redis/redis-cluster/7003/redis.conf

/usr/local/redis/redis-cluster/7004/redis-server /usr/local/redis/redis-cluster/7004/redis.conf

/usr/local/redis/redis-cluster/7005/redis-server /usr/local/redis/redis-cluster/7005/redis.conf

/usr/local/redis/redis-cluster/7006/redis-server /usr/local/redis/redis-cluster/7006/redis.conf

[root@Redis bin]#

7、建立叢集

# /usr/local/redis/bin/redis-cli --cluster create 172.16.90.11:7001 172.16.90.11:7002 172.16.90.11:7003 172.16.90.11:7004 172.16.90.11:7005 172.16.90.11:7006 --cluster-replicas 1

-cluster create: 建立叢集

-cluster-relicas: 叢集副本數。這裡是1,是1主機1從機的模式,如果設定為2(即:2台從機)會失敗。

因為叢集中至少要有3個主機,是以設定2台從機時,至少需要9個節點才可以。

最後的參數中列出全部的redis主機IP位址和端口号。

[root@Redis bin]# /usr/local/redis/bin/redis-cli --cluster create 192.168.1.11:7001 192.168.1.11:7002 192.168.1.11:7003 192.168.1.11:7004 192.168.1.11:7005 192.168.1.11:7006 --cluster-replicas 1

>>> Performing hash slots allocation on 6 nodes...

Master[0] -> Slots 0 - 5460

Master[1] -> Slots 5461 - 10922

Master[2] -> Slots 10923 - 16383

Adding replica 192.168.1.11:7005 to 192.168.1.11:7001

Adding replica 192.168.1.11:7006 to 192.168.1.11:7002

Adding replica 192.168.1.11:7004 to 192.168.1.11:7003

>>> Trying to optimize slaves allocation for anti-affinity

[WARNING] Some slaves are in the same host as their master

M: 7cc073c06decdebddc54b85693c1a997c2461f01 192.168.1.11:7001

slots:[0-5460] (5461 slots) master

M: 2bb8c9e1ee7f9439c598211d05f97beda51aab22 192.168.1.11:7002

slots:[5461-10922] (5462 slots) master

M: d867bd76d3adab0ce41445f44182c0da6a7a5da0 192.168.1.11:7003

slots:[10923-16383] (5461 slots) master

S: 58ae8a6027de0199721c7421369c655f502bc4ba 192.168.1.11:7004

replicates 2bb8c9e1ee7f9439c598211d05f97beda51aab22

S: 6d48cb0596834021263fb64c53b561c106fa253a 192.168.1.11:7005

replicates d867bd76d3adab0ce41445f44182c0da6a7a5da0

S: 8884b7d967fea391736f0dccf0603ceabd283436 192.168.1.11:7006

replicates 7cc073c06decdebddc54b85693c1a997c2461f01

Can I set the above configuration? (type 'yes' to accept): yes

>>> Nodes configuration updated

>>> Assign a different config epoch to each node

>>> Sending CLUSTER MEET messages to join the cluster

Waiting for the cluster to join

>>> Performing Cluster Check (using node 192.168.1.11:7001)

M: 7cc073c06decdebddc54b85693c1a997c2461f01 192.168.1.11:7001

slots:[0-5460] (5461 slots) master

1 additional replica(s)

S: 58ae8a6027de0199721c7421369c655f502bc4ba 192.168.1.11:7004

slots: (0 slots) slave

replicates 2bb8c9e1ee7f9439c598211d05f97beda51aab22

M: 2bb8c9e1ee7f9439c598211d05f97beda51aab22 192.168.1.11:7002

slots:[5461-10922] (5462 slots) master

1 additional replica(s)

S: 6d48cb0596834021263fb64c53b561c106fa253a 192.168.1.11:7005

slots: (0 slots) slave

replicates d867bd76d3adab0ce41445f44182c0da6a7a5da0

S: 8884b7d967fea391736f0dccf0603ceabd283436 192.168.1.11:7006

slots: (0 slots) slave

replicates 7cc073c06decdebddc54b85693c1a997c2461f01

M: d867bd76d3adab0ce41445f44182c0da6a7a5da0 192.168.1.11:7003

slots:[10923-16383] (5461 slots) master

1 additional replica(s)

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

[root@Redis bin]#

9、檢視叢集狀态

redis-cli -c -p 7001 -h 192.168.1.11

-p:叢集中任意一個redis服務的端口号

-a:redis的密碼

-c:叢集模式

-h:指定主機位址

10、檢視節點情況

172.16.90.11:7001> cluster nodes

58ae8a6027de0199721c7421369c655f502bc4ba 192.168.1.11:7004@17004 slave 2bb8c9e1ee7f9439c598211d05f97beda51aab22 0 1669268691000 4 connected

2bb8c9e1ee7f9439c598211d05f97beda51aab22 192.168.1.11:7002@17002 master - 0 1669268689813 2 connected 5461-10922

6d48cb0596834021263fb64c53b561c106fa253a 192.168.1.11:7005@17005 slave d867bd76d3adab0ce41445f44182c0da6a7a5da0 0 1669268690815 5 connected

8884b7d967fea391736f0dccf0603ceabd283436 192.168.1.11:7006@17006 slave 7cc073c06decdebddc54b85693c1a997c2461f01 0 1669268692817 6 connected

7cc073c06decdebddc54b85693c1a997c2461f01 192.168.1.11:7001@17001 myself,master - 0 1669268689000 1 connected 0-5460

d867bd76d3adab0ce41445f44182c0da6a7a5da0 192.168.1.11:7003@17003 master - 0 1669268691817 3 connected 10923-16383

192.168.1.11:7001>

192.168.1.11:7001> info replication

# Replication

role:master

connected_slaves:1

slave0:ip=192.168.1.11,port=7006,state=online,offset=154176833,lag=1

master_replid:83911e9a8b194511f517ff82bd7dddfb0248c3be

master_replid2:0000000000000000000000000000000000000000

master_repl_offset:154176833

second_repl_offset:-1

repl_backlog_active:1

repl_backlog_size:1048576

repl_backlog_first_byte_offset:153128258

repl_backlog_histlen:1048576

192.168.1.11:7001>

11、關閉redis

/usr/local/redis/redis-cluster/7001/redis-cli -p 7001 -h 127.0.0.1 shutdown

繼續閱讀