5、Redis主從、集羣配置操作

Redis主從配置

爲了節省資源,我們可以在一臺機器上啓動兩個redis服務

  • 拷貝redis配置文件:

 cp /etc/redis.conf  /etc/redis2.conf

  • 編輯配置文件: 

vim /etc/redis2.conf //需要修改port,dir,pidfile,logfile

1.更改port

port 6379

2.更改pid:搜索“pidfile”

pidfile /var/run/redis_6380.pid

3.更改日誌文件:搜索“logfile”

logfile "/var/log/redis2.log"

4.更改dir:

dir /data/redis2_data/

5.還要增加一行,指定它的主是哪臺機器,搜“slaveof”在附近增加

 slaveof 127.0.0.1 6379

 6.如果主上設置了密碼,還需要增加

 masterauth aminglinux>com //設置主的密碼

7.創建redis的dir目錄:

mkdir /data/redis2_data/

 8.啓動redis2

 redis-server /etc/redis2.conf

 9.測試:在主上創建新的key,在從上查看

[root@awei-01 etc]# redis-cli -p 6380
127.0.0.1:6380> keys *
1) "list2"
2) "k2"
3) "set1"
4) "list1"
5) "awei"
6) "k3"
7) "k1"

 注意:redis主從和mysql主從不一樣,redis主從不用事先同步數據,它會自動同步過去

ps:從上配置文件還有一個參數,表明他只能讀不能寫

slave-read-only yes

不能寫

127.0.0.1:6380> set key1 awei
(error) READONLY You can't write against a read only slave.
127.0.0.1:6380>


Redis集羣

  • 多個redis節點網絡互聯,數據共享,當寫一個數據的時候,不會每個集羣節點上都有,而是隨機寫入某一個節點,是分散開來的

  •  所有的節點都是一主一從或一主多從,其中從不提供服務,僅作爲備用

  •  不支持同時處理多個鍵(如mset/mget),因爲redis需要把鍵均勻分佈在各個節點上,併發量很高的情況下同時創建鍵值會降低性能並導致不可預測的行爲。

分佈式的集羣,支持橫向擴展

  •  支持在線增加、刪除節點

  •  客戶端可以連任何一個主節點進行讀寫(例如我連1節點去讀2或者3節點上的東西,而且在寫的時候數據很有可能不存在你正在寫的節點上,可能在其他節點上)

image.png

Redis集羣配置

  • 場景設置:

 兩臺機器,分別開啓三個Redis服務(端口)

 A機器上三個端口7000,7002,7004,全部爲主

 B機器上三個端口7001,7003,7005,全部爲從

 兩臺機器上都要編譯安裝redis,然後編輯並複製3個不同的redis.conf,分別設置不同的端口號、dir等參數,還需要增加cluster相關參數,然後分別啓動6個redis服務

7000,7002,7004配置文件內容(ip,pid,dir等參數根據需要修改):

port 7000    
bind 192.168.133.130    
daemonize yes    
pidfile /var/run/redis_7000.pid    
dir /data/redis_data/7000    
cluster-enabled yes    
cluster-config-file nodes_7000.conf    
cluster-node-timeout 10100    
appendonly yes

7001,7003,7005配置文件內容(ip,pid,dir 等參數根據需要修改):

port 7001    
bind 192.168.133.132    
daemonize yes    
pidfile /var/run/redis_7001.pid    
dir /data/redis_data/7001    
cluster-enabled yes    
cluster-config-file nodes_7001.conf    
cluster-node-timeout 10100    
appendonly yes

創建dir目錄:mkdir -p /data/redis_data/{7001,7003,7005}

  • 安裝ruby2.2 (只需要一臺機器上運行)

源碼包搞成rpm包

下載依賴包:

 yum -y groupinstall "Development Tools"

 yum -y install gdbm-devel libdb4-devel libffi-devel libyaml libyaml-devel ncurses-devel openssl-devel readline-devel tcl-deve

 cd /root/

 mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

下載源碼包:

 wget http://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz -P rpmbuild/SOURCES

下載SPECS的文件(沒有他不能rpmbuild成rpm):

 wget https://raw.githubusercontent.com/tjinjin/automate-ruby-rpm/master/ruby22x.spec -P rpmbuild/SPECS

做成rpm包:

 rpmbuild -bb rpmbuild/SPECS/ruby22x.spec

安裝rpm包:

[root@awei-01 x86_64]# ls /root/rpmbuild/RPMS/x86_64
ruby-2.2.3-1.el7.x86_64.rpm  ruby-debuginfo-2.2.3-1.el7.x86_64.rpm

 yum -y localinstall rpmbuild/RPMS/x86_64/ruby-2.2.3-1.el7.centos.x86_64.rpm 

安裝成功後可以查看一下版本號

[root@awei-01 x86_64]# ruby -v
ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]

安裝這個redis

gem install redis

報錯:

[root@awei-01 x86_64]# gem install redis
ERROR:  Could not find a valid gem 'redis' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://api.rubygems.org/specs.4.8.gz)

可以手動安裝

下載:wget http://rubygems.org/downloads/redis-4.0.3.gem
安裝:gem install -l redis-4.0.3.gem


Redis集羣配置、操作

  • 把這個文件redis-trib.rb拷貝到bin目錄下,這樣就可以用這個命令了:

      cp /usr/local/src/redis-4.0.1/src/redis-trib.rb  /usr/bin/

  • 創建集羣(哪個ip在前邊哪個就是主節點)

redis-trib.rb create --replicas 1 192.168.18.128:7000 192.168.18.128:7002 192.168.18.128:7004 192.168.18.129:7001 192.168.18.129:7003 192.168.18.129:7005
[root@awei-01 ~]# redis-trib.rb create --replicas 1 192.168.18.128:7000 192.168.18.128:7002 192.168.18.128:7004 192.168.18.129:7001 192.168.18.129:7003 192.168.18.129:7005 
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.18.128:7000
192.168.18.129:7001
192.168.18.128:7002
Adding replica 192.168.18.129:7003 to 192.168.18.128:7000
Adding replica 192.168.18.128:7004 to 192.168.18.129:7001
Adding replica 192.168.18.129:7005 to 192.168.18.128:7002
M: f44a463ee0f58f96532188d18e9633542691204f 192.168.18.128:7000
   slots:0-5460 (5461 slots) master
M: 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 192.168.18.128:7002
   slots:10923-16383 (5461 slots) master
S: 9353c61afa1a0cc034448f53998c3a9005fb8c23 192.168.18.128:7004
   replicates b939c171774a5387545015931ca83e068e0e47ea
M: b939c171774a5387545015931ca83e068e0e47ea 192.168.18.129:7001
   slots:5461-10922 (5462 slots) master
S: a0f839b935c8cc4673596f54e8cf7bcf20731bb3 192.168.18.129:7003
   replicates f44a463ee0f58f96532188d18e9633542691204f
S: 2bcb7e1b74b29cd7fa38fe63c323a998bcf069a5 192.168.18.129:7005
   replicates 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c
Can I set the above configuration? (type 'yes' to accept): yes
>>> 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.18.128:7000)
M: f44a463ee0f58f96532188d18e9633542691204f 192.168.18.128:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: a0f839b935c8cc4673596f54e8cf7bcf20731bb3 192.168.18.129:7003
   slots: (0 slots) slave
   replicates f44a463ee0f58f96532188d18e9633542691204f
S: 9353c61afa1a0cc034448f53998c3a9005fb8c23 192.168.18.128:7004
   slots: (0 slots) slave
   replicates b939c171774a5387545015931ca83e068e0e47ea
M: b939c171774a5387545015931ca83e068e0e47ea 192.168.18.129:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 2bcb7e1b74b29cd7fa38fe63c323a998bcf069a5 192.168.18.129:7005
   slots: (0 slots) slave
   replicates 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c
M: 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 192.168.18.128:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
  • 登錄集羣: 

redis-cli -c -h 192.168.133.130 -p 7000//-c說明以集羣的方式登錄

  •  任意一個節點都可以創建key,或者查看key,並且創建的key值是隨機分佈到集羣機器上的

      例如:登錄的7000端口,創建key是在7001上面

192.168.18.128:7000> set key1 123
-> Redirected to slot [9189] located at 192.168.18.129:7001
OK
192.168.18.129:7001> set key2 aaa
-> Redirected to slot [4998] located at 192.168.18.128:7000
OK
192.168.18.128:7000> get key3
(nil)
192.168.18.128:7000> get key1
-> Redirected to slot [9189] located at 192.168.18.129:7001
"123"
192.168.18.129:7001> get key2
-> Redirected to slot [4998] located at 192.168.18.128:7000
"aaa"
  •  檢測集羣狀態(可以看哪個是主M哪個是從S)

      redis-trib.rb check  192.168.133.130:7000

[root@awei-01 ~]# redis-trib.rb check 192.168.18.128:7000
>>> Performing Cluster Check (using node 192.168.18.128:7000)
M: f44a463ee0f58f96532188d18e9633542691204f 192.168.18.128:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: a0f839b935c8cc4673596f54e8cf7bcf20731bb3 192.168.18.129:7003
   slots: (0 slots) slave
   replicates f44a463ee0f58f96532188d18e9633542691204f
S: 9353c61afa1a0cc034448f53998c3a9005fb8c23 192.168.18.128:7004
   slots: (0 slots) slave
   replicates b939c171774a5387545015931ca83e068e0e47ea
M: b939c171774a5387545015931ca83e068e0e47ea 192.168.18.129:7001
   slots:5461-10922 (5462 slots) master
   1 additional replica(s)
S: 2bcb7e1b74b29cd7fa38fe63c323a998bcf069a5 192.168.18.129:7005
   slots: (0 slots) slave
   replicates 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c
M: 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 192.168.18.128:7002
   slots:10923-16383 (5461 slots) master
   1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

 cluster nodes//列出節點

[root@awei-01 ~]# redis-cli -c -h 192.168.18.128 -p 7000
192.168.18.128:7000> cluster nodes
a0f839b935c8cc4673596f54e8cf7bcf20731bb3 192.168.18.129:7003@17003 slave f44a463ee0f58f96532188d18e9633542691204f 0 1602009851394 5 connected
9353c61afa1a0cc034448f53998c3a9005fb8c23 192.168.18.128:7004@17004 slave b939c171774a5387545015931ca83e068e0e47ea 0 1602009849381 4 connected
f44a463ee0f58f96532188d18e9633542691204f 192.168.18.128:7000@17000 myself,master - 0 1602009846000 1 connected 0-5460
b939c171774a5387545015931ca83e068e0e47ea 192.168.18.129:7001@17001 master - 0 1602009852401 4 connected 5461-10922
2bcb7e1b74b29cd7fa38fe63c323a998bcf069a5 192.168.18.129:7005@17005 slave 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 0 1602009850388 6 connected
4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 192.168.18.128:7002@17002 master - 0 1602009849079 2 connected 10923-16383
  •  查看集羣信息:cluster info

192.168.18.128:7000> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1144
cluster_stats_messages_pong_sent:1130
cluster_stats_messages_sent:2274
cluster_stats_messages_ping_received:1125
cluster_stats_messages_pong_received:1144
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:2274
  •  添加節點:cluster meet ip port (默認添加的都是主節點)

[root@awei-01 etc]# redis-cli -c -h 192.168.18.128 -p 7000
192.168.18.128:7000> cluster nodes
a0f839b935c8cc4673596f54e8cf7bcf20731bb3 192.168.18.129:7003@17003 slave f44a463ee0f58f96532188d18e9633542691204f 0 1602011304484 5 connected
9353c61afa1a0cc034448f53998c3a9005fb8c23 192.168.18.128:7004@17004 slave b939c171774a5387545015931ca83e068e0e47ea 0 1602011303577 4 connected
f44a463ee0f58f96532188d18e9633542691204f 192.168.18.128:7000@17000 myself,master - 0 1602011299000 1 connected 0-5460
b939c171774a5387545015931ca83e068e0e47ea 192.168.18.129:7001@17001 master - 0 1602011302472 4 connected 5461-10922
2bcb7e1b74b29cd7fa38fe63c323a998bcf069a5 192.168.18.129:7005@17005 slave 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 0 1602011303476 6 connected
4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 192.168.18.128:7002@17002 master - 0 1602011302000 2 connected 10923-16383
192.168.18.128:7000> 
192.168.18.128:7000> cluster meet 192.168.18.128 7006 ##添加7006節點
OK
192.168.18.128:7000> cluster nodes
a0f839b935c8cc4673596f54e8cf7bcf20731bb3 192.168.18.129:7003@17003 slave f44a463ee0f58f96532188d18e9633542691204f 0 1602011362881 5 connected
9353c61afa1a0cc034448f53998c3a9005fb8c23 192.168.18.128:7004@17004 slave b939c171774a5387545015931ca83e068e0e47ea 0 1602011366907 4 connected
a7665f2bdd5cde186a2ffe6d2ca63e4add27d5d5 192.168.18.128:7006@17006 master - 0 1602011365194 0 connected
f44a463ee0f58f96532188d18e9633542691204f 192.168.18.128:7000@17000 myself,master - 0 1602011365000 1 connected 0-5460
b939c171774a5387545015931ca83e068e0e47ea 192.168.18.129:7001@17001 master - 0 1602011366000 4 connected 5461-10922
2bcb7e1b74b29cd7fa38fe63c323a998bcf069a5 192.168.18.129:7005@17005 slave 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 0 1602011365899 6 connected
4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 192.168.18.128:7002@17002 master - 0 1602011364000 2 connected 10923-16383
  •  移除某個節點:cluster forget node_id

      ps:主節點是不能被刪除的,要想刪除主節點,可以先把主節點設置成從節點再刪除

192.168.18.128:7000> cluster forget a7665f2bdd5cde186a2ffe6d2ca63e4add27d5d5
OK
192.168.18.128:7000> cluster nodes
a0f839b935c8cc4673596f54e8cf7bcf20731bb3 192.168.18.129:7003@17003 slave f44a463ee0f58f96532188d18e9633542691204f 0 1602011564247 5 connected
9353c61afa1a0cc034448f53998c3a9005fb8c23 192.168.18.128:7004@17004 slave b939c171774a5387545015931ca83e068e0e47ea 0 1602011560000 4 connected
f44a463ee0f58f96532188d18e9633542691204f 192.168.18.128:7000@17000 myself,master - 0 1602011558000 1 connected 0-5460
b939c171774a5387545015931ca83e068e0e47ea 192.168.18.129:7001@17001 master - 0 1602011562000 4 connected 5461-10922
2bcb7e1b74b29cd7fa38fe63c323a998bcf069a5 192.168.18.129:7005@17005 slave 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 0 1602011562233 6 connected
4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 192.168.18.128:7002@17002 master - 0 1602011561226 2 connected 10923-16383
  •  cluster replicate node_id  將當前節點設置爲指定節點的從(先登錄到要設置節點裏)

[root@awei-01 etc]# redis-cli -c -h 192.168.18.128 -p 7006
192.168.18.128:7006> cluster replicate b939c171774a5387545015931ca83e068e0e47ea
OK
192.168.18.128:7006> cluster nodes
a7665f2bdd5cde186a2ffe6d2ca63e4add27d5d5 192.168.18.128:7006@17006 myself,slave b939c171774a5387545015931ca83e068e0e47ea 0 1602011506000 0 connected
9353c61afa1a0cc034448f53998c3a9005fb8c23 192.168.18.128:7004@17004 slave b939c171774a5387545015931ca83e068e0e47ea 0 1602011506254 4 connected
a0f839b935c8cc4673596f54e8cf7bcf20731bb3 192.168.18.129:7003@17003 slave f44a463ee0f58f96532188d18e9633542691204f 0 1602011507362 1 connected
4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 192.168.18.128:7002@17002 master - 0 1602011507261 2 connected 10923-16383
f44a463ee0f58f96532188d18e9633542691204f 192.168.18.128:7000@17000 master - 0 1602011505000 1 connected 0-5460
2bcb7e1b74b29cd7fa38fe63c323a998bcf069a5 192.168.18.129:7005@17005 slave 4957d8e74177bb3e60a32e4c0b8380f89ca60a0c 0 1602011508269 2 connected
b939c171774a5387545015931ca83e068e0e47ea 192.168.18.129:7001@17001 master - 0 1602011505249 4 connected 5461-10922

 cluster saveconfig//保存配置文件


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