Press "Enter" to skip to content

利用docker容器下的Redis配置主从服务器

  1. 更新系统到最新
yum update
  1. 卸载老版本docker
yum  remove docker  docker-common docker-selinux  docker-engine
  1. 安装所需要的软件包
yum install -y yum-utils  device-mapper-persistent-data lvm2
  1. 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 查看docker版本
yum list docker-ce --showduplicates|sort -r
  1. 安装docker
yum  install  docker-ce-18.03.1.ce -y
  1. 启动docker
systemctl start docker
  1. 加入开机启动
systemctl enable docker
  1. 修改为国内镜像
vi /etc/docker/daemon.json
{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
  1. 查看默认网络
docker network ls
  1. 因为默认的网络不能制定固定的地址,所以我们将创建自定义网络,并指定网段:172.10.0.0/16 并命名为mynetwork,指令
docker network create  --subnet=172.10.0.0/16  mynetwork
  1. 利用dockerfile 创建镜像。上传dockerfile文件到当前目录
docker build -t redis-test  .
  1. 利用镜像创建容器
docker run -itd --name redis-test --net mynetwork -p 6380:6379 --ip 172.10.0.2 redis-test
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -p: 端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • –ip: 为容器制定一个固定的ip
  • –net: 指定网络模式
  1. 查看镜像
docker images
  1. 查看容器
docker ps -a
  1. 创建两个redis容器,一主一从
docker run -itd --name redis-master --net mynetwork --ip 172.10.0.2 -p 6379:6379 redis-test

docker run -itd --name redis-slave --net mynetwork --ip 172.10.0.3 -p 6380:6379 redis-test
  1. 查看容器,获取容器名称
docker ps
[root@izj6chtjtc7g7ko073spxtz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
360b0c26c2af        redis-test          "/bin/bash"         2 minutes ago       Up 2 minutes        0.0.0.0:6380->6379/tcp   redis-slave
7aa9792ec0ff        redis-test          "/bin/bash"         6 minutes ago       Up 6 minutes        0.0.0.0:6379->6379/tcp   redis-master
  1. 进入主服务器 docker容器
docker attach 7aa9792ec0ff
docker exec -it redis-master bash

以上两条命令都可以进入一个容器,区别是用attach进入容器后使用exit退出后容器停止运行,而用exec进入容器后,使用exit退出容器,容器依然运行。
19. 启动容器

docker start redis-master
docker start redis-slave
  1. 主从复制的目的

– 1、数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。

– 2、故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

– 3、负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。

– 4、读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;

– 5、高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

  1. 修改主节点容器中Redis配置文件。(以下配置为了方便关闭了保护模式和没有设置密码)
    1. 修改绑定ip 为0.0.0.0,为了方便让所有节点都可以访问主节点。
    2. 关闭保护模式
    bind 0.0.0.0
    protected-mode no
  1. 进入从节点容器中进行Redis配置文件修改,主要用于配置主从关系。
    1. 修改绑定ip 为0.0.0.0,为了方便让所有节点都可以访问主节点。
    2. 关闭保护模式
    3. 配置主节点ip
    bind 0.0.0.0
    protected-mode no
    slaveof 172.10.0.2 6379
  1. 启动主节点Redis和从节点Redis
redis-server /etc/redis.conf &
  1. 在主节点下查看所有key,并测试设置ll的值为123
[root@7aa9792ec0ff /]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set ll 123
OK
127.0.0.1:6379>
  1. 如果一切OK的话,在从节点Redis中就可以获取ll了,进入从节点,进行获取测试
[root@360b0c26c2af /]# redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> get ll
"123"
127.0.0.1:6379>

从结果可以看出在从节点已经可以获取到了。

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注