Redis主从模式集群部署

redis集群部署

1.创建NFS存储(ubuntu环境下)

1.1 NFS的安装
 	 命令⾏输⼊命令:apt-get install nfs-kernel-server

####1.2 启动NFS服务
命令⾏输⼊命令:etc/init.d/nfs-kernel-server restart

1.3 修改nfs配置⽂件
 	 修改/etc/exports⽂件,如下图所示
 	![在这里插入图片描述](https://img-blog.csdnimg.cn/20210224223205794.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3o1MzAyMzQwMjA=,size_16,color_FFFFFF,t_70)
1.4 创建共享⽬录⽂件
 	 使⽤命令创建共享⽬录⽂件 mkdir -p /usr/local/k8s/redis/pv{1..6}
 	![在这里插入图片描述](https://img-blog.csdnimg.cn/20210224223219166.png)

2.创建redis集群

特别说明:在执行该节操作前,请在集群中一个节点上执行apt-get install nfs-kernel-server安装NFS存储,否则pod将会一直处于pend状态。

2.1 创建pv,pv.yaml文件内容如下
	命令行输入命令:kubectl create -f pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv1
spec:
  capacity:
    storage: 200M
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.30.54
    path: "/usr/local/k8s/redis/pv1"

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vp2
spec:
  capacity:
    storage: 200M
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.30.54
    path: "/usr/local/k8s/redis/pv2"

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv3
spec:
  capacity:
    storage: 200M
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.30.54
    path: "/usr/local/k8s/redis/pv3"

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv4
spec:
  capacity:
    storage: 200M
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.30.54
    path: "/usr/local/k8s/redis/pv4"

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv5
spec:
  capacity:
    storage: 200M
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.30.54
    path: "/usr/local/k8s/redis/pv5"

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv6
spec:
  capacity:
    storage: 200M
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.30.54
    path: "/usr/local/k8s/redis/pv6"
 ### 2.2 创建Configmap,redis.conf文件内容如下
		命令行输入命令:kubectl create configmap redis-conf —from-file=redis.conf
appendonly yes
cluster-enabled yes
cluster-config-file /var/lib/redis/nodes.conf
cluster-node-timeout 5000
dir /var/lib/redis
port 6379
	命令行输入命令:kubectl describe cm redis.conf,查看创建成功的redis.conf
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210224223423124.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3o1MzAyMzQwMjA=,size_16,color_FFFFFF,t_70)
2.3 创建Headless service, headless-service.yml文件内容如下
	命令行输入命令:kubectl create -f headless-service.yml
apiVersion: v1
kind: Service
metadata:
  name: redis-service
  labels:
    app: redis
spec:
  ports:
  - name: redis-port
    port: 6379
  clusterIP: None
  selector:
    app: redis
    appCluster: redis-cluster
2.4 创建redis集群,redis.yaml文件内容如下
	命令行输入命令:kubectl create -f redis.yaml
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
  name: redis-app
spec:
  serviceName: "redis-service"
  replicas: 6
  template:
    metadata:
      labels:
        app: redis
        appCluster: redis-cluster
    spec:
      terminationGracePeriodSeconds: 20
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - redis
              topologyKey: kubernetes.io/hostname
      containers:
      - name: redis
        image: redis
        command:
          - "redis-server"
        args:
          - "/etc/redis/redis.conf"
          - "--protected-mode"
          - "no"
        resources:
          requests:
            cpu: "100m"
            memory: "100Mi"
        ports:
            - name: redis
              containerPort: 6379
              protocol: "TCP"
            - name: cluster
              containerPort: 16379
              protocol: "TCP"
        volumeMounts:
          - name: "redis-conf"
            mountPath: "/etc/redis"
          - name: "redis-data"
            mountPath: "/var/lib/redis"
      volumes:
      - name: "redis-conf"
        configMap:
          name: "redis-conf"
          items:
            - key: "redis.conf"
              path: "redis.conf"
  volumeClaimTemplates:
  -metadata:
      name: redis-data
    spec:
      accessModes: [ "ReadWriteMany" ]
      resources:
        requests:
          storage: 200M

命令行输入命令:kubectl get pod,redis集群创建成功后如下图所示。所有pod均显示Running状态,即成功在集群上部署了6个redis集群服务。
在这里插入图片描述

3.初始化redis集群

3.1初始化ubuntu容器
		命令行输入:kubectl run -it ubuntu --image=ubuntu --restart=Never /bin/bash
3.2更新阿里云ubuntu源
root@ubuntu:/# cat > /etc/apt/sources.list << EOF
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
 
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
> EOF
3.3安装redis-tribe

命令行依次输入:
apt-get update
apt-get install -y vim wget python2.7 python-pip redis-tools dnsutils
pip install redis-trib==0.5.1

3.4创建redis master节点

命令行输入:

redis-trib.py create \
                   	  `dig +short redis-app-0.redis-service.default.svc.cluster.local`:6379 \
		              `dig +short redis-app-1.redis-service.default.svc.cluster.local`:6379 \
		             `dig +short redis-app-2.redis-service.default.svc.cluster.local`:6379
返回如下输出

在这里插入图片描述

3.5为redis master节点增加slave节点

命令行输入:

 redis-trib.py replicate \
  --master-addr `dig +short redis-app-0.redis-service.default.svc.cluster.local`:6379 \
  --slave-addr `dig +short redis-app-3.redis-service.default.svc.cluster.local`:6379

redis-trib.py replicate \
  --master-addr `dig +short redis-app-1.redis-service.default.svc.cluster.local`:6379 \
  --slave-addr `dig +short redis-app-4.redis-service.default.svc.cluster.local`:6379

redis-trib.py replicate \
  --master-addr `dig +short redis-app-2.redis-service.default.svc.cluster.local`:6379 \
  --slave-addr `dig +short redis-app-5.redis-service.default.svc.cluster.local`:6379

返回如下输出
在这里插入图片描述

3.4 验证

命令行输入kubectl exec -it redis-app-2 /bin/bash,进入到redis容器中
在这里插入图片描述
再执行/usr/local/bin/redis-cli -c启动redis客户端,在客户端中执行cluster nodes返回如下结果则成功
在这里插入图片描述
再执行cluster info,返回如下输出。
在这里插入图片描述
至此,redis集群搭建完毕。若有需要,可以创建nodePort型service对外暴露redis服务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值