redis集群配置

redis集群安装配置

1.redis集群从3.0开始支持,要让集群正常工作至少需要3个主节点。
集群中任何一个实例都可以读写数据,集群中的节点超过半数失败
整个集群就不可用,使用haproxy或者lvs实现负载均衡以及后端健康检测

2.安装

tar xf redis-3.0.2.tar.gz
cd redis-3.0.2
make
make PREFIX=/usr/local/redis install
mkdir /usr/local/redis/etc
mkdir /usr/local/redis/var
mkdir /usr/local/redis/var2
cp redis.conf /usr/local/redis/etc cp src/redis-trib.rb /usr/local/redis/bin/

3.配置集群(3台机器每台启动两个实例)(不支持设置密码认证)

mv /usr/local/redis/etc/redis.conf /usr/local/redis/etc/redis.conf.ori
cat >>/usr/local/redis/etc/redis_6379.conf<<EOF
daemonize yes
bind 192.168.1.221
port 6379
timeout 300
loglevel notice
logfile "/usr/local/redis/var/redis.log"
databases 16
dbfilename dump.rdb
dir "/usr/local/redis/var"
maxclients 10000 
maxmemory 1024MB

#开启日志记录,相当于MySQL的binlog

appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

#集群配置

cluster-enabled yes

#不需要创建集群自动更新

cluster-config-file nodes_6379.conf
cluster-node-timeout 5000
EOF
cat >>/usr/local/redis/etc/redis_6380.conf<<EOF
daemonize yes
bind 192.168.1.221
port 6380
timeout 300
loglevel notice
logfile "/usr/local/redis/var2/redis.log"
databases 16
dbfilename dump.rdb
dir "/usr/local/redis/var2"
#requirepass 123456
#masterauth 123456
maxclients 10000 
maxmemory 1024MB
#开启日志记录,相当于MySQL的binlog
appendonly yes 
appendfilename "appendonly.aof" 
appendfsync everysec
EOF

#集群配置

cluster-enabled yes

#不需要创建集群自动更新

cluster-config-file nodes_6380.conf
cluster-node-timeout 5000
EOF

4.启动集群中的实例

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis_6379.conf
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis_6380.conf

#查看启动情况

ps -ef|grep redis

#连接测试

/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 quit
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6380 quit
/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6379 quit
/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6380 quit
/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6379 quit
/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6380 quit

#停止服务

/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 shutdown
/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6380 shutdown
/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6379 shutdown
/usr/local/redis/bin/redis-cli -h 192.168.1.222 -p 6380 shutdown
/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6379 shutdown
/usr/local/redis/bin/redis-cli -h 192.168.1.223 -p 6380 shutdown

5.创建集群
#安装ruby环境

yum install -y ruby rubygems
gem install redis

#创建集群

/usr/local/redis/bin/redis-trib.rb create --replicas 1 192.168.1.221:6379 192.168.1.221:6380 192.168.1.222:6379 192.168.1.222:6380 192.168.1.223:6379 192.168.1.223:6380

#输入yes,则创建成功,系统会自动匹配主机,从机。

#--replicas 1 手动可以自己添加从节点
#代表为每个主节点创建1个从节点,在商用环境下,比如30台机器,可以配置为3,每个主节点有3个从。

6.集群管理
1.查看集群中机器ID,主从,及hash槽情况,可以查看集群中机器的情况

/usr/local/redis/bin/redis-trib.rb check 192.168.1.221:6379 

2.对数据重新分片:

/usr/local/redis/bin/redis-trib.rb reshard 192.168.1.221:6379 

3.列出集群中的所有主节点

/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 cluster nodes | grep master

4.让某个主节点崩溃,测试故障转移

/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 debug segfault

5.增加主节点到集群

/usr/local/redis/bin/redis-trib.rb add-node 192.168.1.221:6381 192.168.1.221:6379

#192.168.1.222:6381是新节点,192.168.1.221:6379是一个已在集群中的节点
#需要注意的是此时新节点不能成为真正的主节点,需要进行重新分片才可以

/usr/local/redis/bin/redis-trib.rb reshard 192.168.1.221:6381

1).自动分片程序会询问移动几个hash槽,如果要保证数据的均匀,此时应该是16384/N,

N代表包括当前主机的所有希望成为主节点的数量。
2).然后会询问移动到哪个节点,输入新的主节点的id即可。
3).会询问从哪些节点移动数据,此时可以选择某些节点的ID,也可以直接选择all,从所有主节点,这样数据就会均分。

6.增加从节点到集群

/usr/local/redis/bin/redis-trib.rb add-node --slave 192.168.1.222:6381 192.168.1.221:6379

#此时没有指定从从节点的主节点,一般会自动选择一个,也可以指定主节点,如下:

/usr/local/redis/bin/redis-trib.rb add-node --slave --master-id 6b45acde96e4225856c8652070e8c8edeec00c79 192.168.1.223:6381 192.168.1.221:6379

#192.168.1.222:6381新加的节点
#192.168.1.221:6379已在集群中的节点

7.删除一个节点(删除后redis实例会被关闭)
1).从节点删除:d598f4cf29cc4fea3616a00a0e707f71a7777cf1是指被删除的redis的ID

/usr/local/redis/bin/redis-trib.rb del-node 192.168.1.223:6381 56cfd4a0d4631fdf046c20caac7e5f1a0fce3b39

2).主节点删除,此时应该确保主节点数据为空,如果不为空,需要将该节点的数据重新分片到其他节点上

/usr/local/redis/bin/redis-trib.rb reshard 192.168.1.223:6381 

(被删除的主节点,先进行数据迁移,到其他主节点上)

/usr/local/redis/bin/redis-trib.rb del-node 192.168.1.223:6381 791b834b1a5292bba236956c076849bb45a0ff17

8.集群相关命令:通过redis-cli -c -p 的命令后进行查看

CLUSTER NODES :集群信息,包括了节点ID,主从关系

CLUSTER INFO:查看集群是否健康
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。

/usr/local/redis/bin/redis-cli -h 192.168.1.221 -p 6379 CLUSTER NODES

7.注意事项


集群注意点:集群中多于一半的集群挂了,整个集群将对外停止服务。
部署的时候,建议将主节点,设置为内存型,将从节点设置为固化存储型。
主机挂了,从机会自动选举成为主机。

原文地址:https://www.cnblogs.com/love19791125/p/5102182.html