docker redis集群实验

集群redis

分片+高可用+负载均衡
master + slave{1..5}
一个挂了另一个顶上

通过脚本创建6个redis配置文件

[root@docker ~]# for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf 
cat << q >> /mydata/redis/node-${port}/conf/redis.conf 
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
q
done

启动一个redis

[root@docker conf]# docker run -p 6371:6379 -p 16371:16379 --name redis-1 \
-v /mydata/redis/node-1/data:/data \
-v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf \
-d --net redis  --ip 172.38.0.11  redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
以 /etc/redis/redis.conf 来启动redis服务
--net  redis  选择网络

批量启动redis

for i in {1..6} ;do  docker run -p 637$i:6379 -p 1637$i:16379 --name redis-$i -v /mydata/redis/node-$i/data:/data -v /mydata/redis/node-$i/conf/redis.conf:/etc/redis/redis.conf -d  --net redis --ip 172.38.0.1$i redis:5.0.9-alpine3.11 redis-server  /etc/redis/redis.conf ; done 

创建redis集群

redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379  172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 
1

验证

/data # redis-cli -c 
127.0.0.1:6379> clsuter info
(error) ERR unknown command `clsuter`, with args beginning with: `info`, 
127.0.0.1:6379> exit
/data # redis-cli -c 
127.0.0.1:6379> 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:283
cluster_stats_messages_pong_sent:294
cluster_stats_messages_sent:577
cluster_stats_messages_ping_received:289
cluster_stats_messages_pong_received:283
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:577
127.0.0.1:6379> 

127.0.0.1:6379> cluster nodes
9a3bbcb6cd3d7c555b0886e20368df91f7f8c96c 172.38.0.16:6379@16379 slave 074da9020b3d431954cd7b81d71a881cd4d7106b 0 1650438206794 6 connected
49bbcd6f20728d64bb293600255d96cf24118a09 172.38.0.14:6379@16379 slave 944f529cd648695a3825824bc7cf09c9da2019d9 0 1650438205565 4 connected
074da9020b3d431954cd7b81d71a881cd4d7106b 172.38.0.12:6379@16379 master - 0 1650438205000 2 connected 5461-10922
3bd739fea2aa2e030a814025b54038d20226d9f8 172.38.0.11:6379@16379 myself,master - 0 1650438205000 1 connected 0-5460
ea8a9ac6cb3caf946726913467c5b39e909bc5d2 172.38.0.15:6379@16379 slave 3bd739fea2aa2e030a814025b54038d20226d9f8 0 1650438206588 5 connected
944f529cd648695a3825824bc7cf09c9da2019d9 172.38.0.13:6379@16379 master - 0 1650438206000 3 connected 10923-16383
127.0.0.1:6379> 

设置一个值

127.0.0.1:6379> set a b
-> Redirected to slot [15495] located at 172.38.0.13:6379
OK
172.38.0.13:6379> 

可以发现redis将a存在redis-3
将容器redis-3 干掉

[root@docker ~]# docker stop redis-3
redis-3

重新进redis发现数据并未丢失

/data # redis-cli -c 
127.0.0.1:6379> get a
-> Redirected to slot [15495] located at 172.38.0.14:6379
"b"
172.38.0.14:6379> 

集群创建成功

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。 [1]
Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。
redis的官网地址,非常好记,是redis.io。(域名后缀io属于国家域名,是british Indian Ocean territory,即英属印度洋领地),Vmware在资助着redis项目的开发和维护。
从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助

cluster-replicas 1:表示希望为集群中的每个主节点创建一个从节点 (一主一从)。

posted @ 2022-04-20 15:16  supermao12  阅读(138)  评论(0编辑  收藏  举报