docker-compose、k8s部署单机版redis

一、docker-compose安装redis

cat docker-compose.yml

version: '3'

services:
  redis:
    image: redis:5.0.7-buster
    restart: IfNotPresent
    container_name: my_redis
    # Redis 的密码需要自己在与容器共享的配置 redis.conf 中加入,即更改配置中 requirepass yourpassword
    #command: redis-server /usr/local/etc/redis/redis.conf
    # 直接在其所在目录下执行 docker-compose up -d,即可在 Docker 中生成一个带密码的 Redis 容器。
    #command: redis-server --requirepass leojiang
    ports:
      - "6379:6379"
    volumes:
      - ./data/redis:/data
      # 容器与宿主机时间同步
      - /etc/localtime:/etc/localtime
    environment:
      TIME_ZONE: Asia/Shanghai

找一个配置文件:
方法一:官网下载(推荐)
方法二:根据版本解压一个官网的二进制包抽出来一个redis.conf

wget http://download.redis.io/releases/redis-5.0.7.tar.gz tar xzf
redis-5.0.7.tar.gz

二、k8s部署redis

redis-service.yaml

apiVersion: v1
kind: Service
metadata:
    name: redis
    labels:
        app: redis
    namespace: paas-basic
spec:
    selector:
        app: redis-pod
    type: NodePort
    ports:
    - name: redis-port
      port: 6379
      targetPort: 6379
      protocol: TCP

redis-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
    name: redis-deploy
    namespace: paas-basic
    labels:
        name: redis-deploy-label
spec:
    replicas: 1
    minReadySeconds: 20 # 容器启动创建X秒后服务可用
    strategy:
        type: RollingUpdate
        rollingUpdate:
            maxSurge: 2
            maxUnavailable: 0
    selector:
      matchLabels:
        app: redis-pod
    template:
        metadata:
            labels:
                app: redis-pod
        spec:
            nodeSelector: 
              redis: "true"
            terminationGracePeriodSeconds: 40  #k8s正确、优雅地关闭应用,等待时间30秒
            containers:
            - name: redis-container
              image: redis:5.0.7-buster
              imagePullPolicy: IfNotPresent
              ports:
              - containerPort: 6379
              volumeMounts:
              - name: redis-volume
                mountPath: /data
              - name: redis-conf
                mountPath: /usr/local/etc/
            volumes:
            - name: redis-volume
              hostPath:
                path: /home/k8s-1.19.2/paas-basic/redis/volume
            - name: redis-conf
              hostPath:
                path: /home/k8s-1.19.2/paas-basic/redis/config

k8s部署

三、redis.conf设置最大内存

1、通过配置文件配置
通过在Redis安装目录下面的redis.conf配置文件中添加以下配置设置内存大小。

//设置Redis最大占用内存大小为100M
maxmemory 100mb
redis的配置文件不一定使用的是安装目录下面的redis.conf文件,启动redis服务的时候是可以传一个参数指定redis的配置文件的。

2、通过命令修改
Redis支持运行时通过命令动态修改内存大小
登录

redis-cli -h 127.0.0.1 -p 6379 -a "mypass"

//设置Redis最大占用内存大小为100M

127.0.0.1:6379> config set maxmemory 100mb

//获取设置的Redis能使用的最大内存大小

127.0.0.1:6379> config get maxmemory

如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存
redis.conf中的maxmemory定义可用最大物理内存,有多种书写方式,以下均为合法:
maxmemory 1048576
maxmemory 1048576B
maxmemory 1000KB
maxmemory 100MB
maxmemory 1GB
maxmemory 1000K
maxmemory 100M
maxmemory 1G
没有带单位尾巴的为字节数,以B结尾的表示相应的大小。但需要注意KB和K、MB和M、GB和G是不同的,如1K表示1000字节,而1KB则为1024字节。

3、查看当前redis节点内存状态

[root@app01 fastdfs]# docker exec -it redis redis-cli -h 127.0.0.1 -p 6379 -a sinoeyes info | grep memory
used_memory:849488
used_memory_human:829.58K
used_memory_rss:2682880
used_memory_rss_human:2.56M
used_memory_peak:849488
used_memory_peak_human:829.58K
used_memory_peak_perc:100.00%
used_memory_overhead:836262
used_memory_startup:786624
used_memory_dataset:13226
used_memory_dataset_perc:21.04%
total_system_memory:16656908288
total_system_memory_human:15.51G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
[root@app01 fastdfs]#

docker-compose、k8s部署单机版redis_第1张图片

四、Redis的内存淘汰

既然可以设置Redis最大占用内存大小,那么配置的内存就有用完的时候。那在内存用完的时候,还继续往Redis里面添加数据不就没内存可用了吗?

实际上Redis定义了几种策略用来处理这种情况:

noeviction(默认策略):对于写请求不再提供服务,直接返回错误(DEL请求和部分特殊请求除外)
allkeys-lru:从所有key中使用LRU算法进行淘汰
volatile-lru:从设置了过期时间的key中使用LRU算法进行淘汰
allkeys-random:从所有key中随机淘汰数据
volatile-random:从设置了过期时间的key中随机淘汰
volatile-ttl:在设置了过期时间的key中,根据key的过期时间进行淘汰,越早过期的越优先被淘汰
当使用volatile-lru、volatile-random、volatile-ttl这三种策略时,如果没有key可以被淘汰,则和noeviction一样返回错误。

如何获取及设置内存淘汰策略
获取当前内存淘汰策略:

127.0.0.1:6379> config get maxmemory-policy

通过配置文件设置淘汰策略(修改redis.conf文件):

maxmemory-policy allkeys-lru

通过命令修改淘汰策略:

127.0.0.1:6379> config set maxmemory-policy allkeys-lru

你可能感兴趣的:(redis,redis,docker-compose,k8s,linux)