赞
踩
主机ip | 作用 |
192.168.238.141 | 做rancher服务器 |
192.168.238.142 | 做k8s集群worker机器 |
服务名 | 容器内redis端口 | 容器内redis集群通信端口 | 映射主机 | 映射主机redis端口 | 映射主机redis集群通信端口 |
credis1 | 6379 | 16379 | 192.168.238.142 | 20301 | 30301 |
credis2 | 6379 | 16379 | 192.168.238.142 | 20302 | 30302 |
credis3 | 6379 | 16379 | 192.168.238.142 | 20303 | 30303 |
credis4 | 6379 | 16379 | 192.168.238.142 | 20304 | 30304 |
credis5 | 6379 | 16379 | 192.168.238.142 | 20305 | 30305 |
credis6 | 6379 | 16379 | 192.168.238.142 | 20306 | 30306 |
由于只有两台主机,一台用来部署rancher服务了,所以就把redis集群都放到192.168.238.142上了,如果有多台主机的话可以分开部署
服务名 | 容器内conf文件路径 | 容器内data文件路径 | 映射主机 | 主机conf文件路径 | 主机data文件路径 |
credis1 | /home/redis /redis.conf | /data/ | 192.168.238.142 | /home/cluster_redis /credis1.conf | /home/cluster_redis/credis1 |
credis2 | /home/redis /redis.conf | /data/ | 192.168.238.142 | /home/cluster_redis /credis2.conf | /home/cluster_redis/credis2 |
credis3 | /home/redis /redis.conf | /data/ | 192.168.238.142 | /home/cluster_redis /credis3.conf | /home/cluster_redis/credis3 |
credis4 | /home/redis /redis.conf | /data/ | 192.168.238.142 | /home/cluster_redis /credis4.conf | /home/cluster_redis/credis4 |
credis5 | /home/redis /redis.conf | /data/ | 192.168.238.142 | /home/cluster_redis /credis5.conf | /home/cluster_redis/credis5 |
credis6 | /home/redis /redis.conf | /data/ | 192.168.238.142 | /home/cluster_redis /credis6.conf | /home/cluster_redis/credis2 |
/home/cluster_redis
- port 6379 # redis容器内端口
-
-
- logfile "redis.log"
-
-
- dir /data # redis容器内数据文件夹
-
-
- appendonly yes
-
-
- appendfilename appendonly.aof
-
-
- cluster-enabled yes # 开启redis集群
-
-
- cluster-config-file nodes.conf # redis集群配置记录文件
-
-
- cluster-node-timeout 5000
-
-
- daemonize no # 是否后台运行,这里不能改成yes,不然docker运行就关闭了
-
-
- protected-mode no
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
这里各个redis的conf文件其实是一样的,我创建了6个一样的conf文件,在主机上可以只创一个,都用这一个conf也可以。
rancher搭建可以参考: https://blog.csdn.net/fengyuyeguirenenen/article/details/1244895
服务名为credis1,这里直接用Deployment部署无状态应用,没有用StatefulSet。
redis容器内要启动2个端口,一个是redis服务端口6379,一个是redis集群通信端口6379+10000即16379,然后分别映射到主机的20301和30301端口。
网络模式选择NodePort,这样在外部就可以通过主机的ip+端口访问到redis容器内的端口。
添加2个主机映射目录,一个是容器内conf文件和主机conf文件的映射,另一个是容器内数据文件夹和主机数据文件夹credis1的映射。
这样即使pod重启,对应的redis数据也不会丢失,因为数据已经映射保存到主机上了。
redis-server /home/redis/redis.conf --cluster-announce-ip 192.168.238.142 --cluster-announce-port 20301 --cluster-announce-bus-port 30301
注意redis启动命令redis-server后面除了要加配置文件路径,还要加上cluster-announce-ip,cluster-announce-port和cluster-announce-bus-port这几个参数。
这几个参数在创建 Redis Cluster 集群时,容器内记录集群信息的nodes.conf文件中会识别到这几个参数代表的该redis结点的ip,port和集群通信port。
如果不加这几个参数,nodes.conf中记录的集群就是就是默认的redis容器的ip和容器内的6379和16379端口,这样就会造成pod重启导致的ip变更集群失效和无法在k8s集群外访问redis容器的问题。
参数解释:
- cluster-announce-ip:集群节点 IP,填写宿主机的 IP;
-
- cluster-announce-port:集群节点映射端口;
-
- cluster-announce-bus-port:集群节点总线端口。
其他选项都不用配置,用默认就好。然后点击启动,完成credis1的redis服务的创建。
- redis-cli --cluster create \
- 192.168.238.142:20301 \
- 192.168.238.142:20302 \
- 192.168.238.142:20303 \
- 192.168.238.142:20304 \
- 192.168.238.142:20305 \
- 192.168.238.142:20306 \
- --cluster-replicas 1
其中ip和port要使用redis容器映射到的主机的ip和port,这样redis集群的记录文件nodes.conf中记录的就会是固定的外部ip和port,不会受到容器的重启影响。
--cluster-replicas 1参数代表创建集群时自动分配的主和从的比例是1,也就是三个主和三个从。通过该参数可以调整主从比例,但要注意主的数量至少3个。
自动分配主从和对应的槽。
输入yes,确认分配
完成创建。
cat nodes.conf
可以看到,里面记录了主从关系,还有对应的各个结点的ip和端口。
- redis-cli
-
- cluster nodes
-
- cluster info
在其他机器上使用redis客户端登录任意的redis容器,这里登录credis6
redis-cli -c -h 192.168.238.142 -p 20306
注意使用redis-cli命令时要加上参数-c,这个代表以集群模式登录,不加这个参数代表本地模式,不加的话登录上去后,操作key无法自动跳转。
登录成功后,可以看到设置key和获取key的时候,客户端会自动跳转到对应的redis服务上。
可以看到开始时credis2是master,credis4是credis2的slave,然后删除credis2。
再次查看集群状态,可以看到credis2已经为fail状态,credis4已经变为master。
然后再把credis2创建并启动。
credis2重新创建之后已经变成credis2的slave。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。