-
这篇文章难度很低,但是我为什么还是记录下来呢?因为网络上的技术文章写的相当xxxxxx,作为一个新手,可能要绕很大一个弯子
-
按照惯例,先贴一份redis配置文件,此处附链接了,为了避免说不是原创 ,redis配置文件
-
使用docker下载redis镜像
docker pull redis
-
创建配置文件
1.在我的家目录创建redis目录/home/guofu/redis
2.进入redis目录,先从官网拷贝一份配置文件下来wget http://download.redis.io/redis-stable/redis.conf
,然后复制2份
guofu@guofu-Inspiron-3558 redis $ ls
command redis1.conf redis2.conf redis.conf
3.使用redis.conf作为主服务器配置文件,主要修改以下内容
#关闭保护模式
protected-mode no
#使用默认端口6379
port 6379
#允许后台运行
daemonize yes
#可改可不改,如果是在一台机器上面运行,必须修改
pidfile /var/run/redis_6379.pid
#日志文件,自定义
logfile "/var/log/redis/redis_6379.log"
- 启动一个redis实例吧,先看一下启动命令我再解释
#创建实例
guofu@guofu-Inspiron-3558 redis $ docker run --rm -d -p 16379:6379 --name mredis \
> -v /home/guofu/redis:/conf \
> -v /home/guofu/redis/log/redis:/var/log/redis \
> -v /home/guofu/redis/data:/data \
> redis
a1072b562eb6a3e0478d9fc4bccfd322f749a75d50462206fbdcd79abc4efb6b
guofu@guofu-Inspiron-3558 redis $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1072b562eb6 redis "docker-entrypoint.s…" 18 seconds ago Up 15 seconds 0.0.0.0:16379->6379/tcp
- 命令解释
参数:
--rm 在容器终止运行后自动删除容器文件
-d 后台运行
-p 6379:6379 端口映射(本机6379端口映射容器6379端口)
--name myredis 容器别名
-v /etc/app/redis/conf:/conf 目录映射(本机redis配置文件目录)
-v /etc/app/redis/data:/data 目录映射(本机redis数据目录)
redis-server /conf/redis.conf --appendonly yes 在容器运行命令,并打开数据持久化 - 看看这些挂载目录,宿主机都要存在哦,没有的话就创建
- 进入容器启动redis服务,指定配置文件
guofu@guofu-Inspiron-3558 redis $ docker exec -it a1072b562eb6 bash
root@a1072b562eb6:/data# /usr/local/bin/redis-server /conf/redis.conf
#连接一下客户端
root@a1072b562eb6:/data# /usr/local/bin/redis-cli
127.0.0.1:6379> info
#现在主从配置如下
# Replication
role:master
connected_slaves:0
master_replid:3167f202ef2507ed27172915040114d994d3069d
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
#执行一条命令
127.0.0.1:6379> set name jimi
OK
- 关闭客户端链接,查看一下本容器的ip
root@a1072b562eb6:/data# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
#下面这个就是ip啦,记住这个ip
172.17.0.2 a1072b562eb6
-
主服务器创建完毕,退出,快捷键 ctrl+p+q;
-
修改redis1.conf作为从服务器配置文件,主要修改以下内容
#关闭保护模式
protected-mode no
#使用端口6371
port 6371
#允许后台运行
daemonize yes
#可改可不改,如果是在一台机器上面运行,必须修改
pidfile /var/run/redis_6371.pid
#日志文件,自定义
logfile "/var/log/redis/redis_6371.log"
#开启从服务模式 ,对应主的ip和端口
replicaof 172.17.0.2 6379
- 启动redis1.conf
guofu@guofu-Inspiron-3558 bin $ docker run --rm -d -p 16371:6371 --name sredis1 \
> -v /home/guofu/redis:/conf \
> -v /home/guofu/redis/log/redis:/var/log/redis \
> -v /home/guofu/redis/data1:/data \
> redis
b85b72c43c835946410ff56c82c821825031e276f2ed2f5d20bcb305ac92715a
#进入容器配置
guofu@guofu-Inspiron-3558 bin $ docker exec -it b85b72c43c835946410ff56c82c821 bash
root@b85b72c43c83:/data# /usr/local/bin/redis-server /conf/redis1.conf
root@b85b72c43c83:/data# /usr/local/bin/redis-cli -h 127.0.0.1 -p 6371
127.0.0.1:6371> info
#主从信息如下
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
#获取主服务器刚才设置的name;
127.0.0.1:6371> get name
"jimi"
- 相同方法启动redis2.conf,不细说,此处说一下如何查看容器内的进程
guofu@guofu-Inspiron-3558 redis $ docker top sredis2
UID PID PPID C STIME TTY TIME CMD
999 11447 11415 0 20:51 ? 00:00:00 redis-server *:6379
root 11539 11415 0 20:51 pts/0 00:00:00 bash
root 11580 11447 0 20:52 ? 00:00:00 /usr/local/bin/redis-server 127.0.0.1:6371
- redis2.conf启动效果如下
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:6
master_sync_in_progress:0
slave_repl_offset:1148
slave_priority:100
127.0.0.1:6372> get name
"jimi"
- 至此,三台redis部署已经完毕
- 主从复制的原理剖析,小虫发现已经有朋友总结的很好了,链接贴出
Redis主从复制原理剖析
网友评论