Docker(七)使用示例:安装Redis集群和MySQL

因为有了docker,当个人开发者在需要用到Redis或者MySQL等服务时,不需要按照以往的方式在服务器上一步步安装这些软件了,而且那种安装过程中或许还会出现一些莫名的错误。使用docker,极大的简化了安装过程,本文简单介绍一下如何使用Docker安装Redis集群和MySQL。

一.安装Redis主从集群

下载redis.conf文件

1
2
3
4
mkdir -p /opt/redis-cluster/data
mkdir -p /opt/redis-cluster/conf
cd /opt/redis-cluster/conf
wget http://download.redis.io/redis-stable/redis.conf

编辑master的配置文件

将下载好的redis.conf复制为redis-master.conf,修改redis-master.conf文件中的如下配置:

1
2
3
4
# bind 127.0.0.1 # 注释当前行,表示任意ip可通过redis-cli连接,而并非只有本机可以连接
dir /data #持久化数据目录
appendonly yes #开启aof
requirepass 123456 # 设定密码为123456

运行master

1
docker run -d -p 6380:6379 --name redis-master -v /opt/redis-cluster/data:/data -v /opt/redis-cluster/conf/redis-master.conf:/usr/local/etc/redis/redis.conf  redis redis-server /usr/local/etc/redis/redis.conf

查看master的内网地址

1
docker inspect redis-master


可以看到master的地址是172.17.0.2

编辑slave的配置文件

redis.conf复制为redis-slave.conf,修改redis-slave.conf文件中的如下配置:

1
2
3
4
5
# bind 127.0.0.1 # 注释当前行,表示任意ip可通过redis-cli连接,而并非只有本机可以连接
dir /data #持久化数据目录
appendonly yes #开启aof,当然也可以不开
replicaof 172.17.0.2 6379 #表示master所在的ip和端口
masterauth 123456 #设置master的密码

运行两台slave

1
2
3
docker run -d -p 6381:6379 --name redis-slave01 -v /opt/redis-cluster/data:/data -v /opt/redis-cluster/conf/redis-slave.conf:/usr/local/etc/redis/redis.conf  redis redis-server /usr/local/etc/redis/redis.conf

docker run -d -p 6382:6379 --name redis-slave02 -v /opt/redis-cluster/data:/data -v /opt/redis-cluster/conf/redis-slave.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf

可以看到启动了三个容器

查看并验证redis的主从配置

先通过master容器里的客户端连接到redis服务端,再通过info replication查看主从配置。

1
docker exec -it redis-master redis-cli -a 123456


可以看到master容器中redis的role=master,有两个slave。
使用set命令往redis中存入数据:

再查看slave01容器里的redis:

1
docker exec -it redis-slave01 redis-cli

上图中也可以看到redis-slave01容器中的redis是slave,并且上一步在redis中存的数据也可以获取到。但由于是slave角色,所以是无法写入数据的。

redis客户端访问

在本地windows系统,使用redis desktop manager软件访问redis正常。

其它说明

replicaof

因为salve这个词的词义,在较新版本的redis中“master-slave”架构的描述改为“master-replica”,之前配置中的slaveof也改为了replicaof,但如果仍写成slaveof还是能够生效的。

是否要守护进程

这里是经过多次测试,发现:容器重启,redis也会正常启动。配置文件中的 daemonize no 注意保持是 no,否则执行了ocker run -d -p 6380:6379 --name redis-master -v /opt/redis-cluster/data:/data -v /opt/redis-cluster/conf/redis-master.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf这个命令后,redis-master容器并不能保持在后台运行。

哨兵模式

高可用的redis集群需要用到哨兵模式,本文暂先不作论述。

安装MySQL

下载镜像

此处下载的是MySQL5.7版本。

1
docker pull mysql:5.7

创建映射目录

因为数据想要持久化到本地,所以创建数据容器卷。

1
mkdir -p /opt/mysql_5.7/data /opt/mysql_5.7/logs /opt/mysql_5.7/conf

启动mysql容器

1
docker run -p 3306:3306 --name docker_mysql -v /opt/mysql_5.7/conf:/etc/mysql/conf.d -v /opt/mysql_5.7/logs:/logs -v /opt/mysql_5.7/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 -d mysql:5.7

启动完成后,可在容器中登录MySQL。

本地windows连接启动后的mysql

在windows本地机器上也可以链接上MySQL容器。

------ 本文完 ------