文章目录
前言
一:环境
1.1:环境
- VMware软件
- Redis官网建议使用6台服务器搭建群集,3台master,3台slave
- 我们用两台服务器模拟6台服务器,剩下的服务器添加网卡模拟
- 主服务器master1:IP地址:192.168.79.133
- 主服务器master2:IP地址:192.168.79.129
- 主服务器master3:IP地址:192.168.79.130
- 从服务器slave1:IP地址:192.168.79.134
- 从服务器slave2:IP地址:192.168.79.131
- 从服务器slave3:IP地址:192.168.79.132
- Redis主服务器需要安装rvm和Ruby控制集群软件
1.2:实验目的
- 通过实验实现以下目标
- 部署Redis服务
- 构建Redis群集
- 验证Redis群集功能
二:实验过程
2.1:主从服务器部署Redis
-
'//主从服务器的部署都是一样的,在此仅展示主服务器的部署' [root@master1 ~]# yum install gcc gcc-c++ make -y '//安装环境组件编译器' [root@master1 ~]# mount.cifs //192.168.23.1/ccc /mnt '//挂载宿主机目录' Password for root@//192.168.23.1/ccc: [root@master1 ~]# cd /mnt/redis/ [root@master1 redis]# tar zxvf redis-5.0.7.tar.gz -C /opt '//redis源码包可以直接到官网下载' [root@master1 redis]# cd /opt/redis-5.0.7/ [root@master1 redis-5.0.7]# make '//直接进行make' [root@master1 redis-5.0.7]# make PREFIX=/usr/local/redis/ install '//指定redis目录并安装' [root@master1 redis-5.0.7]# cd utils/'//回到redis源码包解压目录' [root@master1 utils]# ./install_server.sh '//执行脚本进行配置' Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] '//选择redis默认接口,直接回车' Selecting default: 6379 Please select the redis config file name [/etc/redis/6379.conf] '//选择redis默认配置文件名称,直接回车' Selected default - /etc/redis/6379.conf Please select the redis log file name [/var/log/redis_6379.log] '//选择默认redis日志文件名称,直接回车' Selected default - /var/log/redis_6379.log Please select the data directory for this instance [/var/lib/redis/6379] '//选择默认接口的默认数据文件,直接回车' Selected default - /var/lib/redis/6379 Please select the redis executable path [] /usr/local/redis/bin/redis-server '//选择redis可执行文件路径,需要手动输入此路径:/usr/local/redis/bin/redis-server' Selected config: '//选择的配置清单展示' Port : 6379 Config file : /etc/redis/6379.conf Log file : /var/log/redis_6379.log Data dir : /var/lib/redis/6379 Executable : /usr/local/redis/bin/redis-server Cli Executable : /usr/local/redis/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort. '//直接回车完成配置' Copied /tmp/6379.conf => /etc/init.d/redis_6379 Installing service... Successfully added to chkconfig! Successfully added to runlevels 345! Starting Redis server... Installation successful! [root@master1 utils]# ln -s /usr/local/redis/bin/* /usr/local/bin '//将redis命令创建软连接,便于系统识别' [root@master1 utils]# netstat -ntap |grep 6379 tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
2.2:主从服务器配置文件修改
-
[root@master1 utils]# vim /etc/redis/6379.conf '//修改主配置文件' #bind 127.0.0.1 '//注释第70行的监听127地址,表示监听所有地址' protected-mode no '//去掉第89行注释关闭安全保护' port 6379 '//去掉第93行注释,开启端口6379' daemonize yes '//去掉第137行注释,以独立进程启动' cluster-enabled yes '//去掉第833行注释,开启群集功能' cluster-config-file nodes-6379.conf '//去掉第841行注释,群集名称文件设置' cluster-node-timeout 15000 '//去掉第847行注释,群集超时时间设置' appendonly yes '//去掉第700行注释,开启aof持久化' [root@master1 utils]# cd /var/lib/redis/6379/ [root@master1 6379]# /etc/init.d/redis_6379 restart '//重启redis服务' [root@master1 6379]# ls appendonly.aof dump.rdb nodes-6379.conf '//生成了三个文件,appendonly.aof是AOF持久化文件,dump.rdb是RDB快照文件,nodes-6379.conf是节点首次启动生成的配置文件'
2.3:主服务器安装rvm,RUBY控制集群软件
-
[root@master1 6379]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 '//导入key文件,若出现error,重新导入一次即可' [root@master1 6379]# curl -sSL https://get.rvm.io | bash -s stable '//安装rvm' [root@master1 rvm-1.29.9]# cd /mnt/redis/ [root@master1 redis]# tar zxvf rvm-master.tar.gz -C /opt [root@master1 redis]# cd /opt/rvm-master/ [root@master1 rvm-master]# ./install [root@master1 rvm-master]# source /etc/profile.d/rvm.sh '//执行环境变量' [root@master1 rvm-master]# rvm list known '//列出ruby可以安装的版本' [root@master1 rvm-master]# rvm install 2.4.1 '//安装ruby2.4.1版本,安装版本的事件会比较长' [root@master1 rvm-master]# ruby -v '//查看当前ruby版本' [root@master1 rvm-master]# gem install redis '//再次安装redis'
2.4:主从服务器各自添加两块网卡
-
[root@master1 rvm-master]# systemctl restart network '//重启网卡' [root@master1 rvm-master]# systemctl stop firewalld.service '//关闭防火墙' [root@master1 rvm-master]# setenforce 0
-
[root@slave1 6379]# systemctl restart network [root@slave1 6379]# systemctl stop firewalld.service [root@slave1 6379]# setenforce 0
2.5:主服务器上创建群集
-
[root@master1 rvm-master]# redis-cli --cluster create 192.168.79.133:6379 192.168.79.129:6379 192.168.79.130:6379 192.168.79.134:6379 192.168.79.131:6379 192.168.79.132:6379 --cluster-replicas 1 '//反馈的信息输入yes回车即可,以下为反馈信息' >>> Performing hash slots allocation on 6 nodes... Master[0] -> Slots 0 - 5460 Master[1] -> Slots 5461 - 10922 Master[2] -> Slots 10923 - 16383 Adding replica 192.168.79.131:6379 to 192.168.79.133:6379 Adding replica 192.168.79.132:6379 to 192.168.79.129:6379 Adding replica 192.168.79.134:6379 to 192.168.79.130:6379 M: dacbafd23b78accca1ecb7a37a926dd7c711af0d 192.168.79.133:6379 '//133,129,130位主' slots:[0-5460] (5461 slots) master M: dacbafd23b78accca1ecb7a37a926dd7c711af0d 192.168.79.129:6379 slots:[5461-10922] (5462 slots) master M: dacbafd23b78accca1ecb7a37a926dd7c711af0d 192.168.79.130:6379 slots:[10923-16383] (5461 slots) master S: f3a25427b5b2bd0af5b194d0d90c87882a09e4cd 192.168.79.134:6379 '//134,131,132为从' replicates dacbafd23b78accca1ecb7a37a926dd7c711af0d S: f3a25427b5b2bd0af5b194d0d90c87882a09e4cd 192.168.79.131:6379 replicates dacbafd23b78accca1ecb7a37a926dd7c711af0d S: f3a25427b5b2bd0af5b194d0d90c87882a09e4cd 192.168.79.132:6379 replicates dacbafd23b78accca1ecb7a37a926dd7c711af0d 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 192.168.79.133:6379) M: dacbafd23b78accca1ecb7a37a926dd7c711af0d 192.168.79.133:6379 slots:[0-16383] (16384 slots) master 1 additional replica(s) S: f3a25427b5b2bd0af5b194d0d90c87882a09e4cd 192.168.79.131:6379 slots: (0 slots) slave replicates dacbafd23b78accca1ecb7a37a926dd7c711af0d [OK] All nodes agree about slots configuration. >>> Check for open slots... >>> Check slots coverage... [OK] All 16384 slots covered. '//一主一从的绑定关系是随机的'
2.6:集群验证
-
主从数据验证
-
[root@master1 rvm-master]# redis-cli -h 192.168.79.133 -p 6379 '//登陆到133服务器数据库' 192.168.79.133:6379> keys * (empty list or set) 192.168.79.133:6379> set user lisi '//创建一个键值' OK 192.168.79.133:6379> keys * '//查看所有键' 1) "user" 192.168.79.133:6379> get user '//查看user键的值' "lisi" 192.168.79.133:6379> exit '//退出' [root@master1 rvm-master]# redis-cli -h 192.168.79.131 -p 6379 '//登陆到131服务器数据库' 192.168.79.131:6379> keys * 1) "user" 192.168.79.131:6379> get user '//查看user键的值' (error) MOVED 5474 192.168.79.129:6379 '//提示移动到129节点上' 192.168.79.131:6379> exit [root@master1 rvm-master]# redis-cli -h 192.168.79.129 -p 6379 '//登陆到129服务器的数据库' 192.168.79.129:6379> keys * 1) "user" 192.168.79.129:6379> get user "lisi" 192.168.79.129:6379> exit
-
hash方式存储的值验证与设置键的自动删除时间
-
[root@master1 rvm-master]# redis-cli -h 192.168.79.133 -p 6379 192.168.79.133:6379> hset person name zhangsan '//使用hash方式创建键值对' (integer) 1 192.168.79.133:6379> keys * 1) "person" 2) "user" 192.168.79.133:6379> hget person name "zhangsan" 192.168.79.133:6379> expire user 10 '//设置user键的自动删除时间10秒' (integer) 1 '//等待10秒' 192.168.79.133:6379> keys * 1) "person" '//成功自动删除' 192.168.79.133:6379> exit [root@master1 rvm-master]#