上一篇文章Ubuntu上通过源码方式安装Redis已经介绍了如何安装redis,在这篇文章中,将会教大家搭建Redis的几种高可用的架构:主从架构、哨兵集群、Cluster集群。
本篇文章使用的redis版本为6.2.13,不同版本的配置可能有略微的区别,比如replicaof/slaveof。
因为设备有限,只能在一台Ubuntu虚拟机上通过不同端口启动多个redis服务,
注意:
1、配置文件中配置的logfile、dir后面的路径要提前创建好
2、启动redis的命令不要直接复制,否则可能会提示"没有那个文件或目录",自己手敲的命令就可以正常执行(血的教训)。
目录
一、搭建主从架构
主从架构的redis集群模式最低配置是一个master一个slave,所以要启动两个redis服务。
搭建主节点
复制配置文件
切换到redis安装目录,复制一份配置文件
bash
cp redis.conf redis_6379.conf
如下图所示:
修改配置文件
修改一下redis_6379.conf,通过Ctrl+F搜索并修改以下配置。
bash
# bind 127.0.0.1 -::1
protected-mode no
# 设置启动端口号
port 6379
# 设置后台启动
daemonize yes
# 进程ID保存的文件
pidfile /var/run/redis_6379.pid
# 设置日志文件名
logfile "redis_6379.log"
启动主节点
按照上一步修改完redis_6379.config之后,通过下面的命令启动redis
bash
./src/redis-server redis_6379.conf
如图,查看日志文件,redis成功启动了
搭建从节点
复制配置文件
切换到redis安装目录,复制一份配置文件,直接复制之前的6379文件,懒得重复修改一些设置。
bash
cp redis_6379.conf redis_6389.conf
修改配置文件
修改一下redis_6389.conf,通过Ctrl+F搜索并修改以下配置。
bash
# 设置启动端口号
port 6389
# 从节点只能处理读操作,当前版本redis默认开启的配置
replica-read-only yes
# 配置redis主节点ip地址和端口号
replicaof 192.168.254.128 6379
# 进程ID保存的文件
pidfile /var/run/redis_6389.pid
# 保存数据的文件地址
dir /usr/local/redis/6389/data
# 日志文件的文件名
logfile "/usr/local/redis/6389/logs/redis_6389.log"
注意:为了避免文件找不到问题,需要先在/usr/local下创建对应的目录
/redis/6389/data
/redis/6389/logs
启动从节点
通过以下命令启动从节点
java
./src/redis‐server redis_6389.conf
如下图,slave节点成功启动,并从主节点6379同步了数据。
然后在主节点设置几个key,看一下是否会同步到从节点:
通过redis-cli命令连接主节点(默认连接的是端口号是6379的redis节点),可以通过-p指定端口号。第一次使用redis-cli可能会提示安装redis-tools,复制命令回车即可。
设置一个name
从节点上获取name
至此,redis主从架构的搭建就圆满完成了。
二、搭建哨兵集群架构
哨兵集群架构其实就是在主从架构的基础上,引入了哨兵节点,哨兵不处理客户端的读写请求,只负责监控主节点和从节点,当发现主节点挂了,会重新选举一个主节点,选举主节点的过程是通过多个哨兵投票得到的,只有超过半数的哨兵同意选举才能成立,所以哨兵的数量要设置成奇数,防止平票重新选举的情况发生。因此,哨兵集群架构最少要有3个哨兵节点。
增加一个从节点
在第一节主从架构的基础上,再搭建一个redis节点6399。
从6389节点复制一份配置文件
bash
cp redis_6389.conf redis_6399.conf
然后修改下面这些配置就可以了(Ctrl+F搜索替换6389为6399,能偷懒就偷懒~)
bash
port 6399
pidfile /var/run/redis_6399.pid
logfile "/usr/local/redis/6399/logs/redis_6399.log"
dir /usr/local/redis/6399/data
然后输入命令启动
bash
./src/redis‐server redis_6399.conf
同样的,它会从主节点6379同步数据。
搭建哨兵节点
复制sentinel.conf
bash
cp sentinel.conf sentinel_6380.conf
修改设置
bash
port 6380
daemonize yes
logfile "/usr/local/redis/6380/logs/redis_6380.log"
dir /usr/local/redis/6380/data
pidfile /var/run/redis_6380.pid
# 配置主节点ip和端口号,最后一个2表示当哨兵节点中两个通过选举结果时,才设置候选节点为master
# 一般设置成哨兵节点数/2 + 1
sentinel monitor mymaster 192.168.254.128 6379 2
然后按照类似的方法创建两个哨兵节点6390和6400
复制一份sentinel_6380.conf配置文件
bash
cp sentinel_6380.conf sentinel_6390.conf
替换6380为6390,然后同理创建6400
启动哨兵节点
bash
src/redis-sentinel sentinel_6380.conf
src/redis-sentinel sentinel_6390.conf
src/redis-sentinel sentinel_6400.conf
启动完成后,点击任意一个配置文件,发现文件末尾多了一段内容。
查看集群信息
连接6400端口的哨兵节点,通过redis的info命令查看到整个集群的信息
bash
redis-cli -p 6400
info
测试哨兵选主
通过kill命令杀死redis主节点,看一下能否完成新的master选举。
如上图,主节点已经下线了,连接其他两个从节点中任意一个,例如,连接6389
发现6389被设置成了主节点
至此,redis的哨兵集群架构也搭建完成了。
三、搭建高可用集群架构
在这里创建一共九个节点,按照1主2从的比例,刚好3组小集群。
创建所有节点
第一步:在redis安装目录下创建一个cluster目录,复制一份配置文件
bash
cp redis.conf ./cluster/redis_6500.conf
然后修改redis_6500.conf
bash
#bind 127.0.0.1 -::1
protected-mode no
port 6500
daemonize yes
pidfile /var/run/redis_6500.pid
logfile "/usr/local/redis-cluster/6500/logs/redis_6500.log"
dir /usr/local/redis-cluster/6500/data
appendonly yes
# 取消以下设置的注释,并修改对应的值
cluster-enabled yes
cluster-config-file nodes-6500.conf
cluster-node-timeout 15000
接着,只需要复制/cluster/6500.conf就行了,Ctrl+F搜索替换6500为6501、6502、6503、6504、6505、6506、6507、6508,完成其余节点的创建。
bash
cp ./cluster/redis_6500.conf ./cluster/redis_6501.conf
cp ./cluster/redis_6500.conf ./cluster/redis_6502.conf
cp ./cluster/redis_6500.conf ./cluster/redis_6503.conf
cp ./cluster/redis_6500.conf ./cluster/redis_6504.conf
cp ./cluster/redis_6500.conf ./cluster/redis_6505.conf
cp ./cluster/redis_6500.conf ./cluster/redis_6506.conf
cp ./cluster/redis_6500.conf ./cluster/redis_6507.conf
cp ./cluster/redis_6500.conf ./cluster/redis_6508.conf
如图所示
然后尝试启动一下其中任意一个服务,看一下日志是否有报错,保证配置文件没有问题。
然后,依次启动6501-6508的节点。
通过ps命令查看到所有节点都启动了
创建一个集群
通过命令将刚刚启动的9个节点加入到一个集群中。
--cluster-replicas指定每个小集群的从节点数量,开头已经说了,是按照3组1主2从的结构搭建集群,所以这里指定的值为2
bash
./src/redis-cli --cluster create 192.168.254.128:6500 192.168.254.128:6501 192.168.254.128:6502 192.168.254.128:6503 192.168.254.128:6504 192.168.254.128:6505 192.168.254.128:6506 192.168.254.128:6507 192.168.254.128:6508 --cluster-replicas 2
如图,前面三个节点被设置成了主节点,因为多个主、从节点都在一台机器上,所以有黄色的Warning。
根据提示输入yes开始创建集群,如图,集群就搭建好了
注意:集群模式下连接redis客户端的命令有点不同
bash
./src/redis-cli -c -h 192.168.254.128 -p 6505
-c 表示通过集群模式连接
-h 指定服务器ip地址
为了保证节点数据的安全,集群的节点不会全部都部署在在本机,而且主、从节点一般不会是同一个服务器下的redis服务,因为一旦这台机器坏了,那么这个分片的数据将全部丢失。
因为从节点只负责备份数据,不会处理请求,所以在连接从节点6505执行命令时,会自动重定向到他的主节点6501(6500-6502是主节点,也就是创建集群指定的前3个节点)。
最后介绍两个命令
bash
cluster info # 查看集群信息
cluster nodes # 查看集群的节点
至此,Redis的高可用集群也搭建完成了。
四、集群水平扩展
在此之前,要在/user/local/redis-cluster目录下创建目录/6509/logs和/6509/data。
复制一份之前的配置文件
bash
cp ./cluster/redis_6508.conf ./cluster/redis_6509.conf
然后Ctrl+F替换
最后Ctrl + S保存文件内容改变,保存成功右上角会有上传成功的提示。
然后启动6509节点
bash
./src/redis-server ./cluster/redis_6509.conf
添加集群节点
当有新的节点添加到cluster集群,默认是master节点,通过add-node命令来添加节点,第一个ip:端口号表示待加入的节点,第二个ip:端口号为集群中任意一个节点。
添加刚刚创建的6509到集群
bash
redis-cli --cluster add-node 192.168.254.128:6509 192.168.254.128:6500
设置为从节点
连接6509
bash
redis-cli -c -h 192.168.254.128 -p 6509
查看集群节点信息
bash
cluster nodes
设置6509节点的主节点为6500
bash
cluster replicate 节点ID
节点ID就是上图红框内的一长串字符串
bash
cluster replicate cbce6fa89b45e4406db54862fed9c1e452ddba4e
然后再查看集群节点
删除集群节点
可以通过del-node命令删除集群中的节点,第一个参数是节点的ip:端口号,第二个参数是节点的ID
bash
redis-cli --cluster del-node 192.168.254.128:6509 25c2ccdd1bed9536475e9e1a0b9d17b001654aa1
当删除主节点时,需要把数据迁移到其他从节点,保证数据不丢失,也就是通过下一个部分给节点重新分片。
节点重新分片
bash
redis-cli --cluster reshared 192.168.254.128:6509
好了,文章就分享到这里了,看完不要点赞+收藏哦~