這篇文章難度很低,但是我為什么還是記錄下來呢帘睦?因為網(wǎng)絡上的技術(shù)文章寫的相當xxxxxx,作為一個新手效拭,可能要繞很大一個彎子
按照慣例,先貼一份redis配置文件,此處附鏈接了,為了避免說不是原創(chuàng) ,redis配置文件
使用docker下載redis鏡像
docker pull redis
創(chuàng)建配置文件
1.在我的家目錄創(chuàng)建redis目錄/home/guofu/redis
2.進入redis目錄瓣蛀,先從官網(wǎng)拷貝一份配置文件下來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作為主服務器配置文件字支,主要修改以下內(nèi)容
#關(guān)閉保護模式
protected-mode no
#使用默認端口6379
port 6379
#允許后臺運行
daemonize yes
#可改可不改凤藏,如果是在一臺機器上面運行,必須修改
pidfile /var/run/redis_6379.pid
#日志文件堕伪,自定義
logfile "/var/log/redis/redis_6379.log"
- 啟動一個redis實例吧揖庄,先看一下啟動命令我再解釋
#創(chuàng)建實例
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
- 命令解釋
參數(shù):
--rm 在容器終止運行后自動刪除容器文件
-d 后臺運行
-p 6379:6379 端口映射(本機6379端口映射容器6379端口)
--name myredis 容器別名
-v /etc/app/redis/conf:/conf 目錄映射(本機redis配置文件目錄)
-v /etc/app/redis/data:/data 目錄映射(本機redis數(shù)據(jù)目錄)
redis-server /conf/redis.conf --appendonly yes 在容器運行命令,并打開數(shù)據(jù)持久化 - 看看這些掛載目錄欠雌,宿主機都要存在哦蹄梢,沒有的話就創(chuàng)建
- 進入容器啟動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
#現(xiàn)在主從配置如下
# 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
#執(zhí)行一條命令
127.0.0.1:6379> set name jimi
OK
- 關(guān)閉客戶端鏈接富俄,查看一下本容器的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
主服務器創(chuàng)建完畢,退出霍比,快捷鍵 ctrl+p+q;
修改redis1.conf作為從服務器配置文件幕袱,主要修改以下內(nèi)容
#關(guān)閉保護模式
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
#獲取主服務器剛才設(shè)置的name;
127.0.0.1:6371> get name
"jimi"
- 相同方法啟動redis2.conf浅妆,不細說玛痊,此處說一下如何查看容器內(nèi)的進程
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部署已經(jīng)完畢
- 主從復制的原理剖析狂打,小蟲發(fā)現(xiàn)已經(jīng)有朋友總結(jié)的很好了擂煞,鏈接貼出
Redis主從復制原理剖析