最近有在学redis,这次就模仿着搭建了一个。本来网上也有很多版本,不过按照百度出来的内容进行搭建总是有各种问题,磕磕碰碰总算搭建成功,在此记录一下,供大家了解,防止以后自己忘记。

一、系统环境

VMware中安装了三个centOS7系统,redis的版本是redis-3.2.1。

二、架构说明

三台虚拟机充当三台服务器,共六个实例,形成三主三从,其中存储相同数据的主从节点不能落在同一台机器上,目的是防止部署的Redis的虚拟机宕机从而造成主从节点全部失效。实验机器的地址与端口如下:

192.168.200.131 7000
192.168.200.131 7001
192.168.200.132 7000
192.168.200.132 7001
192.168.200.133 7000

192.168.200.133 7001

三、安装

mkdir /root/software
cd /root/software

wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz
tar -xzf tcl8.6.1-src.tar.gz -C /usr/local
cd /usr/local/tcl8.6.1/unix/
./configure                             //检测安装平台的目标特征的。比如它会检测该平台是不是有CC或GCC。
make                                      //进行编译,它从Makefile中读取指令,然后编译。

make install                           //进行安装,它也从Makefile中读取指令,安装到指定的位置。

wget http://download.redis.io/releases/redis-3.2.1.tar.gz
tar –xzf redis-3.2.1.tar.gz
mv redis-3.2.1 /usr/local/redis
cd /usr/local/redis
make
make install

mkdir /usr/local/cluster
cd /usr/local/cluster
mkdir 7000 7001
cp /usr/local/redis/redis.conf /usr/local/cluster/7000

cp /usr/local/redis/redis.conf /usr/local/cluster/7001

vim /usr/local/cluster/7000/redis.conf
vim /usr/local/cluster/7001/redis.conf
修改redis.conf配置文件中下面选项(7001重复下面7000的情况),如:
port 7000                      //指定当前Redis服务的端口,默认为6379 ,7001的修改成port 7001
daemonize yes              //配置redis作为守护进程运行
cluster-enabled yes      //集群启用,开启集群功能
bind 192.168.200.131   //绑定IP,即绑定本地回环地址。开启这个配置时,redis 只接收来自于该 IP 地址列表的请求,如果不                                          进行设置,那么将处理所有请求。
appendonly yes            //配置数据持久化, 开启aof日志。有需要就开启,它会每次写操作都记录一条日志
protected-mode no      //关闭protected-mode模式,这样便可以通过指定配置文件启动,如下方命令启动redis服务

                                         /usr/local/redis/src/redis-server /usr/local/cluster/7000/redis.conf

在防火墙中对端口7000、7001开放:
firewall-cmd --zone=public --add-port=7000/tcp --permanent
firewall-cmd --zone=public --add-port=7001/tcp --permanent

firewall-cmd –reload

7000与7001的redis.conf配置文件修改完后,开启主从redis服务:
/usr/local/redis/src/redis-server /usr/local/cluster/7000/redis.conf

/usr/local/redis/src/redis-server /usr/local/cluster/7001/redis.conf

上述内容在三个服务器上全部执行过后,查看redis服务是否全部启起来了,若是,则准备建集群。

四、建集群

为了使用主从节点不落在同一台机器上,使用如下命令:每台IP +端口交叉

/usr/local/redis/src/redis-trib.rb create --replicas 1 192.168.200.131:7000 192.168.200.133:7001 192.168.200.132:7000 192.168.200.131:7001 192.168.200.133:7000 192.168.200.132:7001

redis一主三从三哨兵宕机 redis三主三从如何选举_赋值

如果没有报错,那就证明你集群建立成功,下面的内容即可忽略,下面的内容是我建立集群过程中遇到的几个问题。

1、注意:如果建立集群可能出现的报错应该是会提示你没有ruby,这时你需要安装ruby。我第一次通过yum install ruby安装的ruby版本是2.0.0的,这是因为在centos7中默认ruby是2.0.0版本,而低于redis4.0.6最低的最低要求的2.2版本,就好比我的报错是提醒我ruby版本要大于等于2.2.2版本,所以需要进行升级或者直接安装高版本的ruby。

wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.0.tar.gz
tar –xzf ruby-2.5.0.tar.gz –C /usr/local
cd /usr/local/ruby-2.5.0
./configure
make
make install

如果ruby安装正常,输入ruby –v命令将会输出ruby的版本号。

redis一主三从三哨兵宕机 redis三主三从如何选举_赋值_02

2、当你安装好ruby后,去建集群,可能会遇到如下报错,
 /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)
这是因为没装redis的第三方接口!既然ruby程序要访问redis数据库,总得有个连接接口。输入命令 " gem install redis " 就能进行第三方接口安装。
不过安装第三方接口时也可能会报错
ERROR:  Loading command: install (LoadError) no such file to load – zlib               //原因是gem运行缺少zlib库支持
ERROR:  Loading command: install (LoadError) no such file to load – openssl        //原因是gem运行缺少openssl库支持

对于这两种报错,安装zlib库和openssl库就好了方法如下:

2.1、安装zlib库
yum install zlib-devel
cd /usr/local/ruby-2.5.0/ext/zlib          //进入到ruby安装目录下的ext/zlib位置

ruby extconf.rb                                   //在操作下一步之前需要在Makefile文件中给路径变量top_srcdir赋值,这个值就是ruby的安装路径,如下图,如果不赋值,进行下一步make时会报错

redis一主三从三哨兵宕机 redis三主三从如何选举_redis一主三从三哨兵宕机_03

make && make install

2.2、 安装openssl库(与安装zlib库类似)

yum install openssl-devel

cd /usr/local/ruby-2.5.0/ext/openssl     //进入到ruby安装目录下的ext/openssl位置

ruby extconf.rb          //同样在操作下一步之前需要在Makefile文件中给路径变量top_srcdir赋值,这个值就是ruby的安装路径,如下图,如果不赋值,进行下一步make时会报错

 

redis一主三从三哨兵宕机 redis三主三从如何选举_redis一主三从三哨兵宕机_04

make && make install

zlib库和openssl库安装好后,再进行安装redis第三方接口的操作,如下:

gem install redis

最后确认一下三台服务器上有无防火墙开启,若开启,则需要添加防火墙白名单或者关闭防火墙。因为时间有限,我这边是先关闭防火墙,之后有时间再添加白名单方式。(从生产环境的角度肯定是要开启防火墙的,另外,centOS7的默认防火墙是firewall)

最终结果就如第四步骤一开始所示,显示redis三主三从集群建立成功,图片再贴一次

redis一主三从三哨兵宕机 redis三主三从如何选举_赋值_05

以上是我搭建过程中的整体情况,如果有问题,还望各位指出,谢谢。