环境准备
操作系统:CentOS6.5
三台虚拟机IP:192.168.105.136,192.168.105.137,192.168.105.152
下载redis
官方网址:https://redis.io/download
本文所用到的版本为:redis-4.0.9.tar.gz
下载成功后在系统(192.168.105.152)上创建一个目录
[root@malonglong /]# mkdir redis
然后将安装包redis-4.0.9.tar.gz拷贝到redis目录下
[root@malonglong redis]# pwd
/redis
[root@malonglong redis]# ls
redis-4.0.9.tar.gz
安装gcc
[root@malonglong redis]# yum install gcc
Is this ok [y/N]: y
安装pstree
[root@malonglong redis]# yum install psmisc
Is this ok [y/N]: y
解压redis tar包
[root@malonglong redis]# tar -zxvf redis-4.0.9.tar.gz
编译安装
[root@malonglong redis-4.0.9]# make
[root@malonglong redis-4.0.9]# make install
启动redis
[root@malonglong src]# redis-server /redis/redis-4.0.9/redis.conf
启动成功后,如下图
打开redis客户端进行测试
以上表示已经启动成功,而且能正常使用。
在linux上安装redis相对来说比较简单,这一步大家应该都能搞定。
Redis集群
redis集群要求至少3主3从,这里我使用三台机器,每台机器安装三个redis节点。
因为redis集群需要安装ruby,配置集群,所以在一台机器上安装好之后,再拷贝其它两台机器,这样我们做的重复工作就比较少了,以下为三个机器的各个节点。
192.168.105.136:6001
192.168.105.136:6002
192.168.105.136:6003
192.168.105.137:6004
192.168.105.137:6005
192.168.105.137:6006
192.168.105.152:6007
192.168.105.152:6008
192.168.105.152:6009
安装ruby
[root@malonglong redis-4.0.9]# yum -y install ruby ruby-devel rubygems rpm-build
[root@malonglong redis-4.0.9]# gem install redis
安装过程中出现了一个错误
Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2,解决办法是 先安装rvm,再把ruby版本提升至2.4.0,解决方法如下
1. 安装curl
[root@malonglong ~]# sudo yum install curl
Is this ok [y/N]: y
2. 安装rvm
此过程如果出现 curl: (35) SSL connect error 升级网络安全服务即可
[root@malonglong ~]# yum update nss
Is this ok [y/N]: y
如果出现gpg: Can't check signature: No public key,执行以下即可解决此问题
[root@malonglong ~]# command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -
3. 添加source
[root@malonglong ~]# source /usr/local/rvm/scripts/rvm
4. 查看rvm库中已知的ruby版本
[root@malonglong ~]# rvm list known
5. 安装一个ruby版本
[root@malonglong ~]# rvm install 2.4.0
6. 使用一个ruby版本
[root@malonglong ~]# rvm use 2.4.0
7. 卸载一个已知版本
[root@malonglong ~]# rvm remove 2.2.2
8. 查看版本
[root@malonglong ~]# ruby --version
9. 再安装redis
[root@malonglong ~]# gem install redis
安装成功,如下图
修改redis.conf
打开redis.conf文件,把下面列出来的配置项全部注释掉,将下面7条拷贝到redis.conf文件末尾
port 6007
bind 192.168.105.152
daemonize yes
cluster-enabled yes
cluster-config-file nodes-6007.conf
cluster-node-timeout 15000
pidfile /var/run/redis_6007.pid
创建redis节点
1. 在redis目录下创建文件夹6007,6008,6009
[root@malonglong redis-4.0.9]# mkdir 6007 6008 6009
在每个文件夹下面拷贝一个redis.conf文件,将以下3条中对应的端口修改成各自的节点端口
port 6008
cluster-config-file nodes-6008.conf
pidfile /var/run/redis_6008.pid
每个节点对应一个redis.conf文件,有多少个节点需要修改多少 次,修改后如下图所示
修改完成后启动对应的节点,启动时显性启动
[root@malonglong src]# redis-server /redis/redis-4.0.9/6007/redis.conf
[root@malonglong src]# redis-server /redis/redis-4.0.9/6008/redis.conf
[root@malonglong src]# redis-server /redis/redis-4.0.9/6009/redis.conf
检查各 Redis节点的启动情况
[root@malonglong ~]# ps aux|grep redis
从上图可知192.168.105.152上的三个redis节点运行正常。
克隆系统
克隆两台操作系统,并且每台系统的redis.conf中的bind修改成对应的IP,port修改成对应的端口。
开端口
所有服务器需要开通redis的客户端连接端口和集群总线端口,集群总线端口为redis客户端连接的端口 +10000,如redis端口为6007,则集群总线端口为16007
启动集群
启动集群之前每台服务器上的redis节点都需要启动。
[root@malonglong ~]# /redis/redis-4.0.9/src/redis-trib.rb create --replicas 1 192.168.105.136:6001 192.168.105.136:6002 192.168.105.136:6003 192.168.105.137:6004 192.168.105.137:6005 192.168.105.137:6006 192.168.105.152:6007 192.168.105.152:6008 192.168.105.152:6009
创建集群时出现了一个错误,如下图
此问题的原因是rubygem没有安装
[root@malonglong ~]# yum install -y rubygems
继续创建集群,出现如下图错误
出现此问题的原因是:安装完redis后,对其进行过操作,有数据存在。
解决方法
1. 删除此路径下的 pidfile /var/run/redis_*.pid 文件
2. 删除dbfilename dump.rdb文件
3. 重启redis
继续创建集群,还是有点问题
/usr/local/rvm/gems/ruby-2.4.0/gems/redis-4.0.1/lib/redis/client.rb:119:in `call': ERR Slot 14935 is already busy (Redis::CommandError)
造成此问题的原因是:上一次配置集群失败时留下的配置信息导致的,删除nodes-*.conf文件,重启redis节点。
将所有集群节点的配置文件(nodes-*.conf)删除就可以了。好了,集群已创建成功
仔细观察这张图,其中
192.168.105.136:6001
192.168.105.137:6004
192.168.105.152:6007
192.168.105.136:6002
被自动设置成了主节点
192.168.105.136:6003
192.168.105.137:6005
192.168.105.137:6006
192.168.105.152:6008
192.168.105.152:6009
被自动设置成了从节点,而且每个从节点对应哪个主节点都有说明。
访问redis集群
在192.168.105.152机器上进行redis集群的连接
root@malonglong src]# redis-cli -h 192.168.105.152 -c -p 6007
在192.168.105.152:6007节点上写一条数据,如下图
退出redis客户端,再连接到192.168.105.136:6001节点上进行查询
[root@malonglong src]# redis-cli -h 192.168.105.136 -c -p 6001
好了,成功了!
以上如果有疑问,可留言交流~
领取专属 10元无门槛券
私享最新 技术干货