主机:
172.17.209.25 (简称25)
172.17.209.26 (简称26)
拓扑图:
软件版本:
keepalived-1.2.19.tar.gz
redis-2.8.1.tar.gz
先在25机器上安装然后拷贝到26机器上。
1 |
| tar -xvf redis-2.8.1.tar.gz |
vi /etc/init.d/redis
1 |
| #!/bin/bash |
vi /usr/local/redis/redis.conf
1 |
| daemonize yes |
chkconfig nginx on
启动:service redis start
关闭:service redis stop
ps -ef | grep redis
直接用SSH传输到另外一台机器上
scp -r /usr/local/redis/ root@172.17.209.26:/usr/local/
scp -r /etc/init.d/redis root@172.17.209.26:/etc/init.d/
并在另一台机器也做相同的自启动
1 |
| tar -zxvf keepalived-1.2.19.tar.gz |
配置详细说明:https://blog.csdn.net/u010391029/article/details/48311699
说明:涉及到4个脚本,分别是:
vi /etc/keepalived/keepalived.conf
1 |
| vrrp_script chk_redis { |
备注:拷贝到26后,要改一下notify_master和notify_backup参数中的172.17.209.25为172.17.209.26;
配置项说明:
State:指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定,里如果这里设置为master,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为master
interface:实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
virtual router id:这里设置VRID,这里非常重要,相同的VRID为一个组,他将决定多播的MAC地址
auth type:认证方式,可以是PASS或AH两种认证方式
auth pass:认证密码
virtual ipaddress:这里设置的就是VIP,也就是虚拟IP地址,他随着state的变化而增加删除,当state为master的时候就添加,当state为backup的时候删除,这里主要是有优先级来决定的,和state设置的值没有多大关系,这里可以设置多个IP地址
version:版本,4位,在RFC3768中定义为2;
Type:类型,4位,目前只定义一种类类型:通告数据,取值为1;
Virtual Rtr ID:虚拟路由器ID,8位
Priority:优先级,8位,具备冗余IP地址的设备的优先级为255;
Count IP Addrs:VRRP包中的IP地址数量,8位;
Auth Type:认证类型,8位,RFC3768中认证功能已经取消,此字段值定义0(不认证),为1,2只作为对老版本的兼容;
Adver Int:通告包的发送间隔时间,8位,单位是秒,缺省是1秒;
Checksum:校验和,16位,校验数据范围只是VRRP数据,即从VRRP的版本字段开始的数据,不包括IP头;
IP Address(es):和虚拟路由器相关的IP地址,数量由Count IP Addrs决定
Authentication Data:RFC3768中定义该字段只是为了和老版本兼容,必须置0。
chkconfig keepalived on
启动:service keepalived start
关闭:service keepalived stop
ps -ef | grep keepalived
1 |
| #!/bin/bash |
1 |
| #!/bin/bash |
1 |
| #!/bin/bash |
1 |
| #!/bin/bash |
1 |
| #!/bin/bash |
将以上shell拷贝到目录:/usr/local/keepalived/scripts/redis/,
然后赋权:chmod 755 /usr/local/keepalived/scripts/redis/*.sh
scp -r /usr/sbin/keepalived root@172.17.209.26:/usr/sbin/
scp -r /etc/sysconfig/keepalived root@172.17.209.26:/etc/sysconfig/
scp -r /etc/init.d/keepalived root@172.17.209.26:/etc/init.d/
scp -r /usr/local/keepalived/scripts/redis/* root@172.17.209.26:/usr/local/keepalived/scripts/redis
查看日志命令:tailf -500 /data/keepalived/log/keepalived-redis-state.log
查看redis主从角色命令:/usr/local/redis/redis-cli -p 6379 info replication
链接:https://www.jianshu.com/p/2c3c6d320bf5
实际经验告诉我主机备机都有vip的情况就是防火墙或路由的问题了
两台机器都不能互相访问的话,就会有两个vip,且不能访问,检查防火墙,centos 7 以后是firewall
解决方式
查看keeplived权限
ll /etc/keepalived/
total 8
-rwxrwxr-x 1 root root 600 Dec 25 14:38 check_mysql.sh
-rwxrwxr-x 1 root root 645 Dec 25 14:46 keepalived.conf
更改为644权限即可
chmod 644 keepalived.conf
ll keepalived.conf
-rw-r--r-- 1 root root 645 Dec 25 15:02 keepalived.conf
执行成功
http://languor.us/cron-pam-unix-cron-session-session-opened-closed-user-root-uid0
https://blog.csdn.net/u010433704/article/details/103079928
原文:
现在的生产环境基本上都采用主备方式,而如何实现redis的主备呢?一般情况下,redis实现主从复制比较简单,只需要在从服务器的配置文件里配置 "slaveof "即可。但这样存在一个问题:主服务器挂掉时,可临时将业务地址转移到从服务器,但从服务器无法进行写操作。
为解决这个问题,在网上查找了一些资料。主要有以下几种方案
1、使用keepalived+监控脚本实现主备切换
2、使用redis-cluster实现双主切换,原理就是模仿MySQL的bin-log机制。
本文介绍一下第一种方案
设计思路
当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby(后备);
当 Master 挂掉,Slave 正常时, Slave接管服务,同时关闭主从复制功能;
当 Master 恢复正常,则从Slave同步数据,同步数据之后关闭主从复制功能,恢复Master身份,于此同时Slave等待Master同步数据完成之后,恢复Slave身份。
然后依次循环。
环境介绍
Master:172.17.129.251
Slave: 172.17.129.253
VIP: 172.17.129.250
基于如下的拓扑图:
访问VIP
# /usr/local/redis/bin/redis-cli -h 192.168.3.188 get hello
"1"
写入数据
# /usr/local/redis/bin/redis-cli -h 192.168.3.188 set hello2 2
OK
e恢复主服务并查看写添加数据
# /usr/local/redis/bin/redis-cli -h 192.168.3.188 get hello2
"2"
至此,双主备份成功实现。
搭建流程:https://blog.csdn.net/niketwo/article/details/79770966