搭建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
然後重啟即可