在测试和研发环境搭建单机Redis集群,简单易懂、方便使用。
1,通过二进制安装docker环境
官网下载静态二进制文件:
https://download.docker.com/linux/static/stable/x86_64/docker-20.10.3.tgz
1.1,上传静态二进制文件到服务器 /home/admin
1.2,提取解压文件
$ tar -zxf /home/admin/docker-20.10.3.tgz
1.3,将二进制文件移到可执行路径上的目录
$ cp /home/admin/docker/* /usr/bin/
1.4,编辑docker文件
$ cat>> /etc/systemd/system/docker.service<<\EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF
1.5,添加可执行权限
$ chmod +x /etc/systemd/system/docker.service -R
1.6,启动docker
$ systemctl start docker
常用参数
systemctl daemon-reload //重载配置文件
systemctl start docker //启动Docker
systemctl stop docker //关闭docker
systemctl restart docker //重启docker
systemctl enable docker.service //设置开机自启
systemctl status docker //查看Docker状态
1.7,执行docker命令,验证是否安装成功
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2,安装redis
2.1,在可联网并安装有docker的服务器,拉取redis镜像后再导出镜像
//拉取镜像
$ docker pull redis:6.0.12
//导出镜像
$ docker sava -o redis.tar redis:6.0.12
2.2,上传docker导出的redis镜像到待部署的服务器 /home/admin/
2.2,加载导出的redis镜像
//加载镜像
$ docker load -i redis.tar
2.3,删除/home/admin/docker/的所有内容
(因为上面进行复制到执行路径 /usr/bin/ 下的操作)
$ rm -rf /home/admin/docker/*
2.4,创建虚拟网卡
(搭建桥接模式)
$ docker network create redis-net
2.5,创建redis配置文件模板
$ mkdir -p /home/admin/docker/redis-cluster
$ cd /home/admin/docker/redis-cluster
$ cat >>redis-cluster.tmpl<<\EOF
port ${PORT}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip #写入本机ip
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
EOF
**各节点解释如下所示:**
port:节点端口,即对外提供通信的端口
cluster-enabled:是否启用集群
cluster-config-file:集群配置文件
cluster-node-timeout:连接超时时间
cluster-announce-ip:集群各节点IP地址
cluster-announce-port:集群节点映射端口
cluster-announce-bus-port:集群总线端口
appendonly:持久化模式
cluster-announce-ip:这个IP需要特别注意一下,如果要对外提供访问功能,需要填写宿主机的IP,如果填写docker分配的IP(172.x.x.x),可能会导致部分集群节点在跳转时失败。
2.6,创建节点配置文件
在redis-cluser中执行以下命令
for port in $(seq 6379 6384); \
do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
给创建的节点添加权限
$ chmod -R 777 63*
2.7,创建redis节点容器
for port in $(seq 6379 6384); \
do \
docker run -it -d -p ${port}:${port} -p 1${port}:1${port} \
--privileged=true -v /home/admin/docker/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
--privileged=true -v /home/admin/docker/redis-cluster/${port}/data:/data \
--restart always --name redis-${port} --net redis-net \
--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done
2.8,验证是否创建成功
$ docker ps -a
2.9,创建redis-cluster集群
进入Docker容器命令行
$ docker exec -it redis-6379 bash
root@635dd07f5d6d:/data#
进入容器目录
cd /usr/local/bin
redis-cli命令创建redis cluster集群(注意:此时redis集群默认平均分片后,redis节点都是Master,可以通过添加集群节点设置主从关系)
/usr/local/bin/redis-cli --cluster create ip:6379 ip:6380 ip:6381 ip:6382 ip:6383 ip:6384 --cluster-replicas 1
连接集群的某一个节点
$ redis-cli -c -h 192.168.161.249 -p 6379
ip:6379> set aa aa
OK
ip:6379> get aa
"aa"
ip:6379>
查看集群信息
//集群状态
$ redis-cli -c -h 10.10.18.118 -p 6379 cluster info
//集群节点信息
$ redis-cli -c -h 10.10.18.118 -p 6379 cluster nodes
//添加节点
$ redis-cli --cluster add-node 新节点IP:端口 集群某节点IP:端口
//指定主从关系
$ redis-cli -h 从节点IP -p 从节点端口 cluster replicate 主节点ID