redis3.x集羣的搭建

Redis3.x版本中加入了對集羣的支持,其中包括sharding分片,支持master slave,支持atuo failover 自動故障切換。最主要的區別於早期3.x版本之前的是內部支持了atuo failover,當主機宕機後,備機會自動頂上變成主機。

HashSolt(哈希槽)

其中引入了HashSolt(哈希槽)的概念,即在集羣搭建中,redis集羣內部會自動地給集羣中的各個redis節點均勻分配總量爲16384個長度的槽位。

好處:

1. 加快了查詢的效率。

2. 槽的使用和轉移,易於集羣的拓展。當集羣中的節點增加時,需要把原來存在其他節點上的衆多數據分給新加的節點,從而達到增加節點優化的優化的效果,而槽的使用就能夠更容易的轉移數據。

搭建集羣步驟

1.修改配置文件,在本機開啓6個redis(3個主機,3個備機),並開啓服務。

配置文件修改項如下:(其中的port應該爲6個不同項,本次試驗端口號爲7000,7001,7002,7003,7004,7005bind 後面加的ip爲本機IP地址

port 7000

bind 192.168.8.150

daemonize yes

cluster-enabled yes

cluster-config-file nodes.conf

cluster-node-timeout 5000

appendonly yes

修改好redis.conf 配置文件之後,複製到自定義的 /usr/local/redisCluster/ 目錄下分別創建好的7000,7001,7002,7003,7004,7005目錄下並更改文件名,易於區分。

創建一個redisCluster目錄下再分別創建6個目錄名爲不同端口號的目錄用於存儲不同的redis配置文件


cp redis.conf /usr/local/redisCluster/7000/7000.conf

cp redis.conf /usr/local/redisCluster/7001/7001.conf

cp redis.conf /usr/local/redisCluster/7002/7002.conf

cp redis.conf /usr/local/redisCluster/7003/7003.conf

cp redis.conf /usr/local/redisCluster/7004/7004.conf

cp redis.conf /usr/local/redisCluster/7005/7005.conf

之後,分別更改對應的配置文件中的端口號爲7000,7001,7002,7003,7004,7005



不同端口目錄下對應不同端口的配置文件

2.分別啓動6個redis的服務

cd /usr/local/redisCluster/

cd 7000

redis-server 7000.conf

cd ../7001

redis-server 7001.conf

cd ../7002

redis-server 7002.conf

cd ../7003

redis-server 7003.conf

cd ../7004

redis-server 7004.conf

cd ../7005

redis-server 7005.conf



分別對應的6個配置文件的6個redis服務


3.查看服務是否已經啓動

ps -ef|grep redis



6個redis服務已經啓動

其中紅框標註的是cluster集羣標示,說明集羣模式已經啓動。

4.執行redis的創建集羣命令創建集羣

1)進入redis安裝目錄的src目錄下 

          cd/usr/local/redis/src

2)執行創建集羣命令

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

此開啓集羣命令需要使用ruby的支持,所以先安裝ruby的環境,否則會報錯說缺少ruby支持文件

安裝ruby

yum install ruby 

3)執行之後發現,沒有rubygems文件



缺少rubgems文件

4)使用安裝rubygems命令

yum install rubygems  

安裝後再次執行,發現又報少一個文件,錯誤內容:

/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in`gem_original_require': no such file to load -- redis (LoadError) from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require' from ./redis-trib.rb:25

5)此錯誤提示爲不能加載redis,是因爲缺少redis和ruby的接口,使用gem 安裝

使用命令:

 gem install redis 

但是, 執行上面的命令後發現並沒有什麼反應,由於國內網絡原因(你懂的),導致 rubygems.org 存放在 Amazon S3 上面的資源文件間歇性連接失敗。添加淘寶的gem源。

解決方案:

a)首先移除掉rubygems.org

使用gem源查看命令,查看是哪一個源

gem source -l

如果爲http://rubygems.org/,那麼就先移除該源,跟換可以訪問的源。移除時需注意網址應一致(如:http和https的區別)

gem sources --remove http://rubygems.org/

然後換用淘寶鏡源

gem sources -a https://ruby.taobao.org/

此時會出現錯誤提示如下

Error fetching https://ruby.taobao.org/:

 SSL_connect returned=1 errno=0 state=SSLv3read server certificate B: certificate verify failed (https://rubygems-china.oss-cn-hangzhou.aliyuncs.com/specs.4.8.gz)

發現原來是taobao Gems 源已停止維護現由 ruby-china 提供鏡像服務,即我們要換源:http://gems.ruby-china.org/

gem sources -a http://gems.ruby-china.org/

注意:這裏是http而不是https,如果你發現出錯了,請檢查下這裏。

安裝好後用 gem sources -l 檢查當前SOURCES列表:

*** CURRENT SOURCES ***

http://gems.ruby-china.org/

說明更換鏡像源成功。

6)再次執行gem install redis 可能會出現如下錯誤



ruby版本過低錯誤提示

解決方案如下:

查了查資料,CentOS7 yum庫中ruby的版本支持到 2.0.0,可gem 安裝redis需要最低是2.2.2,自己編譯的ruby源碼,再執行還是報錯…

採用rvm來更新ruby ,安裝RVM命令:

gpg2 --keyserver hkp://keys.gnupg.net--recv-keys D39DC0E3

curl -L get.rvm.io | bash -s stable

find / -name rvm –print

source  /usr/local/rvm/scripts/rvm

查看rvm庫中已知的ruby版本

rvm list known

安裝一個ruby版本

rvm install 2.3.3

使用一個ruby版本

rvm use 2.3.3

設置默認版本

rvm use 2.3.3 –default

卸載一個已知版本

rvm remove 2.0.0

查看ruby版本:

ruby –version

再繼續安裝這個redis接口

gem install redis



安裝替換爲2.3.3版本ruby成功

7)此時再次在redis安裝目錄下src目錄下執行搭建集羣命令

./redis-trib.rb create --replicas 1 192.168.8.150:7000 192.168.8.150:7001 192.168.8.150:7002

192.168.8.150:7003 192.168.8.150:7004 192.168.8.150:7005

成功結果如下,紅色標註爲分配的hashsolt



進入redis內部集羣配置界面



此串字母數字爲此節點在集羣中的唯一ID   

輸入yes,接受其配置後。



redis集羣配置成功

redis自動把16384個槽給均勻分配開了,說明集羣搭建成功。

8)查看集羣狀態,看是否已經搭建完成。

使用命令:

redis-cli -c -h 192.168.8.150 -p 7000 cluster nodes

執行信息如下:

[root@server src]# redis-cli -c -h 192.168.8.150 -p 7000

cluster nodes

4c8f74d896f0b550ae41211e04d5d4fbe44b2bd3192.168.8.150:7001master - 0 1514650927177 2connected 5795-10922

7e21d69e8038185ea0a419fccfdeed99e7a6fdcb192.168.8.150:7005 master - 0 1514650926169 8connected 11256-16383

68f45e1b0c4832b6681565a8ddfcdb5195b7b1bd192.168.8.150:7004 slave 4c8f74d896f0b550ae41211e04d5d4fbe44b2bd30 1514650927682 5 connected

e4922caef55cca4793c16a1767c42602ca8cdb3b192.168.8.150:7003 master - 0 1514650927177 7connected 333-5460

b15e99ebcbcffc1f221412716ee33b03c45a3e3b192.168.8.150:7000 myself,slave e4922caef55cca4793c16a1767c42602ca8cdb3b0 0 1 connected

82002358e7805a0151bcf63e6fb7255ad4b3d3a3192.168.8.150:7006 master - 0 1514650926169 9 connected 0-332 5461-579410923-11255

5289466e00cdb535512a3d4d4208b619f3313878192.168.8.150:7002 slave 7e21d69e8038185ea0a419fccfdeed99e7a6fdcb0 1514650927682 8 connected




redis集羣各節點信息

9)在集羣中存儲數據

1.首先進入redis 的客戶端,任意一個即可

使用命令:

redis-cli -h 192.168.8.150 -p 7000 –c

注意事項:

1) 其中-h  後面的主機名地址爲redis的配置文件中綁定的ip地址,否則會無法連接相應的服務端。

      如果沒有指定ip,本地默認的本機ip爲127.0.0.1,此時就會出現,無法連接到ip爲127.0.0.1的服務端的錯誤。

      出現如下錯誤:

[root@server 7000]#redis-cli -p 7000 -c

Could not connect toRedis at 127.0.0.1:7000: Connection refused

Could not connect to

Redis at 127.0.0.1:7000: Connection refused

所以要麼更改本機的默認本地ip,要麼登錄連接時指定主機ip爲配置文件中bind後的ip地址

使用命令:

redis-cli -h 192.168.8.150 -p 7000 –c

2) 其中命令後面應添加–c ,採取集羣模式進行操作。

    如果不添加–c 那麼會出現如下錯誤:

[root@server 7000]# redis-cli -h192.168.8.150 -p 7000

192.168.8.150:7000> keys *

(empty list or set)

192.168.8.150:7000> sethxhaaj 'hhh'

(error) MOVED 2124

192.168.8.150:7003

造成無法存儲的現象。

2. 正確使用命令後:

[root@server 7000]# redis-cli -h 192.168.8.150 -p 7000 -c

192.168.8.150:7000> set a 1

->Redirected to slot [15495] located at192.168.8.150:7005

OK

192.168.8.150:7005> get a

"1"

現象:redis內部會自動的在這幾個節點之間隨機存儲,取數據時,會自動跳到該節點進行取,方式沒有任何改變,redis內部自主實現。


命令:info

描述了當前服務器集羣的狀態。

192.168.8.150:7000> info

# Server

redis_version:3.2.9

redis_git_sha1:00000000

redis_git_dirty:0

redis_build_id:3d43e53feb34660a

redis_mode:cluster

os:Linux 2.6.32-358.el6.i686i686

arch_bits:32

multiplexing_api:epoll

gcc_version:4.4.7

process_id:3537

run_id:657c74a6c2db9c1d83b8454e954c07d3b85b430c

tcp_port:7000

uptime_in_seconds:75518

uptime_in_days:0

hz:10

lru_clock:4685395

executable:/usr/local/redisCluster/7000/redis-server

config_file:/usr/local/redisCluster/7000/7000.conf

# Clients

connected_clients:2

client_longest_output_list:0

client_biggest_input_buf:0

blocked_clients:0

# Memory

used_memory:899680

used_memory_human:878.59K

used_memory_rss:2318336

used_memory_rss_human:2.21M

used_memory_peak:1952044

used_memory_peak_human:1.86M

total_system_memory:1394896896

total_system_memory_human:1.30G

used_memory_lua:25600

used_memory_lua_human:25.00K

maxmemory:3221225472

maxmemory_human:3.00G

maxmemory_policy:noeviction

mem_fragmentation_ratio:2.58

mem_allocator:libc

# Persistence

loading:0

rdb_changes_since_last_save:0

rdb_bgsave_in_progress:0

rdb_last_save_time:1514559784

rdb_last_bgsave_status:ok

rdb_last_bgsave_time_sec:0

rdb_current_bgsave_time_sec:-1

aof_enabled:1

aof_rewrite_in_progress:0

aof_rewrite_scheduled:0

aof_last_rewrite_time_sec:0

aof_current_rewrite_time_sec:-1

aof_last_bgrewrite_status:ok

aof_last_write_status:ok

aof_current_size:0

aof_base_size:0

aof_pending_rewrite:0

aof_buffer_length:0

aof_rewrite_buffer_length:0

aof_pending_bio_fsync:0

aof_delayed_fsync:0

# Stats

total_connections_received:7

total_commands_processed:27672

instantaneous_ops_per_sec:0

total_net_input_bytes:972181

total_net_output_bytes:26092395

instantaneous_input_kbps:0.00

instantaneous_output_kbps:0.05

rejected_connections:0

sync_full:1

sync_partial_ok:0

sync_partial_err:0

expired_keys:0

evicted_keys:0

keyspace_hits:0

keyspace_misses:0

pubsub_channels:0

pubsub_patterns:0

latest_fork_usec:219

migrate_cached_sockets:0

# Replication

role:slave

master_host:192.168.8.150

master_port:7003

master_link_status:up

master_last_io_seconds_ago:2

master_sync_in_progress:0

slave_repl_offset:104232

slave_priority:100

slave_read_only:1

connected_slaves:0

master_repl_offset:0

repl_backlog_active:0

repl_backlog_size:1048576

repl_backlog_first_byte_offset:2

repl_backlog_histlen:31416

# CPU

used_cpu_sys:184.04

used_cpu_user:29.15

used_cpu_sys_children:0.00

used_cpu_user_children:0.00

# Cluster

cluster_enabled:1

# Keyspace

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章