操作系统:CentOS-7-x86_64-Minimal-2009.iso
redis:6.0.8
ip地址 |
端口 |
描述 |
192.168.118.200 |
20300 |
master1 |
192.168.118.200 |
20301 |
slave2。从于192.168.118.201的master |
192.168.118.201 |
20300 |
master2 |
192.168.118.201 |
20301 |
slave3。从于192.168.118.202的master |
192.168.118.202 |
20300 |
master3 |
192.168.118.202 |
20301 |
slave1。从于192.168.118.200的master |
地址规划与结构图:
简单说明:
分别修改3台虚拟机的/etc/hosts文件,添加如下内容
192.168.118.200 node1
192.168.118.201 node2
192.168.118.202 node3
在线安装:三台服务器都执行一下脚本。
#!/bin/bash #将gcc升级到 5.3及以上版本 yum -y install centos-release-scl yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils scl enable devtoolset-9 bash #创建部署目录 mkdir /opt/redis-cluster # 切换目录 cd /opt/redis-cluster #下载redis wget http://download.redis.io/releases/redis-6.0.8.tar.gz tar xzf redis-6.0.8.tar.gz cd redis-6.0.8 # 编译,注意:如果不加MALLOC=libc,会报fatal error: jemalloc/jemalloc.h: 没有那个文件或目录 make MALLOC=libc # 为redis 创建配置目录 mkdir -p /opt/redis-cluster/redis_2030{0,1}/{conf,pid,logs}
1.5.1、配置192.168.118.200的master
创建并编辑redis.cnf文件。vim /opt/redis-cluster/redis_20300/conf/redis.cnf。文件内容如下:
# 守护进行模式启动 daemonize yes # 设置数据库数量,默认数据库为0 databases 16 # 绑定地址,需要修改 bind 192.168.118.200 # 绑定端口,需要修改 port 20300 # pid文件存储位置,文件名需要修改 pidfile /opt/redis-cluster/redis_20300/pid/redis_20300.pid # log文件存储位置,文件名需要修改 logfile /opt/redis-cluster/redis_20300/logs/redis_20300.log # RDB快照备份文件名,文件名需要修改 dbfilename redis_20300.rdb # 本地数据库存储目录,需要修改 dir /opt/redis-cluster/redis_20300 # 集群相关配置 # 是否以集群模式启动 cluster-enabled yes # 集群节点回应最长时间,超过该时间被认为下线 cluster-node-timeout 15000 # 生成的集群节点配置文件名,文件名需要修改 cluster-config-file nodes_20300.conf
1.5.2、配置192.168.118.200的slave
创建并编辑redis.cnf文件。vim /opt/redis-cluster/redis_20301/conf/redis.cnf。文件内容如下:
# 守护进行模式启动 daemonize yes # 设置数据库数量,默认数据库为0 databases 16 # 绑定地址,需要修改 bind 192.168.118.200 # 绑定端口,需要修改 port 20301 # pid文件存储位置,文件名需要修改 pidfile /opt/redis-cluster/redis_20301/pid/redis_20301.pid # log文件存储位置,文件名需要修改 logfile /opt/redis-cluster/redis_20301/logs/redis_20301.log # RDB快照备份文件名,文件名需要修改 dbfilename redis_20301.rdb # 本地数据库存储目录,需要修改 dir /opt/redis-cluster/redis_20301 # 集群相关配置 # 是否以集群模式启动 cluster-enabled yes # 集群节点回应最长时间,超过该时间被认为下线 cluster-node-timeout 15000 # 生成的集群节点配置文件名,文件名需要修改 cluster-config-file nodes_20301.conf
*192.168.118.201和192.168.118.202的master和slave跟192.168.118.200的master和slave一样。bind配置项改成对应的ip
每个节点上执行以下2条命令进行服务启动:
/opt/redis-cluster/redis-6.0.8/src/redis-server /opt/redis-cluster/redis_20300/conf/redis.cnf
/opt/redis-cluster/redis-6.0.8/src/redis-server /opt/redis-cluster/redis_20301/conf/redis.cnf
集群模式启动,进程后会加上[cluster]的字样:
现在虽然说每个服务都成功启动了,但是彼此之间并没有任何联系。
所以下一步要做的就是将6个服务加入至一个集群中,如下操作示例(在任意节点执行都行):一行一行执行
/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node1 -p 20300 #如果已经配置了密码。这里需要先执行:AUTH 你的密码 cluster meet 192.168.118.201 20300 cluster meet 192.168.118.202 20300 cluster meet 192.168.118.200 20301 cluster meet 192.168.118.201 20301 cluster meet 192.168.118.202 20301
结果如图:
6个服务之间并没有任何主从关系,所以现在进行主从配置,记录下上面cluster nodes命令输出的node-id信息,只记录主节点。
hostname |
节点 |
node-id |
node1 |
192.168.118.200:20300 |
3f18f58b536046b66ef8127a8aefd347a0f957ca |
node2 |
192.168.118.201:20300 |
bf6fe478d224fcabbbc29be0fab27f75bf42114f |
node3 |
192.168.118.202:20300 |
7cf1281fd175d93bfbaa130d0b3751866d7e37fb |
配置node1的20301。从于node2的20300。步骤如下:
a、连接node1的20301:/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node1 -p 20301
b、执行:CLUSTER REPLICATE bf6fe478d224fcabbbc29be0fab27f75bf42114f
c、推出连接:exit
配置node2的20301。从于node3的20300。步骤如下:
a、连接node2的20301:/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node2 -p 20301
b、执行:CLUSTER REPLICATE 7cf1281fd175d93bfbaa130d0b3751866d7e37fb
c、推出连接:exit
配置node3的20301。从于node1的20300。步骤如下:
a、连接node3的20301:/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node3 -p 20301
b、执行:CLUSTER REPLICATE 3f18f58b536046b66ef8127a8aefd347a0f957ca
c、推出连接:exit
再次查看节点信息:
接下来我们要开始分配槽位了,为了考虑今后的写入操作能分配均匀,槽位也要进行均匀分配。
仅在Master上进行分配,从库不进行分配,仅做主库的备份和读库使用。
槽位分配情况如下,槽位号从0开始,到16383结束,共16384个槽位,均匀分配:
节点 |
槽位 |
node1 |
0~5461 |
node2 |
5462~10922 |
node3 |
10923~16383 |
/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node1 -p 20300 cluster addslots {0..5461}
/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node2 -p 20300 cluster addslots {5462..10922}
/opt/redis-cluster/redis-6.0.8/src/redis-cli -h node3 -p 20300 cluster addslots {10923..16383}
检查是否正确分配槽位:
检查分配槽位后集群是否正常:如果槽位全部分配完毕应该是ok,不然的话就检查你分配槽位时是否输错了数量。
写入:在node1的20300写入
读取:在node3的20301读取
所有的redis.cnf都添加一下内容
#设置密码 masterauth 123456 requirepass 123456
重新启动redis集群