java redis 多节点,Redis单机多节点集群部署,超简单
1、在虛擬機中部署具有三個主節點,三個從節點的集群(注,必須要有從節點),虛擬機的IP地址為192.168.133.129,三個主節點的部口號分別為7001(從:7004)、7002(從:7005)、7003(從:7006)。
2、安裝Redis,教程網上都有。這里我們已經準備好的Redis二進制安裝文件,放在/opt/modules/redis/bin目錄下。再在redis目錄下新建data、log、conf三個目錄。分別存放集群數據、日志和配置文件。
3、節點1的配置文件(conf/redis-7001.conf)如下:# 以守護進程方式啟動
daemonize yes
# 指定進程文件路徑,注意其它節點要有相應的變動,把7001變成對應的端口號
pidfile "/opt/modules/redis/run/redis-7001.pid"
# 指定節點的端口
port 7001
# 指定節點的日志文件
logfile "/opt/modules/redis/log/redis-7001.log"
# 指定節點的數據文件
dbfilename "dump-7001.rdb"
# 指定集群的數據目錄
dir "/opt/modules/redis/data"
# 啟用集群
cluster-enabled yes
# 集群文件名稱,這個文件會有Redis自動生成并放在data目錄下
cluster-config-file nodes-7001.conf
# 集群節點超時時間
cluster-node-timeout 10000
# 下面兩行為了設置節點的密碼,以便可以遠程訪問
masterauth 123456
requirepass 123456
# 綁定IP地址,如果不寫黙認綁定127.0.0.1,遠程就無法訪問
bind 192.168.133.129
其它節點的配置文件直接復制7001節點的配置文件并將7001改成對應的值(7002-7006),配置文件名稱也是redis-7002/7006.conf。放在conf目錄下。
4、上面完成之后,這里我寫了一個腳本,啟動這6個節點,注意這個腳本要放在redis目錄下,由于腳本中的命令寫的是相對路徑,所以放在redis目錄下,也就是與bin目錄同級。腳本文件內容如下:$>pwd
$>/opt/modules/redis
$>cat start.sh
bin/redis-server conf/redis-7001.conf
bin/redis-server conf/redis-7002.conf
bin/redis-server conf/redis-7003.conf
bin/redis-server conf/redis-7004.conf
bin/redis-server conf/redis-7005.conf
bin/redis-server conf/redis-7006.conf
$>sudo chmod +x start.sh
5、再寫一個停止6個節點的腳本文件,也放在redis目錄下。文件名稱為stop.sh$> stop.sh
bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 shutdown
bin/redis-cli -h 192.168.133.129 -p 7002 -a 123456 shutdown
bin/redis-cli -h 192.168.133.129 -p 7003 -a 123456 shutdown
bin/redis-cli -h 192.168.133.129 -p 7004 -a 123456 shutdown
bin/redis-cli -h 192.168.133.129 -p 7005 -a 123456 shutdown
bin/redis-cli -h 192.168.133.129 -p 7006 -a 123456 shutdown
$> chmod +x stop.sh
6、運行start.sh啟動6個節點:$> cd /opt/modules/redis
$> sudo ./start.sh
7、好了,現在每個節點都啟動起來了,可以用以下命令查看集群狀態:$> bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster nodes
注意,這個命令只顯示了7001節點是master節點,同樣查看7002-7006,都是獨立的master主節點。
8、上面的節點都是獨立的,現在讓它們組成集群,相互發現自己,注意這個操作只需要操作一遍,redis會自己保存集群的配置文件,也就是在節點配置文件中指定的集群配置文件的名稱。集群發現腳本如下,文件名為meet.sh,也放在redis目錄下:$> cat meet.sh
bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster meet 192.168.133.129 7002
bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster meet 192.168.133.129 7003
bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster meet 192.168.133.129 7004
bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster meet 192.168.133.129 7005
bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster meet 192.168.133.129 7006
解釋:上面第一句命令讓7001節點發現了7002節點,這樣7001、7002就組成了一個集群,再讓7001發現7003,由于7001已經在一個集群中了,所以7003就加入到集群中,這個過程,你也可以用7002節點去發現7003道理一樣。
好了,現在再執行$> bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster nodes
這條命令就會顯示6個master節點。
8、為主節點分配slots,注意:現在主從節點還沒有分別,我們只是人為定義7001、7002、7003這三個節點為主節點,分配槽的腳本如下:$> cat slot.sh
for i in {0..5400};do bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster addslots $i; done
for i in {5401..11000};do bin/redis-cli -h 192.168.133.129 -p 7002 -a 123456 cluster addslots $i; done
for i in {11001..16383};do bin/redis-cli -h 192.168.133.129 -p 7003 -a 123456 cluster addslots $i; done
注意:槽數量一定,一共有16384個槽,編號為0..16383,上述命令平均分配三個節點。
9、現在所有的節點都是主節點,現在要將7004、7005、7006這三個節點指定為7001、7002、7003的從節點。命令如下:$> cd /opt/modules/redis
$> bin/redis-cli -h 192.168.133.129 -p 7004 -a 123456 cluster replicate 89bd19f86c9eaa04f6b9aa8e1813a5bfe379c5f2
$> bin/redis-cli -h 192.168.133.129 -p 7005 -a 123456 cluster replicate 08db1cecd4770dd1c086b3cf8c34acb457bb0ebc
$> bin/redis-cli -h 192.168.133.129 -p 7006 -a 123456 cluster replicate 7e618dc71117821d2cbfb908c7a07460a1a286fd
上述命令中的89bd19f86c9eaa04f6b9aa8e1813a5bfe379c5f2是7001節點的ID,08db1cecd4770dd1c086b3cf8c34acb457bb0ebc是7002節點的ID,7e618dc71117821d2cbfb908c7a07460a1a286fd是7003節點的ID。這個ID可以使用命令查看:$> bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster nodes
7e618dc71117821d2cbfb908c7a07460a1a286fd 192.168.133.129:7003@17003 master - 0 1555847474000 5 connected 11001-16383
f3b669f5654eddb5b782bf72bf390dc702b9e201 192.168.133.129:7006@17006 slave 7e618dc71117821d2cbfb908c7a07460a1a286fd 0 1555847475087 5 connected
7196289749e68d25fe77f3e66c44becbe37cc791 192.168.133.129:7005@17005 slave 08db1cecd4770dd1c086b3cf8c34acb457bb0ebc 0 1555847472037 4 connected
89bd19f86c9eaa04f6b9aa8e1813a5bfe379c5f2 192.168.133.129:7001@17001 myself,master - 0 1555847471000 1 connected 0-5400
cb015faba5d1ead01787173998d56852935a19b2 192.168.133.129:7004@17004 slave 89bd19f86c9eaa04f6b9aa8e1813a5bfe379c5f2 0 1555847473048 2 connected
08db1cecd4770dd1c086b3cf8c34acb457bb0ebc 192.168.133.129:7002@17002 master - 0 1555847474077 3 connected 5401-11000
從節點分配好后,如以上命令所示。注意分配置從節點時,這個節點上必須沒有被分配任何一個槽,并且節點中沒有數據。
10、這個集群就分配好了,可以使用./stop.sh停止,這6個節點,再用./start.sh啟動這6個節點,再用$> bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 cluster nodes
這個命令查看,集群狀態是對的。redis會自動保存集群的狀態。
11、你可以停止7001主節點,發現7004的狀態由slave狀態變成master狀態。$> bin/redis-cli -h 192.168.133.129 -p 7001 -a 123456 shudown
$> bin/redis-cli -h 192.168.133.129 -p 7002 -a 123456 cluster nodes
89bd19f86c9eaa04f6b9aa8e1813a5bfe379c5f2 192.168.133.129:7001@17001 master,fail - 1555848004665 1555848000000 1 disconnected
f3b669f5654eddb5b782bf72bf390dc702b9e201 192.168.133.129:7006@17006 slave 7e618dc71117821d2cbfb908c7a07460a1a286fd 0 1555848029000 5 connected
cb015faba5d1ead01787173998d56852935a19b2 192.168.133.129:7004@17004 master - 0 1555848031010 6 connected 0-5400
08db1cecd4770dd1c086b3cf8c34acb457bb0ebc 192.168.133.129:7002@17002 myself,master - 0 1555848029000 3 connected 5401-11000
7196289749e68d25fe77f3e66c44becbe37cc791 192.168.133.129:7005@17005 slave 08db1cecd4770dd1c086b3cf8c34acb457bb0ebc 0 1555848030000 4 connected
7e618dc71117821d2cbfb908c7a07460a1a286fd 192.168.133.129:7003@17003 master - 0 1555848030000 5 connected 11001-16383
現在可以看到7004已經成為主節點了,下次再將7001啟動起來,7001會自動成為7004的從節點。
12、設置數據:$> bin/redis-cli -h 192.168.133.129 -p 7002 -a 123456 set foo 1
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
(error) MOVED 12182 192.168.133.129:7003
在7002節點上將foo鍵設置為1時,報了一個錯,(error) MOVED 12182 192.168.133.129:7003。注意,這是正常,Redis告訴你,這個foo鍵的hash槽在7003節點中,不在7002節點中,你應該在7003節點設置foo這個鍵的值。
如果使用redis desktop manager連接redis集群,如果連接了7002,再設置set foo 1時,會自動切換到7003節點的連接,將設置成功。
如果使用Java的Jedis連接集群也是有專門的配置方式,在設置一個鍵時,如果槽不在這個節點上,Redis會給出反饋,客戶端會自動切換到對應節點上再設置。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的java redis 多节点,Redis单机多节点集群部署,超简单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器新手装备无限拿指令,【新手指南】服
- 下一篇: mysql快速删除大表数据部分数据_my