redis集群

之前项目需要使用redis集群,然后花了时间安装,记录安装步骤和一些坑。

先了解redis集群。

Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。

要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。也就是3主3从节点,由于服务器只有3台,一台2个节点,redis创建集群自动分配节点。

 

一些环境准备:

861ea3ba0815095aa28c6c218e0fb3aa43f.jpg

 

3548bfc55d4930b428187c6c93b3513a016.jpg

 

 

一.服务器环境
三台服务器,设置hosts
172.16.4.45 RJL-Redis1
172.16.4.46 RJL-Redis2
172.16.4.47 RJL-Redis3

修改主机名分三步
1.命令
localhost 主机名
2.修改/etc/sysconfig/network文件
NETWORKING=yes
HOSTNAME=主机名
3.修改/etc/hosts文件
ip 主机名


端口分配及主从分配
RJL-Redis1:7000 master1
RJL-Redis1:7001 slave1
RJL-Redis2:7002 master2
RJL-Redis2:7003 slave2
RJL-Redis3:7004 master3
RJL-Redis3:7005 slave3

二.安装ruby
cd /usr/local
tar –zxvf ruby-2.5.1.tar.gz
cd ruby-2.5.1
./configure
make
sudo make install
ruby -v

三.安装zlib
cd /usr/local
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make
sudo make install

四.修改ruby依赖zlib
cd /usr/local
cd ruby-2.5.1/ext/zlib
ruby ./extconf.rb
make (修改的参数具体如下(否则make操作会报错)zlib.o:$(top_srcdir)/include/ruby.h    ****#将$(topsrcdir)修改为../..****  修改后的具体代码结果如下 zlib.o: ../../include/ruby.h)
sudo make install

五.安装rubygems
cd /usr/local
tar -zxvf rubygems-2.7.7.tgz
cd rubygems-2.7.7
ruby setup.rb

六.安装openssl(可以不用安装)
cd /usr/local
tar -zxvf openssl-1.0.2f.tar.gz
cd openssl-1.0.2f
./config
make
sudo make install
备份旧版openssl
mkdir -p /backup/openssl_old
mv /usr/bin/openssl /backup/openssl_old/
替换新版openssl
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
检查更新后的OpenSSL版本
openssl version

七.ruby依赖openssl(第六步没有安装 省略第七步)
cd /usr/local
cd ruby-2.5.1/ext/openssl
ruby extconf.rb --with-openssl-dir=/usr/local/ssl
make (修改的参数具体如下   ****#将$(topsrcdir)修改为../..**** )
sudo make install


附:关于openssl重新编译
cd /usr/local/openssl-1.0.2f
make clean
./config -fPIC
./config -t
make
sudo make install

八.安装redis-4.0.0.gem
cd /usr/local
gem install -l ./redis-4.0.0.gem

九.安装redis
cd /usr/local
tar –zxvf redis-4.0.11.tar.gz

建立软连接
ln -s redis-4.0.11 redis

指定安装目录到:/usr/local/redis
cd redis
make && make install PREFIX=/usr/local/redis

创建配置节点

RJL-Redis1服务器:
mkdir -p /usr/local/redis/redis_cluster/7000
mkdir -p /usr/local/redis/redis_cluster/7001

cp /usr/local/redis/redis.conf /usr/local/redis/redis_cluster/7000
cp /usr/local/redis/redis.conf /usr/local/redis/redis_cluster/7001

RJL-Redis2服务器:
mkdir -p /usr/local/redis/redis_cluster/7002
mkdir -p /usr/local/redis/redis_cluster/7003

cp /usr/local/redis/redis.conf /usr/local/redis/redis_cluster/7002
cp /usr/local/redis/redis.conf /usr/local/redis/redis_cluster/7003

RJL-Redis3服务器:
mkdir -p /usr/local/redis/redis_cluster/7004
mkdir -p /usr/local/redis/redis_cluster/7005

cp /usr/local/redis/redis.conf /usr/local/redis/redis_cluster/7004
cp /usr/local/redis/redis.conf /usr/local/redis/redis_cluster/7005


修改redis.conf

切记:不能设置密码,否则集群启动时会连接不上

port  7000                                //端口根据对应的文件夹去配制端口 7000,7001,7002,7003,7004,7005      
bind 本机ip                               //根据本机所在的IP或hostname去配制 172.16.4.45  172.16.4.46  172.16.4.47
daemonize    yes                          //redis后台运行
pidfile  /var/run/redis_7000.pid          //pidfile文件对应7000,7001,7002,7003,7004,7005
cluster-enabled  yes                      //开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf      //集群的配置  配置文件首次启动自动生成 7000,7001,7002,7003,7004,7005
cluster-node-timeout  15000               //请求超时  默认15秒,可自行设置
appendonly  yes                           //aof日志开启  有需要就开启,它会每次写操作都记录一条日志


复制src目录中的redis-trib.rb 到/usr/local/redis/bin目录
cp  /usr/local/redis/src/redis-trib.rb /usr/local/redis/bin

启动各个节点
RJL-Redis1服务器:
/usr/local/redis/bin/redis-server /usr/local/redis/redis_cluster/7000/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis/redis_cluster/7001/redis.conf

RJL-Redis2服务器:
/usr/local/redis/bin/redis-server /usr/local/redis/redis_cluster/7002/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis/redis_cluster/7003/redis.conf

RJL-Redis3服务器:
/usr/local/redis/bin/redis-server /usr/local/redis/redis_cluster/7004/redis.conf
/usr/local/redis/bin/redis-server /usr/local/redis/redis_cluster/7005/redis.conf


检查各节点是否启动
查看进程
ps -ef | grep redis

查看端口
netstat -tnlp | grep redis

创建集群
进入RJL-Redis1的bin目录下,执行以下脚本
./redis-trib.rb  create  --replicas  1  172.16.4.45:7000 172.16.4.45:7001  172.16.4.46:7002  172.16.4.46:7003  172.16.4.47:7004  172.16.4.47:7005


集群维护
进入每台服务器的redis/src目录,记住参数  -c不可以少
cd /usr/local/redis/src
./redis-cli -h RJL-Redis1 -p 7000 -c
./redis-cli -h RJL-Redis2 -p 7002 -c
./redis-cli -h RJL-Redis3 -p 7004 -c

关闭节点
cd /usr/local/redis/src
./redis-cli -p 端口号 shutdown

查看集群
cd /usr/local/redis/src
 ./redis-cli -c -p 7000 -h 172.16.4.45 cluster nodes


创建集群问题
1.ERR Slot 3853 is already busy 

只要把redis.conf中定义的 cluster-config-file 所在的文件删除,重新启动redis-server及运行redis-trib即可。

2. ERR Slot 0 is already busy 
用redis-cli 登录到每个节点执行  flushall  和 cluster reset  就可以了。
flushdb
flushall
cluster reset 


 

 

转载于:https://my.oschina.net/905430/blog/3047325

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值