Redis单点/主从/Sentinel架构/集群搭建完整版
搭建环境
Linux版本: Centos 3.10.0-862.el7.x86_64
Redis版本: redis-3.2.8
[wget http://download.redis.io/releases/redis-3.2.8.tar.gz]
C 程序运行环境:
yum -y install gcc-c++
需要安装较新版本tcl:
- 在线安装:yum -y install tcl
- 下载安装包安装:
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar -zxvf tcl8.6.1-src.tar.gz -C …/servers/
cd …/servers/tcl8.6.1/unix/
./configure
make && make install
下载解压
在其中一台节点上:
我们这里是node01(目录结构自行创建)
cd /export/softwares
tar -zxvf redis-3.2.8.tar.gz -C …/servers/
单点安装-修改配置文件(重点)
#进入解压后的根目录
cd /export/servers/redis-3.2.8/
#创建两个文件夹,一个是logs,一个是redisdata,下面配置文件需要用到
mkdir -p /export/servers/redis-3.2.8/logs
mkdir -p /export/servers/redis-3.2.8/redisdata
#编辑配置文件
vim redis.conf
[root@node01 redis-3.2.8]# cat redis.conf | grep -v "#"
#绑定本机
bind node01
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/export/servers/redis-3.2.8/logs/redis.log"
dir /export/servers/redis-3.2.8/redisdata
启动/关闭
cd /export/servers/redis-3.2.8/src
redis-cli -h node01
主从配置
集群主从分配
node01:主节点
node02:从节点
node03:从节点
node02与node03执行以下命令安装依赖环境
yum -y install gcc-c++
上传解压编译,步骤跟单节点一样,也可以通过以下命令拷贝到另外两个节点:
scp -r /export/servers/redis-3.2.8 node02:
P
W
D
s
c
p
−
r
/
e
x
p
o
r
t
/
s
e
r
v
e
r
s
/
r
e
d
i
s
−
3.2.8
n
o
d
e
03
:
PWD scp -r /export/servers/redis-3.2.8 node03:
PWDscp−r/export/servers/redis−3.2.8node03:PWD
修改配置文件(重点)
#绑定本机
bind node02
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/export/servers/redis-3.2.8/logs/redis.log"
dir /export/servers/redis-3.2.8/redisdata
#绑定主节点为node01
slaveof node01 6379
#绑定本机
bind node03
daemonize yes
pidfile /var/run/redis_6379.pid
logfile "/export/servers/redis-3.2.8/logs/redis.log"
dir /export/servers/redis-3.2.8/redisdata
#绑定主节点为node01
slaveof node01 6379
启动node02与node03机器的redis服务
node02执行以下命令启动redis服务
cd /export/servers/redis-3.2.8/src
redis-server …/redis.conf
node03执行以下命令启动redis服务
cd /export/servers/redis-3.2.8/src
redis-server …/redis.conf
启动成功便可以实现redis的主从复制,node01可以读写操作,node02与node03只支持读取操作
Sentinel架构搭建
三台机器执行以下命令修改redis的哨兵配置文件
cd /export/servers/redis-3.2.8
vim sentinel.conf
# 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,192.168.11.128代表监控的主服务器,6379代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
#修改bind配置,每台机器修改为自己对应的主机名
bind node01
#配置sentinel服务后台运行
daemonize yes
#修改三台机器监控的主节点,现在主节点是node01服务器
sentinel monitor mymaster node01 6379 2
# sentinel author-pass定义服务的密码,mymaster是服务名称,123456是Redis服务器密码
# sentinel auth-pass <master-name> <password>
启动哨兵
cd /export/servers/redis-3.2.8
src/redis-sentinel sentinel.conf
使用kill -9命令杀死redis服务进程,模拟redis故障宕机情况
过一段时间之后,就会在node02与node03服务器选择一台服务器来切换为主节点
redis集群搭建
由于redis集群当中最少需要三个主节点,每个主节点,最少需要一个对应的从节点,所以搭建redis集群最少需要三主三从的配置,所以redis集群最少需要6台redis的实例,我们这里使用三台机器,每台服务器上面运行两个redis的实例。我们这里使用node01服务器,通过配置不同的端口,实现redis集群的环境搭建
node01服务器解压redis压缩包
#node01执行以下命令重新解压redis压缩包到/export路径下(这里需要重新创建一个目录)
cd /export/softwares/
tar -zxf redis-3.2.8.tar.gz -C /export/
node01执行以下命令安装redis的依赖环境
yum -y install gcc-c++ tcl
对redis进行编译
cd /export/redis-3.2.8
make && make install
创建redis不同实例的配置文件夹
创建文件夹,并将redis的配置文件拷贝到以下这些目录
cd /export/redis-3.2.8
mkdir -p /export/redis-3.2.8/clusters/7001
mkdir -p /export/redis-3.2.8/clusters/7002
mkdir -p /export/redis-3.2.8/clusters/7003
mkdir -p /export/redis-3.2.8/clusters/7004
mkdir -p /export/redis-3.2.8/clusters/7005
mkdir -p /export/redis-3.2.8/clusters/7006
修改redis的六个配置文件
node01执行以下命令修改redis的配置文件
mkdir -p /export/redis-3.2.8/logs
mkdir -p /export/redis-3.2.8/redisdata/7001
mkdir -p /export/redis-3.2.8/redisdata/7002
mkdir -p /export/redis-3.2.8/redisdata/7003
mkdir -p /export/redis-3.2.8/redisdata/7004
mkdir -p /export/redis-3.2.8/redisdata/7005
mkdir -p /export/redis-3.2.8/redisdata/7006
第一个配置文件修改(其他节点配置端口修改即可),主要配置参数如下
vim /export/redis-3.2.8/redis.conf
bind node01
port 7001
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /var/run/redis_7001.pid
logfile "/export/redis-3.2.8/logs/7001.log"
dir /export/redis-3.2.8/redisdata/7001
将修改后的文件拷贝到对应的文件夹下面去
cp /export/redis-3.2.8/redis.conf /export/redis-3.2.8/clusters/7001
启动redis进程
node01执行以下命令来启动redis集群
cd /export/redis-3.2.8
src/redis-server clusters/7001/redis.conf
src/redis-server clusters/7002/redis.conf
src/redis-server clusters/7003/redis.conf
src/redis-server clusters/7004/redis.conf
src/redis-server clusters/7005/redis.conf
src/redis-server clusters/7006/redis.conf
安装ruby运行环境
node01执行以下命令,安装ruby运行环境,因为redis集群的启动需要借助ruby的环境
yum install ruby
yum install rubygems
gem install redis
可能会出现下面的情况:
解决方法:
这时,需要升级Ruby版本
node01执行以下命令升级ruby版本
cd /export/redis-3.2.8
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
rvm list known
rvm install 2.4.1
创建集群
node01执行以下命令创建redis集群
cd /export/redis-3.2.8
gem install redis
src/redis-trib.rb create --replicas 1 node01:7001 node01:7002 node01:7003 192.168.100.100:7004 node01:7005 node01:7006
连接redis客户端
node01执行以下命令连接redis客户端
cd /export/redis-3.2.8
src/redis-cli -h node01 -c -p 7001
redis集群管理
添加一个新节点作为主节点
启动新节点的redis服务,然后添加到集群当中去
启动服务
src/redis-server clusters/7007/redis.conf
src/redis-trib.rb add-node node01:7007 node01:7001
添加一个新节点作为副本
src/redis-server clusters/7008/redis.conf
src/redis-trib.rb add-node --slave node01:7008 node01:7001
删除一个节点
命令格式
src/redis-trib del-node 127.0.0.1:7000 <node-id>
src/redis-trib.rb del-node node01:7008 7c7b7f68bc56bf24cbb36b599d2e2d97b26c5540
重新分片
./redis-trib.rb reshard node01:7001
./redis-trib.rb reshard --from --to --slots --yes :