redis的主从同步及高可用集群

redis 是一个高性能的 key-value 数据库。 redis 的出现,很大程度补偿了
memcached 这类 keyvalue 存储的不足,在部分场合可以对关系数据库起到很
好的补充作用。它提供了 Python,Ruby,Erlang,PHP 客户端,使用很方便。
Redis 的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上
(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个 append
only file(aof)里面(这称为“全持久化模式”)。

1.安装redis

以server2为例(server3也做)

[root@server2 ~]# tar zxf redis-4.0.8.tar.gz 
[root@server2 ~]# yum install gcc -y
Make && make install
[root@server2 redis-4.0.8]# cd utils/
[root@server2 utils]# ./install_server.sh
[root@server2 utils]# vim /etc/redis/6379.conf 
  bind 0.0.0.0
[root@server2 utils]# /etc/init.d/redis_6379 restart

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
/etc/redis/6379.conf内容:
这里写图片描述
这里写图片描述

2.Redis 主从同步

master(主):server3—->172.25.25.3
slave (从):server2—->172.25.25.2

master上:

[root@server3 utils]# redis-cli 
127.0.0.1:6379> set name lin
OK
127.0.0.1:6379> get name
"lin"
127.0.0.1:6379> set user1 111
OK
127.0.0.1:6379> get user1
"111"

这里写图片描述
slave上

[root@server2 utils]# vim /etc/redis/6379.conf 
    slaveof 172.25.25.3 6379
[root@server2 utils]# /etc/init.d/redis_6379 restart
[root@server2 utils]# redis-cli 
127.0.0.1:6379> get name
"lin"
127.0.0.1:6379> get user1
"111"

/etc/redis/6379.conf内容
这里写图片描述
这里写图片描述
再测试:
master

[root@server3 utils]# redis-cli 
127.0.0.1:6379> set name lll
OK

这里写图片描述
slave

127.0.0.1:6379> get name
"lll"

这里写图片描述

3.redis高可用

先在server1上按照第一步安装配redis,和server2的配置一样作为slave
再在master上配置:

[root@server3 redis-4.0.8]# cp sentinel.conf /etc/redis/
[root@server3 redis-4.0.8]# cd /etc/redis/
[root@server3 redis]# vim sentinel.conf

这里写图片描述
这里写图片描述
这里只写master的ip,两个slave和master的文件配置完全一样,也写master的ip
这里写图片描述
把文件传给slave(server1和server2)

[root@server3 redis]# scp sentinel.conf server2:/etc/redis/  
[root@server3 redis]# scp sentinel.conf server1:/etc/redis/

这里写图片描述
监控命令:

[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel

这里写图片描述
这里写图片描述
再打开一个server3的shell

# 查看server3的信息
[root@server3 ~]# redis-cli 
127.0.0.1:6379> info  
.
.
.
# Replication
role:master    #本机为mastes
connected_slaves:2
slave0:ip=172.25.25.2,port=6379,state=online,offset=37996,lag=0
slave1:ip=172.25.25.1,port=6379,state=online,offset=38133,lag=0

# 关闭master
127.0.0.1:6379> shutdown
not connected> 

这里写图片描述
这里写图片描述
这里写图片描述

# 查看监控监控,30秒后server1变为master,server3为shutdown状态
[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel
6954:X 11 Aug 17:19:35.692 # +switch-master mymaster 172.25.25.3 6379 172.25.25.1 6379
6954:X 11 Aug 17:19:35.693 * +slave slave 172.25.25.2:6379 172.25.25.2 6379 @ mymaster 172.25.25.1 6379
6954:X 11 Aug 17:19:35.693 * +slave slave 172.25.25.3:6379 172.25.25.3 6379 @ mymaster 172.25.25.1 6379
6954:X 11 Aug 17:20:05.739 # +sdown slave 172.25.25.3:6379 172.25.25.3 6379 @ mymaster 172.25.25.1 6379

这里写图片描述
开启server3的服务

[root@server3 ~]# /etc/init.d/redis_6379 start

这里写图片描述

# 监控,30秒后server3变为slave
[root@server3 redis]# redis-server /etc/redis/sentinel.conf --sentinel
6954:X 11 Aug 17:22:51.065 # -sdown slave 172.25.25.3:6379 172.25.25.3 6379 @ mymaster 172.25.25.1 6379

这里写图片描述
查看server3的配置文件最后一行自动添加了内容:
这里写图片描述

4.Redis 集群(无中心化)

# 建立目录
[root@server3 ~]# cd /usr/local/
[root@server3 local]# mkdir cluster
[root@server3 local]# cd cluster/
# 建立端口
[root@server3 cluster]# mkdir 7001
[root@server3 cluster]# mkdir 7002
[root@server3 cluster]# mkdir 7003
[root@server3 cluster]# mkdir 7004
[root@server3 cluster]# mkdir 7005
[root@server3 cluster]# mkdir 7006
[root@server3 cluster]# cd 7001/
# 编写配置文件
[root@server3 7001]# vim redis.conf
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
[root@server3 7001]# cd /root/redis-4.0.8/src/
[root@server3 src]# cp redis-trib.rb /usr/local/bin/

这里写图片描述
这里写图片描述
安装部署ruby

[root@server3 bin]# yum install -y ruby
[root@server3 ~]# yum install ruby-2.2.3-1.el6.x86_64.rpm libyaml-0.1.3-4.el6_6.x86_64.rpm -y
[root@server3 ~]# gem install --local redis-4.0.1.gem

这里写图片描述
这里写图片描述
这里写图片描述
配置并启动

[root@server3 ~]# cd /usr/local/cluster/7001
[root@server3 7001]# vim redis.conf 
port 7001
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/cluster/7001/redis.pid
logfile /usr/local/cluster/7001/redis.log
[root@server3 7001]# redis-server redis.conf 

这里写图片描述
这里写图片描述
查看日志,根据信息修改

[root@server3 7001]# cat redis.log 
[root@server3 7001]# echo 511 > /proc/sys/net/core/somaxconn 
[root@server3 7001]# sysctl -w vm.overcommit_memory=1
[root@server3 7001]# vim /etc/sysctl.conf   #写入文件
 vm.overcommit_memory = 1
[root@server3 7001]# echo never > /sys/kernel/mm/transparent_hugepage/enabled 

这里写图片描述
这里写图片描述
这里写图片描述
给其他几个接口都做配置

# 把文件分别拷给其他目录
[root@server3 7001]# cp redis.conf ../7002
[root@server3 7001]# cp redis.conf ../7003
[root@server3 7001]# cp redis.conf ../7004
[root@server3 7001]# cp redis.conf ../7005
[root@server3 7001]# cp redis.conf ../7006

# 将redis.conf文件中7001改为各自的目录名(7002,7003,7004...),并启动
[root@server3 7001]# cd ../7002
[root@server3 7002]# vim redis.conf 
[root@server3 7002]# redis-server redis.conf 
[root@server3 7002]# cd ../7003
[root@server3 7003]# vim redis.conf 
[root@server3 7003]# redis-server redis.conf 
[root@server3 7003]# cd ../7004
[root@server3 7004]# vim redis.conf 
[root@server3 7004]# redis-server redis.conf 
[root@server3 7004]# cd ../7005
[root@server3 7005]# vim redis.conf 
[root@server3 7005]# redis-server redis.conf 
[root@server3 7005]# cd ../7006
[root@server3 7006]# vim redis.conf 
[root@server3 7006]# redis-server redis.conf 

这里写图片描述
这里写图片描述
这里写图片描述
建立集群

[root@server3 7006]# 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

这里写图片描述
这里写图片描述
测试

[root@server3 7006]# redis-cli -c -p 7001
127.0.0.1:7001> set name llj
-> Redirected to slot [5798] located at 127.0.0.1:7002  #数据写在了7002
OK
127.0.0.1:7002> get name
"llj"
127.0.0.1:7002> 
[root@server3 7006]# redis-cli -c -p 7006
127.0.0.1:7006> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"llj"

这里写图片描述
关闭7002

 [root@server3 7006]# ps ax
.
.
.
 1388 ?        Ssl    0:00 redis-server *:7001 [cluster]
 1408 ?        Ssl    0:00 redis-server *:7002 [cluster]
 1415 ?        Ssl    0:00 redis-server *:7003 [cluster]
 1421 ?        Ssl    0:00 redis-server *:7004 [cluster]
 1427 ?        Ssl    0:00 redis-server *:7005 [cluster]
 1433 ?        Ssl    0:00 redis-server *:7006 [cluster]
 1449 pts/0    R+     0:00 ps ax
[root@server3 7006]# kill 1388

这里写图片描述
查看

# 数据由7002的slave(7005)接替
[root@server3 7006]# redis-cli -c -p 7006
127.0.0.1:7006> get name
-> Redirected to slot [5798] located at 127.0.0.1:7005  
"llj"
127.0.0.1:7005> 

这里写图片描述
开启7002(本宝宝之前不小心kill掉了7001,如果你们的7001没有kill掉的话不用开启,只需开启7002)

[root@server3 7006]# cd ../7001
[root@server3 7001]# redis-server redis.conf 
[root@server3 7001]# cd ../7002
[root@server3 7002]# redis-server redis.conf 
[root@server3 7002]# redis-trib.rb check 127.0.0.1:7006

这里写图片描述
emmm…在做的过程中遇到一些问题,这是恢复正常之后的master和slave状态
这里写图片描述
如果同时kill掉两个master,master数少于slave,将查询不到任何信息

# kill掉7005和7006
[root@server3 7006]# ps ax
.
.
.

 1427 ?        Ssl    0:01 redis-server *:7005 [cluster]
 1433 ?        Ssl    0:01 redis-server *:7006 [cluster]
 1460 ?        Ssl    0:00 redis-server *:7001 [cluster]
 1467 ?        Ssl    0:00 redis-server *:7002 [cluster]
 1493 ?        Ssl    0:01 redis-server *:7003 [cluster]
 1501 ?        Ssl    0:01 redis-server *:7004 [cluster]
 1511 pts/0    R+     0:00 ps ax
[root@server3 7004]# kill 1427 1433

这里写图片描述
查询

[root@server3 7002]# redis-trib.rb check 127.0.0.1:7006
[root@server3 7004]# redis-cli -c -p 7004
127.0.0.1:7004> get name
(error) CLUSTERDOWN The cluster is down  #查看失败

这里写图片描述
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值