1. 应用场景介绍
本文主要是介绍Redis集群在Linux环境下的安装讲解,其中主要包括在联网的Linux环境,全程需使用root用户,无法使用yum安装的软件,可使用第三方工具上传到/home目录下或指定目录下。
2. 安装步骤
2.1 用户切换及工具
使用Linux的第三方工具XShell、Xftp
1)安装Redis需要依托GCC环境,先检查Linux是否已经安装了GCC,如果没有安装,则需要进行安装
检查GCC是否安装,可以看看版本号
执行命令 gcc -v
如果已经安装了GCC,则会显示以下信息
如果没有任何信息,则我们可以通过命令yum install gcc-c++进行在线安装
执行命令 yum install gcc-c++
2.2安装Ruby
检查Ruby是否安装,可以看版本号
执行命令 ruby -v
Ruby没有安装,执行命令 yum install ruby 进行安装
可能会报错
原因如下:
redhat默认自带的yum源需要注册,才能更新,报错:
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
可替换为centos对应的源。 操作如下:
2.1).检查是否安装yum包。查看RHEL是否安装了yum,若是安装了,那么又有哪些yum包:
#rpm -qa |grep yum
2.2) 删除redhat自带的yum包
#rpm -qa|grep yum|xargs rpm -e --nodeps(不检查依赖,直接删除rpm包)
#rpm -qa |grep yum (查询确认)
2.3).下载新的yum包。使用Centos6.5的yum包
1) 查看版本号和系统类别:
#cat /etc/redhat-release
#arch
2.4).根据上一步,找到对应的yum包,然后下载。我的服务器对应的为:
下载新的yum包。使用Centos6.8的yum包(需要注意的是以下的软件会升级,对应的小的版本号会有不同,如果无法下载,需要到http://mirrors.163.com/centos/6/os/i386/Packages/查看最新版本。
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/python-iniparse-0.3.1-2.1.el6.noarch.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-3.2.29-81.el6.centos.noarch.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
wget http://mirrors.163.com/centos/6/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.30-40.el6.noarch.rpm
其中wget 后对应的网站上的rpm文件,如果XShell中无法下载,需要在浏览器中输入上面的url进行下载
2.5). 安装yum包
[root@localhost bea1]# rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm
[root@localhost bea1]# rpm -ivh yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
[root@localhostbea1]# rpm -ivh yum-3.2.29-81.el6.centos.noarch.rpm
yum-plugin-fastestmirror-1.1.30-40.el6.noarch.rpm
或者用以下命令
rpm -ivh python-iniparse-0.3.1-2.1.el6.noarch.rpm yum-metadata-parser-1.1.2-16.el6.x86_64.rpm yum-3.2.29-81.el6.centos.noarch.rpm yum-plugin-fastestmirror-1.1.30-40.el6.noarch.rpm --force --nodeps
注意事项:rpm -ivh yum-3.2.29-81.el6.centos.noarch.rpm
yum-plugin-fastestmirror-1.1.30-40.el6.noarch.rpm是一条语句,需要一次执行
2.6). 替换yum源
2.6.1)简单方式:
cd /etc/yum.repos.d
rm -rf *.后缀 (除redhat.repo的所有文件)touch server.repo 文件,并添加以下内容:
[server]
name=rhel6.8_x64
baseurl=http://10.10.142.123/rhel6.8_x64/Server
gpgcheck=1
gpgkey=http://10.10.142.123/rhel6.8_x64/RPM-GPG-KEY-redhat-release
:wq! 命令保存退出,文件生效!
注意事项: 添加的内容末尾不要带空格
2.6.2)方式2
cd /etc/yum.repos.d
rm -rf *
wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
编辑CentOS6-Base-163.repo
将:$releasever 全部替换为:6
2.7).清除原有缓存
yum clean all
重建缓存,以提高搜索安装软件的速度
yum makecache
Error: Cannot retrieve repository metadata (repomd.xml) for repository: rpmforge.
Please verify its path and try again
解决办法:(或者把/etc/yum.repos.d下的文件全部删除,然后将能正常使用yum的同类服务器的这个目录下的文件全部拷贝过来,并删除对应的CentOS6-Base-163.repo文件
,然后yum clean all 和yum makecache 即可)
最后再次使用yum就ok了
再次执行命令 yum install ruby
安装成功
2.3安装Rubygems
执行命令gem list --remote(查看本地安装的gem)
当前Ip地址没有安装Rubygems
执行命令 yum install rubygems
安装成功
2.4安装Redis
执行命令
wget http://download.redis.io/releases/redis-3.2.4.tar.gz
下载Redis
如果无法下载,需要去浏览器打开url即可
使用Xftp工具将下载的redis上传到Linux上
执行命令tar -zxvf redis-3.2.4.tar.gz 解压Redis
执行命令 cd redis-3.2.4
执行命令make && make install //make 这里如果不指定PREFIX,默认将安装在/usr/local/bin下,保持默认就好
显示上述信息,证明安装成功
创建存放Redis文件的目录,命令 mkdir -p /usr/local/redis/src
执行命令mv redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server /usr/local/redis/src/ 将文件移到新建的目录下
创建存储配置文件的目录
将redis配置文件分别拷贝一份给8001和8002目录
进入Reids解压目录下/home/bea1/redis-3.2.4
执行命令:cp redis.conf /usr/local/redis-cluster/8001
cp redis.conf /usr/local/redis-cluster/8002
将配置文件复制到指定目录下
分别修改配置文件的名称
修改配置文件以redis-8001.conf为例
需要修改的配置内容如下:
# 默认情况下,redis 在 server 上所有有效的网络接口上监听客户端连接。如果只想让它在一个或多个网络接口上监听,那你就绑定一个IP或者多个IP。多个ip空格分隔即可。
bind 127.0.0.1 :bind 当前IP
# 指定该redis server监听的端口号。默认是6379,如果指定0则不监听。
port 6379 :命名的端口号
# 日志文件的位置,当指定为空字符串时,为标准输出,如果redis已守护进程模式运行,那么日志将会输出到 /dev/null ,可以修改为自己创建的目录下的文件名。
logfile "" :日志名称
# 是否以守护模式启动,默认为no,配置为yes时以守护模式启动,这时redis instance会将进程号pid写入默认文件/var/run/redis.pid
daemonize no :设置为yes
# 数据库存放目录。必须是一个目录,aof文件也会保存到该目录下。
dir ./ :存放文件的目录
# 配置pid文件路径。当redis以守护模式启动时,如果没有配置pidfile,pidfile默认值是/var/run/redis.pid 。
pidfile /var/run/redis_6379.pid:当前端口.pid
# rdb文件的名字。
dbfilename dump.rdb : rdb文件名称
# 是否启用aof持久化方式 。即是否在每次更新操作后进行日志记录,默认配置是no,即在采用异步方式把数据写入到磁盘,如果不开启,可能会在断电时导致部分数据丢失。
appendonly no :改为yes
# 更新日志文件名,默认值为appendonly.aof 。
appendfilename "appendonly.aof":aof文件名称
# 默认不启动集群功能,如需成为集群的节点:cluster-enabled yes
注意主从节点都需要开启
cluster-enabled yes :打开
# 根据port指定文件名,不能出现冲突
cluster-config-file nodes-6379.conf:配置为当前端口.conf
# 节点超时时间默认15秒,根据线上环境进行调整,不建议比15秒小
cluster-node-timeout 15000 :打开
# 建议设置为no,部分node挂掉依然支持读写服务
cluster-require-full-coverage yes:打开并改为no
与上面类似修改redis-8002.conf对应的配置
同理另外2台服务器直接解压Redis,无需安装ruby,rubygems,因为一套Redis集群里有一台服务器安装ruby、rubygems就可以了
安装Redis步骤与上面步骤一致
注意事项:
1)创建保存配置文件夹时可以根据需要搭建的集群端口号创建。
2)配置文件的端口号不能和其他配置文件的端口号相同
3)可使用命令 scp -r redis-3.2.4.tar.gz root@10.5.86.123 /home/bea1/将Redis压缩文件拷贝到其他服务器
4)整个过程中使用root用户操作
5)命令能复制的就复制,减少敲错的几率
3. 配置集群
3.1集群发现
每个Redis实例自己是一个集群,我们通过cluster meet让各个结点互相“握手”。这也是Redis Cluster目前的一个欠缺之处:缺少结点的自动发现功能。
首先分别启动三台服务器的Reids
/usr/local/redis/src/redis-server /usr/local/redis-cluster/8001/redis-8001.conf
/usr/local/redis/src/redis-server /usr/local/redis-cluster/8002/redis-8002.conf
/usr/local/redis/src/redis-server /usr/local/redis-cluster/8003/redis-8003.conf
/usr/local/redis/src/redis-server /usr/local/redis-cluster/8004/redis-8004.conf
/usr/local/redis/src/redis-server /usr/local/redis-cluster/8005/redis-8005.conf
/usr/local/redis/src/redis-server /usr/local/redis-cluster/8006/redis-8006.conf
其中参数:
/usr/local/redis/src/redis-server:redis安装的server服务位置
/usr/local/redis-cluster/8001/redis-8001.conf:自己存放配置文件的地方
/usr/local/redis/src/redis-cli -c -h 10.5.86.122 -p 8001 cluster nodes(查看节点是否连接)
其中参数:
/usr/local/redis/src/redis-cli :redis安装的redis-cli位置
-c : 连接
-h : IP地址
-p : 端口号
cluster nodes : 节点查看
Redis各节点握手
命令如下:
/usr/local/redis/src/redis-cli -c -h 10.5.86.122 -p 8001 cluster meet 10.5.86.122 8002
/usr/local/redis/src/redis-cli -c -h 10.5.86.122 -p 8001 cluster meet 10.5.86.123 8003
/usr/local/redis/src/redis-cli -c -h 10.5.86.122 -p 8001 cluster meet 10.5.86.123 8004
/usr/local/redis/src/redis-cli -c -h 10.5.86.122 -p 8001 cluster meet 10.5.86.124 8005
/usr/local/redis/src/redis-cli -c -h 10.5.86.122 -p 8001 cluster meet 10.5.86.124 8006
其中参数
cluster meet :握手
其他节点meet与8001端口类似
注意事项:
1)每个节点都要和其他节点进行meet(Redis集群的前提条件)
2)IP地址和端口号小心弄错
meet之后每个节点都变成master
3.2角色设置:REPLICATE
结点全部“握手”成功后,就可以用cluster replicate命令为结点指定角色了,默认每个结点都是Master。
执行命令如下:
/usr/local/redis/src/redis-cli -c -h 10.5.86.122 -p 8002 cluster replicate 613615c4136ae85031dd53bd3490fa60ee6618dc
/usr/local/redis/src/redis-cli -c -h 10.5.86.123 -p 8004 cluster replicate 13613579e7d84b6248ab054a92c36cc32659d8ef
/usr/local/redis/src/redis-cli -c -h 10.5.86.124 -p 8006 cluster replicate 3ccaecfc507b833c91f5fd404fcfa89d5c8e5b7f
其中参数:
/usr/local/redis/src/redis-cli -c -h 10.5.86.122 -p 8002 :从节点的链接
cluster replicate :角色设置
613615c4136ae85031dd53bd3490fa60ee6618dc :主节点的id标识
其他几个命令类似
3.3槽指派:ADDSLOTS
设置好主从关系之后,就可以用cluster addslots命令指派16384个槽的位置了
命令如下:
/usr/local/redis/src/redis-cli -c -h 10.5.86.122 -p 8001 cluster addslots {0..5000}
/usr/local/redis/src/redis-cli -c -h 10.5.86.123 -p 8003 cluster addslots {5001..10000}
/usr/local/redis/src/redis-cli -c -h 10.5.86.124 -p 8005 cluster addslots {10001..16383}
其中参数:
cluster addslots :槽指派
注意事项:哈希槽分配给master(主节点),主从使用的槽节点相同
4. 验证
1)Cluster nodes查看节点是否正常
无fail证明正常
2)cluster info 查看Redis节点信息
如下图所示,槽点有16384个正常知道的节点6个,共有3组
正常
3)连接进入节点
使用set和get测试
能存入值和取值