(Redis系列二)Centos7 搭redis3.2.12集群-3主3从的6个节点服
1、虚拟机环境
使用的Linux环境已经版本:
Centos 7 64位系统
主机ip:
172.16.0.9
172.16.0.10
172.16.0.11
每台服务器是1主1从,实验3台服务器课成为3主3从。,3个主的不挂,3个从的挂了没事,但是如果一个主的挂了他会切换至该服务器的其它从的,如果该从的也挂了那么集群就不能获取数据了
Redis安装的项目目录、日志、配置文件等都存放在/data/redis/目录下。
2、下载相关的安装包以及解压
首先在172.16.0.9 机器操作:
1 2 3 |
|
3、安装
在/data/soft/redis-3.2.12/目录下执行:
1 |
|
4、配置信息
创建集群配置、log日志、数据所在的文件夹:
1 2 |
|
创建集群端口文件夹:
1 2 3 |
|
复制配置文件到/data/soft/redis-3.2.12/cluster-conf/6379目录下:
1 |
|
修改6379目录下redis.conf配置文件(以下标红的在原配置中注释,添加以下内网至头部):
#注释掉ip或者设置0.0.0.0都是局域网访问
bind 0.0.0.0
##端口号
port 6379
#指定了记录日志的文件
logfile "/data/soft/redis-3.2.12/cluster-conf/6379/redis.log"
#该目录要事先创建好,数据目录,数据库的写入会在这个目录。rdb、aof文件也会写在这个目录
dir /data/soft/redis-3.2.12/cluster-conf/6379/
#是否开启集群
cluster-enabled yes
#集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息,
#这个文件并不需要手动配置,这个配置文件有Redis生成并更新,
#每个Redis集群节点需要一个单独的配置文件,请确保与实例运行的系统中配置文件名称不冲突。
cluster-config-file nodes-6379.conf
#节点互连超时的阀值。集群节点超时毫秒数
cluster-node-timeout 5000
#默认redis使用的是rdb方式持久化,这种方式在许多应用中已经足够用了,
#但是redis如果中途宕机,会导致可能有几分钟的数据丢失,
#根据save来策略进行持久化,Append Only File是另一种持久化方式,可以提供更好的持久化特性,
#Redis会把每次写入的数据在接收后都写入 appendonly.aof 文件,
#每次启动时Redis都会先把这个文件的数据读入内存里,先忽略RDB文件。
appendonly yes
复制6379目录下redis.conf至6380并修改端口及存储路径:
[[email protected] 6379]# cp /data/soft/redis-3.2.12/cluster-conf/6379/redis.conf /data/soft/redis-3.2.12/cluster-conf/6380/
[[email protected] 6380]# vim /data/soft/redis-3.2.12/cluster-conf/6380/redis.conf
5、使用scp复制安装和配置好的redis复制到其他服务器上
已经在172.16.0.9机器配置好,复制到 172.16.0.10 和 172.16.0.11 机器
在两台新机器上创建文件夹
mkdir /data/soft
复制:
1 2 |
|
1 2 |
|
6、启动3台机器的redis
3台机器执行启动方式:
[[email protected]-ea1bnx05 6380]# ps -ef|grep redis
root 12500 6029 0 15:43 pts/0 00:00:00 grep --color=auto redis
[[email protected] /]# /data/soft/redis-3.2.12/bin/redis-server /data/soft/redis-3.2.12/cluster-conf/6379/redis.conf &
[1] 12666
[[email protected] /]# /data/soft/redis-3.2.12/bin/redis-server /data/soft/redis-3.2.12/cluster-conf/6380/redis.conf &
[2] 12678
[[email protected] /]# ps -ef|grep redis
root 12666 6029 0 15:45 pts/0 00:00:00 /data/soft/redis-3.2.12/bin/redis-server 0.0.0.0:6379 [cluster]
root 12678 6029 0 15:45 pts/0 00:00:00 /data/soft/redis-3.2.12/bin/redis-server 0.0.0.0:6380 [cluster]
root 12682 6029 0 15:45 pts/0 00:00:00 grep --color=auto redis
[[email protected] 6379]# netstat -tunlp|grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 12666/redis-server
tcp 0 0 0.0.0.0:6380 0.0.0.0:* LISTEN 12678/redis-server
tcp 0 0 0.0.0.0:16379 0.0.0.0:* LISTEN 12666/redis-server
tcp 0 0 0.0.0.0:16380 0.0.0.0:* LISTEN 12678/redis-server
[[email protected] 6379]#
7、创建集群
部署环境
yum install ruby -y
yum install rubygems -y
gem install redis
报错,提示ruby版本需要大于2.2.2版本。CentOS7 yum库中ruby的版本支持到 2.0.0,可gem 安装redis需要最低是2.2.2
需要安装个高版本的ruby
1 2 3 4 5 6 |
|
查看rvm库中已知的ruby版本
[[email protected] 6379]# rvm list known
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.10]
[ruby-]2.3[.7]
[ruby-]2.4[.4]
[ruby-]2.5[.1]
[ruby-]2.6[.0-preview2]
查看现在的版本
[[email protected] 6379]# ruby --version
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
使用一个ruby新版本
[[email protected] 6379]# rvm install 2.4.4
使用ruby新版本
rvm use 2.4.4
卸载一个旧版本
rvm remove 2.0.0
查看现在版本
在重新安装ruby相关的redis就可以了
[[email protected] 6379]# gem install redis
Fetching: redis-4.0.2.gem (100%)
Successfully installed redis-4.0.2
Parsing documentation for redis-4.0.2
Installing ri documentation for redis-4.0.2
Done installing documentation for redis after 1 seconds
1 gem installed
开启集群
[[email protected] 6379]# /data/soft/redis-3.2.12/src/redis-trib.rb create --replicas 1 172.16.0.9:6379 172.16.0.9:6380 172.16.0.10:6379 172.16.0.10:6380 172.16.0.11:6379 172.16.0.11:6380
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
172.16.0.9:6379
172.16.0.10:6379
172.16.0.11:6379
Adding replica 172.16.0.10:6380 to 172.16.0.9:6379
Adding replica 172.16.0.9:6380 to 172.16.0.10:6379
Adding replica 172.16.0.11:6380 to 172.16.0.11:6379
M: b4f27f6441fc4e5dbf049268236bab7c0a62d4ef 172.16.0.9:6379
slots:0-5460 (5461 slots) master
S: 81e21ecba318e62a13c196c3ce64b75ac02b08ad 172.16.0.9:6380
replicates de36ff808165790059cbc67b82fdc8b10c05b67d
M: de36ff808165790059cbc67b82fdc8b10c05b67d 172.16.0.10:6379
slots:5461-10922 (5462 slots) master
S: 5e03f8867ae368f3a79fd4dd6c49eb46750fa8e7 172.16.0.10:6380
replicates b4f27f6441fc4e5dbf049268236bab7c0a62d4ef
M: 6b9dba0f0e9939b6020a1e20a8918a0f6a80fb68 172.16.0.11:6379
slots:10923-16383 (5461 slots) master
S: d34f949cd71e296d8b65c5c9420dfcdddae2b09e 172.16.0.11:6380
replicates 6b9dba0f0e9939b6020a1e20a8918a0f6a80fb68
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join..
>>> Performing Cluster Check (using node 172.16.0.9:6379)
M: b4f27f6441fc4e5dbf049268236bab7c0a62d4ef 172.16.0.9:6379
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 5e03f8867ae368f3a79fd4dd6c49eb46750fa8e7 172.16.0.10:6380
slots: (0 slots) slave
replicates b4f27f6441fc4e5dbf049268236bab7c0a62d4ef
M: de36ff808165790059cbc67b82fdc8b10c05b67d 172.16.0.10:6379
slots:5461-10922 (5462 slots) master
1 additional replica(s)
M: 6b9dba0f0e9939b6020a1e20a8918a0f6a80fb68 172.16.0.11:6379
slots:10923-16383 (5461 slots) master
1 additional replica(s)
S: d34f949cd71e296d8b65c5c9420dfcdddae2b09e 172.16.0.11:6380
slots: (0 slots) slave
replicates 6b9dba0f0e9939b6020a1e20a8918a0f6a80fb68
S: 81e21ecba318e62a13c196c3ce
slots: (0 slots) slave
replicates de36ff808165790059cbc67b82fdc8b10c05b67d
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
完成安装
进服务器测试
[[email protected] bin]# /data/soft/redis-3.2.12/bin/redis-cli -c -h 172.16.0.9 -p 6379
172.16.0.9:6379> set aaa bbb
172.16.0.9:6379> keys *
1) "bbb"
172.16.0.9:6379> get aaa
-> Redirected to slot [10439] located at 172.16.0.10:6379
"bbb"
172.16.0.10:6379> exit
如果需要关闭redis集群
[[email protected] bin]# netstat -tunlp|grep redis
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 14546/redis-server
tcp 0 0 0.0.0.0:6380 0.0.0.0:* LISTEN 9626/redis-server 0
tcp 0 0 0.0.0.0:16379 0.0.0.0:* LISTEN 14546/redis-server
tcp 0 0 0.0.0.0:16380 0.0.0.0:* LISTEN 9626/redis-server 0
[[email protected] 6379]# kill 9626
[[email protected] 6379]# kill 14546
其它两台也是
如果设置密码
则修改配置文件redis.conf
vim /data/soft/redis-3.2.12/cluster-conf/6379/redis.conf
vim /data/soft/redis-3.2.12/cluster-conf/6380/redis.conf
增加一列
requirepass “111111”
或者在线修改,上面的没试通,下面的ok,登录这6个节点,全部执行一次,
masterauth为从节点访问主节点的密码requirepass为客户端程序访问redis时候的连接密码
[[email protected] bin]# redis-cli -c -p 6379
config set masterauth wuwei111
config set requirepass wuwei111
再登录6个节点,执行config rewrite,就会把配置写入启动文件redis.conf中
[[email protected] bin]# redis-cli -c -p 6379 -a wuwei111
config rewrite
重启动服务启动操作:
1、启动了6个节点的redis
/data/soft/redis-3.2.12/bin/redis-server /data/soft/redis-3.2.12/cluster-conf/6379/redis.conf &
/data/soft/redis-3.2.12/bin/redis-server /data/soft/redis-3.2.12/cluster-conf/6380/redis.conf &
2、启动集群
/data/soft/redis-3.2.12/src/redis-trib.rb create --replicas 1 172.16.0.9:6379 172.16.0.9:6380 172.16.0.10:6379 172.16.0.10:6380 172.16.0.11:6379 172.16.0.11:6380