1. 程式人生 > >搭建redis叢集 Linux環境redis叢集搭建

搭建redis叢集 Linux環境redis叢集搭建

Linux環境redis叢集搭建

集群后tomcat context.xml的配置

<!-- 叢集配置-->

<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> 
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
maxInactiveInterval="60"
password="123456"
sentinelMaster="mymaster"
sentinels="192.168.1.249:7000,192.168.1.249:7001,192.168.1.249:7002,192.168.1.248:7003,192.168.1.248:7004,192.168.1.248:7005"/>

 

 

原文:http://blog.csdn.net/yj327243832a/article/details/52785100

 參考了以下文章

 http://blog.sina.com.cn/s/blog_53b45c4d0102wg10.html

 http://www.linuxidc.com/Linux/2015-08/121845.htm

 https://my.oschina.net/guol/blog/506193

 

必讀:以下內容寫的ip不一致是因為部分內容是從網頁上覆制來的,實際ip要改成自己的,如果叢集的redis不在同一伺服器上,則不要寫127.0.0.1,要改成實際伺服器的ip,不然叢集時會連線不到其他機器的redis節點。

改成真實ip後,則客戶端連線都要寫此ip,不能再寫127.0.0.1。如果redis節點都在一臺伺服器上則可以寫127.0.0.1

 

 (要讓叢集正常工作至少需要3個主節點,在這裡我們要建立6個redis節點,其中三個為主節點,三個為從節點,對應的redis節點的ip和埠對應關係如下)

192.168.1.249:7000
192.168.1.249:7001

192.168.1.249:7002

192.168.1.248:7003

192.168.1.248:7004

192.168.1.248:7005

 

檢視redis 

ps -ef |grep redis

 

 殺死全部redis的節點:

pkill -9 redis

 

1.首先安裝好一個redis例項,已安裝好的此歩可不看

、安裝redis

上傳伺服器,解壓,編譯

tar -zxvf redis-3.2.1.tar.gz

cd redis-3.2.1

make

 

2.可以在同目錄下新建資料夾redis_cluster

 

 

3.在redis_cluster資料夾下建立log資料夾,此路徑後面會用在redis.conf logfile的配置中,便於統一存放日誌

4.在redis_cluster資料夾下建立各節點的資料夾名稱,建議用埠號命名,如下圖:

 

 

5.將安裝好的redis例項中的redis.conf分別copy至7000、7001、7002資料夾中,

並修改如下內容

port 7000

cluster-config-file nodes-7000.conf

dbfilename dump-7000.rdb

logfile "/usr/local/redis_cluster/log/7000.log"

bind 192.168.1.249

appendonly yes

daemonize yes

cluster-enabled yes

cluster-node-timeout 15000

rename-command CONFIG ""

 

我在192.168.1.248服務上也這樣操作了一遍,將埠分配為7003、7004、7005。

 

logfile "/usr/local/redis_cluster/log/"

dir /usr/local/redis_cluster

在redis_cluster目錄下建立log資料夾

 

在/usr/local/redis-3.2.4/src目錄下,執行啟動redis程序命令:
./redis-server /usr/local/redis_cluster/7000/redis.conf

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

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

 

在192.168.1.248上也同樣操作,在/usr/local/redis-3.2.4/src目錄下:

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

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

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

 

bind要設定該伺服器實際的ip,不要設定127.0.0.1,不然不同伺服器直接叢集會找不到其他叢集的節點,如果是單臺伺服器可以配置為127.0.0.1

 

執行叢集建立命令,還是在/usr/local/redis-3.2.4/src目錄下:

 ./redis-trib.rb create --replicas 1 192.168.1.249:7000 192.168.1.249:7001 127.0.0.1:7002 192.168.1.248:7003 192.168.1.248:7004 192.168.1.248:7005

 

遇到執行叢集建立時報錯處理:

/usr/bin/env: ruby: No such file or directory

報錯:/usr/bin/env: ruby: No such file or directory

因為是執行的ruby的指令碼,需要ruby的環境

安裝ruby環境

[[email protected] src]# yum install ruby

再次執行建立叢集命令

[[email protected] src]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 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

/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)

        from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'

        from ./redis-trib.rb:25:in `<main>'

報錯cannot load such file -- redis (LoadError)...

缺少rubygems元件,使用yum安裝

[[email protected] src]# yum install rubygems

再次執行建立叢集命令

 

[[email protected] src]# ./redis-trib.rb create --replicas 1 192.168.1.249:7000 192.168.1.249:7001 127.0.0.1:7002 192.168.1.248:7003 192.168.1.248:7004 192.168.1.248:7005

/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)

        from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'

        from ./redis-trib.rb:25:in `<main>'

缺少redis和ruby的介面,使用gem 安裝

gem install redis

如果報錯參考:

https://blog.csdn.net/fengye_yulu/article/details/77628094

 

再次執行建立叢集命令後,根據提示輸入yes後集群建立成功

[[email protected] src]# ./redis-trib.rb create --replicas 1 192.168.8.21:7000 192.168.8.21:7001 192.168.8.21:7002 192.168.8.21:7003 192.168.8.21:7004 192.168.8.21:7005

 

6、測試

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

./redis-cli -c -p 7000(此命令只能連線到bind為127.0.0.1)

 

 

 

 ./redis-cli -c -h 192.168.1.249 -p 7000   (這個命令可以指定連線到哪個伺服器上的redis節點)

如果redis設定密碼的話,操作前需要輸入auth 密碼

 

 

叢集情況檢查

在/usr/local/redis-3.2.4/src目錄下執行(設定密碼後不能直接執行此命令了,需要先

執行 ./redis-cli -c -h 192.168.1.248 -p 7003  再auth 密碼  再執行cluster nodes

 ./redis-cli -c -h 192.168.1.248 -p 7003  cluster nodes

 

 

 

或者
./redis-trib.rb check 192.168.1.248:7003

埠號根據實際的來

效果:

 

 

 

 

檢視叢集目前狀況:

 

在/usr/local/redis-3.2.4/src目錄下執行

 -h可以指定ip,bind為ip的必須輸入-h ip

./redis-cli -c -p 7000(這個只能連線bind為127.0.0.1的)

./redis-cli -h 192.168.1.249 -c -p 7000

 

 

連線成功後輸入cluster info

下圖的示例是我加入密碼後的,如果沒有設定密碼是不會要求輸入密碼的.

 

 

 

測試存值取值:

(下面是別人測試的,所以ip和我的不同)

 示例說明了redis會自動跳轉到key所在的節點伺服器與埠上。

127.0.0.1:7000> set foo bar

-> Redirected to slot [12182] located at 127.0.0.1:7002

OK

127.0.0.1:7002> set hello world

-> Redirected to slot [866] located at 127.0.0.1:7000

OK

127.0.0.1:7000> get foo

-> Redirected to slot [12182] located at 127.0.0.1:7002

"bar"

127.0.0.1:7000> get hello

-> Redirected to slot [866] located at 127.0.0.1:7000

"world"

 

下圖是我測試的,可能是因為6個加點都加了密碼,所以跳了好幾個節點都輸入了密碼才儲存成功的

 

 

 

 

隨便開啟一個 節點的nodes.conf檔案內容

 

 

6739eece298760a2ee4f81a70e1ae9c2401234e2 192.168.1.248:7005 master - 0 1476758650335 7 connected 6827-10922

4f656a887b12a03e1c64f7585e77556ed06a988d 192.168.1.249:7000 myself,slave 6739eece298760a2ee4f81a70e1ae9c2401234e2 0 0 1 connected

3fa0a3ff79be99c45fa378572a3e5f2ecf8ab520 192.168.1.249:7002 slave ec9fb7461190a04155ad36846aa955c184d8e991 0 1476758648188 5 connected

e35f421a07ab04481ccd41e8c38a2b1e0a85afa9 192.168.1.249:7001 slave c7342df9eb32f0d58b1251e53ca716f85836fa26 0 1476758650230 9 connected

c7342df9eb32f0d58b1251e53ca716f85836fa26 192.168.1.248:7003 master - 0 1476758649212 9 connected 0-6826 10923-12287

ec9fb7461190a04155ad36846aa955c184d8e991 192.168.1.248:7004 master - 0 1476758647268 5 connected 12288-16383

vars currentEpoch 9 lastVoteEpoch 0

 

 

 

 叢集時密碼設定

方法1.叢集前設定密碼

需要修改gem的redis工具下的一個檔案,我這裡是預設安裝,路徑如下:/usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb ,修改內容如下:

 

 

 

 

方法2.集群后設定密碼

對每一個節點的redis.conf修改 requirepass 123456

 然後重啟即可

集群后tomcat context.xml的配置

<!-- 叢集配置-->

<Valve className="com.radiadesign.catalina.session.RedisSessionHandlerValve" /> 
<Manager className="com.radiadesign.catalina.session.RedisSessionManager"
maxInactiveInterval="60"
password="123456"
sentinelMaster="mymaster"
sentinels="192.168.1.249:7000,192.168.1.249:7001,192.168.1.249:7002,192.168.1.248:7003,192.168.1.248:7004,192.168.1.248:7005"/>

 

 

原文:http://blog.csdn.net/yj327243832a/article/details/52785100

 參考了以下文章

 http://blog.sina.com.cn/s/blog_53b45c4d0102wg10.html

 http://www.linuxidc.com/Linux/2015-08/121845.htm

 https://my.oschina.net/guol/blog/506193

 

必讀:以下內容寫的ip不一致是因為部分內容是從網頁上覆制來的,實際ip要改成自己的,如果叢集的redis不在同一伺服器上,則不要寫127.0.0.1,要改成實際伺服器的ip,不然叢集時會連線不到其他機器的redis節點。

改成真實ip後,則客戶端連線都要寫此ip,不能再寫127.0.0.1。如果redis節點都在一臺伺服器上則可以寫127.0.0.1

 

 (要讓叢集正常工作至少需要3個主節點,在這裡我們要建立6個redis節點,其中三個為主節點,三個為從節點,對應的redis節點的ip和埠對應關係如下)

192.168.1.249:7000
192.168.1.249:7001

192.168.1.249:7002

192.168.1.248:7003

192.168.1.248:7004

192.168.1.248:7005

 

檢視redis 

ps -ef |grep redis

 

 殺死全部redis的節點:

pkill -9 redis

 

1.首先安裝好一個redis例項,已安裝好的此歩可不看

、安裝redis

上傳伺服器,解壓,編譯

tar -zxvf redis-3.2.1.tar.gz

cd redis-3.2.1

make

 

2.可以在同目錄下新建資料夾redis_cluster

 

 

3.在redis_cluster資料夾下建立log資料夾,此路徑後面會用在redis.conf logfile的配置中,便於統一存放日誌

4.在redis_cluster資料夾下建立各節點的資料夾名稱,建議用埠號命名,如下圖:

 

 

5.將安裝好的redis例項中的redis.conf分別copy至7000、7001、7002資料夾中,

並修改如下內容

port 7000

cluster-config-file nodes-7000.conf

dbfilename dump-7000.rdb

logfile "/usr/local/redis_cluster/log/7000.log"

bind 192.168.1.249

appendonly yes

daemonize yes

cluster-enabled yes

cluster-node-timeout 15000

rename-command CONFIG ""

 

我在192.168.1.248服務上也這樣操作了一遍,將埠分配為7003、7004、7005。

 

logfile "/usr/local/redis_cluster/log/"

dir /usr/local/redis_cluster

在redis_cluster目錄下建立log資料夾

 

在/usr/local/redis-3.2.4/src目錄下,執行啟動redis程序命令:
./redis-server /usr/local/redis_cluster/7000/redis.conf

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

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

 

在192.168.1.248上也同樣操作,在/usr/local/redis-3.2.4/src目錄下:

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

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

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

 

bind要設定該伺服器實際的ip,不要設定127.0.0.1,不然不同伺服器直接叢集會找不到其他叢集的節點,如果是單臺伺服器可以配置為127.0.0.1

 

執行叢集建立命令,還是在/usr/local/redis-3.2.4/src目錄下:

 ./redis-trib.rb create --replicas 1 192.168.1.249:7000 192.168.1.249:7001 127.0.0.1:7002 192.168.1.248:7003 192.168.1.248:7004 192.168.1.248:7005

 

遇到執行叢集建立時報錯處理:

/usr/bin/env: ruby: No such file or directory

報錯:/usr/bin/env: ruby: No such file or directory

因為是執行的ruby的指令碼,需要ruby的環境

安裝ruby環境

[[email protected] src]# yum install ruby

再次執行建立叢集命令

[[email protected] src]# ./redis-trib.rb create --replicas 1 127.0.0.1:7000 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

/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)

        from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'

        from ./redis-trib.rb:25:in `<main>'

報錯cannot load such file -- redis (LoadError)...

缺少rubygems元件,使用yum安裝

[[email protected] src]# yum install rubygems

再次執行建立叢集命令

 

[[email protected] src]# ./redis-trib.rb create --replicas 1 192.168.1.249:7000 192.168.1.249:7001 127.0.0.1:7002 192.168.1.248:7003 192.168.1.248:7004 192.168.1.248:7005

/usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)

        from /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require'

        from ./redis-trib.rb:25:in `<main>'

缺少redis和ruby的介面,使用gem 安裝

gem install redis

如果報錯參考:

https://blog.csdn.net/fengye_yulu/article/details/77628094

 

再次執行建立叢集命令後,根據提示輸入yes後集群建立成功

[[email protected] src]# ./redis-trib.rb create --replicas 1 192.168.8.21:7000 192.168.8.21:7001 192.168.8.21:7002 192.168.8.21:7003 192.168.8.21:7004 192.168.8.21:7005

 

6、測試

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

./redis-cli -c -p 7000(此命令只能連線到bind為127.0.0.1)

 

 

 

 ./redis-cli -c -h 192.168.1.249 -p 7000   (這個命令可以指定連線到哪個伺服器上的redis節點)

如果redis設定密碼的話,操作前需要輸入auth 密碼

 

 

叢集情況檢查

在/usr/local/redis-3.2.4/src目錄下執行(設定密碼後不能直接執行此命令了,需要先

執行 ./redis-cli -c -h 192.168.1.248 -p 7003  再auth 密碼  再執行cluster nodes

 ./redis-cli -c -h 192.168.1.248 -p 7003  cluster nodes

 

 

 

或者
./redis-trib.rb check 192.168.1.248:7003

埠號根據實際的來

效果:

 

 

 

 

檢視叢集目前狀況:

 

在/usr/local/redis-3.2.4/src目錄下執行

 -h可以指定ip,bind為ip的必須輸入-h ip

./redis-cli -c -p 7000(這個只能連線bind為127.0.0.1的)

./redis-cli -h 192.168.1.249 -c -p 7000

 

 

連線成功後輸入cluster info

下圖的示例是我加入密碼後的,如果沒有設定密碼是不會要求輸入密碼的.

 

 

 

測試存值取值:

(下面是別人測試的,所以ip和我的不同)

 示例說明了redis會自動跳轉到key所在的節點伺服器與埠上。

127.0.0.1:7000> set foo bar

-> Redirected to slot [12182] located at 127.0.0.1:7002

OK

127.0.0.1:7002> set hello world

-> Redirected to slot [866] located at 127.0.0.1:7000

OK

127.0.0.1:7000> get foo

-> Redirected to slot [12182] located at 127.0.0.1:7002

"bar"

127.0.0.1:7000> get hello

-> Redirected to slot [866] located at 127.0.0.1:7000

"world"

 

下圖是我測試的,可能是因為6個加點都加了密碼,所以跳了好幾個節點都輸入了密碼才儲存成功的

 

 

 

 

隨便開啟一個 節點的nodes.conf檔案內容

 

 

6739eece298760a2ee4f81a70e1ae9c2401234e2 192.168.1.248:7005 master - 0 1476758650335 7 connected 6827-10922

4f656a887b12a03e1c64f7585e77556ed06a988d 192.168.1.249:7000 myself,slave 6739eece298760a2ee4f81a70e1ae9c2401234e2 0 0 1 connected

3fa0a3ff79be99c45fa378572a3e5f2ecf8ab520 192.168.1.249:7002 slave ec9fb7461190a04155ad36846aa955c184d8e991 0 1476758648188 5 connected

e35f421a07ab04481ccd41e8c38a2b1e0a85afa9 192.168.1.249:7001 slave c7342df9eb32f0d58b1251e53ca716f85836fa26 0 1476758650230 9 connected

c7342df9eb32f0d58b1251e53ca716f85836fa26 192.168.1.248:7003 master - 0 1476758649212 9 connected 0-6826 10923-12287

ec9fb7461190a04155ad36846aa955c184d8e991 192.168.1.248:7004 master - 0 1476758647268 5 connected 12288-16383

vars currentEpoch 9 lastVoteEpoch 0

 

 

 

 叢集時密碼設定

方法1.叢集前設定密碼

需要修改gem的redis工具下的一個檔案,我這裡是預設安裝,路徑如下:/usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb ,修改內容如下:

 

 

 

 

方法2.集群后設定密碼

對每一個節點的redis.conf修改 requirepass 123456

 然後重啟即可