我有4个节点,3个是主节点,其中1个是从节点。我试图通过(error) CLUSTERDOWN The cluster is down
添加一个简单的字符串,但每当我这样做时,我都会收到此错误:
127.0.0.1:7000cluster info
cluster_state:fail
cluster_slots_assigned:11
cluster_slots_ok:11
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:4
cluster_size:3
cluster_current_epoch:3
cluster_my_epoch:3
cluster_stats_messages_sent:9262
cluster_stats_messages_received:9160
以下是我的群集信息
87982f22cf8fb12c1247a74a2c26cdd1b84a3b88 192.168.2.32:7000 slave bc1c56ef4598fb4ef9d26c804c5fabd462415f71 1492000375488 1492000374508 3 connected
9527ba919a8dcfaeb33d25ef805e0f679276dc8d 192.168.2.35:7000 master - 1492000375488 1492000374508 2 connected 16380
ff999fd6cbe0e843d1a49f7bbac1cb759c3a2d47 192.168.2.33:7000 master - 1492000375488 1492000374508 0 connected 16381
bc1c56ef4598fb4ef9d26c804c5fabd462415f71 127.0.0.1:7000 myself,master - 0 0 3 connected 1-8 16383
我正在使用 Redis-x64-3.0.503 。请让我知道如何解决这个问题
群集节点:
<script>
export default {
/*
Fuentes:
camera
https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-camera/index.html#takePicture
qrscanner
https://github.com/bitpay/cordova-plugin-qrscanner#prepare
*/
mounted () {
this.prepDevice()
},
data () {
return {
imageURI: '',
authorized: false,
selection: 'standard',
selectOptions: [
{
label: 'Camera-thumbnail',
value: 'camera-thmb'
},
{
label: 'Standard',
value: 'standard'
}
],
enableVisibility: 'hidden',
backColor: 'transparent'
}
},
methods: {
prepDevice () {
QRScanner.prepare(this.onDone)
},
onDone: function (err, status) {
if(err) {
alert("preparing: error code = " + err.code)
}
if(status.authorized) {
this.authorized = true
} else if (status.denied || !status.authorized) {
this.openSettings()
} else {
//No se obtuvo permiso
}
},
goScan: function () {
//--->>> Funciona pero el escaneo es a ciegas (vista en negro) <<<---
this.authorized = false
QRScanner.show()
/*
var html = document.getElementsByTagName("*")
for (var i=0; i<html.length; i++) {
html[i].style.backgroundColor = "transparent"
}
*/
//QRScanner.enableLight()
QRScanner.scan(this.displayContents)
},
displayContents: function (err, text) {
if(err){
alert("scanning: error code = " + err.code)
if(err.name === 'SCAN_CANCELED') {
alert("The scan was canceled before a QR code was found.")
}
} else {
alert(text)
}
//QRScanner.hide()
//QRScanner.disableLight()
QRScanner.destroy() // hide, cancelScan...
this.authorized = true
},
cancelScan() {
QRScanner.cancelScan()
this.authorized = true
},
openSettings() {
if(status.canOpenSettings){
if(confirm("Would you like to enable QR code scanning? You can allow camera access in your settings.")){
QRScanner.openSettings();
}
}
}
}
}
答案 0 :(得分:5)
只是加上并简化@neuront所说的内容。
Redis将数据存储在哈希槽中。为此,您需要了解Hasmaps或Hashtables的工作原理。对于我们的参考,redis有一个16384个槽的常量,用于分配和分发给所有主服务器。
现在,如果我们查看您发布的节点配置并使用redis documentation引用它,您会看到结束数字表示分配给主设备的插槽。
在你的情况下,这就是它的样子
... slave ... connected
... master ... connected 16380
... master ... connected 16381
... master ... connected 1-8 16380
因此,所有计算机都连接在一起形成集群,但并非所有散列插槽都分配用于存储信息。应该是这样的
... slave ... connected
... master ... connected 1-5461
... master ... connected 5462-10922
... master ... connected 10923-16384
你知道,现在我们正在分配所有散列槽的范围,如文档所述
slot:
哈希槽号或范围。从参数编号9开始,但总共可能有多达16384个条目(从未达到限制)。这是此节点提供的散列槽列表。如果条目只是一个数字,则解析为这样。如果它是一个范围,则它的形式为start-end,表示该节点负责从头到尾的所有哈希槽,包括起始值和结束值。
特别是在您的情况下,当您使用密钥 foo 存储某些数据时,它必须已分配给未在群集中注册的其他插槽。
由于您使用的是Windows,因此您必须手动设置分发。为此,你必须做这样的事情(这是在Linux中,转换为Windows命令)
for slot in {0..5400}; do redis-cli -h master1 -p 6379 CLUSTER ADDSLOTS $slot; done;
取自article
希望它有所帮助。
答案 1 :(得分:3)
只分配了11个插槽,因此您的群集已关闭,就像消息告诉您的那样。这些广告位在16380
192.168.2.35:7000
,16381
为192.168.2.33:7000
,1-8 16383
为127.0.0.1:7000
。
直接原因是你需要将所有16384个插槽(0-16383
)分配给集群,但我认为这是由配置错误引起的。
您的节点具有本地主机地址127.0.0.1:7000
。但是,192.168.2.33:7000
也是127.0.0.1:7000
,而192.168.2.35:7000
也是127.0.0.1:7000
。这个localhost地址问题使得一个节点无法从另一个节点告诉自己,我认为这会引起混乱。
我建议您按cluster reset
命令重置所有节点,然后重新创建群集,并确保这次使用的是192.168.*.*
地址。
答案 2 :(得分:1)
@ user1829319以下是添加插槽的等效窗口:
for /l %s in (0, 1, 8191) do redis-cli -h 127.0.0.1 -p 6379 CLUSTER ADDSLOTS %s
for /l %s in (8192, 1, 16383) do redis-cli -h 127.0.0.1 -p 6380 CLUSTER ADDSLOTS %s
答案 3 :(得分:0)
您应该通过全部刷新并重置集群来重新创建集群,在下一个集群设置中,请确保您已确认所有插槽均已分配给主服务器,或者未使用>集群插槽