文章目录
案列概述
某电商大型项目,由于业务大规模升级。项目中的前置缓存节点,已经不能满足当前的业务需求,现在对redis集群扩容一套redis主备节点,对于实际的生产环境,一般规划是在晚上2凌晨12点做操作,操作之前,提前做好redis安装部署,晚上凌晨12点左右,业务量比较少,影响范围比较少,redis对接的底层数据库,先要锁库、锁表,不产生业务流数据,这样redis集群可产生的影响因素较小。
案例拓扑图:
==前期已搭建 redis集群,详见https://blog.csdn.net/ML908/article/details/105045768 ==
软件包
百度网盘链接:https://pan.baidu.com/s/1nAlvkBR7NS0speietzeDvA
提取码:rqul
redis节点扩容
扩容流程:
1、部署2台redis节点(主、备)
2、将2台redis节点添加到集群中
3、使用redis-cli启动自动迁移
4、迁移后检测各个节点槽的均衡性
5、将扩容的主节点添加从节点
1、节点基础环境(两台操作一致)
#关闭防火墙,关闭核心防护
[root@master4 yum.repos.d]# systemctl stop firewalld
[root@master4 yum.repos.d]# setenforce 0
[root@master4 yum.repos.d]# vim /etc/selinux/config
SELINUX=disabled
#挂载光盘
[root@master4 ~]# vim /etc/fstab
/dev/cdrom /mnt iso9660 defaults 0 0
[root@master4 ~]# mount -a
[root@master4 ~]# df -hT
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/sda2 xfs 20G 3.3G 17G 17% /
devtmpfs devtmpfs 898M 0 898M 0% /dev
tmpfs tmpfs 912M 0 912M 0% /dev/shm
tmpfs tmpfs 912M 17M 895M 2% /run
tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda5 xfs 10G 37M 10G 1% /home
/dev/sda1 xfs 6.0G 174M 5.9G 3% /boot
tmpfs tmpfs 183M 28K 183M 1% /run/user/0
tmpfs tmpfs 183M 4.0K 183M 1% /run/user/42
/dev/sr0 iso9660 4.3G 4.3G 0 100% /mnt
#搭建yum仓库
[root@master4 ~]# cd /etc/yum.repos.d
[root@master4 yum.repos.d]# mkdir backup
[root@master4 yum.repos.d]# mv C* backup
[root@master4 yum.repos.d]# cp -p backup/CentOS-Base.repo local.repo
root@master4 yum.repos.d]# vim local.repo
[centos]
name=CentOS
baseurl=file:///mnt
gpgcheck=0
enabled=1
[root@master4 yum.repos.d]# yum clean all
[root@master4 yum.repos.d]# yum makecache
2、安装redis(2台同时安装)
#安装编辑器
[root@master4 ~]# yum install -y gcc gcc-c++ make pcre pcre-devel expat-devel bash-completion
#挂载软件包
[root@master4 ~]# mkdir /a
[root@master4 ~]# mount.cifs //192.168.100.1/bao /a
[root@master4 ~]# cd /a/Y2C7
#解压并编译安装redis
[root@master4 Y2C7]# tar xzvf redis-5.0.4.tar.gz -C /opt
[root@master4 Y2C7]# cd /opt/redis-5.0.4/
[root@master4 redis-5.0.4]# make
[root@master4 redis-5.0.4]# make PREFIX=/usr/local/redis install //安装过程中,更改安装路径可以用make PRRFIX=安装路径 install
#设置Redis相关配置文件
[root@master4 redis-5.0.4]# ln -s /usr/local/redis/bin/* /usr/local/bin/
[root@master4 redis-5.0.4]# cd /opt/redis-5.0.4/utils/
[root@master4 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] //回车
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] //回车
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] //回车
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/bin/redis-server] /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/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!
/var/run/redis_6379.pid exists, process is already running or crashed
Installation successful!
[root@master4 utils]# netstat -lnupt | grep redis //查看redis状态
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 9318/redis-server 1
#修改各个redis主机的6379.conf配置文件
[root@master4 utils]# vim /etc/redis/6379.conf
bind 192.168.100.47 //删除原来的127.0.0.1 然后添加各主机对应的IP地址
logfile /var/log/redis_6379.log #不需要改
daemonize yes #不需要改
port 6379 #不需要改
cluster-enabled yes //前面的#号去掉
cluster-config-file nodes-6379.conf //前面的#号去掉
cluster-node-timeout 15000 //前面的#号去掉
cluster-require-full-coverage no //前面的#号去掉 yes改成no
appendonly yes //开启aof持久化 no改成yes
#2台redis服务器启动redis服务
[root@master4 utils]# /etc/init.d/redis_6379 restart
[root@master4 utils]# netstat -antp |grep 6379 监听地址都是当前本机地址
3、创建集群
在192.168.100.47/192.168.100.48服务器上。创建群集
[root@master4 utils]# yum -y install ruby rubygems //安装编排工具
上传redis-3.2.0.gem 这个包到/opt目录下执行下面命令
[root@master4 utils]# cd /opt
[root@master4 opt]# gem install redis --version 3.2.0
将2台redis节点添加到集群中、并确认集群状态信息(进入节点192.168.100.41)
[root@master1 ~]# redis-cli --cluster add-node 192.168.100.47:6379 192.168.100.41:6379
[root@master1 ~]# redis-cli --cluster add-node 192.168.100.48:6379 192.168.100.41:6379
[root@master1 ~]# redis-cli -h 192.168.100.41 -p 6379
192.168.100.41:6379> cluster nodes //查看集群节点信息,192.168.100.47/ 192.168.100.48都加入进去了
4、使用redis-cli启动自动迁移
##整理节点信息(各个节点分别对用的IDS)##
主机名 | 节点的IDS信息 | IP地址 | 槽位 |
---|---|---|---|
master1 | 4184c078593ec9f02b374283c98274f54dd18c2c | 192.168.100.41 | 5460-0=5460 |
master2 | 2be121eb6c279b7dd6a8977fc59013b237a449a0 | 192.168.100.42 | 10922-5461=5461 |
master3 | 617b38b3d01d99fd7639936dbc730dace47540ca | 192.168.100.43 | 16383-10923=5460 |
master4 | 23ce498779c29b890dea4294868d6495cf00008c | 192.168.100.44 | |
master5 | ab4ab1be5bc881f9c4efdefc9075c7e3b26af41b | 192.168.100.45 | |
master6 | 706eed767fcde670111c5ffc93d1c5b1f9397d08 | 192.168.100.46 | |
master7 | 32062af99bec803b99ede31f0561ad9a11d27379 | 192.168.100.47 | |
master8 | 5b13f0d690359fa762be9192c5962be249ea72ba | 192.168.100.48 |
根据redis 槽位分析,一共有16384个槽位,如果分4个配套节点:每个节点是4096个槽位
[root@master1 ~]# redis-cli --cluster reshard 192.168.100.41:6379 //设置自动迁移
How many slots do you want to move (from 1 to 16384)? 4096 //要迁移多少个槽位
What is the receiving node ID? 32062af99bec803b99ede31f0561ad9a11d27379
//迁移到哪个节点,这里是47,填写对应的IDS
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash slots.
Type 'done' once you entered all the source nodes IDs.
#要求输入源节点的IDS,这里输入41,42,43三个master节点,输入done表示结束
Source node #1: 4184c078593ec9f02b374283c98274f54dd18c2c
Source node #2: 2be121eb6c279b7dd6a8977fc59013b237a449a0
Source node #3: 617b38b3d01d99fd7639936dbc730dace47540ca
Source node #4: done
Do you want to proceed with the proposed reshard plan (yes/no)?yes
//最后会有一个迁移方案,输入yes表示同意,迁移开始。输入no表示不同意,重新设置迁移方案。
#确认是否迁移成功
[root@master1 ~]# redis-cli -h 192.168.100.41 -p 6379
192.168.100.41:6379> cluster nodes
至此,主节点已经迁移完成了
5、迁移后检测各个节点槽的均衡性
[root@master1 ~]# redis-cli --cluster rebalance 192.168.100.41:6379
可以看出,节点负责的槽数据差异在2%以内,因此槽分配均衡
6、为扩容的主节点添加从节点
root@master1 ~]# redis-cli -h 192.168.100.48 -p 6379
192.168.100.48:6379> cluster replicate 32062af99bec803b99ede31f0561ad9a11d27379 //要和哪个同步,这里是需要和47主节点进行同步,填写对应的IDS
OK
#查看集群节点信息
192.168.100.48:6379> cluster nodes
7、平衡各节点槽数量
[root@master1 ~]# redis-cli --cluster rebalance --cluster-threshold 1 192.168.100.41:6379
可以看出,节点负责的槽数据差异在1%以内,因此槽分配很均衡