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