Redis 集羣的安裝( Redis3+CentOS)

Redis集羣的安裝(Redis3.0.3 + CentOS6.6_x64)node

     要讓Redis3.0集羣正常工做至少須要3個Master節點,要想實現高可用,每一個Master節點要配備至少1個Slave節點。根據以上特色和要求,進行以下的集羣實施規劃:linux

使用6臺服務器(物理機或虛擬機)部署3個Master + 3個Slave;redis

 

主機名數據庫

IP安全

服務端口ruby

默認6379服務器

集羣端口app

服務端口數+10000tcp

主/從測試

dubbo-redis-01

192.168.1.111

7111

17111

Master

dubbo-redis-02

192.168.1.112

7112

17112

Master

dubbo-redis-03

192.168.1.113

7113

17113

Master

dubbo-redis-04

192.168.1.114

7114

17114

Slave

dubbo-redis-05

192.168.1.115

7115

17115

Slave

dubbo-redis-06

192.168.1.116

7116

17116

Slave

 

按規劃:防火牆中打開相應的端口

192.168.1.111

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7111 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17111 -j ACCEPT

192.168.1.112

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7112 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17112 -j ACCEPT

192.168.1.113

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7113 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17113 -j ACCEPT

192.168.1.114

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7114 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17114 -j ACCEPT

192.168.1.115

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7115 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17115 -j ACCEPT

192.168.1.116

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7116 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17116 -j ACCEPT

 

安裝目錄:/usr/local/redis3

用戶:root

 

編譯和安裝所需的包:

# yum install gcc tcl

 

下載(或上傳)Redis3最新穩定版(當前最新版redis-3.0.3.tar.gz

# cd /usr/local/src

# wget http://download.redis.io/releases/redis-3.0.3.tar.gz

 

建立安裝目錄:

# mkdir /usr/local/redis3

 

解壓:

# tar -zxvf redis-3.0.3.tar.gz

# cd redis-3.0.3

 

安裝(使用PREFIX指定安裝目錄):

# make PREFIX=/usr/local/redis3 install

安裝完成後,能夠看到/usr/local/redis3目錄下有一個bin目錄,bin目錄裏就是redis的命令腳本:

redis-benchmark  redis-check-aof  redis-check-dump  redis-cli  redis-server

 

建立集羣配置目錄,並拷貝redid.conf配置文件到各節點配置目錄:

192.168.1.111

# mkdir -p /usr/local/redis3/cluster/7111

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7111/redis-7111.conf

192.168.1.112

# mkdir -p /usr/local/redis3/cluster/7112

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7112/redis-7112.conf

192.168.1.113

# mkdir -p /usr/local/redis3/cluster/7113

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7113/redis-7113.conf

192.168.1.114

# mkdir -p /usr/local/redis3/cluster/7114

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7114/redis-7114.conf

192.168.1.115

# mkdir -p /usr/local/redis3/cluster/7115

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7115/redis-7115.conf

192.168.1.116

# mkdir -p /usr/local/redis3/cluster/7116

# cp /usr/local/src/redis-3.0.3/redis.conf /usr/local/redis3/cluster/7116/redis-7116.conf

 

修改配置文件中的下面選項:

6個節點的redis.conf配置文件內容,注意修改下紅色字體部分的內容便可,其餘都相同:

配置選項

選項值

說明

daemonize

yes

是否做爲守護進程運行

pidfile

/var/run/redis-7111.pid

如之後臺進程運行,則需指定一個pid,

默認爲/var/run/redis.pid

port

7111

監聽端口,默認爲6379

注意:集羣通信端口值默認爲此端口值+10000,如17111

databases

1

可用數據庫數,默認值爲16,默認數據庫存儲在DB 0號ID庫中,無特殊需求,建議僅設置一個數據庫 databases 1

cluster-enabled

yes

打開redis集羣

cluster-config-file

/usr/local/redis3/cluster/7111/nodes.conf

集羣配置文件(啓動自動生成),不用人爲干涉

cluster-node-timeout

15000

節點互連超時時間。毫秒

cluster-migration-barrier

1

數據遷移的副本臨界數,這個參數表示的是,一個主節點在擁有多少個好的從節點的時候就要割讓一個從節點出來給另外一個沒有任何從節點的主節點。

cluster-require-full-coverage

yes

若是某一些key space沒有被集羣中任何節點覆蓋,集羣將中止接受寫入。

appendonly

yes

啓用aof持久化方式

由於redis自己同步數據文件是按上面save條件來同步的,因此有的數據會在一段時間內只存在於內存中。默認值爲no

dir

/usr/local/redis3/cluster/7111

節點數據持久化存放目錄(建議配置)

包含了最少選項的集羣配置文件示例以下:

port 7000

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

appendonly yes

 

使用以下命令啓動這6個Redis節點實例:

192.168.1.111

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7111/redis-7111.conf

192.168.1.112

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7112/redis-7112.conf

192.168.1.113

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7113/redis-7113.conf

192.168.1.114

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7114/redis-7114.conf

192.168.1.115

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7115/redis-7115.conf

192.168.1.116

# /usr/local/redis3/bin/redis-server /usr/local/redis3/cluster/7116/redis-7116.conf

 

啓動以後用PS命令查看實例啓動狀況:

[root@dubbo-redis-01 cluster]# ps -ef | grep redis

root  5443  1  0 22:49 ?  00:00:00 /usr/local/redis3/bin/redis-server *:7111 [cluster]

[root@dubbo-redis-02 cluster]# ps -ef | grep redis

root  5421  1  0 22:49 ?  00:00:00 /usr/local/redis3/bin/redis-server *:7112 [cluster]

[root@dubbo-redis-03 cluster]# ps -ef | grep redis

root  5457  1  0 22:49 ?  00:00:00 /usr/local/redis3/bin/redis-server *:7113 [cluster]

[root@dubbo-redis-04 cluster]# ps -ef | grep redis

root  5379  1  0 22:50 ?  00:00:00 /usr/local/redis3/bin/redis-server *:7114 [cluster]

[root@dubbo-redis-05 cluster]# ps -ef | grep redis

root  5331  1  0 22:50 ?  00:00:00 /usr/local/redis3/bin/redis-server *:7115 [cluster]

[root@dubbo-redis-06 cluster]# ps -ef | grep redis

root  5687  1  0 22:50 ?  00:00:00 /usr/local/redis3/bin/redis-server *:7116 [cluster]

注意:啓動完畢後,6個Redis實例還沒有構成集羣。

 

 

接下來準備建立集羣

 

安裝ruby和rubygems(注意:須要ruby的版本在1.8.7 以上)

# yum -y install ruby ruby-devel rubygems rpm-build

 

檢查ruby版本:

# ruby -v

ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]

 

gem 安裝 redis ruby 接口:

# gem install redis

Successfully installed redis-3.2.1

1 gem installed

Installing ri documentation for redis-3.2.1...

Installing RDoc documentation for redis-3.2.1...

若是執行以上的gem install redis拋錯redis requires Ruby version >=2.2.2時

解決辦法:升級ruby版本

一、卸載當前ruby

yum remove ruby

二、下載ruby穩定版(網上找的是2.5.3,但我實際用的2.4.2https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.gz

cd /usr/local/src

wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.3.tar.gz

三、安裝ruby

tar zxvf ruby-2.5.3.tar.gz
cd ruby-2.5.3
./configure --prefix=/usr/local/ruby
make

make install

查看安裝後的版本

/usr/local/ruby/bin/ruby -v

設置環境變量

echo "export PATH=$PATH:/usr/local/ruby/bin" >> /etc/profile

source /etc/profile

驗證下

echo $PATH

五、安裝

gem install redis

至此,game install redis 報錯已解決

 

執行Redis集羣建立命令(只須要在其中一個節點上執行一次則可)

# cd /usr/local/src/redis-3.0.3/src/

# cp redis-trib.rb /usr/local/bin/redis-trib

# redis-trib create --replicas 1 192.168.1.114:7114 192.168.1.115:7115 192.168.1.116:7116 192.168.1.111:7111 192.168.1.112:7112 192.168.1.113:7113

 

>>> Creating cluster

Connecting to node 192.168.1.114:7114: OK

Connecting to node 192.168.1.115:7115: OK

Connecting to node 192.168.1.116:7116: OK

Connecting to node 192.168.1.111:7111: OK

Connecting to node 192.168.1.112:7112: OK

Connecting to node 192.168.1.113:7113: OK

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

Using 3 masters:

192.168.1.113:7113

192.168.1.112:7112

192.168.1.111:7111

Adding replica 192.168.1.116:7116 to 192.168.1.113:7113

Adding replica 192.168.1.115:7115 to 192.168.1.112:7112

Adding replica 192.168.1.114:7114 to 192.168.1.111:7111

S: 007a3fe8d7451d3d0a78fffd2653c8641809499c 192.168.1.114:7114

   replicates 94e140b9ca0735040ae3428983835f1d93327aeb

S: ea69b6b6e2e7723eed50b1dabea9d244ccf3f098 192.168.1.115:7115

   replicates c642b3071c4b2b073707ed3c3a2c16d53a549eff

S: 5f09dc0671732cf06a09f28631c90e0c68408520 192.168.1.116:7116

   replicates 896a3c99da4fcf680de1f42406fccb551d8c40c3

M: 94e140b9ca0735040ae3428983835f1d93327aeb 192.168.1.111:7111

   slots:10923-16383 (5461 slots) master

M: c642b3071c4b2b073707ed3c3a2c16d53a549eff 192.168.1.112:7112

   slots:5461-10922 (5462 slots) master

M: 896a3c99da4fcf680de1f42406fccb551d8c40c3 192.168.1.113:7113

   slots:0-5460 (5461 slots) master

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

(輸入 yes 並按下回車確認以後,集羣就會將配置應用到各個節點,並鏈接起(join)各個節點,也就是讓各個節點開始互相通信)

>>> 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.114:7114)

M: 007a3fe8d7451d3d0a78fffd2653c8641809499c 192.168.1.114:7114

   slots: (0 slots) master

   replicates 94e140b9ca0735040ae3428983835f1d93327aeb

M: ea69b6b6e2e7723eed50b1dabea9d244ccf3f098 192.168.1.115:7115

   slots: (0 slots) master

   replicates c642b3071c4b2b073707ed3c3a2c16d53a549eff

M: 5f09dc0671732cf06a09f28631c90e0c68408520 192.168.1.116:7116

   slots: (0 slots) master

   replicates 896a3c99da4fcf680de1f42406fccb551d8c40c3

M: 94e140b9ca0735040ae3428983835f1d93327aeb 192.168.1.111:7111

   slots:10923-16383 (5461 slots) master

M: c642b3071c4b2b073707ed3c3a2c16d53a549eff 192.168.1.112:7112

   slots:5461-10922 (5462 slots) master

M: 896a3c99da4fcf680de1f42406fccb551d8c40c3 192.168.1.113:7113

   slots:0-5460 (5461 slots) master

 

一切正常的狀況下輸出如下信息:

[OK] All nodes agree about slots configuration.

>>> Check for open slots...

>>> Check slots coverage...

[OK] All 16384 slots covered.

最後一行信息表示集羣中的 16384 個槽都有至少一個主節點在處理, 集羣運做正常。

 

集羣建立過程說明:

(1) 給定 redis-trib 程序的命令是 create , 這表示咱們但願建立一個新的集羣;

(2) 這裏的 --replicas 1 表示每一個主節點下有一個從節點;

(3) 以後跟着的其它參數則是實例的地址列表,程序使用這些地址所指示的實例來建立新集羣

總的來講,以上命令的意思就是讓 redis-trib 程序建立一個包含三個主節點和三個從節點的集羣。

接着,redis-trib 會打印出一份預想中的配置給你看,若是你以爲沒問題的話(注意覈對主從關係是不是你想要的),就能夠輸入 yes , redis-trib 就會將這份配置應用到集羣當中。

 

 

集羣簡單測試

 

使用 redis-cli命令進入集羣環境

[root@dubbo-redis-04 bin]# ./redis-cli -c -p 7114

127.0.0.1:7114> set huangkejie huangkejie

-> Redirected to slot [8559] located at 192.168.1.112:7112

OK

 

[root@dubbo-redis-01 bin]# ./redis-cli -c -p 7111

127.0.0.1:7111> get huangkejie

-> Redirected to slot [8559] located at 192.168.1.112:7112

"huangkejie"

 

[root@dubbo-redis-02 bin]# ./redis-cli -c -p 7112

127.0.0.1:7112> get huangkejie

"huangkejie"

127.0.0.1:7112>

 

[root@dubbo-redis-01 bin]# ./redis-cli -p 7111 cluster nodes

 

 

 

將Redis配置成服務

非僞集羣適用,也就是每一個節點都單獨物理機部署的狀況下):

按上面的操做步驟,Redis的啓動腳本爲:/usr/local/src/redis-3.0.3/utils/redis_init_script

將啓動腳本複製到/etc/rc.d/init.d/目錄下,並命名爲redis:

# cp /usr/local/src/redis-3.0.3/utils/redis_init_script /etc/rc.d/init.d/redis

編輯/etc/rc.d/init.d/redis,修改相應配置,使之能註冊成爲服務:

# vi /etc/rc.d/init.d/redis

#!/bin/sh

#

# Simple Redis init.d script conceived to work on Linux systems

# as it does use of the /proc filesystem.

 

REDISPORT=6379

EXEC=/usr/local/bin/redis-server

CLIEXEC=/usr/local/bin/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

 

查看以上redis服務腳本,關注標爲橙色的幾個屬性,作以下幾個修改的準備:

  1. 在腳本的第一行後面添加一行內容以下:

#chkconfig: 2345 80 90

(若是不添加上面的內容,在註冊服務時會提示:service redis does not support chkconfig

  1. REDISPORT端口修改各節點對應的端口;(注意,端口名將與下面的配置文件名有關)
  2. EXEC=/usr/local/bin/redis-server改成 EXEC=/usr/local/redis3/bin/redis-server
  3. CLIEXEC=/usr/local/bin/redis-cli 改成CLIEXEC=/usr/local/redis3/bin/redis-cli
  4. 配置文件設置,對CONF屬性做以下調整:

CONF="/etc/redis/${REDISPORT}.conf"

改成 CONF="/usr/local/redis3/cluster/${REDISPORT}/redis-${REDISPORT}.conf"

  1. 更改redis開啓的命令,之後臺運行的方式執行:

$EXEC $CONF &    #「&」做用是將服務轉到後面運行

 

修改後的/etc/rc.d/init.d/redis服務腳本內容爲(注意各節點的端口不一樣):

#!/bin/sh

#chkconfig: 2345 80 90

#

# Simple Redis init.d script conceived to work on Linux systems

# as it does use of the /proc filesystem.

 

REDISPORT=7111

EXEC=/usr/local/redis3/bin/redis-server

CLIEXEC=/usr/local/redis3/bin/redis-cli

 

PIDFILE=/var/run/redis-${REDISPORT}.pid

CONF="/usr/local/redis3/cluster/${REDISPORT}/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

 

以上配置操做完成後,即可將Redis註冊成爲服務:

# chkconfig --add redis

 

防火牆中打開對應的端口,各節點的端口不一樣(前面已操做則可跳過此步

# vi /etc/sysconfig/iptables

添加:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 7111 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 17111 -j ACCEPT

重啓防火牆:

# service iptables restart

 

啓動Redis服務

# service redis start

 

將Redis添加到環境變量中:

# vi /etc/profile

在最後添加如下內容:

## Redis env

export PATH=$PATH:/usr/local/redis3/bin

使配置生效:

# source /etc/profile

如今就能夠直接使用redis-cli等redis命令了:

 

 

關閉Redis服務

# service redis stop

 

默認狀況下,Redis未開啓安全認證,能夠經過/usr/local/redis3/cluster/7111/redis-7111.conf的requirepass指定一個驗證密碼。

相關文章
相關標籤/搜索