环境准备:
- redis-4.0.7.tar.gz redis的安装包,下载地址:https://redis.io/download
- Ruby环境(集群搭建需要用ruby创建, ruby环境在2.2以上。),下载地址:http://www.ruby-lang.org/en/downloads/
- rubygems-2.7.4.tgz 和 redis-3.2.2.gem (后面的是redis集群需要的ruby插件,rubygems是ruby的一个包管理工具,通过rubygems安装redis-3.2.2.gem。),下载地址:https://rubygems.org/pages/download、https://rubygems.global.ssl.fastly.net/gems/redis-3.2.2.gem
- centos7,注意安装系统的基础环境,包括zlib和openssl。下载地址:http://www.zlib.net/fossils/zlib-1.2.11.tar.gz、http://distfiles.macports.org/openssl/openssl-1.0.2n.tar.gz
安装步骤
1、解压安装redis
cd /usr/local/
mkdir redis
将redis放到redis目录下
tar -vxf redis-4.0.7.tar.gz
make
报错
说明系统没有安装gcc的环境,无法进行编译。
1.1、安装gcc
首先到http://vault.centos.org/6.5/os/x86_64/Packages/下载用到的rpm包,
包括:
ppl-0.10.2-11.el6.x86_64.rpm
cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
mpfr-2.4.1-6.el6.x86_64.rpm
cpp-4.4.6-4.el6.x86_64.rpm
kernel-headers-2.6.32-279.el6.x86_64.rpm
glibc-headers-2.12-1.80.el6.x86_64.rpm
glibc-devel-2.12-1.80.el6.x86_64.rpm
libstdc++-devel-4.4.6-4.el6.x86_64.rpm
gcc-4.4.6-4.el6.x86_64.rpm
gcc-c++-4.4.6-4.el6.x86_64.rpm
百度云链接:
安装
rpm -ivh ppl-0.10.2-11.el6.x86_64.rpm
rpm -ivh cloog-ppl-0.15.7-1.2.el6.x86_64.rpm
rpm -ivh mpfr-2.4.1-6.el6.x86_64.rpm
rpm -ivh cpp-4.4.7-4.el6.x86_64.rpm
rpm -ivh kernel-headers-2.6.32-431.el6.x86_64.rpm
rpm -ivh glibc-headers-2.12-1.132.el6.x86_64.rpm
rpm -ivh glibc-devel-2.12-1.132.el6.x86_64.rpm
rpm -ivh gcc-4.4.7-4.el6.x86_64.rpm
rpm -ivh libstdc++-devel-4.4.7-4.el6.x86_64.rpm
rpm -ivh gcc-c++-4.4.7-4.el6.x86_64.rpm
一定要按顺序进行安装
部分安装提示already installed,没关系,
执行完,gcc就安装成功了
1.2、重新make
如果报错:
解决办法:make 后面带参数
make MALLOC=libc
make install
cd src
./redis-server
看到这个界面redis单机版启动成功,验证:
另外打开一个连接,到根目录下执行
./redis-cli
ping
如果有响应,则redis单机版本安装成功。
2、配置集群环境(三台机器,6个节点,至少需要6个节点。每台机器部两个节点)
根据上述步骤在每台机器两个目录下配置两个redis
例,楼主在 /usr/local/redis-cluster/
下新建了7000和7001两个文件夹,分别配置两个redis并配置不同的端口号,具体步骤如下:
2.1、创建集群目录
在/usr/local/目录下执行创建redis_cluster目录:
mkdir redis_cluster
cd redis_cluster/
mkdir 7000
mkdir 7001
2.2、配置redis.conf
将redis.conf拷贝到这两个目录中去:(redis.conf在安装目录下)
cp redis.conf ./redis_cluster/7000
cp redis.conf ./redis_cluster/7001
修改每个redis.conf的配置,需要修改的内容如下:
port 7000 //配置集群的端口,分别是7000、7001
bind 本机的IP 127.0.0.1 // 这里的默认配置是127.0.0.1前面加上内网ip。
daemonsize yes //允许redis在后台运行
pidfile /var/run/redis_7000.pid //改成和端口一致
cluster-enabled yes // 开启集群 把注释去掉
cluster-config-file node_7000.conf //集群的配置,和端口一致
cluster-node-timeout 15000 // 请求超时,默认为15秒
appendonly yes // aof日志开启,有需要就开启,每一次写操作都会记录一条日志。
修改完成之后启动服务:
cd src/
./redis-server ../redis_cluster/7000/redis.conf
依次启动所有节点:
查看启动情况:
2.3、另外两台机器执行相同的操作
另两台机器的redis端口同样分配为:7000、7001,然后修改对应的主机ip 和 127.0.0.1,例如bind 192.168.88.88 127.0.0.1。
3、安装ruby环境
3.1、下载、安装ruby
mkdir /usr/local/ruby
cd ruby/
把包放到改目录下
tar -vxf ruby-2.5.0.tar.gz
cd ruby-2.5.0/
./configure
make && make install
验证:
ruby -v
3.2、下载安装rubygems
cd /usr/local
mkdir rubygems
把文件放到该目录下
tar -vzxf rubygems-2.7.4.tgz
cd rubygems-2.7.4/
ruby setup.rb
报错:
解决办法:缺少了zlib包,需要下载并安装zlib
3.2.1、下载安装zlib
cd /usr/local
mkdir zlib
tar -vxf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure --prefix=/usr/local/zlib
make
make install
3.2.2、编译 ruby 中的zlib
cd /usr/local/ruby-2.5.0/ext/zlib/
ruby extconf.rb --with-zlib-include=/usr/local/zlib/include/ --with-zlib-lib=/usr/local/zlib/lib
make
又报错:
解决办法:执行完extconf.rb之后会生成一个Makefile vim Makefile
把$(top_srcdir) 换成 ../../
然后再make
make
make install
错误都解决之后,回到安装rubygems的步骤。
进入rubygems的安装目录,执行ruby setup.rb
cd /usr/local/rubygems/rubygems-2.7.4
ruby setup.rb
安装成功:
4、安装ruby-redis插件
4.1、下载redis-3.2.2.gem
刚刚安装rubygems就是为了安装这个插件。
把文件放到 /usr/local/redis 目录下。
gem install redis-3.2.2.gem
又报错:
解决办法:缺少OpenSSL,下载安装。
4.2、下载安装OpenSSL
这个问题和zlib的解决方案类似,可类比解决。
cd /usr/local
mkdir openssl
tar -xvf openssl-1.0.2n.tar.gz
./config -fPIC --prefix=/usr/local/openssl enable-shared
./config -t
make && make install
安装成功:
4.3、编译ruby中的openssl
cd /usr/local/ruby/ruby-2.5.0/ext/openssl/
ruby extconf.rb --with-openssl-include=/usr/local/openssl/include/ --with-openssl-lib=/usr/local/openssl/lib
make
报错:
解决办法:vim Makefile 把所有的 $(top_srcdir) 换成 ../.. 注意替换所有
make && make install
安装成功:
然后回到安装 redis-3.2.2.gem ,在redis目录下安装。
gem install redis-3.2.2.gem
安装成功:
集群的操作
可以使用可视化工具查看和管理redis集群。
1、创建一个集群
执行以下命令:
./redis-trib.rb create --replicas 1 192.168.43.96:7000 192.168.43.97:7001 192.168.43.97:7001 192.168.43.98:7000 192.168.43.98:7001 192.168.43.96:7001
创建集群后,命令提示
can i set the above configuration?(type ‘yes’ to accept)
这里输入yes,回车。
页面会显示
redis cluster Waiting for the cluster to join............................................................
显示个不停,楼主以为自己没有配置好,其他集群连不上了,后来通过查询相关资料发现:
redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口
集群总线端口为redis客户端连接的端口 + 10000
如redis端口为6379
则集群总线端口为16379
故,所有服务器的点需要开通redis的客户端连接端口和集群总线端口
注意:iptables 放开,如果有安全组,也要放开这两个端口
摘csdn自——海拉姆
上面一段话,说白了就是每个redis节点以及每个redis集群总线的端口被防火墙阻塞了,需要开放相应端口才能连通:
查看防火墙状态:
# /etc/init.d/iptables status
如果得到一系列的信息,说明防火墙处于开启状态。
MySQL默认端口3306,Linux防火墙默认是阻止的。
查看3306端口是否开放:
# lsof -i:3306
如果有显示说明已经开放了.如果没有显示说明没有开放 【Linux公社 http://www.linuxidc.com 】
要访问3306可以用两种方式,一个是关闭防火墙,另一个就是让防火墙开放3306端口。
一、开放3306端口:
方法一:
# iptables -I INPUT -i eth0 -p tcp --dport 3306 -j ACCEPT
# iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j ACCEPT对应阻止3306端口的命令为:
# iptables -I INPUT -i eth0 -p tcp --dport 3306 -j DROP
# iptables -I OUTPUT -o eth0 -p tcp --sport 3306 -j DROP然后保存
# /etc/rc.d/init.d/iptables save方法二:
1、修改/etc/sysconfig/iptables文件,增加如下一行:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
然后重启防火墙:
# service iptables restart
二、关闭防火墙:
两种方式:
1)重启后生效:
# chkconfig iptables off ( 对应的开启防火墙命令为: # chkconfig iptables on )
2)即时生效,但重启后防火墙会再次启动:
# service iptables stop ( 对应的开启防火墙命令为: # service iptables start )
执行以上红色字体部分命令,开放三台机器7000、7001、17000、17001共4*3=12个节点的端口,并重启防火墙。
接下来,
需要关闭六个节点的redis服务;
并删除appendonly.7000.aof、appendonly.7001.aof及对应nodes.conf;
重启redis服务;
并重新执行:
./redis-trib.rb create --replicas 1 192.168.43.96:7000 192.168.43.97:7001 192.168.43.97:7001 192.168.43.98:7000 192.168.43.98:7001 192.168.43.96:7001
同样敲入yes,记得一定敲入yes,回车不默认yes的,接下来则可以看到以下界面:
2、连接集群
cd /usr/local/redis/redis-4.0.7/src
./redis-cli -p 7000 -c -h 192.168.43.97
参数说明: -p port 端口 -h host 主机 -c cluster 集群
连接进集群之后 输入ping , 如果响应了pong 表示连接集群成功:
连接进集群之后可以查看当前集群的信息和节点的信息
CLUSTER INFO 列出当前节点的信息
CLUSTER NODES 列出当前集群中的节点信息
前面一段很长的字符串就是节点的id。从这个命令可以知道哪些节点还活着,哪些节点已经挂了。端口后面带着fail的都是挂掉的节点。
3、关闭一个节点
退出集群连接才能关闭某一个节点:
./redis-cli -c -h 192.168.43.98 -p 7000 shutdown
这条命令的意思是关闭98机器上端口为7000的redis节点。
关闭之后可以连接集群去执行 CLUSTER NODES ,这个节点的状态已经是fail。
4、节点加入、移出集群
添加一个节点之前务必保证该节点已经启动了,如果该节点之前在创建集群时已经在集群里面了,关闭该节点然后再重新启动,该节点会自动加入集群。
./redis-server ../redis_cluster/7000/redis.conf
然后连接进集群,如果该节点之前不在集群中,连接集群输入cluster meet 命令就可以指定某个节点加入集群。
CLUSTER MEET 192.168.43.98:7000
CLUSTER forget fd72b78b1eaa430ca309bc5226d90fe67199a576
这个一长段字符串是节点的id,forget之后可以再去看节点的信息。
forget之后,如果一分钟不进行任何操作,该节点会自动加入集群。
、