容器网络创建
Docker安装后,默认会创建下面三种网络类型
docker network ls 查看默认的网络
默认情况下启动的Docker容器,都是使用 bridge(桥接网络),每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启 下,Docker的IP地址就变了
- none:无指定网络 使用 --network=none ,docker 容器就不会分配局域网的IP
- host: 主机网络 使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。 例如,在容器中运行一个Web服务,监听8080端口,则主 机的8080端口就会自动映射到容器中
因为默认的网络不能指定固定的地址,所以我们将创建自定义网络,并指定网段:192.168.1.0/24 并命名为mynetwork,指令 如下:
docker network create --subnet=192.168.1.0/24 mynetwork
创建redis镜像忽略......
接下来通过docker命令分别运行redis容器
docker run -it --name redis-master --net mynetwork -p 6380:6379 --ip 192.168.1.2 redis
docker run -it --name redis-slave --net mynetwork -p 6381:6379 --ip 192.168.1.3 redis
通过docker ps -a 命令可查看已创建成功的主从容器
接着输入docker exec -it redis-master sh进入主容器 (备注:因为我构建的redis dockerfile是用的alpine系统并非centos 所以sh命令有差别)
在容器内运行redis-cli -a 密码运行redis (备注:密码登录可在配置文件中设置)
从容器同理
主从复制
从节点开启主从复制,有3种方式:
- 配置文件 在从服务器的配置文件中加入:slaveof <masterip> <masterport>
- 启动命令 redis-server启动命令后加入 --slaveof <masterip> <masterport>
- 客户端命令 Redis服务器启动后,直接通过客户端执行命令:slaveof <masterip> <masterport>,则该Redis实例成为从节点。
通过 info replication 命令可以看到复制的一些参数信息
出现up状态即代表主从复制配置成功!
主从复制的常用相关配置
从数据库配置
1.slaveof <masterip> <masterport>
slave实例需要配置该项,指向master的(ip, port)。
-
masterauth <master-password>
如果master实例启用了密码保护,则该配置项需填master的启动密码;若master未启用密码,该配置项需要注释掉 -
slave-serve-stale-data
指定 slave 与 master 连接中断时的动作。默认为yes,表明slave会继续应答来自client的请求,但这些数据可能已经过期(因为连接中断导致无法从 master 同步)。 若配置为no,则slave除正常应答"INFO"和"SLAVEOF"命令外,其余来自客户端的请求命令均会得到" SYNC with master in progress "的应答,直到该 slave 与 master 的连接重建成功或该 slave 被提升为 master 。 -
slave-read-only
指定slave是否只读,默认为yes。若配置为no,这表示slave是可写的,但写的内容在主从同步完成后会被删掉。 -
repl-disable-tcp-nodelay
指定向slave同步数据时,是否禁用 socket 的 NO_DELAY 选项。若配置为yes,则禁用 NO_DELAY ,则TCP协议栈会合并小包统一发送,这样可以减少主从节点 间的包数量并节省带宽,但会增加数据同步到slave的时间。 若配置为no,表明启用 NO_DELAY ,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。通常情况下,应该配置为no以降 低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。 -
slave-priority
指定 slave 的优先级。在不只1个 slave 存在的部署环境下,当 master 宕机时, Redis Sentinel 会将priority值最小的slave提升为master。需要注意的是,若 该配置项为0,则对应的slave永远不会被 Redis Sentinel 自动提升为 master 。
复制原理
复制的过程步骤如下:
- 从节点执行 slaveof 命令
- 从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制
- 从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点
- 连接建立成功后,发送 ping 命令,希望得到 pong 命令响应,否则会进行重连
- 如果主节点设置了权限,那么就需要进行权限验证;如果验证失败,复制终止。
- 权限验证通过后,进行数据同步,这是耗时最长的操作,主节点将把所有的数据全部发送给从节点。
- 当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来,主节点就会持续的把写命令发
送给从节点,保证主从数据一致性。