Redis主从复制 配置
在Redis中,要实现主从复制架构非常简单,只需要在从数据库的配置文件中加上如下命令即可:
1、主数据库不需要任务配置,创建一个从数据库:
— port 6380 //从服务的端口号
—slaveof 127.0.0.1 6379 //指定主服务器
./bin/redis-server ./redis.conf —port 6380 —slaveof 127.0.0.1 6379
加上slaveof参数启动另一个Redis实例作为从库,并且监听6380端口
2、登录到从服务客户端:
./bin/redis-cli -p 6380 -a guoweixin
变回主: slaveof on one //不是任何从
变回从: slaveof ip地址 端口号
哨兵
集群
Redis集群搭建的方式有多种,但从redis 3.0之后版本支持redis-cluster集群,至少需要3(Master)+3(Slave)才能建立集群。Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有
节点连接。
Redis Cluster高可用
Redis Cluster主从模式
redis cluster 为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点,主节点提供数据存取,从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。
集群有ABC三个主节点, 如果这3个节点都没有加入从节点,如果B挂掉了,我们就无法访问整个集群了。A和C的slot也无法访问。
所以我们在集群建立的时候,一定要为每个主节点都添加了从节点, 比如像这样, 集群包含主节点A、B、C, 以及从节点A1、B1、C1, 那么即使B挂掉系统也可以继续正确工作。
B1节点替代了B节点,所以Redis集群将会选择B1节点作为新的主节点,集群将会继续正确地提供服务。 当B重新开启后,它就会变成B1的从节点。
不过需要注意,如果节点B和B1同时挂了,Redis集群就无法继续正确地提供服务了。
Redis Cluster总结:
将数据自动切分split到多个节点的能力。
当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力
1. Redis Cluster集群搭建
1.1. 简介
集群中至少应该有奇数个节点,所以搭建集群最少需要3台主机。同时每个节点至少有一个备份节点,所以下面最少需要创建使用6台机器,才能完成Redis Cluster集群(主节点、备份节点由redis-cluster集群确定)
真集群:
准备6条服务器
192.168.1.110:6739
192.168.1.111:6739
192.168.1.112:6739
假集群:一台服务器存在6个redis服务
192.168.1.111:6739 6380 6381 6382…
1.2. 搭建流程
1、创建Redis节点安装目录
mkdir /usr/local/redis_cluster //指定目录下 创建 redis_cluster
2、在redis_cluster目录下,创建7001-7006个文件夹下
mkdir 7001 7002 7003
7004 7005 7006
3、并将redis-conf分别拷贝到7001-7006文件夹下
cp
/root/redis-4.0.1/redis.conf ./7001
4、分别修改如下配置文件,修改如下内容
同时protected-mode 是为了禁止公网访问redis cache,加强redis安全的。
它启用的条件,有两个:
1**) 没有bind IP
2) 没有设置访问密码
由于Linux上的redis处于安全保护模式,这就让你无法从虚拟机外部去轻松建立连接。
如果外部访问:redis.conf中设置保护模式为
protected-mode no**
5、启动各个redis节点:
将桌面redis-4.0.1/ 下src文件拷贝到各个redis 7001-7006目录下。
cd
redis-4.0.1 //进入桌面redis解压目录下
cp -r ./src /usr/local/redis_cluster/7001 //进行拷贝 依次复制7001-7006
**启动各个Redis节点:
cd /usr/local/redis_cluster/ //进入redis集群配置文件目录下
./7001/src/redis-server ./7001/redis.conf //依次启动 7001-7006各节点服务
6、检查Redis启动情况
ps -ef | grep -i redis**
1.3. 创建集群
Redis 官方提供了 redis-trib.rb 这个工具,就在解压目录的 src 目录中。(为了方便操作)将其文件复制到/usr/local/bin目录下,可直接访问此命令
cd
redis-4.0.1/
cd src
cp redis-trib.rb /usr/local/bin/
可以直接在命令行中执行: ip:port格式
redis-trib.rb create —replicas 1
127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
127.0.0.1:7006
如果出现此错误:
1.4. 安装ruby
安装ruby
yum -y install ruby ruby-devel rubygems
rpm-build
如上错误原因:Centos默认支持ruby到2.0.0,可gem 安装redis需要最低是2.2.2
解决办法是 先安装rvm,再把ruby版本提升
1.4.1. 1. 安装RVM
gpg
—keyserver hkp://keys.gnupg.net —recv-keys
409B6B1796C275462A1703113804BB82D39DC0E3
7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s
stable
find / -name rvm -print
source /usr/local/rvm/scripts/rvm
rvm list known //查看rvm库中已知的ruby版本
**
1.4.2. 安装一个ruby版本
使用一个ruby
设置默认ruby
查看ruby
安装
**
1.5. Redis Cluster集群搭建
ruby安装完成后,再次执行此命令:
可以直接在命令行中执行: ip:port格式
redis-trib.rb create —replicas 1
127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
127.0.0.1:7006
2. Redis Cluster集群验证
Redis集群测试:
为方便测试,可将redis-cli 客户端命令放到/usr/local/bin目录下
cd /root/redis-4.0.1/src //进入该目录
cp redis-cli /usr/local/bin
在某台机器上(或)连接集群的7001端口的节点:
redis-cli
-h 127.0.0.1 -c -p 7001
加参数 -C 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。
(在该节点下 添加对应key数据)
启动另一个集群中的客户节点:例如:7005
进行读取命令。
redis cluster在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的,每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据
2.1. 基本命令
info replication 通过Cluster Nodes命令和Cluster Info命令来看看集群效果
2.2. 测试集群数据
2.2.1. 输入命令 cluster nodes
每个Redis的节点都有一个ID值,此ID将被此特定redis实例永久使用,以便实例在集群上下文中具有唯一的名称。 每个节点都会记住使用此ID的每个其他节点,而不是通过IP或端口。IP地址和端口可能会发生变化,但唯一的节点标识符在节点的整个生命周期内都不会改变。 我们简单地称这个标识符为节点ID。
2.2.2. 测试数据
3. Redis Cluster集群重新开启
启动各个Redis节点:
cd /usr/local/redis_cluster/ //进入redis集群配置文件目录下
./7001/src/redis-server ./7001/redis.conf //依次启动 7001-7006各节点服务
检查Redis启动情况
ps -ef | grep -i
redis
在某台机器上(或)连接集群的7001端口的节点:
redis-cli -h 127.0.0.1 -c
-p 7001
加参数 -C 可连接到集群,因为上面 redis.conf 将 bind 改为了ip地址,所以 -h 参数不可以省略。
(在该节点下 添加对应key数据)
4. 代码示例
4.1. 开启端口权限
依次开放端口7001 7002…7006(如下命令只针对Centos7以上)
查看已经开放的端口:firewall-cmd
—list-ports
开启端口:
firewall-cmd —zone=public —add-port=7001/tcp
—permanent
重启防火墙
firewall-cmd —reload #重启
• 参考文贡:https://www.sojson.com/blog/203.html
Set nodes.add(new HostAndPort(“192.168.46.131”, 7001)); nodes.add(new HostAndPort(“192.168.46.131”, 7002)); nodes.add(new HostAndPort(“192.168.46.131”, 7003)); nodes.add(new HostAndPort(“192.168.46.131”, 7004)); nodes.add(new HostAndPort(“192.168.46.131”, 7005)); nodes.add(new HostAndPort(“192.168.46.131”, 7006)); JedisCluster cluster =new JedisCluster(nodes); |
---|