redis的主从复制、高可用、集群

安装redis

tar zxf redis-4.0.8.tar.gz
cd redis-4.0.8
yum install gcc -y
make
make install
which redis-cli

which redis-cli

cd utils/
./install_server.sh 

install_server.sh
修改配置文件,接受所有端口的链接

vim /etc/redis/6379.conf
70 bind 0.0.0.0

修改配置文件

重新加载配置文件

/etc/init.d/redis_6379 stop
/etc/init.d/redis_6379 start

netstat -antlp

netstat -antlp

配置主从

在servre2中修改配置文件,设置master为172.25.31.1

vim /etc/redis/6379.conf 
283 slaveof 172.25.31.1 6379

重新加载

/etc/init.d/redis_6379 restart

测试
在server1中写入

[root@server1 utils]# redis-cli 
127.0.0.1:6379> set name wyh
OK
127.0.0.1:6379> get name
"wyh"

在server2中查看

[root@server2 utils]# redis-cli
127.0.0.1:6379> get name
"wyh"

复制成功

redis的高可用

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

  • 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification): 当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API
    向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover): 当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作,
    它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器;
    当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

在server1中
修改sentinel配置文件

cd /root/redis-4.0.8
cp sentinel.conf /etc/redis
cd /etc/redis/
vim sentinel.conf 
 15 bind 0.0.0.0
 16 #
 17 protected-mode no

 97 # Default is 30 seconds.
 98 sentinel monitor mymaster 172.25.31.1 6379 2  #Sentinel 去监视一个名为 mymaster 的主服务器, 这个主服务器的 IP 地址为 172.25.31.1 , 端口号为 6379 

将sentinel配置文件发送到server2、3上

scp sentinel.conf server2:/etc/redis
scp sentinel.conf server3:/etc/redis

开启sentinel(server1、2、3都开)

redis-server /etc/redis/sentinel.conf --sentinel

这里写图片描述
关掉server1的redis,Servre3成为master
这里写图片描述
重新打开server1的redis
这里写图片描述
系统会自动在server1的/etc/redis/6379.conf文件中写入如下一行
这里写图片描述

搭建并使用Redis集群

搭建集群的第一件事情我们需要一些运行在 集群模式的Redis实例. 这意味这集群并不是由一些普通的

…………

Redis实例组成的,集群模式需要通过配置启用,开启集群模式后的Redis实例便可以使用集群特有的命令和特性了.

进入一个新目录/usr/local/cluster, 并创建六个以端口号为名字的子目录,在每个目录中运行一个 Redis 实例

cd /usr/local/
mkdir cluster
cd cluster/
mkdir 700{1..6}

编辑集群的配置文件

cd 7001
vim redis.conf
port 7001
cluster-enabled yes	#打开实例的集群模式
cluster-config-file nodes.conf #设定了保存节点配置文件的路径,默认值为 nodes.conf.节点配置文件无须人为修改,它由Redis集群在启动时创建,并在有需要时自动进行更新
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/cluster/7001/redis.pid
logfile /usr/local/cluster/7001/redis.log

开启实例,查看日志

redis-server redis.conf 
cat redis.log 
1533:M 12 Aug 10:06:26.780 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1533:M 12 Aug 10:06:26.780 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
1533:M 12 Aug 10:06:26.780 * Ready to accept connections
[root@server1 7001]# echo 511 >  /proc/sys/net/core/somaxconn
[root@server1 7001]# sysctl -w vm.overcommit_memory = 1
error: "vm.overcommit_memory" must be of the form name=value
error: Malformed setting "="
error: "1" must be of the form name=value

发现有报错,按照提示更改即可

echo 511 >  /proc/sys/net/core/somaxconn
sysctl -w vm.overcommit_memory=1

vim /etc/sysctl.conf 
vm.overcommit_memory=1

echo never > /sys/kernel/mm/transparent_hugepage/enabled

将配置文件复制到其他实例目录中

cp redis.conf ../7002
cp redis.conf ../7003
cp redis.conf ../7004
cp redis.conf ../7005
cp redis.conf ../7006

修改配置文件的端口号和pid、日志文件的位置
如下

cd ../7002
vim redis.conf 
port 7002
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
pidfile /usr/local/cluster/7002/redis.pid
logfile /usr/local/cluster/7002/redis.log

开启实例,查看日志,此次没有报错

redis-server redis.conf 
cat redis.log 

其余四个实例也按如上方法开启
打开实例

使用 Redis 集群命令行工具 redis-trib
要使用此工具需要先安装如下安装包

cd /root/redis-4.0.8/src/
cp redis-trib.rb /usr/local/bin/
yum install rubygems-1.3.7-5.el6.noarch.rpm 
yum install ruby-2.2.3-1.el6.x86_64.rpm libyaml-0.1.3-4.el6_6.x86_64.rpm -y
gem install --local redis-4.0.1.gem 
gem list --local

安装成功

确保redis_6379服务已关闭

/etc/init.d/redis_6379 stop
chkconfig redis_6379 off

搭建集群

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

检查集群

redis-trib.rb check 127.0.0.1:7001

检查集群

测试

哈希槽 < 16834 : 集群损坏
master down过半 : 集群损坏

redis-cli -c -p 7001

这里写图片描述

关掉master7002实例,slave7006由slave升为master,集群依旧可用

ps ax
kill -9  1552

关掉7002实例

redis-trib.rb check 127.0.0.1:7001

这里写图片描述

redis-cli -c -p 7001

集群依旧可用
继续关掉7006集群,集群将不可用

ps ax
kill -9  1578

关掉7006

redis-trib.rb check 127.0.0.1:7001
redis-cli -c -p 7001

查看集群状态
集群不可用
重新打开7002 7006实例,恢复集群

redis-server redis.conf 
cd ../7002
redis-server redis.conf 
ps ax
redis-trib.rb check 127.0.0.1:7001

恢复集群

停掉两个主节点(过半),集群也将不可用

ps ax
kill -9  1533   1603

停掉过半的主节点

redis-trib.rb check 127.0.0.1:7002

集群不可用

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页