目录
2-3、在客户端连接集群存储数据(连接master库的ip地址)
3-3-1、 把修复master的redis服务器再次添加到集群里
3-3-2、 把修复slave的redis服务器再次添加到集群里
部署Redis集群
1、准备集群环境
1-1、为六台主机安装并运行redis服务
rpm -q gcc gcc-c++---------检查有没有安装gcc gcc-c++
yum -y install gcc gcc-c++----若没装则装一下
# tar -xzf redis-4.0.8.tar.gz
# cd redis-4.0.8------进入redis目录
#make----编译
#make install---安装
[root@host151 redis-4.0.8]# ls --------编译安装完之后redis目录下详情
00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests
BUGS deps MANIFESTO runtest sentinel.conf utils
CONTRIBUTING INSTALL README.md runtest-cluster src
[root@host151 redis-4.0.8 ]#./utls/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] ---选择redis服务器软件存储路径
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/bin/redis-server----redis-server程序
Cli Executable : /usr/local/bin/redis-cli-----redis-cli程序
Is this ok? Then press ENTER to go on or Ctrl-C to abort.-----回车以继续或Ctrl-C退出
Copied /tmp/6379.conf => /etc/init.d/redis_6379-----redis启动脚本
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server... -----------正在启动redis服务
Installation successful! -----------安装成功
-----------------------------服务默认初始化后就已经启动了
1-2、修改配置文件
#vim /etc/redis/redis.conf
bind IP地址 --------------只写物理接口IP地址
daemonize yes -----------守护进程方式运行
port xxxx ------------------端口号不要使用默认的6379
cluster-enabled yes -----------开启集群
cluster-config-file nodes-xxxx.conf ------------集群的配置文件不要使用默认的名称
cluster-node-timeout 5000 -------------请求超时时间为 5秒
2、创建集群
2-1、 集群工作原理
存储数据的工作原理:
set 变量名 值
set name bob
set age 109
key 和 crc16算法 把计算后得到的数字 和 16384 做求模计算
读取数据的工作原理:
set 变量名
get name
key 和 crc16算法 把计算后得到的数字 和 16384 做求模计算
2.2 创建集群
- 部署脚本运行环境
]# yum -y install ruby rubygems--------------------安装ruby rubygems
rpm -ivh ruby-devel-2.0.0.648-30.el7.x86_64.rpm -------安装依赖包
gem install redis-3.2.1.gem
- 创建ruby脚本
cd redis-4.0.8/
cd src/
ls *.rb
echo $PATH
mkdir /root/bin
cp redis-trib.rb /root/bin/
- 创建集群
redis-trib.rb create --replicas 1 192.168.4.51:6351 192.168.4.52:6352 192.168.4.53:6353 192.168.4.54:6354 192.168.4.55:6355 192.168.4.56:6356
]# redis-trib.rb create --replicas 1 192.168.4.51:6351 192.168.4.52:6352 192.168.4.53:6353 192.168.4.54:6354 192.168.4.55:6355 192.168.4.56:6356--------此处的1是指自动为每一个master节点分配一个slave节点
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.4.51:6351
192.168.4.52:6352
192.168.4.53:6353
Adding replica 192.168.4.55:6355 to 192.168.4.51:6351
Adding replica 192.168.4.56:6356 to 192.168.4.52:6352
Adding replica 192.168.4.54:6354 to 192.168.4.53:6353
M: 2c4794730d932a81bcb68840d29e26fd11f08284 192.168.4.51:6351
slots:0-5460 (5461 slots) master
M: 1ab7910802f76addcae10d5dd0e059759620ecb0 192.168.4.52:6352
slots:5461-10922 (5462 slots) master
M: 3c84d32c1834259bb9a841181e34b5d4d3228ca5 192.168.4.53:6353
slots:10923-16383 (5461 slots) master
S: f46897c9379b2d64fcf97538626b81cdf29873ab 192.168.4.54:6354
replicates 3c84d32c1834259bb9a841181e34b5d4d3228ca5
S: 93d81d72305626761491a004a04d89e7fc50e58e 192.168.4.55:6355
replicates 2c4794730d932a81bcb68840d29e26fd11f08284
S: 962a9f5ca2dd214dc43e40b0b7cfcfb8e5e51c85 192.168.4.56:6356
replicates 1ab7910802f76addcae10d5dd0e059759620ecb0
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.4.51:6351)
M: 2c4794730d932a81bcb68840d29e26fd11f08284 192.168.4.51:6351
slots:0-5460 (5461 slots) master
1 additional replica(s)
S: 93d81d72305626761491a004a04d89e7fc50e58e 192.168.4.55:6355
slots: (0 slots) slave
replicates 2c4794730d932a81bcb68840d29e26fd11f08284
S: 962a9f5ca2dd214dc43e40b0b7cfcfb8e5e51c85 192.168.4.56:6356
slots: (0 slots) slave
replicates 1ab7910802f76addcae10d5dd0e059759620ecb0
S: f46897c9379b2d64fcf97538626b81cdf29873ab 192.168.4.54:6354
slots: (0 slots) slave
replicates 3c84d32c1834259bb9a841181e34b5d4d3228ca5
M: 3c84d32c1834259bb9a841181e34b5d4d3228ca5 192.168.4.53:6353
slots:10923-16383 (5461 slots) master
1 additional replica(s)
M: 1ab7910802f76addcae10d5dd0e059759620ecb0 192.168.4.52:6352
slots:5461-10922 (5462 slots) master
1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
[root@host51 src]#
2-3、在客户端连接集群存储数据(连接master库的ip地址)
存储数据必须连接集群中的master主机 (连接任意一个master主机都可以)
[root@host50 ~]# redis-cli -c -h 192.168.4.51 -p 6351------- -c值连接集群
> set name bob
> set age 109
> keys *
> get name
> get age
2-4、测试集群的高可用
]#redis-trib.rb check 192.168.4.51:6351
3、管理集群
准备:
2台新的redis服务 要求如下: 运行redis服务并启用集群
bind 192.168.4.57
port 6357
nodes-6357.conf
bind 192.168.4.58
port 6358
nodes-6358.conf
3.1 向集群里添加新的redis服务器
- 添加主库节点
- redis-trib.rb add-node 新主机Ip:端口 192.168.4.51:6351
~]# redis-trib.rb add-node 192.168.4.57:6357 192.168.4.51:6351
~]# redis-trib.rb check 192.168.4.51:6351
~]# redis-trib.rb reshard 192.168.4.51:6351
M: 7b473f069f6cbd5cb2ca45ff8b1cac1b11ce420e 192.168.4.57:6357
slots:0-1364,5461-6826,10923-12287 (4096 slots) master
0 additional replica(s)
- 添加从库节点
- redis-trib.rb add-node --slave --master-id id值 从节点ip: 端口 192.168.4.51:6351
- 注:如果不指定主节点的id的话,会把新节点随机添加为从节点最少的主的从节点
]#redis-trib.rb add-node --slave 192.168.4.58:6358 192.168.4.51:6351
]#redis-trib.rb check 192.168.4.51:6351
S: 4346ba4892675f3ab99480200c73bc7e73168da7 192.168.4.58:6358
slots: (0 slots) slave
replicates 7b473f069f6cbd5cb2ca45ff8b1cac1b11ce420e
]# redis-trib.rb add-node --slave \
--master-id 1ab7910802f76addcae10d5dd0e059759620ecb0 \ 192.168.4.50:6350 192.168.4.51:6351
]# redis-trib.rb check 192.168.4.51:6351
3.2 删除集群里的redis服务器
- 删除slave主机 192.168.4.50 192.168.4.58
- redis-trib.rb del-node 192.168.4.51:6351 被移除节点主机id
]# redis-trib.rb del-node 192.168.4.51:6351 2239c74a6b36eb3bec81a5051a5bef462e0be997-------直接删
]# redis-trib.rb del-node 192.168.4.51:6351 4346ba4892675f3ab99480200c73bc7e73168da7
]# redis-trib.rb check 192.168.4.51:6351
- 删除master主机 192.168.4.57
- redis-trib.rb del-node 192.168.4.51:6351 被移除节点主机id
]# redis-trib.rb reshard 192.168.4.51:6351------先释放hash槽位
]# redis-trib.rb check 192.168.4.51:6351 -------查看是否已释放
]# redis-trib.rb del-node 192.168.4.51:6351 57主机id---------再删除
3.3 把修复的redis服务器再次添加到集群里
3-3-1、 把修复master的redis服务器再次添加到集群里
master:
]# /etc/init.d/redis_6379 start
]# redis_cli -h 192.168.4.57 -p 6357
> cluster reset
> exit
51:
]#redis-trib.rb add-node 192.168.4.57:6357 192.168.4.51:6351
]#redis-trib.rb check 192.168.4.51:6351
]#redis-trib.rb reshard 192.168.4.51:6351------给分配hash槽位
3-3-2、 把修复slave的redis服务器再次添加到集群里
slave:
]# /etc/init.d/redis_6379 start
]# redis_cli -h 192.168.4.58 -p 6358
> cluster reset
> exit
51:
]#redis-trib.rb add-node --slave 192.168.4.58:6358 192.168.4.51:6351
]#redis-trib.rb check 192.168.4.51:6351