1.pull redis镜像
docker pull redis
2.配置管理文件
由于服务器数量有限,使用两台服务器,搭配3主3从的方案,分别在两个服务器上采用docker创建3个redis实例。
服务器1上分别创建目录/usr/local/docker_cluster/redis/8091,/usr/local/docker_cluster/redis/8092,/usr/local/docker_cluster/redis/8093,
然后在这个目录下创建conf,data, logs文件夹,用于docker容器挂载目录。
服务器2上分别创建目录/usr/local/docker_cluster/redis/8094,/usr/local/docker_cluster/redis/8095,/usr/local/docker_cluster/redis/8096,
809*为对于redis容器映射到宿主机的端口, 然后分别在这些端口目录下创建conf,data, logs文件夹,用于docker容器挂载目录。
修改redis配置文件:
port 8091
bind 127.0.0.1 xx.xx.xx.xx #对应自己网卡地址
daemonize no #采用docker运行redis,所以这里可以不用设置后台启动
protected-mode no #redis默认是启动保护模式,启用后只能通过回环地址访问,公网禁止访问,启用条件:1.没有bind IP 2. 没有设置访问密码, 所以这里关闭
cluster-enabled yes #开启redis集群支持
cluster-announce-ip xxx.xxx.xxx.xxx #集群中通信ip地址
cluster-announce-port 8091 #集群端口
cluster-announce-bus-port 18091 #集群总线端口
logfile "/usr/redis/log/redis.log" #配置日志文件
同时修改其他端口相应配置文件,并将相应redis配置文件放入conf中。
3.docker使用命令安装redis
创建日志文件,用于映射:
cd /usr/local/docker_cluster/redis/8091/logs
touch redis.log
对宿主机上的挂载目录进行授权:
chmod -R 777 /usr/local/docker_cluster/redis
运行容器命令:
docker run -d --name redis1 --net host --privileged=true -v /usr/local/docker_cluster/redis/8091/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/docker_cluster/redis/8091/data:/data -v /usr/local/docker_cluster/redis/8091/logs/redis.log:/usr/redis/log/redis.log redis redis-server /etc/redis/redis.conf
docker run -d --name redis2 --net host --privileged=true -v /usr/local/docker_cluster/redis/8092/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/docker_cluster/redis/8092/data:/data -v /usr/local/docker_cluster/redis/8092/logs/redis.log:/usr/redis/log/redis.log redis redis-server /etc/redis/redis.conf
docker run -d --name redis3 --net host --privileged=true -v /usr/local/docker_cluster/redis/8093/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/docker_cluster/redis/8093/data:/data -v /usr/local/docker_cluster/redis/8093/logs/redis.log:/usr/redis/log/redis.log redis redis-server /etc/redis/redis.conf
docker run -d --name redis4 --net host --privileged=true -v /usr/local/docker_cluster/redis/8094/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/docker_cluster/redis/8094/data:/data -v /usr/local/docker_cluster/redis/8094/logs/redis.log:/usr/redis/log/redis.log redis redis-server /etc/redis/redis.conf
docker run -d --name redis5 --net host --privileged=true -v /usr/local/docker_cluster/redis/8095/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/docker_cluster/redis/8095/data:/data -v /usr/local/docker_cluster/redis/8095/logs/redis.log:/usr/redis/log/redis.log redis redis-server /etc/redis/redis.conf
docker run -d --name redis6 --net host --privileged=true -v /usr/local/docker_cluster/redis/8096/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/docker_cluster/redis/8096/data:/data -v /usr/local/docker_cluster/redis/8096/logs/redis.log:/usr/redis/log/redis.log redis redis-server /etc/redis/redis.conf
--privileged=true: container内的root拥有真正的root权限。
否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。
甚至允许你在docker容器中启动docker容器。
4.集群创建
进入redis1容器:
docker exec -it redis1 bash
redis-cli -a "xxx" --cluster create 192.168.229.252:8091 192.168.229.252:8092 192.168.229.252:8093 \
192.168.229.252:8096 192.168.229.112:8094 192.168.229.112:8095 --cluster-replicas 1
redis-cli -p 8091 -a "xxx" cluster nodes #集群节点查看命令