Redis主从复制集群搭建(一主二从模式)
参考资料:
https://blog.csdn.net/yhk724555508/article/details/85338706
1. 集群搭建
(1)安装docker
yum -y install docker
systemctl restart docker
(2)拉取Redis镜像
docker search redis
docker pull dokcer.io/redis
(3)在主节点上分别安装redis容器:
在主节点执行:
docker run --net=host --name=master \
-v $PWD/data/redis-master/:/data \
-p 6379:6379 \
-d docker.io/redis:latest redis-server
在第一、二个从节点执行:
docker run --net=host --name=slave1 \
-v $PWD/data/redis-slave1/:/data \
-p 6379:6379 \
-d docker.io/redis:latest redis-server
docker run --net=host --name=slave2 \
-v $PWD/data/redis-slave2/:/data \
-p 6379:6379 \
-d docker.io/redis:latest redis-server
(4)使用docker inspect命令来查看主节点(master)容器的信息
在主节点上执行:
docker inspect master
从现实的mater容器的信息可看到,该容器的“IPAddress”项为空,这是因为我们在创建master容器时,指令中有“ --net=host ”,这使得容器的ip即为虚拟机的内网ip。因此,可通过“ifconfig”指令来查看虚拟的ip,此即为容器master的ip。
(5)执行以下指令,进入master容器内部,查看当前节点的redis的角色,因为现在三个节点上的Redis相互独立,还未组建成一个集群,因此其角色都为“master”:
进入容器:
docker exec -it master bash
进入Redis shell:
redis-cli
查看Redis信息:
info replication
(6)分别进入其余两个节点(slave1、slave2节点),查看其在Redis集群中的角色,并执行“SLAVEOF master_ip master_port来将其加入Redis集群”
进入容器:
docker exec -it slave1 bash
进入Redis shell:
redis-cli
查看Redis信息:
info replication
将Redis加入集群:
SLAVEOF 192.168.100.163 6379
(7)在主节点(master)上执行“info replication”指令来查看集群信息:
查看Redis集群信息:
info replication
此时,可以看到Redis集群已经有两个salve节点了。
2. 集群测试
(1)新建并运行Java项目,向redis集群主节点(master节点)写入数据并获取返回值:
public static void main(String[] args) {
//设置IP地址和端口
Jedis jedis=new Jedis("192.168.100.163",6379);
jedis.set("name","yangkang");
jedis.set("Sex","Male");
jedis.set("age","8000");
jedis.set("collage","xibeigongyedaxue");
// 获取数据
String name=jedis.get("name");
System.out.println("name="+name);
String Sex=jedis.get("Sex");
System.out.println("data="+Sex);
String age=jedis.get("age");
System.out.println("name="+age);
String collage=jedis.get("collage");
System.out.println("data="+collage);
jedis.close();
}
控制台输出的返回值为:
登录主节点(master节点)查看所有key值及value值:
进入容器:
docker exec -it master bash
进入redis shell:
redis-cli
查看所有key值:
KEYS *
获取key值name对应的valuse值:
get name
可以看到key值name对应的value值为"yangkang"
此时在两个从节点(slave1节点、slave2节点)输入相同的指令,如果可以看到相同的key值以及value值,则说明Redis主从复制成功。