基于Docker 的redis cluster部署

发布时间 2023-04-23 15:22:53作者: ejiyuan

一、设置宿主机配置文件

这里设置在 /data/redis/conf/redis.conf内容如下:

# 不能设置密码,否则集群启动时会连接不上
# Redis服务器可以跨网络访问
bind 0.0.0.0
# 修改端口号
port 6379
# Redis后台启动
daemonize no
# 开启aof持久化
appendonly yes

#下面的配置是集群相关的(新)
# 开启集群
cluster-enabled yes
# 集群的配置 配置文件首次启动自动生成
cluster-config-file nodes.conf
# 请求超时,默认15000
cluster-node-timeout 15000
# 对外的ip
cluster-announce-ip 0.0.0.0
# 集群节点映射端口
cluster-announce-port 6379
# 集群节点总线端口,节点之间互相通信,常规端口+1万,用port + 10000
cluster-announce-bus-port 16379

设置文件权限

设置文件权限

chmod 754 /data/redis/conf/redis.conf

权限不够启动时回报错:can't open config file '/usr/local/etc/redis/redis.conf': Permission denied

二、启动docker 容器

docker run -p 6399:6379 --name redis \
-v /data/redis/data:/data \
-v /data/redis/conf:/usr/local/etc/redis \
-e TIME_ZONE="Asia/Shanghai" -e TZ="Asia/Shanghai" \
-d --restart=always \
--privileged=true \
--sysctl net.core.somaxconn=1024 \
redis redis-server /usr/local/etc/redis/redis.conf

-p 6399:6379 -p 16399:16379:端口映射,与配置文件中的一直

--name:别名 redis

--sysctl net.core.somaxconn=1024: 设置linux每端口可以监听的最大tcp数量1024,默认128。

 --privileged=true 授予此容器扩展权限

-v /data/redis/data:/data :redis的data文件位置

-v /data/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf :挂载 redis 的配置文件

-e TIME_ZONE="Asia/Shanghai" -e TZ="Asia/Shanghai" :设置时区

-d 后台运行

--restart=always :docker 容器自动重启

redis redis-server /usr/local/etc/redis/redis.conf :Redis 容器中设置 redis-server 每次启动读取 /etc/redis/redis.conf 这个配置为准

--appendonly yes:在Redis容器启动redis-server服务器并打开Redis持久化配置

 

如果docker run redis时,查看日志发现警告:

WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. Tofix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

需要在服务器上执行 sysctl vm.overcommit_memory=1 或者执行一下语句:

echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf && sysctl -p

vm.overcommit_memory=1:Linux系统的内存分配策略

    0:表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

    1:表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

    2:表示内核允许分配超过所有物理内存和交换空间总和的内存

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix thisissue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain thesetting after a reboot. Redis must be restarted after THP is disabled.

意思是使用的是透明大页,可能导致redis延迟和内存使用问题。执行 echo never > /sys/kernel/mm/transparent_hugepage/enabled 修复该问题。

临时解决方法:

echo never > /sys/kernel/mm/transparent_hugepage/enabled。

永久解决方法:  将其写入/etc/rc.local文件中。

三、启动docker 容器

 

十、参考

linux redis 启动警告解决方法 https://blog.csdn.net/whatday/article/details/103028487