docker 配置redis主从配置 集群 正式部署

转至 平凡的学生族发表于后端技术

在这篇文章中:

前言

在正式部署前,你可以先阅读前置准备,对部署过程中用到的docker、redis操作和配置有一个理解,以防在自己电脑上复现时出错。 我们将在一台windows10机器上运行多个docker容器,配置Redis主从集群。

环境

  • 宿主机一台: windows 10
  • docker 18.09.2

目录

  1. 运行master容器
  2. 编写redis.conf
    1. 查看ip
    2. bind {ip}:允许指定的{ip}连接。
    3. slaveof {ip} {port}:配置主从关系。
    4. daemonize no:是否后台运行。
  3. 解决WARNING THP
  4. 解决WARNING somaxconn
  5. 最终的docker run

0.确立计划

  1. 我们需要在主服务器查看ip,以便编写从服务器的redis.conf。
  2. 然后需要修改宿主机内核的配置,解决THP WARNING。由于windows上无法直接操作虚拟linux内核,需要在容器中进行。只要把宿主机的内核修改,所有容器都会解决THP WARNING问题。
  3. 之后从服务器的部署只需一句docker run ...即可。 流程图如下:

1. 运行master容器

docker run --name redis-master -d -v /d/docker-redis-conf/redis-master.conf:/usr/local/etc/redis/redis.conf -p 6379:6379 redis redis-server /usr/local/etc/redis/redis.conf 该命令行为是: 使用映射的配置文件创建redis-master容器,并暴露6379端口。 该命令是简化版命令,可能会报两个WARNING,为了彻底解决问题,需要添加:--privileged(为了解决THP WARNING)和--sysctl net.core.somaxconn=2048(为了解决somaxconn WARNING)。 建议你到第五章:5. 最终的docker run拷贝完整的命令运行主容器。 如果你坚持要用上面的简化命令,可以带着WARNING顺利部署,直到你知道如何解决WARNING时,会发现还是得把redis-master删除重来一遍。

2. 编写redis.conf

官网文档拷贝一份redis.conf,进行编写。 需要为master和每slave各准备一份redis.conf,如下:

一个master,两个slave

master和slave的配置文件都需要以下修改:

  • bind {ip}:允许接受请求的ip(不是指请求来源的ip)。我们此处配置bind 0.0.0.0或者eth0上的ip(一般是172.17.0.x)都行。详情阅读关于bind
  • daemonize no:设置在前台运行。如果指定为yes,redis会以守护进程方式在后台运行,在docker中运行则会自动退出。因为docker要求容器的运行至少有一个前台进程。 这与docker run -d不同,daemonize是指定进程在容器中是否在后台运行,-d是指容器是否在后台运行。
  • appendonly yes 使用aof模式持久化,而不是rdb模式。这个看个人需要。

slave的配置文件需要额外添加一行:

  • slaveof {ip} {port}:配置主从关系。其中{ip}是master的ip,{port}填默认的6379。

查看master的ip: 运行ifconfig,查看eth0栏下的ip,一般是172.17.0.x。 如果没有ifconfig,你需要apt updateapt install net-tools

3. 解决WARNING THP

参考:

问题现象:

WARNING you have Transparent Huge Pages (THP) support enabled in your kernel.
This will create latency and memory usage issues with Redis.
To fix this issue 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 the setting after a reboot. Redis must be restarted after THP is disabled.

原因: 宿主机内核配置启用了THP,这可能会导致响应延迟。 当THP启用时:

# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

当THP禁用时:

# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]

解决方法:

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

但你可能操作失败:

bash: /sys/kernel/mm/transparent_hugepage/enabled: Read-only file system
  • 这是因为该配置时宿主机的内核配置,因此你需要添加docker run --privileged参数,就能修改了。这正是上文说要加--privileged参数原因
  • 当然echo never ...的修改是会随着容器重启而重置的。你需要每次重启docker时,都配置一次。如果想永久生效:
    • 在linux上,你需要在/etc/rc.local添加该语句
    • 但在window上,我还不知道如何配置,因为在容器内找不到/etc/rc.local(反正生产环境一般是linux,在windows上自己动手多打一行命令而已)。

4. 解决WARNING somaxconn

参考:

问题现象:

WARNING: The TCP backlog setting of 511 cannot be enforced
because /proc/sys/net/core/somaxconn is set to the lower value of 128.

问题探索: 首先我们阅读理解 Linux backlog/somaxconn 内核参数,理解了backlog是应用层参数,somaxconn是内核参数,两者都规定了一个端口上TCP全连接的最大数量。somaxconn其实就是"socket max connections"的简称,该参数 问题解决: 添加参数docker run --sysctl net.core.somaxconn=2048,这个值需要大于511。 这也是为什么上文说要加这个参数了。

5. 最终的docker run

最终运行master容器的指令需要添加很多别的参数,而且大多是必需的。 docker run --privileged --sysctl net.core.somaxconn=2048 --name redis-master -d -v /d/docker-redis-conf/redis-master.conf:/usr/local/etc/redis/redis.conf -p 6379:6379 redis redis-server /usr/local/etc/redis/redis.conf

  1. --privileged是为了修改宿主机内核配置,以解决WARNING THP问题的。
  2. --sysctl net.core.somaxconn=2048是为了修改内核配置,以解决WARNING somaxconn is set to the lower value of 128问题的。
  3. -v /d/docker-redis-conf/redis-master.conf:/usr/local/etc/redis/redis.conf是为了把宿主机上d盘docker-redis-conf文件夹下的redis-master.conf映射到容器目录内的。
  4. -p 6379:6379是端口映射。
  5. redis是使用的镜像。
  6. redis-server /usr/local/etc/redis/redis.conf是让容器启动redis服务器。

slave的运行指令也差不多,把上文的redis-master都改成redis-slave1或者redis-slave2即可,只要对应的配置文件都写好了。

将三个容器都运行起来,把内核参数修改好后,就可以无WARNING地运行啦!(在一个容器里修改一次就好,但windows上重启docker后,还是要重新修改)

最后

可以分析下docker redis官方的DockerFile

RUN mkdir /data && chown redis:redis /data
VOLUME /data
WORKDIR /data

COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]

EXPOSE 6379

参考

linux中内核参数somaxconn backlog backlog somaxconn docker修改somaxconn thp是内核参数,只能在宿主机上修改

其它参考:

原文地址:https://www.cnblogs.com/youyong/p/11476950.html

时间: 2024-11-18 21:56:03

docker 配置redis主从配置 集群 正式部署的相关文章

redis 主从备份服务器集群搭建

redis 主从备份服务器集群 由于redis是要自己手动编译的,我就不折腾了,刚好手上有windown 64位的,就拿来练练手,等哪天在服务器上搭建项目了再弄, 启动命令:redis-server  --port  端口 在window  下启动4个redis-server  服务,端口分别为:1000,2000,3000,4000,  这样也相当于开了4台redis 数据库服务器, 现在使用  redis-cli  -host server_ip  -p  端口   连接对应的服务器 注:

LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案

方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor=50 worker.tomcat.cachesize=10 worker.tomcat.cache_timeout=600 worker.tomcat.socket_keepalive=1 worker.tomcat.socket_timeout=300 Linux内核优化: vi /etc/sysctl.conf   # 编辑sysctl.conf文件添加以下内容net.

redis主从及集群搭建

redis主从复制 概述 1.Redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库. 2.通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力.主数据库主要进行写操作,而从数据库负责读操作. 主从复制过程 主从复制过程:见下图

Redis 主从,集群--实战

redis主从配置 1.架构 2.Redis主从数据同步的步骤 3.安装部署   3.1 基本环境 两台Centos 6.5 操作系统 ,分别关闭selinux,以及防火墙. master: 192.168.0.250 slave:  192.168.0.251 安装C语言编辑器 yum  install  gcc gcc-c++  -y   4.2.下载编译 使用的版本是: redis-3.2.6 tar  zxvf  redis-3.2.6.tar.gz >cd redis-3.2.6 >

yii配置 redis主从配置(附代码)

最近要搞redis 主从,但yii自带的redis 不支持主从,没办法只好自己写一个了 配置如下: 1.main.php中添加下面一句: //redis缓存配置 'cache_redis' => include(dirname(__FILE__) . DIRECTORY_SEPARATOR.'cache'.DIRECTORY_SEPARATOR.'redis.php'), 2.redis.php文件如下 <?php return array( 'class'=>'ext.zredis.Y

redis单点、主从、集群cluster配置搭建与使用

目录 redis单点.主从.集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作redis 1.1.3 使用jedis客户端操作redis 1.1.4 使用spring-redis操作 1.2 redis 主从 1.3 哨兵sentinel 1.3.2 哨兵sentinel配置 1.3.3 启动哨兵,使用jedis连接哨兵操作redis 1.3.4 编写程序&运行 1.3.5模拟主节点宕机情况 1.4 redis cluster 1

Redis集群_1.redis主从配置

Redis主从配置(Master-Slave) 一. Redis Replication的特点: 1):一个Master可以同步多个Slave 2):不仅Master可以同步多个Slave,Slave也可以同步其它Slave,可以构成一个图形结构,同时还能分担Master的同步压力 3):Redis Replication使用的是异步复制.从2.8开始,Slave会周期性发起一个Ack确认replication stream被处理进度 4):复制在Master Server是以非阻塞模式完成数据

Redis主从复制和集群配置

redis主从复制 概述 1.redis的复制功能是支持多个数据库之间的数据同步.一类是主数据库(master)一类是从数据库(slave),主数据库可以进行读写操作,当发生写操作的时候自动将数据同步到从数据库,而从数据库一般是只读的,并接收主数据库同步过来的数据,一个主数据库可以有多个从数据库,而一个从数据库只能有一个主数据库. 2.通过redis的复制功能可以很好的实现数据库的读写分离,提高服务器的负载能力.主数据库主要进行写操作,而从数据库负责读操作. 主从复制过程 主从复制过程:见下图

LVS+Keepalived+Squid+Nginx+MySQL主从 高性能集群架构配置

原文地址:LVS+Keepalived+Squid+Nginx+MySQL主从 高性能集群架构配置 作者:gron 原文链接:http://www.linuxidc.com/Linux/2012-07/65547.htm 架构图 先进行优化 vi /etc/sysctl.conf   # 编辑sysctl.conf文件添加以下内容 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 65536 4194304 net.c