暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Redis三主三从集群

DevOps架构实战 2021-01-08
3520

Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接。
一组Redis Cluster是由多个Redis实例组成,官方推荐使用6实例,其中3个为主节点,3个为从节点。一旦有主节点发生故障的时候,Redis Cluster可以选举出对应的从节点成为新的主节点,继续对外服务,从而保证服务的高可用性。


1.png


部署环境:


IP地址端口角色Redis版本
10.10.41.1117000redis-master5.0.8
10.10.41.1117001redis-slave5.0.8
10.10.41.1127000redis-master5.0.8
10.10.41.1127001redis-slave5.0.8
10.10.41.1137000redis-master5.0.8
10.10.41.1137001redis-slave5.0.8

1.安装Redis

1、安装C/C++环境
Redis编译时需要使用C/C++环境:
yum install -y gcc gcc-c++ make

2、下载Redis安装包
下载地址:http://download.redis.io/releases/
cd data
wget http://download.redis.io/releases/redis-5.0.8.tar.gz

3、解压、编译
tar -zxvf redis-5.0.8.tar.gz
cd redis-5.0.8
make

4、创建Redis相关工作目录(目录可自定义)
mkdir data/redis-cluster/{data/{redis_7000,redis_7001},conf,log} -p

5、复制redis配置文件
cd redis-5.0.8
cp redis.conf data/redis-cluster/conf/redis_7000.conf
cp redis.conf data/redis-cluster/conf/redis_7001.conf

2.修改Redis配置文件

1、修改redis-master配置文件
vi data/redis-cluster/conf/redis_7000.conf

port 7000             #修改redis监听端口(可以自定义)

bind 0.0.0.0            #表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。
daemonize yes #允许redis后台运行
pidfile var/run/redis_7000.pid #pid存放目录
logfile "/var/log/redis-sentinel.log" #设置Sentinel日志存放路径
dir data/redis-cluster/data/redis_7000 #工作目录
cluster-enabled yes #是否开启集群
cluster-config-file data/redis-cluster/conf/nodes_7000.conf
#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息
#这个文件并不需要手动配置,这个配置文件有Redis生成并更新,
cluster-node-timeout 15000
#节点互连超时的阀值。集群节点超时毫秒数,默认15秒
appendonly yes
#Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,
#每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
requirepass 123456 #设置redis密码
masterauth 123456 #主从同步master的密码(如果没有设置redis密码,则无需配置)

2、修改redis-slave配置文件
vi  /data/redis-cluster/conf/redis_7001.conf   #修改redis-slave配置文件,具体如下:

port 7001

bind 0.0.0.0
daemonize yes
pidfile var/run/redis-cluster/redis_7001.pid
logfile "/data/redis-cluster/log/redis_7001.log"
dir data/redis-cluster/data/redis_7001
cluster-enabled yes
cluster-config-file data/redis-cluster/conf/nodes_7001.conf
cluster-node-timeout 15000
appendonly yes
requirepass 123456
masterauth 123456

3.分发到集群其他服务器

复制redis以及工作目录到其他服务器
scp -r redis-5.0.8 redis-cluster root@10.10.41.112:/data
scp -r redis-5.0.8 redis-cluster root@10.10.41.113:/data

设置软链接,方便启动redis服务
ln -s data/redis-5.0.8/src/redis-server usr/bin/redis-server
ln -s data/redis-5.0.8/src/redis-cli usr/bin/redis-cli

4.启动Redis

集群内每台服务器分别启动两个redis
redis-server data/redis-cluster/conf/redis_7000.conf
redis-server data/redis-cluster/conf/redis_7001.conf
验证是否启动成功
ps -ef | grep redis
查看版本
redis-cli --version
redis-server --version

5.创建Redis Cluster

注意:redis5.0以上集群创建方式改为了C编写的redis-cli创建,不用再安装麻烦的ruby。
创建集群,--cluster-replicas 1指定从库数量1,创建顺序三主-三从。即主-主-主-从-从-从。
如果redis设置了密码,则创建集群时需要添加密码信息 -a 密码:
redis-cli -a 123456 --cluster create 10.10.41.111:7000 10.10.41.112:7000 10.10.41.113:7000 10.10.41.111:7001  10.10.41.112:7001  10.10.41.113:7001 --cluster-replicas 1


2.png


确认集群配置信息,确认无误则输入 yes 并按回车


3.png


出现以上信息,表示集群配置成功。

6验证集群Redis-Cluster

1、登录redis集群
redis-cli -a 123456 -h 10.10.41.111 -p 7000 -c
-a Redis密码,-c表示集群模式 ,指定IP和端口
注意:可能会redirected进入到其它server

2、验证集群信息
10.10.41.111:7000> cluster info      #查看集群信息


4.png


10.10.41.111:7000> cluster nodes    #查看集群节点列表


5.png


查看集群内主从关系:

redis-cli -a 123456 -h 10.10.41.111 -p 7000 -c cluster slots | xargs  -n8 | awk '{print $3":"$4"->"$6":"$7}' | sort -nk2 -t ':' | uniq


3、进行数据验证操作
插入数据:
10.10.41.111:7000> set mykey "Hello Redis"
10.10.41.113:7000> get mykey
登录其他节点查看数据:
redis-cli -a 123456 -h 10.10.41.112 -p 7000 -c
10.10.41.112:7000> get mykey

4、验证集群故障转移
将其中一个redis-master停止掉后、其对应的slave节点会被选举为master节点,旧master节点重新恢复时,其角色会成为slave。具体可自行验证,验证时可开启日志查看相关信息。



文章转载自DevOps架构实战,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论