Redis + keepalived 高可用群集搭建
本次实验环境介绍:
操作系统:
Centos 7.3 IP : 192.168.10.10
Centos 7.3 IP : 192.168.10.20
VIP 地址 : 192.168.10.254
软件版本介绍:
redis : redis-3.2.8 下载链接: http://download.redis.io/releases/redis-3.2.8.tar.gz
keepalived : keepalived-1.2.10 下载链接: http://www.keepalived.org/software/keepalived-1.2.10.tar.gz
环境基本简介:
本次 实验环境用的是keepalived 做的高可用,并且做到了应用级别的高可用,意思就是说不管是主机 或者 应用程序任何一个宕掉后,都可以切换节点到从服务器上。并且 当主节点再次启动也不会因为再次切换节点到主服务器上。redis 做的一主一丛模式,大家有需求可以任意更改节点,因为redis 可以实现树形结构的主备,本次实验模式是当主 的挂掉后,从节点接替主节点工作,并自动切换为master 角色,依次类推。
废话不多说了,大家想学习理论知识自行百度。
本次实验步骤:
master and slave : 安装keepalived
1、安装依赖包
yum -y install gcc openssl openssl-devel libnl* libpopt*
2、配置编译
shell> cd /usr/local/src
shell> wget http://www.keepalived.org/software/keepalived-1.2.10.tar.gz
shell> tar -zxf keepalived-1.2.10.tar.gz
shell> cd keepalived-1.2.10
shell> ./configure --prefix=/usr/local/keepalived
shell> make && make install
shell> mkdir /etc/keepalived
shell> cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
sehll> cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
shell> cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
shell> chkconfig --add keepalived
sehll> chkconfig keepalived on
shell> mv /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
shell> systemctl start keepalived
#至此keepalived 安装完成
master and slave : 安装 redis
1、解包
cd /usr/local/src
tar zxf redis-3.2.8.tar.gz
2、编译,没有配置一说,然后编译安装
cd redis-3.2.8/deps
make geohash-int hiredis jemalloc linenoise lua
cd ..
make && make install
3、使用脚本安装启动服务
utils/install_server.sh
安装过程中可以自定义路径,本人是一路Enter 键走过去的。
#至此redis 安装完成
以上为软件安装部分,下面是配置部分。
首先配置keepalived master
1、编辑keepalived 主配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { router_id redis100 #route_id 标识 } vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379" #redis 健康检查状态脚本 interval 2 #健康状态检查时间间隔 单位秒 timeout 2 #请求超时时间 单位秒 fall 3 #失败次数 } vrrp_instance redis { state MASTER #master set to SLAVE also interface eno16777736 #网卡名称,需要用那个网卡当作出口流量 virtual_router_id 50 #Route_id 号 跟slave需要一样 priority 150 #优先级设置,只需要比backup的优先级高即可 nopreempt # no seize,must add advert_int authentication { #all node must same auth_type PASS #验证类型 auth_pass 1111 #验证密码 } virtual_ipaddress { 192.168.10.254 #VIP飘逸地址,需要跟外界通信的地址 } track_script { chk_redis #检查刚才定义的选项,chk_redis } notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.10.254 6379" #当keepalived 切换到master的时候执行此脚本 notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.10.254 6379" #当keepalived 切换到bakcup的时候执行此脚本 notify_fault /etc/keepalived/scripts/redis_fault.sh #当keepalived 出现故障的时候执行此脚本 notify_stop /etc/keepalived/scripts/redis_stop.sh #当keepalived 停止运行前执行此脚本 }
然后配置 eepalived backup
1、编辑主配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { router_id redis101 #route_id标识,需要跟master 不一样 } vrrp_script chk_redis { script "/etc/keepalived/scripts/redis_check.sh 127.0.0.1 6379" interval timeout fall } vrrp_instance redis { state BACKUP #backup的标识,需要用过大写书写 interface eno16777736 virtual_router_id priority 100 #优先级要低于MASTER即可 advert_int 1 authentication { #all node must same auth_type PASS auth_pass } virtual_ipaddress { 192.168.10.254 } track_script { chk_redis } notify_master "/etc/keepalived/scripts/redis_master.sh 127.0.0.1 192.168.10.254 6379" notify_backup "/etc/keepalived/scripts/redis_backup.sh 127.0.0.1 192.168.10.254 6379" notify_fault /etc/keepalived/scripts/redis_fault.sh notify_stop /etc/keepalived/scripts/redis_stop.sh }
上边的配置文件中所提到的脚本都是一样的只需要更改参数即可,如何更改下面又详细的介绍。此操作需要在MASTER and BACKUP 同时操作
上边写的五个脚本需要放在/etc/keepalived/scripts/目录下,大家也可以自定义脚本位置。
第一个脚本 redis_check.sh #有些参数可能需要大家根据自身的配置更改,例如:路径、密码、等。。。
#!/bin/bash ALIVE=`/usr/local/bin/redis-cli -a -h $ -p $ PING` #redis-cli命令所在路径,根据自己配置更改,可用用which redis-cli命令查看路径。-a 后面跟的是redis的密码 “123456” LOGFILE="/var/log/keepalived-redis-check.log" echo "[CHECK]" >> $LOGFILE date >> $LOGFILE if [ $ALIVE == "PONG" ]; then : >& exit else >& exit fi
第二个脚本 redis_master.sh #有些参数可能需要大家根据自身的配置更改,例如:路径、密码、等。。。
#!/bin/bash REDISCLI="/usr/local/bin/redis-cli -a 123456 -h $1 -p $3" #redis-cli命令所在路径,根据自己配置所更改,-a 后面的密码也要根据自己的设置而更改,更改方法在上面已经提到过了。 LOGFILE="/var/log/keepalived-redis-state.log" echo "[master]" >> $LOGFILE date >> $LOGFILE >& echo "Run SLAVEOF cmd ... " >> $LOGFILE $REDISCLI SLAVEOF $ $ >> $LOGFILE >& #echo "SLAVEOF $2 cmd can't excute ... " >> $LOGFILE ##delay s wait data sync exchange role echo "Run SLAVEOF NO ONE cmd ..." >> $LOGFILE $REDISCLI SLAVEOF NO ONE >> $LOGFILE >&
第三个脚本 redis_backup.sh #有些参数可能需要大家根据自身的配置更改,例如:路径、密码、等。。。
#!/bin/bash REDISCLI="/usr/local/bin/redis-cli" #设置redis-cli的命令所在路径即可 LOGFILE="/var/log/keepalived-redis-state.log" echo "[BACKUP]" >> $LOGFILE date >> $LOGFILE >& >& $REDISCLI SLAVEOF $ $ >> $LOGFILE #delay s wait data async cancel sync exit()
第四个脚本 redis_fault.sh
#!/bin/bash LOGFILE=/var/log/keepalived-redis-state.log echo "[fault]" >> $LOGFILE date >> $LOGFILE
第五个脚本 redis_stop.sh
#!/bin/bash LOGFILE=/var/log/keepalived-redis-state.log echo "[stop]" >> $LOGFILE date >> $LOGFILE
至此:完成对keepalived 的所有配置。现在重启一下即可完成对redis 的高可用,但是虽然实现了高可用,但是还有一个问题没有解决掉,就是数据同步问题,master 挂掉后,从节点接替主节点,但是从节点并没有主节点的缓存,所以轻则重新同步缓存到服务器上,重责大胆的人可以一试。
然后配置 master redis 的配置文件
vim /etc/redis/6379.conf
修改 bind 0.0.0.0
修改 masterauth 123456 认证密码
设定文件,指定Master
slaveof 192.168.10.20 6379 指定master的ip和port masterauth 123456 master有验证的情况下 slave-read-only yes 设置slave为只读模式
然后配置 backup redis 的配置文件
vim /etc/redis/6379.conf
修改 bind 0.0.0.0
修改 masterauth 123456 认证密码
设定文件,指定Master
slaveof 指定master的ip和port masterauth master有验证的情况下 slave-read-only yes 设置slave为只读模式
至此redis 就配置完成了
附加提示
启动redis 命令
redis-server /etc/redis/6379.conf
停止redis 命令
netstat -anpt | grep redis
kill 进程号
验证redis 的主从复制和keepalived 的高可用
首先使用redis 客户端连接进来,然后分别连接master 、backup 、VIP 地址
1、使用console 控制台连接,键入命令 INFO replication 查看是否是master or slave
2、键入数据查看备用节点是否同步数据
3、模仿故障,关闭redis 进程,看看节点是否进行切换VIP是否正常连接
4、发挥你的特长,自由检查
至此,本篇文档完结。
有写的错的,不好的,希望大神们可以指正,也可以互相交流交流。欢迎大家留言,评论,爱你们@@@
Redis + keepalived 高可用群集搭建的更多相关文章
- 高可用群集HA介绍与LVS+keepalived高可用群集
一.Keepalived介绍 通常使用keepalived技术配合LVS对director和存储进行双机热备,防止单点故障,keepalived专为LVS和HA设计的一款健康检查工具,但演变为后来不仅 ...
- LVS+Keepalived 高可用群集部署
LVS+Keepalived 高可用群集部署 1.LVS+Keepalived 高可用群集概述 2.LVS+Keepalived高可用群集部署 1.LVS+Keepalived 高可用群集概述: LV ...
- 22.LVS+Keepalived 高可用群集
LVS+Keepalived 高可用群集 目录 LVS+Keepalived 高可用群集 keepalived工具介绍 Keepalived实现原理剖析 VRRP(虚拟路由冗余协议) VRRP 相关术 ...
- 1. lvs+keepalived 高可用群集
一. keepalived 工具介绍 1.专为lvs 和HA 设计的一款健康检查工具 2.支持故障自动切换 3.支持节点健康状态检查 二. keepalived 实现原理剖析 keepalived ...
- Redis Sentinel 高可用服务搭建
阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...
- Redis+Keepalived高可用方案详细分析
背景 目前,Redis集群的官方方案还处在开发测试中,未集成到稳定版中.且目前官方开发中的Redis Cluster提供的功能尚不完善(可参考官方网站或http://www.redisdoc.com/ ...
- Redis+Keepalived高可用环境部署记录
Keepalived 实现VRRP(虚拟路由冗余)协议,从路由级别实现VIP切换,可以完全避免类似heartbeat脑裂问题,可以很好的实现主从.主备.互备方案,尤其是无状态业务,有状态业务就需要额外 ...
- [Z]haproxy+keepalived高可用群集
http://blog.51cto.com/13555423/2067131 Haproxy是目前比较流行的一种集群调度工具Haproxy 与LVS.Nginx的比较LVS性能最好,但是搭建相对复杂N ...
- mamcached+(magent+keepalived高可用)搭建及理论概述
目录 一.理论概述 工作流程 二.部署 环境 环境概述 部署 三.测试 四.总结 一.理论概述 Memcached服务器端与PHP-Memcache客户端安装配置_服务器应用_Linux公社-Linu ...
随机推荐
- Mybatis实战之TypeHandler高级进阶
上篇文章分享了在项目实战中自定义Mybatis的TypeHandler来处理枚举类型.文章结尾也指出了美中不足之处,那就是每次都需要指定我们自定义的枚举TypeHandler. 随着项目枚举类型的增多 ...
- phpcms代码读取文章的内容 实用可行的方法
在使用phpcms做网站的时候经常遇到读取网站的内容作为推荐,而不是描述.这里使用可行的方法交你如何读取内容推荐.方法有两个,第一种执行的效率低,第二个效率高些. 1. {pc:get sql=&qu ...
- BZOJ 2142: 礼物
模非素数下的排列组合,简直凶残 调着调着就过了= = 都不知道怎么过的= = 直接上链接http://hi.baidu.com/aekdycoin/blog/item/147620832b567eb4 ...
- 走进javascript——不起眼的基础,值和分号
值 有时我很想知道javascript解析引擎是如何区分一个变量的值,比如下面这段代码. var x = 'javascript'; //javascript x = "hello" ...
- Javascript基本语句
1.单行语句是大家用的最多的,下面讲讲复合语句的用法. 用一对花括号括起来,处理的时候,可以用单句来对待.这样做的好处是避免复合语句中语句互相干扰执行. 语法如下: { var x=1111: var ...
- 如何通过Visual Studio来管理我们的数据库项目
某日的一个早晨,产品早上来告诉我说要把之前变更的一个功能更改回原来的设计内容,作为程序员大家都最讨厌需求来回反复变更,但是没有办法,苦逼的程序员最终还是继续要改,毕竟是给老板打工的,但是发现我们之前的 ...
- 性能测试工具 - Apache JMeter (安装)
简介 Apache JMeter 是100%纯java语言开发的负载测试和性能测试开源工具. 功能 Apache JMeter可以对静态/动态资源进行性能测试,模拟多个用户并行请求资源端,以测试其强度 ...
- 了解 : prevent default
基本了解是阻止事件之前设置好的事件触发,像是angular router ui里的 preventDefault是这样的. 在$stateChange的是后,可以调用preventDefault 来阻 ...
- C#自动弹出窗口并定时自动关闭
最近做个小项目,用到一个小功能:后台线程定时查询数据库,不符合条件的记录弹出消息提醒(在窗口最前面),并且过几秒钟再自动关闭弹出的窗口. 所以从网上找来资料,如下: WinForm 下实现一个自动关闭 ...
- 小白能学好UI设计吗
许多童鞋在接触UI培训前会有很多疑问,我是干快递的,我能学好UI设计吗,UI培训要学些什么,电脑操作我好像什么都不会,除了打游戏,我适合学UI设计吗--有这些想法呢是人之常情,但是我们反过来想一想,有 ...