一、为什么要搭建Redis集群?
二、搭建Redis集群
实验环境
- 一台master服务器上 三张网卡 分别是 20.0.0.30 20.0.0.133 20.0.0.134
- node 节点上也得具备3块网卡 20.0.0.31 20.0.0.135 20.0.0.132
- 模拟6节点
redis集群 (所有节点操作)
vim /etc/redis/6379.conf
注释掉 bind项 //redis 中 bind 选项默认监听所有网卡
89 protected-mode no //关闭保护模式
93 port 6379
137 daemonize yes //以独立进程启动
833 cluster-enabled yes //开启群集功能
841 cluster-config-file nodes-6379.conf //群集名称文件设置
700 appendonly yes //开启aof持久化
[root@localhost 6379]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
正常启动后,/var/lib/redis/6379/目录下会多出两个文件
一个是持久化 appendonly.aof 文件,另一个是节点首次启动生成的 nodes-6379.conf 配置文件
[root@localhost 6379]# cd /var/lib/redis/6379/
[root@localhost 6379]# ls
appendonly.aof dump.rdb nodes-6379.conf
仅在master中操作
//导入key 文件
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
//安装rvm ##rvm是ruby的版本管理工具 还可对ruby进行 安装 卸载 等
tar zxvf rvm-master.tar.gz
cd rvm-master/
./install
//执行环境变量
source /etc/profile.d/rvm.sh
//列出 Ruby 可安装的版本
rvm list known
//安装 Ruby2.4.1版本
rvm install 2.4.1
//使用Ruby2.4.1版本
rvm use 2.4.1
//查看当前 Ruby2.4.1 版本
ruby -v
//再次安装Redis
gem install redis
//创建集群
六个实例分为三组,每组一主一从,--replicas 1 表示 每组一个从,下面交互的时候 需要输入 yes 才可以创建。使用源码解压目录中的 redis-trib.rb 工具创建群集。
master 服务器上 3块网卡 20.0.0.30 20.0.0.133 20.0.0.134
node 节点上也得具备3块网卡 20.0.0.31 20.0.0.135 20.0.0.132
模拟6节点
master
添加完了后
UUID注释掉
service network restart
ifconfig
cd /etc/sysconfig/network-scripts/
ll
cp ifcfg-ens33 ifcfg-ens37
vi ifcfg-ens37
cp ifcfg-ens33 ifcfg-ens38
vi ifcfg-ens38
systemctl restart network
ip addr
node
网卡配置
以上操作与master一样
[root@localhost network-scripts]# /etc/init.d/redis_6379 restart
Stopping ...
Redis stopped
Starting Redis server...
前三个是主,后三个是从
redis-cli --cluster create 20.0.0.30:6379 20.0.0.133:6379 20.0.0.134:6379 20.0.0.31:6379 20.0.0.135:6379 20.0.0.132:6379 --cluster-replicas 1
测试
[root@localhost ~]# redis-cli -h 20.0.0.30 -p 6379 ##在主中写入一条数据
20.0.0.30:6379> set namess zzz
OK
20.0.0.30:6379> keys *
1) "namess"
[root@localhost ~]# redis-cli -h 20.0.0.31 -p 6379 ##切换从主机登录
20.0.0.31:6379> keys * ##从主机同步了主的数据
1) "namess"
20.0.0.31:6379> get namess ##却不能将key 中的数据输出出来
(error) MOVED 12039 20.0.0.133:6379 ##提示去主133才能将其输出
[root@localhost ~]# redis-cli -h 20.0.0.133 -p 6379 ##进入主133主机
20.0.0.133:6379> get namess ##将其输出
"zzz"
结论 主133 成为 主30的复制集
主30 第一次写入数据后,它会随机挑选一个节点作为自己的副本集,之后群集内的所有节点都会将数据指定这个副本集
如果想要所有节点都能get到key中的数据就这样登录
-c 是群集的意思
redis-cli -c -h 20.0.0.30 -p 6379
使用hash存储
好处是可以节省空间,将键存进hash 对象中,键名称在数据库中也会单独占用空间
[root@localhost ~]# redis-cli -h 20.0.0.30 -p 6379
20.0.0.30:6379> hset person score 80
(integer) 1
20.0.0.30:6379> hset person name lisi
(integer) 1
20.0.0.30:6379> hset person age 20
(integer) 1
20.0.0.30:6379> keys * ##只有一个key键,因为是hash
"person"
20.0.0.30:6379> hget person name ##输出时不能直接get name ,要先选中对象,再选中里面的 key
"lisi"
----生命周期设置----
20.0.0.30:6379> EXPIRE name 20 ##20秒生命周期
20.0.0.30:6379>keys * 查看
20秒后消失了
内存中也会消除
20.0.0.133:6379>keys*
复制集中也会消失