ps:博主只是自己在本地部署着玩的,并不是专业运维人员,顺便说一下部署的过程中踩过的一些坑
redis单机模式的搭建
ps:单机模式部署非常简单,大致说一下就好了
1.首先去官网下载一个3.0以上的redis包,因为redis3.0以上才支持集群模式
下载地址:https://redis.io/download
2.将下载文件放到/usr/local
(这里使用文件传输工具,直接将下载的redis压缩包放在该目录下)
3.解压redis压缩包(博主下载的是3.0.0的)
tar -zxvf redis-3.0.0.tar.gz
4.进入到解压后的redis文件夹内
cd /usr/local/redis-3.0.0
5.进行编译命令
make
这个时候如果没有安装gcc的话会报gcc:命令未找到之类的错误,如果报类似错误的话就输入一下命令
yum -y install gcc automake autoconf libtool make
如果装完gcc在make过程中仍报缺少包或者什么错误建议删去解压后的文件重新解压,问题全部解决
6.将该redis安装到指定的目录
cd /usr/local/redis-3.0.0
make PREFIX=/usr/local/redis install
7.进入redis目录,将redis.conf拷贝到安装路径:cd /usr/local/redis
mkdir conf
cp /usr/local/redis-3.0.0/redis.conf /usr/local/redis/bin
8.启动redis:
cd /usr/local/redis ./bin/redis-server ./redis.conf //在何处启动的server,一些配置文件就默认在该处生成(如果配置的相对路径)
至此redis单机就已经配置完毕了,下面开始配置redis集群模式
redis集群模式的搭建
1.首先要安装ruby环境
安装ruby:
yum install ruby
安装rubygems环境:
yum install rubygems
(这两步是安装redis集群的必备环境,这是由于集群管理工具redis-trib.rb依赖ruby环境)
2.安装ruby和redis的接口程序
(ps:这里就需要使用gem包了,但是这个包目前已经绝版了,不过在网上还是可以下载到的,下面给出链接和教程)
2.1 下载ruby环境下Redis的驱动
(ps:这里驱动包和redis并不是非要严格控制成相同版本,可以版本不同,这里下载的是3.2.2版本)
驱动链接:https://rubygems.org/gems/redis/versions/3.2.2
点击下载后就行了。。。。回到正题
拷贝下载好的redis-3.2.2.gem至/usr/local。执行:
gem install /usr/local/redis-3.2.2.gem
这里可能会报ERROR: Error installing redis redis requires Ruby version >= 2.2.2.的错误
说明这里的ruby版本过低,系统默认的是2.0.0,我们需要使用高于2.2.2版本的
所以需要将 ruby 版本升级到 2.2.2 或以上
解决办法:
首先我们需要安装curl,因为RVM需要通过CURL来进行下载
yum install curl
安装curl完成后,使用curl安装rvm
curl -L get.rvm.io | bash -s stable
关于RVM的安装方法,除了以上安装方法,《 ruby 中国官网 》也介绍了RVM的安装,安装方法如下:
这里所有的命令都是在用户权限下操作的,任何命令最好都不要用 sudo,
[root@localhost ~]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
[root@localhost ~]# curl -sSL https://get.rvm.io | bash -s stable
查看rvm中管理的所有ruby版本
source /usr/local/rvm/scripts/rvm
rvm list known
选择一个你喜欢的版本进行安装,但首先提醒一下,你所选择的版本不能低于 " 2.0.0 " 就可以了,输入命令 " rvm install 2.3.4 " 进行安装
使用刚才安装完成的Ruby版本,输入命令 " rvm use 2.3.4 "
移除系统中默认的版本号,输入命令 " rvm remove 2.0.0 " 进行移除
为了保险起见还是要检查一下(我个人习惯),输入命令 " ruby --version "
3.建立redis集群节点
(1)建立存放redis群的文件夹及子文件夹(用于存放每个redis节点,我创建了6个,三主三从):
cd /usr/local
mkdir redis-cluster
mkdir redis-cluster/7001
mkdir redis-cluster/7002
mkdir redis-cluster/7003
mkdir redis-cluster/7004
mkdir redis-cluster/7005
mkdir redis-cluster/7006
(2)将刚刚安装的单机redis的/usr/local/redis文件夹拷贝到每个700X文件夹下
cp /usr/local/redis /usr/local/redis-cluster/7001
…
(3)修改每个700X目录下的redis.conf配置文件:
port 700X //各自监听的端口
#bind 127.0.0.1 //这里不绑定,默认允许所有ip访问,或者bind 0.0.0.0
cluster-enabled yes //开启集群
cluster-node-timeout 15000 //15时间内没有收到对方的回复,则单方面认为端节点挂掉
4.启动各个redis:分别进入7001、7002、…7006目录,执行
./redis-server ./redis.conf
执行该命令时可能会出现权限不足的错误,可以执行以下命令去各个子节点下来修改
chmod -R 777 路径
-R 表示递归
777 表示权限级别(不懂得可以百度下)
路径 表示redis-server和redis.conf的所在文件夹(尽量只修改这两个文件所在的文件夹权限)
5.创建集群:
进入到redis-trib.rb所在的目录,一般情况下经过前几步后会自动生成redis-trib.rb文件,但是有时候可能哪里会出现问题不能生成该文件,这个时候可以去网上下载一个,这里没有严格要求
下载Redis官方提供的创建Redis集群的ruby脚本文件redis-trib.rb,路径如下:
https://raw.githubusercontent.com/MSOpenTech/redis/3.0/src/redis-trib.rb
打开该链接如果没有下载,而是打开一个页面,那么将该页面保存为redis-trib.rb
通过文件传输上传到liunx中的redis-cluster目录下
6.执行创建集群的命令
ruby ./redis-trib.rb create --replicas 1 172.16.3.195:7001 172.16.3.195:7002 172.16.3.195:7003
172.16.3.195:7004 172.16.3.195:7005 172.16.3.195:7006
(ps:由于我们在redis.conf里没有绑定任何ip因此正常来讲是可以允许任何ip进行访问的,所以这里你尽量设置成本地能访问的ip,因为我本地能和虚拟机相互ping通,所以这里我设置的是我虚拟机的ip)
(ps:如果无法ping通建议看一下本机和虚拟机的防火墙有没有关闭
一、iptables防火墙
1、基本操作
查看防火墙状态
service iptables status
停止防火墙
service iptables stop
启动防火墙
service iptables start
重启防火墙
service iptables restart
永久关闭防火墙
chkconfig iptables off
永久关闭后重启
chkconfig iptables on
二、firewall防火墙
1、查看firewall服务状态
systemctl status firewalld
出现Active: active (running)切高亮显示则表示是启动状态。
出现 Active: inactive (dead)灰色表示停止,看单词也行。
2、查看firewall的状态
firewall-cmd --state
3、开启、重启、关闭、firewalld.service服务
开启
service firewalld start
重启
service firewalld restart
关闭
service firewalld stop
)
ps:replicas指定为1表示每个主节点有一个从节点 ,如果为0的话那么建立的就全是master
(1)如果出现[ERR] Sorry, can’t connect to node错误:
1.ruby 和rubygem 版本太低,安装新版本。查看gem版本和redis版本(redis-cli -v可查看redis版本)
2.查看reids配置文件,bind绑定的允许连接的ip是否正确。
3.是否redis配置文件还是使用了密码,使用了密码也可能导致这个错误。
(2)如果出现[ERR] Node 127.0.0.1:7005 is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0:
表示集群时,之前的redis已有数据,那么登录到7005的redis中,执行FLUSHALL即可
(3)如果出现ERR Slot 0 is already busy (Redis::CommandError):
用redis-cli登录到每个节点执行flushall和cluster reset即可2.6进入集群:./redis-cli -c -p 7001 -h 172.16.3.195(-c即-cluster 表示进入集群模式,不加表示进入单机redis)
7.检查集群是否成功:随便选择700X文件夹进入到redis-cli所在的文件夹内
./redis-cli -c -p 7001 -h 172.16.3.195进入集群
进入集群后,键入cluster info,显示cluster_state:ok,表示成功
键入cluster nodes,将会显示ip的主从信息