高可用(keepalived)部署方案
前言:为了减少三维数据中心可视化管理系统的停工时间,保持其服务的高度可用性。同时部署多套同样的三维可视化系统,让三维数据中心可视化系统同时部署并运行到多个服务器上。同时提供一个虚拟IP,然后外面通过这个虚拟IP来访问三维可视化管理系统,当一台实体服务器挂掉时会自动的切到另一条服务器,但是这个虚拟IP依然能提供服务。
要实现高可用性,需要保证数据的一致,因此需要保证这几台服务器上的数据库中的数据一致;同时还需要保证上传的文件信息一致。最后需要通过软件监听程序来监听并且挂掉时进行自动切换。
一、什么是高可用?高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。
假设系统一直能够提供服务,我们说系统的可用性是100%。
(资料图片仅供参考)
如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。
很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8.76个小时。
百度的搜索首页,是业内公认高可用保障非常出色的系统,甚至人们会通过www.baidu.com能不能访问来判断“网络的连通性”,百度高可用的服务让人留下啦“网络通畅,百度就能访问”,“百度打不开,应该是网络连不上”的印象,这其实是对百度HA最高的褒奖。-----摘选自知乎
二、如何保障系统的高可用我们都知道,单点是系统高可用的大敌,单点往往是系统高可用最大的风险和敌人,应该尽量在系统设计的过程中避免单点。方法论上,高可用保证的原则是“集群化”,或者叫“冗余”:只有一个单点,挂了服务会受影响;如果有冗余备份,挂了还有其他backup能够顶上。
保证系统高可用,架构设计的核心准则是:冗余。
有了冗余之后,还不够,每次出现故障需要人工介入恢复势必会增加系统的不可服务实践。所以,又往往是通过“自动故障转移”来实现系统的高可用。-----摘选自知乎
人话:两台服务器启动着相同的服务,如果有一台故障,另一台自动接管,我们将这个称之为高可用;类似服务器:冗余,类似服务器有2-4个电源,但是比较贵
上图:安装keepalived:离线安装方法:因为我们的大部分客户都是属于数据中心,并不会连接外网,所以采取离线安装的方式比较多,在线安装的方法非常简单,如下命令即可,在安装keepalived之前确保安装了摄像头的那一套东西,因为这里涉及到需要安装openssl的模块,如果没有装请先装nginx摄像头相应的软件keepalived的运行模式:准备条件:
需要三个ip,并且保证是局域网,相互之间ping的通,前面两个ip好理解,两台服务器,第三个ip就是一个虚拟ip,就是空余ip没被启用的即可,我们访问系统的话就是通过这个虚拟ip访问
优先级VRRP根据优先级来确定虚拟路由器中每台路由器的地位;
非抢占方式如果Backup路由器工作在非抢占方式下,则只要Master路由器没有出现故障Backup路由器即使随后被配置了更高的优先级也不会成为Master路由器;
抢占方式如果Backup路由器工作在抢占方式下,当它收到VRRP报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的Master路由器的优先级高,就会主动抢占成为Master路由器;否则,将保持Backup状态.
yum install keepalived-y
1.上传文件1.首先把文件传到opt下面
2.解压安装cd /opt
tar -zxvf keepalived-2.0.20.tar.gz
3.编译cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived
会发现有一个报错
4.报错信息然后安装cd /opt
rpm -ivh libnl-1.1.4-3.el7.x86_64.rpm --force --nodeps
rpm -ivh libnl-devel-1.1.4-3.el7.x86_64.rpm --force --nodeps
cd keepalived-2.0.20
./configure --prefix=/usr/local/keepalived
没有报错了,继续往下执行
make && make install
输入上面的命令会报以下错误
解决:
cd /usr/local/lib64
export LIBRARY_PATH=/usr/local/lib64
cd /opt/keepalived-2.0.20
./configure --prefix=/usr/local/keepalived
make && make install
执行完之后也报错了
5.初始化keepalivedcp /opt/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/init.d/
cp /opt/keepalived-2.0.20/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
mkdir -p /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
chmod +x /etc/init.d/keepalived
6.添加keepalived到开机启动chkconfig —add keepalived
chkconfig keepalived on
7.启动、关闭、重启service keepalived start //启动
service keepalived stop //停止
service keepalived restart //重启
当我们启动使用 service keepalived start 启动的时候会报错
解决:
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
在输入命令启动
service keepalived start
以上的1-7步骤在备机上也需要装一下,请注意8.配置keepalived主机:192.168.10.51
备机:192.168.10.65
虚拟ip:192.168.10.77
在主机下操作:vi /etc/keepalived/keepalived.conf
以下就是我们需要修改的内容
填完直接 :wq!保存退出即可
上面图里面说的网卡名称查询方法:
ip addr
然后重启keepalived
service keepalived restart
service keepalived status //查看keepalived的状态,下图表示已经启动
在备机下操作:vi /etc/keepalived/keepalived.conf
以下就是我们需要修改的内容
填完直接 :wq!保存退出即可
然后重启keepalived
service keepalived restart
service keepalived status //查看keepalived的状态,下图表示已经启动
9.验证启动后看对应的虚拟IP地址是否生成,当主机关掉或者其对应的keepalived挂掉后备机是否生成对应的虚拟IP,以及主机重启工作时虚拟IP是否重新漂移到主机上。
我们可以相互ping一下,可以看见是通的
上面我们讲过,默认访问就是主机,主机挂了就是切换到备机,我们只需要查看主机上面的ip,上面很明显有两个ip,其中有一个就是虚拟机ip
当我们把主机关掉或者主机的keepalived服务关掉之后看能否重新漂移回来呢?
我们再看看ip addr,很明显已经没有了虚拟ip
我们已经成功关掉了主机的keepalived服务,我们看下备机上能够看到虚拟ip吗
我们在备机上操作,我们可以看到虚拟ip跑到了这上面,看到这里你是不是对keepalived的工作模式有了一个浅显的认识,接下来我们开启主机的keepalived服务,能够在跳过去嘛.这就是模拟当主机已经恢复服务了,看能否自动跳转过去
启动主机的keepalived服务:
service keepalived start
service keepalived status
查看ip,很明显已经切换回来了,自此已经配置完成了keepalived服务
mysql主主备份:保证各服务器上的数据库中的数据一致,因此需要开启数据库同步机制。由于是一整套系统,并且系统内含数据库。由于任何一台服务器都有可能被选中,因此要让所有的数据库上的数据都是最新的,任何一个服务器上的数据发生变化时都要自动的同步到其他的服务器上。三维可视化管理系统使用的时Mysql数据库,这里采用的时主-主备份机制进行同步的。
主一数据库:192.168.10.51
主二数据库:192.168.10.65
主数据库1:编辑数据库
vi /etc/my.cnf
#开启二进制同步log-bin=mysql-bin#设置ID,不能重复,可以使用IP最后一位数字server-id=129#需要同步的数据名称,多个数据库则要重复设置:bin-do-db,bin-ignore-db为互斥关系,只需设置其中一项即可replicate-do-db=itv#自增长字段初始值为1auto-increment-offset=1#自增长字段增量值auto-increment-increment=2#跳过所有复制的错误slave-skip-errors=all
systemctl restart mysqld //重启mysql服务
主数据库2:编辑数据库
vi /etc/my.cnf
#开启二进制同步log-bin=mysql-bin# 设置ID,不能重复,可以使用IP最后一位数字server-id=128# 需要同步的数据名称,多个数据库则要重复设置: bin-do-db,bin-ignore-db为互斥关系, 只需设置其中一项即可replicate-do-db=itv# 自增长字段初始值为1auto-increment-offset=1# 自增长字段增量值auto-increment-increment=2# 跳过所有复制的错误slave-skip-errors=all
systemctl restart mysqld //重启mysql服务
创建mysql复制账户:在主一数据库操作:为主二的所在的ip创建一个账号密码为root1,这样就能够允许远程访问本机数据库了
登录mysql:
mysql -uroot -proot //登录mysql
grantreplicationslaveon*.*toroot1@"192.168.10.68"identifiedby"root1";
赋予权限:如果就这样连接的话虽然能访问但还是看不了数据的,所以需要赋予root1权限
updateuserset`Select_priv`="Y",`Insert_priv`="Y",`Update_priv`="Y",`Delete_priv`="Y",`Create_priv`="Y",`Drop_priv`="Y",`Reload_priv`="Y",`Shutdown_priv`="Y",`Process_priv`="Y",`File_priv`="Y",`Grant_priv`="Y",`References_priv`="Y",`Index_priv`="Y",`Alter_priv`="Y",`Show_db_priv`="Y",`Super_priv`="Y",`Create_tmp_table_priv`="Y",`Lock_tables_priv`="Y",`Execute_priv`="Y",`Repl_slave_priv`="Y",`Repl_client_priv`="Y",`Create_view_priv`="Y",`Show_view_priv`="Y",`Create_routine_priv`="Y",`Alter_routine_priv`="Y",`Create_user_priv`="Y",`Event_priv`="Y",`Trigger_priv`="Y",`Create_tablespace_priv`="Y"whereuser="root1";
立即生效:flush privileges;
在主二数据库操作:为主一的所在的ip创建一个账号密码为root1,这样就能够允许远程访问本机数据库了
登录mysql:
mysql -uroot -proot //登录mysql
grantreplicationslaveon*.*toroot1@"192.168.10.67"identifiedby"root1";
赋予权限:如果就这样连接的话虽然能访问但还是看不了数据的,所以需要赋予root1权限
updateuserset`Select_priv`="Y",`Insert_priv`="Y",`Update_priv`="Y",`Delete_priv`="Y",`Create_priv`="Y",`Drop_priv`="Y",`Reload_priv`="Y",`Shutdown_priv`="Y",`Process_priv`="Y",`File_priv`="Y",`Grant_priv`="Y",`References_priv`="Y",`Index_priv`="Y",`Alter_priv`="Y",`Show_db_priv`="Y",`Super_priv`="Y",`Create_tmp_table_priv`="Y",`Lock_tables_priv`="Y",`Execute_priv`="Y",`Repl_slave_priv`="Y",`Repl_client_priv`="Y",`Create_view_priv`="Y",`Show_view_priv`="Y",`Create_routine_priv`="Y",`Alter_routine_priv`="Y",`Create_user_priv`="Y",`Event_priv`="Y",`Trigger_priv`="Y",`Create_tablespace_priv`="Y"whereuser="root1";
立即生效:flush privileges;
测试能否访问:在主一登录主二的数据库:
mysql -h192.168.10.65 -uroot1 -p //登录主二的数据库
发现连接失败
我们查看3306端口发现被占用,我们开启3306端口,我们在主备机都需要开放此端口
应该是防火墙的原因,
firewall-cmd--zone=public--add-port=3306/tcp--permanent
然后重启防火墙
systemctl restart firewalld.service
继续连接,发现可以连接成功,并且可以查看数据
show databases; //查看数据库
同理,在主二的数据库可以访问主一的数据库看下:
mysql -h192.168.10.51 -uroot1 -p //登录主一的数据库
show databases; //查看数据库
重启数据库主数据库1:systemctl restart mysqld
主数据库2:systemctl restart mysqld
互告bin-log信息主主同步还有主从同步都是基于binlog的原理进行,相当于我们打开了这个开关,每次操作数据库都会产生一个binlog日志,然后把binlog日志进行发给对方进行执行,这样数据就保持同步了
首先进入MySQL命令行:
主数据库1:查看日志:showmasterstatus;
设置同步:
changemastertomaster_host="192.168.10.65",master_user="root1",master_password="root1",master_port=3306,master_log_file="mysql-bin.000002",master_log_pos=154;
备注: master_log_file与File值一致, master_log_pos与Position值一致
开始同步:startslave;
查看同步情况:
showslavestatus\G;
当看到了两个yes,即:Slave_IO_Running:Yes
Slave_SQL_Running:Yes
说明已经配置成功了,但是这里有一个显示为no,明显有问题
解决办法:
stop slave;
reset slave;
start slave;
然后我们继续查看同步情况;
showslavestatus\G;
灰常完美
主数据库2:这里其实跟上面的主数库一是一样的操作
show master status;
changemastertomaster_host="192.168.10.51",master_user="root1",master_password="root1",master_port=3306,master_log_file="mysql-bin.000002",master_log_pos=154;
备注: master_log_file与File值一致, master_log_pos与Position值一致
开始同步:
start slave;
查看同步情况:
show slave status\G;
当看到了两个yes,即:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
说明已经配置成功了,如果这里的slave_io_Running显示no依然采用上面的办法操作即可
开启项目测试:在主一和主二机器上分别部署项目,并且导入相同的数据库,然后用forever启动,这个在之前的部署环境就有讲过,此处不再赘述,我们开启项目
在主机上开启机房:在备机上也开启机房:然后我们开始访问这两个项目(注意此时的防火墙,把8081端口打开):
我们发现两个项目都可以顺利的打开,这时候我们就使用虚拟ip进行访问,因为实际我们也是通过这个虚拟ip进行访问的,我们的虚拟ip是192.168.10.77,一i就那个可以顺利访问了,现在我们就关掉主机的机房程序,看他能不能访问
关掉主机服务:
forever stopall
我们还需要吧keepalived的服务关了,因为keepalived并不知道我们的机房程序已经挂了,所以要时刻监听8081端口的状态,如果8081端口监听不到那么就停止keepalived这个服务,以下是sheel脚本,然后我们设置监听一分钟即可
A=`netstat-lnp|grep8081|wc-l`if[$A-eq0];then#echo"keepalived应该关闭了"/usr/sbin/servicekeepalivedstopfi
然后关掉keepalived的服务:
service keepalived stop
现在我们继续访问主机的程序,然后在访问虚拟ip
可以看到,主机程序已经访问不到,那么虚拟ip呢(这里注意虚拟ip机大的防火墙一定要关闭或者是开放8081端口)
可以看到,虚拟ip已经飘到备用服务器上了,这时候备机上面已经有了虚拟ip
如果现在主机重新上线,虚拟ip还会从备机飘到主机上,这时候就会产生一个现象,就是脑裂
我们启动主机的机房并且启动keepalived
标签:
相关文章
高可用(keepalived)部署方案
前言:为了减少三维数据中心可视化管理系统的停工时间,保持其服务的高度可用性。同时部署多套同样的三维可视化系统,让三维数据中心可视化系
高管违规被罚、退市边缘行走 *ST和佳“保壳”的三个难点-环球热文
守住眼前,就是胜利作者:郭果编辑:蒙多风品:令煜来源:铑财——铑财研究院堡垒最易从内部攻破,*ST和佳的投资者应该深有感触。3月31日,...
一小包纸巾卖五六元 “纸巾刺客”让消费者就餐闹心 微资讯
“你们这餐巾纸怎么收费这么贵呀?”近日,从山西来乌鲁木齐游玩的朱先生在某连锁餐馆用餐,结账时发现多了一笔5元的餐巾纸费用,他表示...
A股进入全面注册制时代:主板注册制首批新股今上市,成色如何?
4月10日,主板注册制首批10家企业将正式登陆A股。业内人士提示道,随着发行环节主板结束23倍市盈率限制,且在新股上市前5个交易日不设涨跌幅限
世界即时:永久电动车入手999元 长续航高动力
老铁们,这款永久电动车现在在京东售价为1099元,还可以领取100元优惠券,到手价仅为999元,是近期的好价。永久电动车新国标电动自行车48v超长
书香浸润童年手抄报简单又漂亮_书香浸润童年手抄报-环球热头条
1、书香浸润心灵手抄报人生多读书会充满智慧和快乐。2、品味书香,书籍渗透人心思想;品味书香,人生体验随着阅历增长;品味书
大鹏首个第六立面试点启动 预计6月完工|世界即时看
读特客户端·深圳新闻网2023年4月9日讯(深圳特区报记者程思玮通讯员吴淑珍)日前,记者从大鹏新区住建局了解到,大鹏新区城市第六立面提升改
如何在高压锅中烹调上圆_圣诞节送女的什么礼物比较好
你需要的东西3磅。顶轮1 2茶匙。调味盐1 2茶匙。盐1 8茶匙。胡椒1 2茶匙。辣椒4瓣蒜末1个切碎的洋葱4杯牛肉汤压力锅肉类温度计在高压锅中做顶
世界热讯:木鱼解说我的世界钻石大陆模组_木鱼解说我的世界钻石大陆
1、无中生有,地狱级怪物,怪物肢解。2、挖掘,物品掉落物理,能力苹果。3、战利品,更多弯曲动作,拔刀剑。4、木匠方块,只
离婚,如何证明夫妻已经分居2年_每日速递
《民法典》第1079条规定 夫妻一方要求离婚的,可以由有关组织进行调解或者直接向人民法院提起离婚诉讼。人民法院审理离婚案
农业灌溉水质标准是几类(农业灌溉水质标准)
1、污水综合排放一级标准:COD100BOD20SS20氨氮15TP0 5农业灌溉水质标准:COD150-300BOD80-150SS100-200
全球动态:焦点访谈:故宫北院 令人期待
15:09一座紫禁城,半部中国史。最近,成立近百年的故宫博物院动工建设北院区的消息备受关注。北院区是国家“十四五”规划重
4月09日06时贵州铜仁最新疫情防控措施 铜仁最新疫情消息今日
一、铜仁最新疫情消息-数据概览:1、新增本土:0;2、新增无症状:0;3、现有确诊:22;4、累计确诊:64;5、累计治
怎样选购全自动洗衣机_选购全自动洗衣机的方法 全球观热点
解答:1、在选择型号、品牌、规格、检查外观和配件时,首先要对各种型号进行全面调查,通过阅读说明书进行比较,根据家庭条件确
网友晒景甜发声回应,称网上视频图片都是真的,不过确实恶意P图_全球微资讯
近日,大众和媒体对张继科事件持续关注,越来越多的爆料全都指向张继科,也牵扯出很多人。4月6日,相关媒体报道张继科事件愈演愈烈,关于他的
特斯拉又降价了:最高降3万多!马斯克这样回应...
据特斯拉前员工分享,在2021年的一段视频中,一辆特斯拉在居民区高速行驶,撞到了一名骑自行车的孩子,这一事故视频“像野火一样”传遍了特...
给缺钱的女性一个大胆的建议!
回复【早安】送你一张专属祝福卡片主播|周周问大家一个问题:你手上的手机,除了打电话,发微信,玩游戏,刷抖音之外,还能做什么?如果我告诉
世界热文:辽宁计划2023年实施保护性耕作面积1300万亩
记者日前从辽宁省农业农村厅获悉,《辽宁省2023年黑土地保护性耕作实施方案》印发,计划实施保护性耕作任务面积1300万亩
「高质量发展蹲点采访」凤冈新建镇:党组织书记“擂台大比武” 赋能乡村振兴
“擂台大比武”活动现场“我们依托长碛古寨生态、人文资源,精准发力,大做‘生态水乡·人文新建’文章”“我们通过‘党支部+议
实时焦点:全国各地区最低工资标准来啦!贵州1660元
最新最低工资表公布。 人社部网站近日发布了全国各地区最低工资标准情况(截至2023年4月1日),15个地区月最低工资标准在2000元及以上
天天关注:朝中社:朝鲜进行潜水式战略武器系统试验(图)
据朝中社8日报道,4月4日至7日,朝鲜进行了潜水式战略武器系统试验。图片来源:朝中社 报道还指出,通过试验,朝方正确评估所有战术技术数
今日最新!大众日报评论丨以数字赋能促文化蝶变
□本报评论员数字催生新兴业态,文化激发创造活力。4月7日,2023青岛数字文化应用发展大会开幕。大会以“新应用、新体验、新消费”为主题,...
禁止驶入!福州、平潭两海域实弹射击
4月7日,福州海事局发布航行警告,4月8日0800-1200时、11日0800-1200时、13日0800-1200时、15日0800-1200时、17日080
贵州省教育科学院论文_贵州省教育科学院 天天微头条
1、副处级别贵州省教育科学研究院是贵州省教育厅下属的事业单位,是正处级别编制。2、2、所以研究院副院长是副处级别,相
每日观点:招摇撞骗罪如何成功取保候审不逮捕,不逮捕会有案底吗?
一、什么是逮捕,逮捕的意义是什么?逮捕是经过人民检察院批准或决定后,对于已经被拘留的,有证据证明有犯罪事实,并可能判处有
微芯生物:公司经营一切正常,营业收入持续稳定增长 全球今亮点
被投资者问及“请问因为公司新药进度慢,新药上市销售差,会不会导致公司明年破产?”,微芯生物11月24日在互动平台表示,公
微速讯:vue面试题八股文简答大全 让你更加轻松的回答面试官的vue面试题
Vue js是一个流行的JavaScript框架,它使得构建复杂的交互式应用程序变得更容易。Vue js基于MVVM模式设计,采用了响应式数据绑定和组件化的架构