Redis集群搭建

1.安裝ruby與相關(guān)組件:

查看服務(wù)器是否安裝ruby:

yum list | grep ruby
rpm -qa | grep ruby

若沒(méi)有安裝,則安裝組件:

yum install ruby
安裝gem相關(guān):
yum install rubygems
gem install redis

2、下載

mkdir redis-cluster 
$ wget http://download.redis.io/releases/redis-4.0.1.tar.gz
$ tar xzf redis-4.0.1.tar.gz
$ cd redis
$ make && make install

3、將 redis-trib.rb 復(fù)制到 /usr/local/bin 目錄下

cd src
cp redis-trib.rb /usr/local/bin/ 

4、在redis同級(jí)新建目錄

mkdir redis7001
復(fù)制src目錄中redis-server    redis-cli     redis-benchmark到redis7001目錄
復(fù)制redis.conf到redis7001中

5、修改redis.conf

port  7001                                        //端口7001,7002,7003        
bind 本機(jī)ip                                       //默認(rèn)ip為127.0.0.1 需要改為其他節(jié)點(diǎn)機(jī)器可訪問(wèn)的ip 否則創(chuàng)建集群時(shí)無(wú)法訪問(wèn)對(duì)應(yīng)的端口,無(wú)法創(chuàng)建集群
daemonize    yes                               //redis后臺(tái)運(yùn)行
pidfile  /var/run/redis_7001.pid          //pidfile文件對(duì)應(yīng)7001,7002,7003,
cluster-enabled  yes                           //開啟集群  把注釋#去掉
cluster-config-file  nodes-7001.conf   //集群的配置  配置文件首次啟動(dòng)自動(dòng)生成 7001,7002,7003
cluster-node-timeout  5000                //請(qǐng)求超時(shí)  默認(rèn)15秒,可自行設(shè)置
appendonly  yes                           //aof日志開啟  有需要就開啟,它會(huì)每次寫操作都記錄一條日志 

逐一復(fù)制新建7002-7006,修改配置

6、配置啟動(dòng)各個(gè)節(jié)點(diǎn)

編寫啟動(dòng)腳本redis.sh

for port in $(seq 7001 7006) ;do /usr/local/redis-cluster/redis/src/redis-server  /usr/local/redis-cluster/redis$port/redis.conf;done

編寫stop腳本rediskill.sh

for port in $(seq 7001 7006) ;do /usr/local/redis-cluster/redis/src/redis-cli -h 127.0.0.1 -p $port shutdown;done

執(zhí)行即可啟動(dòng)各個(gè)節(jié)點(diǎn)

7、創(chuàng)建集群

redis-trib.rb 是一個(gè) ruby 腳本工具,用來(lái)建立和管理 redis 集群
由于redis-trib.rb 復(fù)制到 /usr/local/bin 可以直接在命令行中使用了。使用下面這個(gè)命令即可完成安裝。

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

這個(gè)命令在這里用于創(chuàng)建一個(gè)新的集群, 選項(xiàng)–replicas 1 表示我們希望為集群中的每個(gè)主節(jié)點(diǎn)創(chuàng)建一個(gè)從節(jié)點(diǎn)。

之后跟著的其他參數(shù)則是這個(gè)集群實(shí)例的地址列表,3個(gè)master3個(gè)slave redis-trib 會(huì)打印出一份預(yù)想中的配置給你看, 如果你覺(jué)得沒(méi)問(wèn)題的話, 就可以輸入 yes , redis-trib 就會(huì)將這份配置應(yīng)用到集群當(dāng)中,讓各個(gè)節(jié)點(diǎn)開始互相通訊

>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7001
127.0.0.1:7002
127.0.0.1:7003
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
Adding replica 127.0.0.1:7006 to 127.0.0.1:7003
M: 7c735d9b65e18d784ae7eb3c897e9845562d4c4e 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
M: 8d32fdf39eea5d4fd1dc91520d2584f4c8394897 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
M: 33be8b61603fef126471b850b3e1387a49898df9 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
S: 1319ecdc9d441f10ca4034d2ca39339e7d972154 127.0.0.1:7004
   replicates 7c735d9b65e18d784ae7eb3c897e9845562d4c4e
S: 76dfb2c1850f0c1b16e13e956d2b80904d181d63 127.0.0.1:7005
   replicates 8d32fdf39eea5d4fd1dc91520d2584f4c8394897
S: 41468246b5fd6e94cc01235baab78082798ceb22 127.0.0.1:7006
   replicates 33be8b61603fef126471b850b3e1387a49898df9
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 127.0.0.1:7001)
M: 7c735d9b65e18d784ae7eb3c897e9845562d4c4e 127.0.0.1:7001
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
M: 8d32fdf39eea5d4fd1dc91520d2584f4c8394897 127.0.0.1:7002
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 1319ecdc9d441f10ca4034d2ca39339e7d972154 127.0.0.1:7004
   slots: (0 slots) slave
   replicates 7c735d9b65e18d784ae7eb3c897e9845562d4c4e
M: 33be8b61603fef126471b850b3e1387a49898df9 127.0.0.1:7003
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
S: 41468246b5fd6e94cc01235baab78082798ceb22 127.0.0.1:7006
   slots: (0 slots) slave
   replicates 33be8b61603fef126471b850b3e1387a49898df9
S: 76dfb2c1850f0c1b16e13e956d2b80904d181d63 127.0.0.1:7005
   slots: (0 slots) slave
   replicates 8d32fdf39eea5d4fd1dc91520d2584f4c8394897
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

出現(xiàn)上面即為成功
進(jìn)入redis7001
執(zhí)行:
./redis-cli -c -p 7001則進(jìn)入客戶端.測(cè)試
若為ip則redis-cli -h 192.168.31.245 -c -p 7002 ,加參數(shù) -C 可連接到集群,因?yàn)樯厦?redis.conf 將 bind 改為了ip地址,所以 -h 參數(shù)不可以省略。

127.0.0.1:7002> set name test 
OK
127.0.0.1:7002> get name
"test"
127.0.0.1:7003> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"test"

8、設(shè)置密碼

注意事項(xiàng):
1.如果是使用redis-trib.rb工具構(gòu)建集群,集群構(gòu)建完成前不要配置密碼,集群構(gòu)建完畢再通過(guò)config set + config rewrite命令逐個(gè)機(jī)器設(shè)置密碼
2.如果對(duì)集群設(shè)置密碼,那么requirepass和masterauth都需要設(shè)置,否則發(fā)生主從切換時(shí),就會(huì)遇到授權(quán)問(wèn)題,可以模擬并觀察日志
3.各個(gè)節(jié)點(diǎn)的密碼都必須一致,否則Redirected就會(huì)失敗
方法一:

[root@root redis7001]# vi redis.conf 
masterauth  <abc>
requirepass  abc

方法二:

[root@root redis7001]# ./redis-cli -c -p 7001
127.0.0.1:7001> config set masterauth abc
OK
127.0.0.1:7001> config set requirepass abc
OK
127.0.0.1:7001> config rewrite

默認(rèn)前面存在#號(hào)的,修改密碼需要把#刪除
修改完重啟

9、Redis Cluster 再次安裝出現(xiàn)的異常

今天補(bǔ)充一下一個(gè)異常,當(dāng)你Redis Cluster 集群在集群一次,比如IP地址要變化或者什么的,你再次集群的時(shí)候你會(huì)發(fā)現(xiàn)一個(gè)異常:

Node 127.0.0.1:10001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0. 

解決之道:這個(gè)時(shí)候你需要把開始生成的nodes_*.conf 、appendonly.aof 、dump.rdb 文件刪除,再次集群就可以了。

10、redis啟動(dòng)腳本單個(gè)文件

vi /etc/init.d/redis
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database

REDISPORT=7001
EXEC=/usr/java/redis-cluster/redis7001/redis-server
CLIEXEC=/usr/java/redis-cluster/redis7001/redis-cli

PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.conf"

case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
                echo "$PIDFILE does not exist, process is not running"
        else
                PID=$(cat $PIDFILE)
                echo "Stopping ..."
                $CLIEXEC -p $REDISPORT shutdown
                while [ -x /proc/${PID} ]
                do
                    echo "Waiting for Redis to shutdown ..."
                    sleep 1
                done
                echo "Redis stopped"
        fi
        ;;
    *)
        echo "Please use start or stop as first argument"
        ;;
esac
#設(shè)置為開機(jī)自啟動(dòng)服務(wù)器
chkconfig redisd on
#打開服務(wù)
service redisd start
#關(guān)閉服務(wù)
service redisd stop
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 【1 :集群原理】 (1)redis-cluster架構(gòu)圖 架構(gòu)細(xì)節(jié): (1)所有的redis節(jié)點(diǎn)彼此互聯(lián)(P...
    先生_呂閱讀 562評(píng)論 0 1
  • 用一臺(tái)虛擬機(jī)模擬6個(gè)節(jié)點(diǎn),一臺(tái)機(jī)器3個(gè)節(jié)點(diǎn),創(chuàng)建出3 master、3 salve 環(huán)境 redis 采用 red...
    夢(mèng)想實(shí)現(xiàn)家_Z閱讀 414評(píng)論 0 2
  • 本文檔翻譯自 http://redis.io/topics/cluster-tutorial 。 本文檔是 Red...
    會(huì)跳舞的機(jī)器人閱讀 67,064評(píng)論 2 21
  • 這里創(chuàng)建6個(gè)redis節(jié)點(diǎn),其中三個(gè)為主節(jié)點(diǎn),三個(gè)為從節(jié)點(diǎn)。redis和端口對(duì)應(yīng)關(guān)系:127.0.0.1:7000...
    壹點(diǎn)零閱讀 240評(píng)論 0 0
  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)、高可擴(kuò)展、高可用、大數(shù)據(jù)存儲(chǔ)問(wèn)題而產(chǎn)生的數(shù)據(jù)庫(kù)解決方...
    克魯?shù)吕?/span>閱讀 5,706評(píng)論 0 36

友情鏈接更多精彩內(nèi)容