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