k8s redis(3.2.1) cluster

一、安装:
    设置密码:redis.conf中加入密码
        requirepass 123456

    参考:从零开始搭建Kubernetes集群(六、在K8S上部署Redis 集群)
    ☆ 当安装到 5.初始化集群时:
        可使用我打的redis-ruby(基于centos创建)镜像,下载地址(链接:https://pan.baidu.com/s/1NwWDzisiPWWQv1RfPDA4tg 提取码:tfsu),使用方法:

# docker load -i redis-ruby.tar
# kubectl run -i --tty redis-ruby -n 你的命令空间 --image=redis-ruby --image-pull-policy=IfNotPresent --restart=Never /bin/bash

            进入ruby镜像:

# kubectl exec -it redis-ruby -n 你的命令空间 -- /bin/bash
	# [root@redis-ruby /]# find / -name 'client.rb'
	# /usr/local/share/gems/gems/redis-3.2.1/lib/redis/client.rb
	# /usr/share/ruby/xmlrpc/client.rb
	# [root@redis-ruby /]# vi /usr/local/share/gems/gems/redis-3.2.1/lib/redis/client.rb
		require "redis/errors"
		require "socket"
		require "cgi"
		class Redis
		  class Client
			DEFAULTS = {
			  :url => lambda { ENV["REDIS_URL"] },
			  :scheme => "redis",
			  :host => "127.0.0.1",
			  :port => 6379,
			  :path => nil,
			  :timeout => 5.0,
			  :connect_timeout => 5.0,
			  :password => "你要设置的redis集群密码&&与redis创建集群时的redis.conf中配置的相同,没有写nil",
			  :db => 0,
			  :driver => nil,
			  :id => nil,
			  :tcp_keepalive => 0,
			  :reconnect_attempts => 1,
			  :inherit_socket => false
			}

                初始化集群,注意!!!不使用redis的pod名.headlesssvc,因为redis的初始化不支持域名!

	/usr/local/redis/src/redis-trib.rb create --replicas 1 redis-0-podIP:6379 redis-1-podIP:6379 redis-2-podIP:6379 redis-3-podIP:6379 redis-4-podIP:6379 redis-5-podIP:6379
	说明:
		--replicas 1 创建的master节点与slave节点数量比例为1:1
		后面的节点IP哪来的呢?按ctrl+q+p+q退出ruby工具
# kubectl get pod -n 你的命令空间 -owide
	就会发现redis的六个节点的pod的IP,将这6个ip分别替换到上面

二、注意点:
    1.redis初始化集群不支持域名
    
2.设置容器环境下redis集群密码
    3.K8S网络flannel最好换成其他的网络插件,不然可能出现redis cluster Waiting for the cluster to join...一直卡住的情况,如:kube-router,建议参考:k8s与各网络插件集成
    
4.redis cluster Waiting for the cluster to join ...
        redis redis-trib.rb工具的使用 使用其中的check命令就会发现,有的节点并不能完全找到初始化的其他redis节点,以及数据槽分配的不合理

三、k8s下带密码的redis集群操作命令    
    原来的可视化工具RDM将不再好用,原因是即使加了nodeport svc代理,在给节点set/get数据时,数据的操作发生漂移而失败。
    连接容器化redis集群的方法:
    1.k8s容器集群内部配置redis:app-redis-0.redis-service:6379,app-redis-1.redis-service:6379,app-redis-2.redis-service:6379
        使用redis的pod名.headlesssvc名
    2.k8s容器外部访问容器内部redis集群(仍在k8s集群的虚机上,而不在某个容器中),即redis集群在容器外部手动操作的命令:
        kubectl exec -it wxapp-redis-1 -n 命名空间 -- redis-cli -c -a 密码
        注:-c表示以集群的方式连接redis -a是验证redis密码

附录参考文献:
    1.redis集群新增节点:[ERR] Node is not empty
    2.redis-trib.rb命令详解
    3.linux服务器上搭建单机的redis 跟搭建不带密码redis集群 以及带密码的redis集群
    4.通过vi编辑器来替换。
        vi/vim 中可以使用 :s 命令来替换字符串。
        :s/well/good/ 替换当前行第一个 well 为 good
        :s/well/good/g 替换当前行所有 well 为 good
        :n,$s/well/good/ 替换第 n 行开始到最后一行中每一行的第一个 well 为 good
        :n,$s/well/good/g 替换第 n 行开始到最后一行中每一行所有 well 为 good
        n 为数字,若 n 为 .,表示从当前行开始到最后一行
        :%s/well/good/(等同于 :g/well/s//good/) 替换每一行的第一个 well 为 good
        :%s/well/good/g(等同于 :g/well/s//good/g) 替换每一行中所有 well 为 good
        可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
        :s#well/#good/# 替换当前行第一个 well/ 为 good/
        :%s#/usr/bin#/bin#g 可以把文件中所有路径/usr/bin换成/bin

    5.排错指南 - Pod

Logo

开源、云原生的融合云平台

更多推荐