由於工做環境中有redis,因此對redis進行了學習,固然首先就是從搭建環境開始,下面是我對於搭建redis環境的記錄。node
系統是SuSE 11 sp2,linux
軟件環境以下所示:redis
linux-svnfile:/home/apps/redis # lsruby
redis-3.0.0.gem ruby-1.9.2-p290.tar.gz zlib-1.2.7.tar.gzapp
redis-3.0.0.tar.gz rubygems-2.4.6.tgzide
redis.conf zlib-1.2.6.tar.gzsvn
安裝基礎環境:學習
linux-svnfile:/home/apps/redis # tar -zxf zlib-1.2.6.tar.gz -C /usr/local/srcspa
linux-svnfile:/usr/local/src/zlib-1.2.6 # ./configure --prefix=/usr/local/zlibserver
linux-svnfile:/usr/local/src/zlib-1.2.6 # make && make install
linux-svnfile:/home/apps/redis # tar -zxf ruby-1.9.2-p290.tar.gz -C /usr/local/src
linux-svnfile:/usr/local/src/ruby-1.9.2-p290 # ./configure --prefix=/usr/local/ruby
linux-svnfile:/usr/local/src/ruby-1.9.2-p290 # make && make install
linux-svnfile:/usr/local/ruby # ln -s /usr/local/ruby/bin/ruby /usr/local/bin
linux-svnfile:/home/apps/redis # tar xf rubygems-2.4.6.tgz -C /usr/local/src
linux-svnfile:/usr/local/src # mv rubygems-2.4.6 ../gem
linux-svnfile:/usr/local/gem # ruby setup.rb
linux-svnfile:/usr/local/gem # cp bin/gem /usr/local/bin/
linux-svnfile:/home/apps/redis # gem install -l redis-3.0.0.gem
Successfully installed redis-3.0.0
Installing ri documentation for redis-3.0.0
Done installing documentation for redis after 0 seconds
1 gem installed
linux-svnfile:/home/apps/redis # tar -zxf redis-3.0.0.tar.gz -C /usr/local/src
linux-svnfile:/usr/local/src # mv redis-3.0.0 ../redis
linux-svnfile:/usr/local/redis # make
至此基礎環境搭建完成
下面進行集羣的搭建
linux-svnfile:/usr/local/redis # cp src/redis-server /usr/local/bin/
linux-svnfile:/usr/local/redis # cp src/redis-cli /usr/local/bin/
linux-svnfile:/usr/local/redis # cp src/redis-trib.rb /usr/local/bin
linux-svnfile:/usr/local/redis # mkdir -p /usr/local/cluster/{7000..7005}
linux-svnfile:/usr/local/redis # vi redis.conf
daemonize yes
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
linux-svnfile:/usr/local/redis # cp redis.conf ../cluster/7000
linux-svnfile:/usr/local/redis # cp redis.conf ../cluster/7001
linux-svnfile:/usr/local/redis # cp redis.conf ../cluster/7002
linux-svnfile:/usr/local/redis # cp redis.conf ../cluster/7003
linux-svnfile:/usr/local/redis # cp redis.conf ../cluster/7004
linux-svnfile:/usr/local/redis # cp redis.conf ../cluster/7005
這裏須要注意的是文件名對應文件裏端口的配置,例如7001文件下的port參數須要改成7001,其餘同樣作修改。
linux-svnfile:/usr/local/redis # redis-server ../cluster/7000/redis.conf
linux-svnfile:/usr/local/redis # redis-server ../cluster/7001/redis.conf
linux-svnfile:/usr/local/redis # redis-server ../cluster/7002/redis.conf
linux-svnfile:/usr/local/redis # redis-server ../cluster/7003/redis.conf
linux-svnfile:/usr/local/redis # redis-server ../cluster/7004/redis.conf
linux-svnfile:/usr/local/redis # redis-server ../cluster/7005/redis.conf
linux-svnfile:/usr/local/redis # ps -ef | grep redis
root 15590 1 0 18:52 ? 00:00:00 redis-server *:7000 [cluster]
linux-svnfile:/usr/local/redis # 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
>>> Creating cluster
Connecting to node 127.0.0.1:7000: OK
Connecting to node 127.0.0.1:7001: [ERR] Sorry, can't connect to node 127.0.0.1:7001
You have new mail in /var/mail/root
linux-svnfile:/usr/local/cluster/7000 # redis-server redis.conf
linux-svnfile:/usr/local/cluster/7000 # cd ../7001
linux-svnfile:/usr/local/cluster/7001 # redis-server redis.conf
linux-svnfile:/usr/local/cluster/7001 # cd ../7002
linux-svnfile:/usr/local/cluster/7002 # redis-server redis.conf
linux-svnfile:/usr/local/cluster/7002 # cd ../7003
linux-svnfile:/usr/local/cluster/7003 # redis-server redis.conf
linux-svnfile:/usr/local/cluster/7003 # cd ../7004
linux-svnfile:/usr/local/cluster/7004 # redis-server redis.conf
linux-svnfile:/usr/local/cluster/7004 # cd ../7005
linux-svnfile:/usr/local/cluster/7005 # redis-server redis.conf
linux-svnfile:/usr/local/cluster/7005 # ps -ef | grep redis
root 17575 1 0 20:05 ? 00:00:00 redis-server *:7000 [cluster]
root 17590 1 0 20:06 ? 00:00:00 redis-server *:7001 [cluster]
root 17604 1 0 20:06 ? 00:00:00 redis-server *:7002 [cluster]
root 17612 1 0 20:06 ? 00:00:00 redis-server *:7003 [cluster]
root 17616 1 0 20:06 ? 00:00:00 redis-server *:7004 [cluster]
root 17624 1 0 20:06 ? 00:00:00 redis-server *:7005 [cluster]
像是上面在啓動服務時須要注意切換到相應的配置文件的目錄下,否則相應端口的服務沒法啓動,例如我以前在/usr/local/redis目錄下啓動後只有7000對應的服務啓動了。
linux-svnfile:/usr/local/redis # redis-server ../cluster/7000/redis.conf
linux-svnfile:/usr/local/redis # redis-server ../cluster/7001/redis.conf
linux-svnfile:/usr/local/redis # redis-server ../cluster/7002/redis.conf
linux-svnfile:/usr/local/redis # redis-server ../cluster/7003/redis.conf
linux-svnfile:/usr/local/redis # redis-server ../cluster/7004/redis.conf
linux-svnfile:/usr/local/redis # redis-server ../cluster/7005/redis.conf
linux-svnfile:/usr/local/redis # ps -ef | grep redis
root 15144 19064 0 18:37 pts/0 00:00:00 vi redis.conf
root 15590 1 0 18:52 ? 00:00:00 redis-server *:7000 [cluster]
root 15616 19443 0 18:52 pts/1 00:00:00 grep redis
linux-svnfile:/usr/local/cluster #redis-cli -p 7000
127.0.0.1:7000>
刪除slave節點
刪除master節點
linux-svnfile:/usr/local/redis # redis-trib.rb reshard 127.0.0.1:7001
How many slots do you want to move (from 1 to 16384)? 5461
What is the receiving node ID? 42929649e533ec8aad7cbb81f204f04c849d4bff
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1: 6fe9561e605b7ee85e67a2557f7fb641f482afb4
Source node #2:done
#Do you want to proceed with the proposed reshard plan (yes/no)? yes
說明:
5461表示要刪除master全部的slot數量
What is the receiving node ID是指將7000的slot遷移的節點7001的node-id
Source node #1是指要刪除的master的node-id
下面能夠看到7000的slot爲0,而7001多了4561
在刪除master節點出現以下面所示的錯誤,是由於刪除master節點以前沒有刪除master節點的slave節點。
上面是在單臺機器上作的集羣,下面展現兩臺機器上作集羣,其實也很簡單。
參考以前的環境編譯源碼到另外一臺機器
在兩臺機器上編輯配置文件
/usr/local/redis # vi redis.conf
daemonize yes
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
cluster-config-file nodes-7001.conf
分別建立目錄和文件
linux-svnfile:/usr/local/redis # mkdir -p/usr/local/cluster/{7001..7003}
localhost:/usr/local/redis # mkdir -p/usr/local/cluster/{8001..8003}
linux-svnfile:/usr/local/redis # cpredis.conf ../cluster/7001
linux-svnfile:/usr/local/redis # cpredis.conf ../cluster/7002
linux-svnfile:/usr/local/redis # cpredis.conf ../cluster/7003
localhost:/usr/local/redis # cp redis.conf../cluster/8001
localhost:/usr/local/redis # cp redis.conf../cluster/8002
localhost:/usr/local/redis # cp redis.conf../cluster/8003
修改對應目錄的配置文件其中port 和cluster-config-file分別對應各自的目錄名,可以使用sed命令作修改
sed -i "s/7001/7002/g"
啓動服務