第三阶段基础
时 间:2023年7月3日
参加人:全班人员
内 容:
生产级redis cluster部署
目录
一、环境配置:【两台服务器】
二、redis多实例配置:
三、构建redis cluster集群
四、生产集群部署
五、集群故障切换
故障转移测试
六、拓 展:
安装部署:(两台主机,三主三从,redis版本为4.0.10)
实验基本条件:
Ip地址 | Node1 | Node2 | Node3 | |
主 库huyang1 | 192.168.59.137 | 7000 | 7001 | 7002 |
从 库huyang2 | 192.168.59.138 | 8000 | 8001 | 8002 |
一、环境配置:【两台服务器】
1、关闭防火墙
systemctl stop firewalld
iptables -F
setenforce 0
2.安装相关基础环境
yum -y install wget gcc gcc-c++ make tar openssl
openssl-devel cmake
3.上传相关软件安装包
rz redis-4.0.10.tar.gz ruby-2.5.1.tar.gz
redis-3.2.0.gem
4.解压安装包并调整位置
tar xf redis-4.0.10.tar.gz -C /usr/src/
5、编译、配置、安装
make
make MALLOC=jemalloc #避免碎片和可伸缩的并发支持
make PREFIX=/usr/local/redis install
6、优化redis程序命令
mkdir -p /usr/local/redis/conf
cp sentinel.conf /usr/local/redis/conf/
cp src/redis-trib.rb /usr/local/redis/bin/
ln -s /usr/local/redis/bin/* /usr/local/bin/
7.redis配置文件精简
cp redis.conf /usr/local/redis/conf/
cd /usr/local/redis/
cp conf/redis.conf{,.bak}
egrep -v "^$|^#" conf/redis.conf.bak > conf/redis.conf
8.系统调优配置
echo never >
/sys/kernel/mm/transparent_hugepage/enabled
echo never >
/sys/kernel/mm/transparent_hugepage/defrag
echo 'echo never >
/sys/kernel/mm/transparent_hugepage/enabled' >>
/etc/rc.local
echo 'echo never >
/sys/kernel/mm/transparent_hugepage/defrag' >>
/etc/rc.local
echo "* - nofile 10240" >> /etc/security/limits.conf --文件并发数
echo "net.core.somaxconn = 10240" >> /etc/sysctl.conf --监听队列
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf -- 0内存不够,就会拒绝申请
1物理内存都允许分配给你,只要有内存就给你用,这样可以避免申请内存失败的问题。
sysctl -p
二、redis多实例配置:
主库配置:
步骤一:建立三个端口文件夹,移动配置文件并复制三份
mkdir -p /data/redis-cluster
cd /data/redis-cluster
mkdir 7000 7001 7002
cp /usr/local/redis/conf/redis.conf
/data/redis-cluster/7000/
cp /usr/local/redis/conf/redis.conf
/data/redis-cluster/7001/
cp /usr/local/redis/conf/redis.conf
/data/redis-cluster/7002/
tree /data/
步骤二:修改配置文件
vim 7000/redis.conf
修改配置如下:
cluster-enabled yes
bind 0.0.0.0
port 7000
pidfile /data/redis-cluster/7000/redis.pid
logfile "/data/redis-cluster/7000/redis.log"
dir /data/redis-cluster/7000/
tcp-backlog 1024
daemonize yes
同理,将7001和7002配置文件修改,与上述端口不一,其他一致
步骤三:启动服务
redis-server /data/redis-cluster/7001/redis.conf
redis-server /data/redis-cluster/7002/redis.conf
redis-server /data/redis-cluster/7000/redis.conf
netstat -antup | grep redis-server
从库配置:
步骤一:建立三个端口文件夹,移动配置文件并复制三份
mkdir -p /data/redis-cluster
cd /data/redis-cluster
mkdir 8000 8001 8002
cp /usr/local/redis/conf/redis.conf
/data/redis-cluster/8000/
cp /usr/local/redis/conf/redis.conf
/data/redis-cluster/8001/
cp /usr/local/redis/conf/redis.conf
/data/redis-cluster/8002/
tree /data/
步骤二:修改配置文件
vim 7000/redis.conf
修改配置如下:
cluster-enabled yes
bind 0.0.0.0
port 8000
pidfile /data/redis-cluster/8000/redis.pid
logfile "/data/redis-cluster/8000/redis.log"
dir /data/redis-cluster/8000/
tcp-backlog 1024
daemonize yes
同理,将7001和7002配置文件修改,与上述端口不一,其他一致
步骤三:启动服务
redis-server /data/redis-cluster/8001/redis.conf
redis-server /data/redis-cluster/8002/redis.conf
redis-server /data/redis-cluster/8000/redis.conf
netstat -antup | grep redis-server
三、构建redis cluster集群
【主库和从库均配置】配置所用的工具
tar xf ruby-2.5.1.tar.gz -C /usr/src/
cd /usr/src/ruby-2.5.1/
./configure && make && make install
本地安装ruby的redis扩展
/usr/local/bin/gem install -l redis
【主库配置】
步骤一:创建本地回环集群
redis-trib.rb create 127.0.0.1:7000 127.0.0.1:7001
127.0.0.1:7002
步骤二:查看cluster集群的构建节点信息
redis-cli -p 7000 cluster nodes
ls /data/redis-cluster/7000/
cat /data/redis-cluster/7000/nodes.conf
步骤三:使用7000登录集群创建信息,查看其他端口登录的变化(使用redis-cli去操作集群,需要加入-c参数)
redis-cli -c -p 7000
get name huyang
其他端口登录查看
redis-cli -c -p 7001
redis-cli -c -p 7002
此处演示的为,redis数据库去中心化操作,在redis数据库中操作,所有的数据都存在相应的槽里,没有中心之分,只有不同的槽。
步骤四:使用从库登录
redis-cli -h 192.168.59.137 -p 7000 get name
redis-cli -h 192.168.59.137 -p 7001 get name
redis-cli -h 192.168.59.137 -p 7002 get name
redis-cli -h 192.168.59.137 -c -p 7000 get name
redis-cli -h 192.168.59.137 -c -p 7001 get name
redis-cli -h 192.168.59.137 -c -p 7002 get name
此处演示的为:以远程的方式访问redis-cluster时,被拒绝是因为我们创建集群的时候,是以127.0.0.1的本地IP方式创建的,因此只有本地访问时cluster集群才能发挥作用;
远程访问7001端口时,之所以能成功,是因为数据本来就是存在了监听7001端口的redis上,所以我们不加-c也能访问成功。
四、生产集群部署
【主库操作】
步骤一:查看当前文件存放位置有哪些文件
ls /data/redis-cluster/7000
ls /data/redis-cluster/7000
ls /data/redis-cluster/7000
步骤二:删除node文件,关闭服务
rm -rf /data/redis-cluster/7000/nodes.conf
rm -rf /data/redis-cluster/7001/nodes.conf
rm -rf /data/redis-cluster/7002/nodes.conf
redis-cli -p 7000 shutdown
redis-cli -p 7001 shutdown
redis-cli -p 7002 shutdown
步骤三:启动redis-server服务
redis-server /data/redis-cluster/7000/redis.conf
redis-server /data/redis-cluster/7001/redis.conf
redis-server /data/redis-cluster/7002/redis.conf
步骤四:重新创建redis-cluster集群
redis-trib.rb create 192.168.59.137:7000
192.168.59.137:7001 192.168.59.137:7002
步骤五:创建数据,登录测试
创建数据:
redis-cli -h 192.168.200.111 -c -p 7000
set name huyang1
本地登录测试:(通过集群)
远程登录测试:(通过集群)
步骤六:批量导入数据观察key的集群分布情况
(从库远程登录集群操作)
导入数据:
for line in `seq -w 10000`;do redis-cli -h
192.168.59.137 -p 7000 -c set key3_${line}
value_${line};done
观察集群分布情况:
redis-cli -h 192.168.59.137 -p 7000 info Keyspace
redis-cli -h 192.168.59.137 -p 7001 info Keyspace
redis-cli -h 192.168.59.137 -p 7002 info Keyspace
五、集群故障切换
步骤一:将从库添加为主库的从库
redis-trib.rb add-node --slave 192.168.59.138:8000
192.168.59.137:7000
redis-trib.rb add-node --slave 192.168.59.138:8001
192.168.59.137:7001
redis-trib.rb add-node --slave 192.168.59.138:8002
192.168.59.137:7002
步骤二:查看集群所有节点的信息
redis-cli -p 7000 cluster nodes
步骤三:从库的读写测试
创建数据:
redis-cli -h 192.168.59.138 -c -p 8000
set age 24
查看:
redis-cli -h 192.168.59.138 -c -p 8000 get age
redis-cli -h 192.168.59.138 -c -p 8001 get age
redis-cli -h 192.168.59.138 -c -p 8002 get age
redis-cli -h 192.168.59.138 -c -p 7000 get age
redis-cli -h 192.168.59.138 -c -p 7001 get age
redis-cli -h 192.168.59.138 -c -p 7002 get age
步骤四:查看主从cluster集群key的分布情况
redis-cli -h 192.168.59.138 -c -p 8000 info Keyspace
redis-cli -h 192.168.59.138 -c -p 8001 info Keyspace
redis-cli -h 192.168.59.138 -c -p 8002 info Keyspace
redis-cli -h 192.168.59.137 -c -p 7000 info Keyspace
redis-cli -h 192.168.59.137 -c -p 7001 info Keyspace
redis-cli -h 192.168.59.137 -c -p 7002 info Keyspace
故障转移测试
步骤一:模拟主库7001宕机,停止7001端口redis-server服务
redis-cli -h 192.168.59.137 -p 7001 shutdown
查看集群状态
redis-cli -h 192.168.59.137 -p 7000 cluster nodes
从库8001变成了主库
步骤二:重启7001服务,查看集群状态
redis-server /data/redis-cluster/7001/redis.conf
查看集群状态
redis-cli -h 192.168.59.137 -p 7000 cluster nodes
原主库7001变成了新主库8001的从库
手动切换主库
redis-cli -h 192.168.59.137 -c -p 7001 cluster
Failover
总 结:
1、redis集群相比于MHA集群,没有固定的中心主库,但是有相对应的槽,在6.0以下版本的redis,槽都是随机分配的;
2、redis相比于MHA,部署相对简单,从库不存储数据,但是共享主库的数据槽,存储都在主库的槽内,相当于主库是工作的一方,从库是用来当备用主库的。
六、拓 展:
删除节点:
redis-trib.rb del-node 192.168.59.138:8001 id号
使用redis-cli -h 192.168.259.138 -p 8001 cluster nodes查看id
例:redis-cli -h 192.168.259.138 -p 8001 cluster nodes
删除节点
redis-trib.rb del-node 192.168.59.138:8001
d8968dac7b88da6fedb751a7347ded16c1e12422
从库查看服务状态:
netstat -nptl|grep redis-server
由此可见,当删除节点之后,该节点的服务也停止。
重启服务,需要将之前的数据全部清空,再进行连接。
rm -rf /data/redis-cluster/8001/dump.rdb
rm -rf /data/redis-cluster/8001/nodes.conf
rm -rf /data/redis-cluster/8001/redis.pid
redis-server /data/redis-cluster/8001/redis.conf
主库添加重启服务的8001进入集群
redis-trib.rb add-node --slave 192.168.59.137:8001 192.168.59.137:7001
查看集群状态
redis-cli -h 192.168.59.137 -p 8001 cluster nodes