12.1 环境
准备2个虚拟机。简单的方法,克隆一个虚拟机,改一下ip,重启网络
vi /etc/sysconfig/network-scripts/ifcfg-ens32 #打开网络配置文件进行编辑 ......#改完后保存退出 systemctl restart network
12.2 编辑redis配置文件。
12.2.1 两个虚拟机都需要操作。
创建目录和文件
mkdir -p /usr/local/docker-redis/redis-cluster cd /usr/local/docker-redis/redis-cluster ls #确认没有是空文件夹 vi redis-cluster.tmpl #编辑
port ${PORT} requirepass 1234 masterauth 1234 protected-mode no daemonize no appendonly yes cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000 cluster-announce-ip 192.168.146.10 cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT}
-
port:节点端口
-
requirepass:添加访问认证
-
masterauth:如果主节点开启了访问认证,从节点访问主节点需要认证
-
protected-mode:保护模式。默认值yes,即开启,开启后,需配置bind ip或者设置访问密码;若关闭,外部网络可以直接访问。
-
daemonize:是否以守护线程的方式启动(后台启动),默认no;
-
appendonly:是否开启AOF持久化模式,默认no;
-
cluster-enabled:是否开启集群,默认no;
-
cluster-config-file:集群节点信息文件;
-
cluster-node-timeout:集群节点连接超时时间;
-
cluster-announce-ip:集群节点IP,填写宿主机的IP;
-
cluster-announce-port:集群节点映射端口;
-
cluster-announce-bus-port:集群节点总线端口。
12.2.2 分别在2个虚拟机,redis-cluster目录下执行:
for port in `seq 6471 6473`;do \ mkdir -p ${port}/conf \ && PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \ && mkdir -p ${port}/data;\ done
for port in `seq 6474 6476`;do \ mkdir -p ${port}/conf \ && PORT=${port} envsubst < redis-cluster.tmpl > ${port}/conf/redis.conf \ && mkdir -p ${port}/data;\ done
12.2.3
#安装tree命令 yum install -y tree #查看目录结构 tree /usr/local/docker-redis/redis-cluster #查看各个节点的详细信息 cat /usr/local/docker-redis/redis-cluster/647{1..3}/conf/redis.conf
12.3 创建redis容器
for port in $(seq 6471 6473);do \ docker run -di --restart always --name redis-${port} --net host \ -v /usr/local/docker-redis/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v /usr/local/docker-redis/redis-cluster/${port}/data:/data \ redis redis-server /usr/local/etc/redis/redis.conf; \ done
for port in $(seq 6474 6476);do \ docker run -di --name redis-${port} --net host \ -v /usr/local/docker-redis/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v /usr/local/docker-redis/redis-cluster/${port}/data:/data \ redis redis-server /usr/local/etc/redis/redis.conf; \ done
12.4 创建集群
#进入容器 docker exec -it redis-6474 bash #切换目录 cd /usr/local/bin/ #创建。如果出现拒绝连接,可以关闭防火墙。 redis-cli -a 1234 --cluster create 192.168.146.10:6471 192.168.146.10:6472 192.168.146.10:6473 192.168.146.11:6474 192.168.146.11:6475 192.168.146.11:6476 --cluster-replicas 1
如果出现拒绝连接,可以关闭防火墙,如下。
#永久关闭 firewalld防火墙 systemctl stop firewalld.service #停止firewalld服务 systemctl disable firewalld.service # 开机禁用firewalld服务 #永久关闭SELinux防火墙 vi /etc/sysconfig/selinux SELINUX=disabled #重启 reboot #给/etc/rc.d/rc.local 文件设置 “x”可执行权限 chmod +x /etc/rc.d/rc.local
查看集群状态
redis-cli -a 1234 --cluster check 192.168.146.11:6475
简单应用redis,set/get
#进入容器并连接至集群某个节点 docker exec -it redis-6471 /usr/local/bin/redis-cli -c -a 1234 -h 192.168.146.10 -p 6471 #写入数据 set name hello set aaa 111 set bbb 222 #读取数据 get name get bbb get ccc