linux下redis单机集群搭建

环境:

centos7 gcc版本

4C8G 磁盘100G

单台机器:6个节点,3个master,3个slave

 

1.redis介绍

版本3.0之后支持集群,为解决单台服务器不够用情况。redis可作为数据库、缓存、消息中间件。Redis 5.0 是第一个加入流数据类型(stream data type )的版本。

Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理。它支持字符串哈希表列表集合有序集合位图hyperloglogs等数据类型。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel(哨兵模式)提供高可用,通过Redis Cluster(集群模式)提供自动分区

 

2.安装环境

(2.1)安装支持的库文件

切换目录:cd /usr/local/

安装命令:yum -y install gcc automake autoconf libtool make

linux下redis单机集群搭建

(2.2)下载redis5.0.4

下载命令:wget http://download.redis.io/releases/redis-5.0.4.tar.gz

linux下redis单机集群搭建

(2.3)解压redis文件

解压命令:tar xvzf redis-5.0.4.tar.gz

linux下redis单机集群搭建

(2.4)编译与安装

切换目录:cd /usr/local/redis-5.0.4

编译与安装命令: make PREFIX=/usr/local/redis install

linux下redis单机集群搭建

(2.5)复制redis-trib.rb到 /usr/local/bin 目录下

切换目录:cd src/

复制命令:cp redis-trib.rb /usr/local/bin/

(2.6)创建redis节点

切换目录:cd /usr/local/bin/

创建redis-cluster目录:mkdir redis-cluster

linux下redis单机集群搭建

切换目录:cd redis-cluster/

创建三个目录:mkdir 6001 6002 6003

linux下redis单机集群搭建

(2.7)redis.conf复制到6001、6002、6003这三个目录中

命令:cp redis.conf redis-cluster/6001

出现问题:

linux下redis单机集群搭建

解决方法:

redis.conf正确路径:/usr/local/redis-5.0.4/redis.conf

 

执行命令:cp /usr/local/redis-5.0.4/redis.conf redis-cluster/6001

出现问题:

linux下redis单机集群搭建

解决方法:

执行命令:cp /usr/local/redis-5.0.4/redis.conf 6001/

linux下redis单机集群搭建

 

同样,复制redis.conf到6002、6003目录下

执行命令:

切换目录:cd ..

linux下redis单机集群搭建

复制命令:

cp /usr/local/redis-5.0.4/redis.conf 6002/

cp /usr/local/redis-5.0.4/redis.conf 6003/

(2.8)修改配置文件redis.conf

(2.8.1)6001目录下配置文件

切换目录:cd 6001/

编辑命令:vim redis.conf

快速查找字段命令:先按空格键,再输入/查找字段,再按回车,输入i编辑,Esc退出,:wq退出并保存,Home行首,End行尾。

port 6001
bind 192.168.229.130

daemonize yes //redis后台运行

pidfile /var/run/redis_6001.pid

cluster-enabled yes

cluster-config-file nodes-6001.conf  //集群的配置

cluster-node-timeout 15000

appendonly yes   //aof日志开启,每次写操作都记录一条日志

(2.8.2)6002目录下配置文件

切换目录:cd ..
                  cd 6002/

编辑命令:vim redis.conf

快速查找字段命令:先按空格键,再输入/查找字段,再按回车,输入i编辑,Esc退出,:wq退出并保存,Home行首,End行尾。

port 6002
bind 192.168.229.130

daemonize yes //redis后台运行

pidfile /var/run/redis_6002.pid

cluster-enabled yes

cluster-config-file nodes-6002.conf  //集群的配置

cluster-node-timeout 15000

appendonly yes   //aof日志开启,每次写操作都记录一条日志

(2.8.3)6003目录下配置文件,参考前两个步骤即可。

(2.9)启动节点

切换目录:cd /usr/local/redis/bin/

执行启动命令:redis-server /usr/local/bin/redis-cluster/6001/redis.conf

出现问题:

linux下redis单机集群搭建

解决方法:

重新执行命令:./redis-server /usr/local/bin/redis-cluster/6001/redis.conf

linux下redis单机集群搭建

启动其它两个节点:

./redis-server /usr/local/bin/redis-cluster/6002/redis.conf
./redis-server /usr/local/bin/redis-cluster/6003/redis.conf

(2.10)查看redis启动情况

查看命令:ps -ef|grep redis

linux下redis单机集群搭建

(2.11)查看pid情况

查看命令:cat nodes-6001.conf、cat nodes-6002.conf、cat nodes-6003.conf

编辑命令:vim nodes-6001.conf、vim nodes-6002.conf 、vim nodes-6003.conf 

查找文件名:find -name nodes-6001.conf

(2.12)查看redis端口

执行命令:netstat -tnlp|grep redis

出现问题:

linux下redis单机集群搭建

解决方法:

安装依赖:yum -y install net-tools

linux下redis单机集群搭建

重新执行命令:netstat -tnlp|grep redis

linux下redis单机集群搭建

查看所有端口命令:netstat -tunpl

linux下redis单机集群搭建

(2.13)开启防火墙

firewall-cmd --zone=public --add-port=6001-6003/tcp --permanent

firewall-cmd --zone=public --add-port=16001-16003/tcp --permanent

firewall-cmd --reload

firewall-cmd --zone=public --list-ports

出现问题:

linux下redis单机集群搭建

解决方法:

开启防火墙:systemctl start firewalld

查看防火墙状态:systemctl status firewalld

linux下redis单机集群搭建

重新执行命令:

firewall-cmd --zone=public --add-port=6001-6003/tcp --permanent

firewall-cmd --zone=public --add-port=16001-16003/tcp --permanent

firewall-cmd --reload

linux下redis单机集群搭建

执行命令:

firewall-cmd --zone=public --list-ports

linux下redis单机集群搭建

(2.14)创建集群

执行命令:

./redis-cli --cluster create --cluster-replicas 1 192.168.229.130:6001 192.168.229.130:6002 192.168.229.130:6003
出现问题:

linux下redis单机集群搭建

解决方法:

切换目录:cd  /usr/local/bin/redis-cluster/6001

编辑命令:vim redis.conf,只保留一个bind

bind 127.0.0.1 192.168.229.130

6002、6003目录配置文件参考6001修改

杀掉所有进程: kill -s 9 6684 6689 6934

重新启动:./redis-server /usr/local/bin/redis-cluster/6001/redis.conf

                  ./redis-server /usr/local/bin/redis-cluster/6002/redis.conf

                 ./redis-server /usr/local/bin/redis-cluster/6003/redis.conf

 

拓展:启动原始配置文件:./redis-server /usr/local/redis-5.0.4/redis.conf

 

重新执行:

切换目录:/usr/local/redis/bin

执行命令:

./redis-cli --cluster create --cluster-replicas 1 192.168.229.130:6001 192.168.229.130:6002 192.168.229.130:6003

出现问题:

linux下redis单机集群搭建

解决方法:

参考前2.7-2.13步,在搭建3个节点。

 

重新执行创建集群命令:

./redis-cli --cluster create --cluster-replicas 1 192.168.229.130:6001 192.168.229.130:6002 192.168.229.130:6003 192.168.229.130:6004 192.168.229.130:6005 192.168.229.130:6006
linux下redis单机集群搭建

输入:yes

linux下redis单机集群搭建

(2.15)集群验证

连接6001节点命令:./redis-cli -h 192.168.229.130 -c -p 6001

输入命令:set 1 hello redis

出现问题:

linux下redis单机集群搭建

解决方法:

检查语法,输入:set 1 hello

1-key

hello-value

 

连接另一个节点命令:./redis-cli -h 192.168.229.130 -c -p 6006

输入命令:get 1

linux下redis单机集群搭建

拓展:其它节点可参考连接6001方式

 

3.redis简单原理

(3.1)每个节点都是对等、平等关系,保存各自数据和整个集群状态信息,和其它所有节点活跃连接。连接一个节点可获取其它节点数据。

(3.2)redis端口为6001,集群总线端口为16001.

(3.3)redis采用哈希槽(hash slot)方式分配,默认16384个slot。set一个key算法:CRC16(key) % 16384,将key分配到哈希槽区间的节点。

(3.4)redis 集群把数据存在一个 master 节点,在这个 master 和其对应的salve 之间进行数据同步。当读取数据时,根据一致性哈希算法到对应的 master 节点获取数据。只有当一个master 挂掉之后,才会启动一个对应的 salve 节点,充当 master 。

(3.5)必须要3个或以上的主节点,否则在创建集群时会失败,并且当存活的主节点数小于总节点数的一半时,整个集群就无法提供服务了。

上一篇:b_aw_可达性统计(拓扑排序+bitset)


下一篇:Redis5.0.5安装及集群配置