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时间内没有收到对方的回复,则单方面认为端节点挂掉
3.启动各个redis:分别进入7001、7002、...7006目录,执行
./redis-server ./redis.conf
执行该命令时可能会出现权限不足的错误,可以执行以下命令去各个子节点下来修改
chmod -R 777 路径
-R 表示递归
777 表示权限级别(不懂得可以百度下)
路径 表示redis-server和redis.conf的所在文件夹(尽量只修改这两个文件所在的文件夹权限)
4.创建集群:进入到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目录下
5.执行创建集群的命令
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)
6.检查集群是否成功:随便选择700X文件夹进入到redis-cli所在的文件夹内
./redis-cli -c -p 7001 -h 172.16.3.195进入集群
进入集群后,键入cluster info,显示cluster_state:ok,表示成功
键入cluster nodes,将会显示ip的主从信息