CentOS编译安装redis,及主从配置,集群配置

CentOS编译安装redis,及主从配置,集群配置猫哥卧龙一、安装1: 下载 redis.io[root@localhost ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz2: 安装c语言环境[root@localhos...

CentOS编译安装redis,及主从配置,集群配置

猫哥卧龙

一、安装

1: 下载 redis.io

[root@localhost ~]# wget http://download.redis.io/releases/redis-4.0.9.tar.gz

Pasted Graphic 1.png


2: 安装c语言环境

[root@localhost ~]# yum -y install gcc gcc-c++ autoconf automake make

Pasted Graphic 2.png


3:解压

[root@localhost ~]# tar -xvf redis-4.0.9.tar.gz

Pasted Graphic 3.png


4: 编译

[root@localhost ~]# cd redis-4.0.9

[root@localhost redis-4.0.9]# make MALLOC=libc

Pasted Graphic 4.png


5:安装

[root@localhost redis-4.0.9]# make install PREFIX=/usr/local/redis

Pasted Graphic 5.png


6: 配置可后台启动

将源码目录里的redis.conf复制到redis安装目录

[root@localhost ~]# cd /usr/local/redis/bin

[root@localhost bin]# cp ~/redis-4.0.9/redis.conf .

Pasted Graphic 6.png


7: 修改redis.conf中的daemonize 配置项, 默认no, 改为yes

daemonize yes

Pasted Graphic 7.png


8: 后台启动redis

[root@localhost bin]# ./redis-server redis.conf

Pasted Graphic 8.png


二、主从复制(同一台机器用不同端口模拟)

1:新建目录

[root@localhost bin] cd .. 

[root@localhost local]# mkdir redis-master-slave

Pasted Graphic 9.png


2:将上边安装好的redisbin目录复制到redis-master-slave

[root@localhost local]# cd redis-master-slave

[root@localhost redis-master-slave]# cp -r ../redis/bin master     # 作为主

[root@localhost redis-master-slave]# cp -r master slave              # 作为从

Pasted Graphic 10.png


3: 修改redis默认监听ip地址

分别在master/redis.conf, slave/redis.conf配置中,默认只允许127.0.0.1连接

如果不修改的话,从机无法通过主机的ip地址连接主机

redis.conf中找到bind配置(主从都改一下)

默认是127.0.0.1

改为0.0.0.0, 

bind 0.0.0.0


这样改是允许所ip地址连接,正式部署生产的时候,肯定是使用服务器的内网ip地址



4:配置主从

a)主机

主机不用配置

但因为在同一台机器上模拟,为了和上边安装好的单点不冲突

需要修改一下主机的端口

master/redis.conf中找到port 配置项, 改一个其他的, 此处改过6380

port 6380

b)从机

slave/redis.conf

同样修改端口为 

port 6381

找到slaveof配置项, 修改为主机的地址: 

slaveof 172.16.251.190 6380


5:启动

cd /usr/local/redis-master-slave/master

[root@localhost master]# ./redis-server redis.conf    #6380端口

cd ../slave

[root@localhost slave]# ./redis-server redis.conf       #6381端口


此时在主机中添加修改数据, 从机就会自动同步, 从机是只读实例,不能修改


三、主从切换

1:停止主机 redis, port 6380(假设主机挂了)

cd /usr/local/redis-master-slave/master

[root@localhost master]# ./redis-cli -p 6380 shutdown


2:将从机redis设成主, port 6381

[root@localhost slave]# ./redis-cli -p 6381 slaveof NO ONE


3:测试向6381写数据 (现在的主机,之前的从机)

cd /usr/local/redis-master-slave/slave

[root@localhost slave]# ./redis-cli -p 6381 

127.0.0.1:6381>set m n

OK


4:准备再次启动之前的主机启动之前,需要将现有主机6381的数据保存

127.0.0.1:6381>save

OK


5:准备再次启动之前的主机,将现有主机(6381)已保存的数据拷到之前的主机(6380)

cd /usr/local/redis-master-salve/master

[root@localhost master]# rm -f dump.rdb

[root@localhost master]# cp ../slave/dump.rdb .


6:启动原来的主机redis(6380)

[root@localhost master]# ./redis-server redis.conf


7:将现在的主redis切换成从机

[root@localhost slave]# ./redis-cli -p 6381 slaveof 172.16.251.190 6380


此时数据又都还原成之前的主从状态了


三、集群  使用redis提供的集群管理工具, 依赖ruby

1: 安装ruby

方法一:

[root@localhost ~]# yum -y install ruby

[root@localhost ~]# yum -y install rubygems

这样在CentOS6.5中安装到的ruby不是最新版的,下一步中要运行gem install redis会报错

[root@localhost ~]# gem install redis

ERROR:  Error installing redis:

redis requires Ruby version >= 2.2.2.

有报错, 如下解决(百度到的办法)

[root@localhost ~]# yum -y install curl

[root@localhost ~]# gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3

[root@localhost ~]# curl -L get.rvm.io | bash -s stable

[root@localhost ~]# source /usr/local/rvm/scripts/rvm

[root@localhost ~]# rvm install 2.3.3

[root@localhost ~]# rvm use 2.3.3 --default

方法二:

或者直接安装ruby, 更简单(不用yum, rvm)(上边的一些命令如gpg2不懂是干啥的,以及curl后边那些参数,都不懂)

下载ruby安装包: http://www.ruby-lang.org/en/

截止编写时, 最新版为2.5.1 https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.1.tar.gz

[root@localhost ~]# yum -y install openssl-devel zlib-devel  # 确保openssl, zlib已安装, 会依赖这两个

[root@localhost ~]# tar -xvf ruby-2.5.1.tar.gz

[root@localhost ~]# cd ruby-2.5.1

[root@localhost ruby-2.5.1]# ./configure --prefix=/usr/local/ruby

[root@localhost ruby-2.5.1]#  make && make install

/usr/local/ruby/bin加到PATH变量中,完成


2:安装redisruby接口

[root@localhost ~]# gem install redis

至此, 集群管理工具的准备工作完成


(至少三台机器, 各台机器加一个从机,6台)

3:创建模拟集群的目录

[root@localhost ~]# mkdir /usr/local/redis-cluster

[root@localhost redis-cluster]# cd /usr/local/redis-cluster


4:复制redis安装包中的一个脚本到这里, 集群管理使用这个脚本

[root@localhost redis-cluster]# cp ~/redis-4.0.9/src/redis-trib.rb .


5:准备6redis目录来模拟集群, 端口设置为从7001-7006

# 复制出一个7001

[root@localhost redis-cluster]# cp -r ../master-slave/master 7001


6:先前测试的主从复制, ../master-slave/master中,已经存在数据的持久存储文件,将其删除掉

[root@localhost redis-cluster]# rm -f 7001/dump.rdb 


7:修改7001/redis.conf

[root@localhost redis-cluster]# vim 7001/redis.conf

找到如下配置项

cluster-enabled yes  # 启用集群

port 7001


8:复制出7002-7006

[root@localhost redis-cluster]# cp -r 7001 7002

[root@localhost redis-cluster]# cp -r 7001 7003

[root@localhost redis-cluster]# cp -r 7001 7004

[root@localhost redis-cluster]# cp -r 7001 7005

[root@localhost redis-cluster]# cp -r 7001 7006


9: 分别修改上边复制出来的7002-7006的端口


10: 启动7001-7006

写个全部启动的脚本

[root@localhost redis-cluster]# vim start-all.sh

内容如下 start-all.sh

cd 7001

./redis-server redis.conf

cd ..

cd 7002

./redis-server redis.conf

cd ..

cd 7003

./redis-server redis.conf

cd ..

cd 7004

./redis-server redis.conf

cd ..

cd 7005

./redis-server redis.conf

cd ..

cd 7006

./redis-server redis.conf

cd ..

# 增加执行权限

[root@localhost redis-cluster]# chmod u+x start-all.sh

# 启动

[root@localhost redis-cluster]# ./start-all.sh


11: 使用redis-trib.rb 创建集群

[root@localhost redis-cluster]# ./redis-trib.rb create --replicas 1 172.16.251.190:7001 172.16.251.190:7002 172.16.251.190:7003 172.16.251.190:7004 172.16.251.190:7005 172.16.251.190:7006

命令解释: create表示创建集群

--replicas 表示创建带复本的集群, 后边的 1表示为每个主节点创建1个复本

后边的6个地址端口,表示前三个为主节点,后边三个为从节


备注

3.x版本中主从关系如下

7004作为7001的从,7005作为7002的从,7006作为7003的从

当前实验用的版本中,没有搞清楚主从关系咋分配的

Pasted Graphic 12.png

创建建完成


12: 连接集群

随便选择一个节点连接,就是连接上集群了,但是命令参数,要加一个-c 表是以集群方式连接

[root@localhost 7001]# ./redis-cli -c -h 172.16.251.190 -p 7001 

Pasted Graphic 14.png


13:查看集群信息

集群信息

172.16.251.190:7002> cluster info

Pasted Graphic 15.png

节点信息

Pasted Graphic 16.png


14: 停掉一个主节点,他的从节点会自动成为主节点顶上

备注

3.x版本中

7003停掉,他的从节点7006就会变成主节点

此处实验的版本中,没有搞清楚主从关系咋分配的

当把7003停掉的时候,代替7003的并不是7006,需要再多次初验观察


四、向集群中添加节点(假如不够用了,加嘛)

1:添加主节点(再弄个7007出来)

[root@localhost redis-cluster]# cp -r 7001 7007

# 同样的把之前的数据文件删除掉

[root@localhost redis-cluster]# rm -rf 7007/dump.rdb 

# 7007nodes.conf删除掉(这是从7001复制出来的原来7001的集群配置信息)

[root@localhost redis-cluster]# rm -rf 7007/nodes.conf

# 修改端口

[root@localhost redis-cluster]# vim 7007/redis.conf

port 7007


2: 启动7007

[root@localhost redis-cluster]#  cd 7007

[root@localhost 7007]# ../redis-server redis.conf 


3:把7007作为主节点添加到集群中

[root@localhost 7007]# cd ..

[root@localhost redis-cluster]# ./redis-trib.rb add-node 172.16.251.190:7007 172.16.251.190:7001

# 命令解释

add-node表示添加节点

后边的两个地址 172.16.251.190:7007表示要增加哪个机器

再后边的172.16.251.190:7001表示把7007添加到的集群中任意一个节点


4:为新加的节点分配存储槽[slot]

redis集群存储使用了16384个槽, 已创建的集群已经自动平均分配好了存储槽,

而刚才新加的7007只是加入到集群中,并没有分配槽

此时向redis集群中添加数据,无论如何,都不会存到7007

所以需要把之前三个主节点所占用的全部槽分一些给7007

命令: redis-trib.rb reshard 集群中任意一个节点ip:port

[root@localhost redis-cluster]# ./redis-trib.rb reshard 172.16.251.190:7001 

Pasted Graphic 18.png


命令执行后,如上图,需要输入新节点7007分配槽数量

How many slots do you want to move (from 1 to 16384)? 500

接收节点7007在集群中是节点id

What is the receiving node ID? 57751be7184d17c1db39438422fcd26aeb9c846b

从集群中哪此节点中向新节点转移槽

Source node #1:all

之后还会有一些处理输出信息,直到出现一个提示, 如下图,输入yes

Pasted Graphic 19.png

到此,向集群中添加主节点,完成。


5:给刚才的7007添加从备份节点

防止7007会挂了,需要给7007加个slave

再复制一个7008出来,作为7007salve

[root@localhost redis-cluster]# cp -r 7001 7008

修改7008的端口

[root@localhost redis-cluster]# vim 7008/redis.conf

port 7008

删除7008中的dump.rdb nodes.conf

[root@localhost redis-cluster]#  cd 7008

[root@localhost redis-7008]#  rm -f dump.rdb nodes.conf


6:启动7008

[root@localhost redis-7008]#  ./redis-server redis.conf


7: 7008作为7007slave添加到集群中

命令 redis-trib.rb add-node --slave --master-id 给哪个主节点添加从 新节点 集群中任意一个节点

现在要给7007添加slave, 所以要知道7007在集群中的节点id

为此需要先获取7007在集群中的id

首先登录集群 

[root@localhost redis-7008]#  ./redis-cli -c -h 172.16.251.190 -p 7001

查看集群节点信息, 如下图,找到7007, 前边的一长串,就是7007在集群中的节点id, 根刚才给7007分配存储槽时候看到的一样

Pasted Graphic 20.png


8: 7008作为7007slave进行添加

./redis-trib.rb add-node --slave --master-id 57751be7184d17c1db39438422fcd26aeb9c846b 172.16.251.190:7008 172.16.251.190:7001

Pasted Graphic 21.png

成功

此时登录集群,查看节点信息

Pasted Graphic 22.png


7008已经作为7007的从节点加到集群中了


由上图可看出,先前搞不清楚创建集群时,各masterslave是哪个机器的问题就解决了。

各个slave信息后边的的一长串id, 就是他所属的主malster


  • 发表于 2018-06-11 16:29
  • 阅读 ( 1613 )
  • 分类:数据库

条评论

请先 登录 后评论
不写代码的码农
乾震坎坤艮离兑巽

java程序员

3 篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除