ICAT技术 阅读:1476评论: 1 2018-08-17

Redis对象类型简介

redis是一种键值对类型的内存数据库,redis做集群,就是把读和写进行分离,主从关系,可以通过多个从的库提高并发读的能力。

下面一张图来了解下redis集群的原理

70FDD5E08326F12925BB8C2E078B141B.jpg

图上能看到的信息:

(1)所有的object对象存放到ORCL主库中

(2)主库通过哈希slot进行分库,分配到每一个node节点上

(3)node节点是互相监听,比如node1挂了,哈希slot会平摊到node2和node3上

缺点:每个Node承担着互相监听、高并发数据写入、高并发数据读出,工作任务繁重

优点:将Redis的写操作分摊到了多个节点上,提高写的并发能力,扩容简单。

接下来开始配置集群,在home建一个data目录

cd /home
mkdir data
cd ./data

1,下载redis和解压

wget 
tar -zxvf /redis-3.2.1.tar.gz

2,编译安装

cd redis-3.2.1
make && make install

    其中make可能会报The program 'make' can be found in the following packages

    在ubuntu 输入make geth命令提示以下的错误信息,说make geth没有安装

输入命令,按build-essential解决了

sudo apt-get install build-essential

输入y安装完成后

在编译安装

make && make install

3,创建redis节点

测试我们用2台ubuntu的系统,一台ip为192.168.1.136(主),另一台192.168.1.112(从),每台机器创建3个节点

我们现在主机器创建3个节点

cd /home/data
mkdir redis_cluster  //创建集群目录
cd ./redis_cluster
mkdir 7000 7001 7002  //分别代表三个节点    其对应端口 7000 7001 7002
//创建7000节点为例,拷贝到7000目录
cp /home/data/redis-3.2.1/redis.conf ./7000 //复制到7000 7001 7002三个文件夹中
cp /home/data/redis-3.2.1/redis.conf ./7001
cp /home/data/redis-3.2.1/redis.conf ./7002

4,修改redis配置

分别修改7000 7001 7002中的redis.conf配置,需要修改如下属性的配置

博主在这里教大家个技巧,可以快速使用vim编辑查找到这些需要修改的属性的地方

退出编辑模式esc  输入/  输入要查询的单词 回车  按键盘n查找下一个

bind 192.168.1.136                        #找到bind后台添加自己机器的ip
daemonize    yes                          #redis后台运行
pidfile  /var/run/redis_7000.pid          #pidfile文件对应7000,7001,7002
port  7000                                #端口7000,7001,7002
cluster-enabled  yes                      #开启集群  把注释#去掉
cluster-config-file  nodes_7000.conf      #集群的配置  把注释#去掉 配置文件首次启动自动生成 7000,7001,7002
cluster-node-timeout  5000                #请求超时  设置5秒够了
appendonly  yes                           #aof日志开启  有需要就开启,它会每次写操作都记录一条日志


另一台机器也是如上操作,把端口地址修改分别为7003 7004 7005 配置对应的改一下即可


5,两台机器启动各节点(2台服务器启动方式)

启动192.168.1.136机器上的服务。为了方便启动服务,我们编辑启动redis服务的脚本。

cd /home/data
vim ./start.sh
#编辑的内容如下:
redis-server /home/data/redis/redis_cluster/7000/redis.conf
redis-server /home/data/redis/redis_cluster/7001/redis.conf
redis-server /home/data/redis/redis_cluster/7002/redis.conf
#保存退出命令 esc +  :  +  wq  + 回车

另外一台机器的脚本也是一样

cd /home/data
vim ./start.sh
#编辑的内容如下:
redis-server /home/data/redis/redis_cluster/7003/redis.conf
redis-server /home/data/redis/redis_cluster/7004/redis.conf
redis-server /home/data/redis/redis_cluster/7005/redis.conf
#保存退出命令 esc +  :  +  wq  + 回车

查看redis服务是否启动

ps -ef | grep redis


blob.png


可以看到三个端口的redis服务已经启动

6,创建集群

官方提供了一个工具redis-trib.rb   使用之前需要安装ruby

sudo apt-get install ruby

在用gem命令安装redis接口

gem install redis

上面的步骤完事了,接下来运行一下redis-trib.rb

/home/data/redis-3.2.1/src/redis-trib.rb


blob.png


接下来在192.168.1.136中创建

/home/data/redis-3.2.1/src/redis-trib.rb create --replicas 1 192.168.1.136:7000 192.168.1.136:7001 192.168.1.136:7002 192.168.1.112:7003 192.168.1.112:7004 192.168.1.112:7005

 --replicas  1  表示 自动为每一个()节点分配一个()节点    上面有6个节点,程序会按照一定规则生成 3个(主)3个(从)

 运行中,提示Can I set the above configuration? (type 'yes' to accept): yes    //输入yes

image.png


这样就创建完成了。如果发现一直在Waiting for the cluster to join..................不动,试着去开器6个端口。

还有可能就是你已经创建过集群了,需要关闭所有redis ,删除redis一些文件。重启在启动。

image.png

删除目录中的appendonly.aof ,所有nodes-700*.conf节点,dump.rdb文件,把这些都删除了。在启动服务,重启创建集群。


第二种方法:redis需要设置密码的方法,如果redis不设置密码,外网就无法访问,Java类就无法操作。

分别修改7000 7001 7002 7003 7004 7005中的redis.conf配置,需要修改如下属性的配置

#bind 192.168.1.136          #注释掉指定ip访问

重启redis所有的服务

redis-server  redis_cluster/7003/redis.conf

需要在集群启动后设置密码,不然,设置密码后,集群不能启动

redis-cli -c -p 7000             #登录redis
config set masterauth 1234       #1234为密码
config set requirepass 1234      #1234为密码  
config rewrite                   #重置配置

6台redis服务以此设置密码,需要6台服务密码一致


6,测试

我们把6个redis用客户端连接方便查看效果。

其中7000 ,7001,7002为主;7003 7004 7005为从


image.png


(1)保存一条主的服务并添加一条记录

redis-cli -c -h 192.168.1.136 -p 7000     #登录

set test hello                            #保存一条记录


set完成后,用客户端打开redis刷新db

image.png

其中7002中的db为主,7003未从,所以他会自动分配到7003中。


(2)删除

del test                            #删除一条键为test的值

主库删除,层库也会自动删除

image.png

redis集群还有些的特性我就不一一举例了,上面也有说过redis集群的特性。还有不懂的问题可以下方留言,博主会第一时间回复。

转载请注明来源:

评论