redis部署和redis-cluser集群
1.下载redis到 /usr/local
1.1 解压redis压缩包
tar -zxvf xxxx(redis压缩包名字)
1.2 执行make命令
进入解压后的文件夹
make
出现错误‘struct redisServer’没有名为‘server_xxx’的成员
(没出错就跳过)
应该是环境问题
安装gcc套装:
yum install cpp
yum install binutils
yum install glibc
yum install glibc-kernheaders
yum install glibc-common
yum install glibc-devel
yum install gcc
yum install make
升级gcc
yum -y install centos-release-scl
yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
scl enable devtoolset-9 bash
我这里直接执行 scl enable devtoolset-9 bash就可以了
make成功.
1.3 执行make install
make install
看到以下信息说明编译成功
INSTALL install
INSTALL install
INSTALL install
INSTALL install
INSTALL install
make[1]: 离开目录“/usr/local/redis-6.0.9/src”
1.4启动redis
redis-server redis.config
界面出现redis图标和端口等信息表示部署成功
2.搭建redis-cluser集群
1.修改redis-config文件
redis版本 6.0.9
a)远程访问需要把bind注释掉
bind 127.0.0.1 修改为 # bind 127.0.0.1
b)修改端口号
port 6379 #修改为 port xxxx(因为是每个服务器一台redis所有端口号就不用修改)
c)默认启动时为后台启动,yes为后台启动
daemonize no 修改为 daemonize yes
d)指定进程信息存储文件
pidfile /var/run/redis_6379.pid #修改为 pidfile /var/run/redis_xxxx.pid(同端口号,不用修改)
e)指定日志文件
logfile "" 修改为 logfile "/usr/local/redis-6.0.9/log/redis-6379.log"
f)指定数据文件路径
dir ./ 修改为 dir "/usr/local/redis-6.0.9/data"
g)指定rdb持久化文件名(会自动生成到dir指定的路径下)
dbfilename dump.rdb 修改为 dbfilename "dump-xxxx.rdb"(同上)
h)指定aof持久化文件名(默认情况不会生成,因为默认 appendonly no)
appendfilename "appendonly.aof" 修改为 appendfilename "appendonly-xxxx.aof"(同上))
i)以集群方式启动
# cluster-enabled yes 将前面的 # 去掉
j)集群节点nodes信息配置文件(是自动生成的)
# cluster-config-file nodes-6379.conf 修改为 cluster-config-file "/usr/local/redis-6.0.6/node/nodes-7000.conf"
k)设置访问密码(也可不改,启动redis集群后,登录各节点,通过config set命令设置)
#requirepass foobared 修改为 requirepass redis123
注意不设置密码的时候需要将远程访问保护关掉 protected-mode yes 修改为 protected-mode no
- 启动redis
redis-server redis.conf
ps -ef | grep redis #查看redis后台启动成功一
3.搭建集群
-a redis123 在没有设置密码的时候就不用加
./redis-cli --cluster create 192.168.xx.xx:6379 192.168.xx.xx:6379 192.168.xx.xx:6379 192.168.xx.xx:6379 192.168.xx.xx:6379 192.168.xx.xx:6379 --cluster-replicas 1 -a redis123
3主3从:结果如下
M: 8fa3871bc025600831990f70730298f190a96ff2 192.168.xx.xx:6379
slots:[0-5460] (5461 slots) master
1 additional replica(s)
M: 2934bd329608ca52899ec38b0c83016b5d0d8d11 192.168.xx.xx:6379
slots:[5461-10922] (5462 slots) master
1 additional replica(s)
S: 6fa51f64ad79e08ec08b0f4cd6f6502912f71bb2 192.168.xx.xx:6379
slots: (0 slots) slave
replicates 8fa3871bc025600831990f70730298f190a96ff2
S: 15bf301d46f77bcf18cfea19e70ffdae9a3ab277 192.168.xx.xx:6379
slots: (0 slots) slave
replicates 2934bd329608ca52899ec38b0c83016b5d0d8d11
M: 9fa6d53054f0fc7affcce9dc02896ab0b34998d5 192.168.xx.xx:6379
slots:[10923-16383] (5461 slots) master
1 additional replica(s)
S: ad46a56b7b132022901795879b9da74437ae9ed4 192.168.xx.xx:6379
slots: (0 slots) slave
replicates 9fa6d53054f0fc7affcce9dc02896ab0b34998d5
查看集群
./redis-cli -h 192.168.xx.xx -p 6379 -a redis123 cluster nodes
2934bd329608ca52899ec38b0c83016b5d0d8d11 192.168.xx.xx:6379@16379 master - 0 1606377299000 2 connected 5461-10922
6fa51f64ad79e08ec08b0f4cd6f6502912f71bb2 192.168.xx.xx:6379@16379 slave 8fa3871bc025600831990f70730298f190a96ff2 0 1606377300000 1 connected
15bf301d46f77bcf18cfea19e70ffdae9a3ab277 192.168.xx.xx:6379@16379 slave 2934bd329608ca52899ec38b0c83016b5d0d8d11 0 1606377299443 2 connected
9fa6d53054f0fc7affcce9dc02896ab0b34998d5 192.168.xx.xx:6379@16379 master - 0 1606377300447 3 connected 10923-16383
8fa3871bc025600831990f70730298f190a96ff2 192.168.xx.xx:6379@16379 myself,master - 0 1606377301000 1 connected 0-5460
ad46a56b7b132022901795879b9da74437ae9ed4 192.168.xx.xx:6379@16379 slave 9fa6d53054f0fc7affcce9dc02896ab0b34998d5 0 1606377301449 3 connected
4.验证
就互相存/读,会有看到有redis重定向
总结
redis-cluser集群是分布式分片存储数据
在主从和哨兵的基础上,采用分片规则存储到不同的主从里
每一个cluster都是一个哨兵的主从,分配自己对应的槽点
cluster1覆盖1365-5460
cluster2覆盖6827-10922
cluster3覆盖12288-16383
大致如上,在存入key/value时,会根据一个哈希算法:CRC16(‘key’)%16384 = 2412
算出一个值,然后分配到对应槽点.同理,读数据时根据这个值去找对应槽点的cluster,以重定向的方式.
并且在主节点挂掉之后会选举从节点马上上任主节点,从而实现redis的高可用