首页
About Me
推荐
weibo
github
Search
1
linuxea:gitlab-ci之docker镜像质量品质报告
49,197 阅读
2
linuxea:如何复现查看docker run参数命令
21,468 阅读
3
Graylog收集文件日志实例
18,257 阅读
4
git+jenkins发布和回滚示例
17,882 阅读
5
linuxea:jenkins+pipeline+gitlab+ansible快速安装配置(1)
17,778 阅读
ops
Openvpn
Sys Basics
rsync
Mail
NFS
Other
Network
HeartBeat
server 08
Code
Awk
Shell
Python
Golang
virtualization
KVM
Docker
openstack
Xen
kubernetes
kubernetes-cni
Service Mesh
Data
Mariadb
PostgreSQL
MongoDB
Redis
MQ
Ceph
TimescaleDB
kafka
surveillance system
zabbix
ELK Stack
Open-Falcon
Prometheus
victoriaMetrics
Web
apache
Tomcat
Nginx
自动化
Puppet
Ansible
saltstack
Proxy
HAproxy
Lvs
varnish
更多
互联咨询
最后的净土
软件交付
持续集成
gitops
devops
登录
Search
标签搜索
kubernetes
docker
zabbix
Golang
mariadb
持续集成工具
白话容器
linux基础
nginx
elk
dockerfile
Gitlab-ci/cd
最后的净土
基础命令
jenkins
docker-compose
gitops
haproxy
saltstack
Istio
marksugar
累计撰写
676
篇文章
累计收到
140
条评论
首页
栏目
ops
Openvpn
Sys Basics
rsync
Mail
NFS
Other
Network
HeartBeat
server 08
Code
Awk
Shell
Python
Golang
virtualization
KVM
Docker
openstack
Xen
kubernetes
kubernetes-cni
Service Mesh
Data
Mariadb
PostgreSQL
MongoDB
Redis
MQ
Ceph
TimescaleDB
kafka
surveillance system
zabbix
ELK Stack
Open-Falcon
Prometheus
victoriaMetrics
Web
apache
Tomcat
Nginx
自动化
Puppet
Ansible
saltstack
Proxy
HAproxy
Lvs
varnish
更多
互联咨询
最后的净土
软件交付
持续集成
gitops
devops
页面
About Me
推荐
weibo
github
搜索到
6
篇与
的结果
2015-12-07
heartbeat部署初始化
部署:假设两台服务器linuxea-1-1/linuxea-1-2,其实际IP分别为10.0.0.7(linuxea-1-1机器),10.0.0.8(linuxea-1-2机器)配置目标:要求heartbeat服务启动后,linuxea-1-1机器上初始启动VIP:10.0.0.7,linuxea-1-2机器上初始启动VIP:10.0.0.8,一旦服务器linuxea-1-1或者linuxea-1-2任意一台机器宕机,在宕机的机器上初始启动的虚拟VIP将会自动切换到在运转正常的机器上,实现了IP资源的自动接管,从而达到高可用无业务影响的目的heartbeat通过串口线或者直接通过心跳信息对服务器进行健康检查准备环境,两台主机分别执行初始化:修改主机名hostname linuxea-1-1 vim /etc/syscong/network 关闭selinux[root@linuxea-1-2 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config [root@linuxea-1-2 ~]# grep SELINUX=disabled /etc/selinux/config SELINUX=disabled [root@linuxea-1-2 ~]# setenforce 0 [root@linuxea-1-2 ~]# 关闭防火墙[root@linuxea-1-1 ~]# /etc/init.d/iptables stop iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Flushing firewall rules: [ OK ] iptables: Unloading modules: [ OK ] [root@linuxea-1-1 ~]# chkconfig iptables off [root@linuxea-1-1 ~]# chkconfig --list |grep ipt iptables 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@linuxea-1-1 ~]# 添加网络dns[root@linuxea-1-2 ~]# echo servername 180.168.255.118 >> /etc/resolv.conf [root@linuxea-1-2 ~]# echo servername 116.228.111.18 >> /etc/resolv.conf 保留开启的服务,其他的关闭#b.service startup at linux startup LANG=en for linuxea in `chkconfig --list |grep "3:on" |awk '{print $1}' |grep -vE "crond|network|sshd|rsyslog"`;do chkconfig $linuxea off;done chkconfig --list|grep “3:on” unset LANG chkconfig --list |grep "3:on" [root@linuxea-1-2 ~]# #b.service startup at linux startup [root@linuxea-1-2 ~]# LANG=en [root@linuxea-1-2 ~]# for linuxea in `chkconfig --list |grep "3:on" |awk '{print $1}' |grep -vE "crond|network|sshd|rsyslog"`;do chkconfig $linuxea off;done [root@linuxea-1-2 ~]# chkconfig --list|grep “3:on” [root@linuxea-1-2 ~]# unset LANG [root@linuxea-1-2 ~]# chkconfig --list |grep "3:on" crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@linuxea-1-2 ~]# unset LANG [root@linuxea-1-2 ~]# 字符集修改cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori echo 'LANG="zh_CN.UTF-8"'>/etc/sysconfig/i18n source /etc/sysconfig/i18n echo $LANG [root@linuxea-1-1 ~]# cp /etc/sysconfig/i18n /etc/sysconfig/i18n.ori [root@linuxea-1-1 ~]# echo 'LANG="zh_CN.UTF-8"'>/etc/sysconfig/i18n [root@linuxea-1-1 ~]# source /etc/sysconfig/i18n [root@linuxea-1-1 ~]# echo $LANG zh_CN.UTF-8 [root@linuxea-1-1 ~]# 时间同步:#d.time sync /usr/sbin/ntpdate time.nist.gov echo '#time sync by linuxea at 2010-2-1' >>/var/spool/cron/root echo '*5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root crontab -l [root@linuxea-1-2 ~]# #d.time sync [root@linuxea-1-2 ~]# /usr/sbin/ntpdate time.nist.gov 6 Dec 00:28:45 ntpdate[3701]: adjust time server 64.113.32.5 offset 0.210020 sec [root@linuxea-1-2 ~]# echo '#time sync by linuxea at 2010-2-1' >>/var/spool/cron/root [root@linuxea-1-2 ~]# echo '*5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1' >>/var/spool/cron/root[root@linuxea-1-2 ~]# crontab -l #time sync by linuxea at 2010-2-1 *5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1 [root@linuxea-1-2 ~]# 文件描述符echo '* - nofile 65535' >> /etc/security/limits.conf 使用setup新曾一个网卡,填写ip和掩码即可使用ifup eth2启动网卡。10.0.0.7的eth2 是10.0.10.710.0.0.8的eth2 是10.0.10.8[root@linuxea-1-2 ~]# setup [root@linuxea-1-2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth2 [root@linuxea-1-2 ~]# ifup eth2 设备 etj2 似乎不存在, 初始化操作将被延迟。[root@linuxea-1-2 ~]# setup [root@linuxea-1-2 ~]# ifup eth2 Determining if ip address 10.0.10.8 is already in use for device eth2... [root@linuxea-1-2 ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:77:C1:93 inet addr:10.0.0.8 Bcast:10.0.255.255 Mask:255.255.0.0 inet6 addr: fe80::20c:29ff:fe77:c193/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:405 errors:0 dropped:0 overruns:0 frame:0 TX packets:319 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:35252 (34.4 KiB) TX bytes:70093 (68.4 KiB) eth2 Link encap:Ethernet HWaddr 00:0C:29:77:C1:9D inet addr:10.0.10.8 Bcast:10.0.10.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe77:c19d/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:2 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:120 (120.0 b) TX bytes:406 (406.0 b) [root@linuxea-1-2 ~]# ping 10.0.10.7 PING 10.0.10.7 (10.0.10.7) 56(84) bytes of data. 64 bytes from 10.0.10.7: icmp_seq=1 ttl=64 time=2.67 ms 64 bytes from 10.0.10.7: icmp_seq=2 ttl=64 time=0.405 ms ^C --- 10.0.10.7 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1713ms rtt min/avg/max/mdev = 0.405/1.539/2.674/1.135 ms [root@linuxea-1-2 ~]# 两台机器的ip分别为:[root@linuxea-1-2 ~]# ping 10.0.10.7 eth1 Link encap:Ethernet HWaddr 00:0C:29:C4:E4:30 inet addr:10.0.0.7 Bcast:10.0.255.255 Mask:255.255.0.0 eth2 Link encap:Ethernet HWaddr 00:0C:29:C4:E4:3A inet addr:10.0.10.7 Bcast:10.0.10.255 Mask:255.255.255.0 eth3 Link encap:Ethernet HWaddr 00:0C:29:C4:E4:44 inet addr:10.0.20.7 Bcast:10.0.20.255 Mask:255.255.255.0 [root@linuxea-1-2 ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:77:C1:93 inet addr:10.0.0.8 Bcast:10.0.255.255 Mask:255.255.0.0 eth2 Link encap:Ethernet HWaddr 00:0C:29:77:C1:9D inet addr:10.0.10.8 Bcast:10.0.10.255 Mask:255.255.255.0 eth3 Link encap:Ethernet HWaddr 00:0C:29:77:C1:A7 inet addr:10.0.20.8 Bcast:10.0.20.255 Mask:255.255.255.0 配置hosts:/bin/cp /etc/hosts /etc/hosts.bak sed -i '/^10.0.0/d' /etc/hosts cat >>/etc/hosts<<eof 10.0.10.7 linuxea-1-1 10.0.10.8 linuxea-1-2 eof tail -2 /etc/hosts 分别在linuxea-1-1和linuxea-1-2上面分别添加对方的vip的路由[root@linuxea-1-1 ~]# route add -host 10.0.10.8 dev eth2 [root@linuxea-1-2 ~]# route add -host 10.0.10.7 dev eth2
2015年12月07日
3,407 阅读
0 评论
0 点赞
2015-12-07
heartbeat-IP地址接管和故障转移&vip/ip别名/辅助IP
IP地址接管和故障转移:heartbeat是通过IP地址接管和ARP广播进行故障转移的ARP广播:在主服务区故障时,备用节点接管资源后,会立即强制更新所有客户端本地的ARP表(即清楚客户端本地缓存的失败服务区VIP地址的解析记录),确保客户端和新的主服务器对话vip/ip别名/辅助IP1,真是IP真实IP,又称为管理IP,一般是配置在物理网卡上的实际IP,这可以看做名称,如,张三。在负载均衡及高可用环境中,管理IP是不对外提供用户访问服务的,而仅仅作为管理服务器用,如SSH可通过这个IP链接服务器!使用ifconfig查看的就是真实IP,也就是管理IP2,虚拟IP,VIP在实际环境中,需要在DNS配置中把网站域名地址解析到这个VIP地址中来虚拟IP的好处是在服务宕机后,快速的配置别名IP在cnetos7上被遗弃,centos6还是有的!(1)手动配置别名VIP:这样的别名是临时,重启即将丢失[root@localhost ~]# ifconfig eth1:0 10.0.0.100 netmask 255.255.0.0 up [root@localhost ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:C4:E4:30 inet addr:10.0.0.14 Bcast:10.0.255.255 Mask:255.255.0.0 inet6 addr: fe80::20c:29ff:fec4:e430/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:302 errors:0 dropped:0 overruns:0 frame:0 TX packets:229 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:28300 (27.6 KiB) TX bytes:26964 (26.3 KiB) eth1:0 Link encap:Ethernet HWaddr 00:0C:29:C4:E4:30 inet addr:10.0.0.100 Bcast:10.0.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 [root@localhost ~]# route add -host 10.0.0.100 dev eth1 [root@localhost ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.0.0.100 0.0.0.0 255.255.255.255 UH 0 0 0 eth1 10.0.0.0 0.0.0.0 255.255.0.0 U 1 0 0 eth1 0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth1 [root@localhost ~]# 删除down既可以[root@localhost ~]# ifconfig eth1:0 down [root@localhost ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:0C:29:C4:E4:30 inet addr:10.0.0.14 Bcast:10.0.255.255 Mask:255.255.0.0 inet6 addr: fe80::20c:29ff:fec4:e430/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:463 errors:0 dropped:0 overruns:0 frame:0 TX packets:340 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:42681 (41.6 KiB) TX bytes:39730 (38.7 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:16 errors:0 dropped:0 overruns:0 frame:0 TX packets:16 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:960 (960.0 b) TX bytes:960 (960.0 b) [root@localhost ~]# 永久生效则需要写到配置文件(2)手动查看IP,ifconfig即可,ip add也可以辅助IP辅助IP,使用ip addr add创建辅助IP[root@localhost ~]# ip addr add 10.0.0.100/23 dev eth1 [root@localhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:c4:e4:30 brd ff:ff:ff:ff:ff:ff inet 10.0.0.14/16 brd 10.0.255.255 scope global eth1 inet 10.0.0.100/23 scope global eth1 inet6 fe80::20c:29ff:fec4:e430/64 scope link valid_lft forever preferred_lft forever 删除[root@localhost ~]# ip addr del 10.0.0.100/23 dev eth1 [root@localhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:c4:e4:30 brd ff:ff:ff:ff:ff:ff inet 10.0.0.14/16 brd 10.0.255.255 scope global eth1 inet6 fe80::20c:29ff:fec4:e430/64 scope link valid_lft forever preferred_lft forever [root@localhost ~]# heartbeat2.1.4及遗弃使用的别名IP,之后使用的则是辅助ip来提供vip服务,而keepalevid一直使用辅助IP服务软件发展:从2.1.4后heartbeat分为三个不同的项目heartbeat:集群消息层,主要负责维护集群各个节点的相互通信及基本信息cluster glue:中间层,负责调度,包括两个模块:本地资源管理local resource manager LRM和stonithresource agents:资源代理层,来实现各种资源的启动,停止,监控等
2015年12月07日
3,727 阅读
0 评论
0 点赞
2015-12-06
heartbeat消息类型
heartbeat消息类型:心跳消息为约150字节的数据包,可为单薄,广播,多播的方式,控制心跳频率及出现故障要等待多久进行故障切换集群转换消息ip-request和ip-request-resp当主服务器恢复在线状态时,通过ip-request消息要求备机释放主服务器失败时备服务器取得的资源,然后备份服务器关闭服务释放主服务器失败时取得的资源及服务 备服务器释放主服务器失败时取得的资源及服务后,就会通过ip-request-resp消息通知主服务器它不在拥有该资源及服务,主服务器收到来自备节点的ip-request-resp消息通知后,启动失败时释放的资源及服务,并开始提供正常的访问服务!重传请求rexmit-request控制重传心跳请求!以上的心跳控制消息使用UDP协议发送到/etc/ha.d/ha.cf文件制定的任意端口,或制定的多播地址,如果使用默认为694心跳消息的查看:借鉴http://blog.chinaunix.net/uid-7921481-id-1617030.htmlheartbeat中,可以使用命令cl_status来查询集群心跳的相关信息。显示节点server-1所使用的心跳:[root@server-1 bin]# ./cl_status listhblinks server-1 eth1 eth0 显示节点server-1的eth0心跳状态:[root@server-1 bin]# ./cl_status hblinkstatus server-1 eth0 up 为了在mgmt下可以检查心跳状态,在mgmt/daemon/mgmt_hb.c中添加如下函数: char* on_status_of_hblinks(char* argv[], int argc) { const char * intf; const char * if_status; const char* name = NULL; char* ret = cl_strdup(MSG_OK); if (hb->llc_ops->init_nodewalk(hb) != HA_OK) { mgmt_log(LOG_ERR, "Cannot start node walk"); mgmt_log(LOG_ERR, "REASON: %s", hb->llc_ops->errmsg(hb)); cl_free(ret); return cl_strdup(MSG_FAIL); } while((name = hb->llc_ops->nextnode(hb))!= NULL) { if (strcmp(hb->llc_ops->node_type(hb,name), "ping") == 0) continue; if (strcmp(get_localnodeinfo(), name) == 0) continue; if (hb->llc_ops->init_ifwalk(hb, name) != HA_OK) { cl_log(LOG_ERR, "Cannot start heartbeat link interface walk."); cl_log(LOG_ERR, "REASON: %s", hb->llc_ops->errmsg(hb)); return cl_strdup(MSG_FAIL"\nCannot start heartbeat link interface walk"); } while ((intf = hb->llc_ops->nextif(hb))) { if_status = hb->llc_ops->if_status(hb, name, intf); if (if_status == NULL) { /* Should be error ? */ cl_log(LOG_ERR, "Cannot get heartbeat link status"); cl_log(LOG_ERR, "REASON: %s", hb->llc_ops->errmsg(hb)); return cl_strdup(MSG_FAIL"\nCannot get heartbeat link status"); } if ( STRNCMP_CONST(if_status, "dead") == 0 ) { return cl_strdup(MSG_OK"\nhas_dead"); } } if (hb->llc_ops->end_ifwalk(hb) != HA_OK) { cl_log(LOG_ERR, "Cannot end heartbeat link interface walk"); cl_log(LOG_ERR, "REASON: %s", hb->llc_ops->errmsg(hb)); return cl_strdup(MSG_FAIL"\nCannot end heartbeat link interface walk"); } } if (hb->llc_ops->end_nodewalk(hb) != HA_OK) { mgmt_log(LOG_ERR, "Cannot end node walk"); mgmt_log(LOG_ERR, "REASON: %s", hb->llc_ops->errmsg(hb)); cl_free(ret); return cl_strdup(MSG_FAIL); } return cl_strdup(MSG_OK"\ngood"); } 之后即可在mgmt中使用status_hblinks命令即可查询心跳的状态,如:[root@server-1 heartbeat-gui]# ./mgmtcmd.py status_hblinks --------------------------- ok has_dead
2015年12月06日
3,113 阅读
0 评论
0 点赞
2015-12-06
heartbeat心跳问题解决二fence思路
HA,fence是HA集群的术语,在硬件领域,fence设备其实就是一个智能电源管理设备(IPMI),Intelligent PowerManagement Interface,智能电源管理设备或远程管理卡,也是一个外部的fence,还有内部的fence,内部的是插在服务器里面的,不管是内部还是外部,这些设备都是带有以太网口的,用来在HA切换触发时通过网络重启提供资源服务的服务器!外部的fence设备,有APC的powerswitch,以太网的电源插座,用命令来指定对应的ID好进行控制关机还是重启!仲裁设备在RHCS下仲裁机制是一个仲裁盘,额外通过存储实现,比如SAN,通过mkqdisk命令来制作一个特殊设备主从服务器的投票数都是1,双方平等,当心跳有问题的时候就会发生脑列,这个仲裁盘在RHCS中是可以设置投票数的,比如你可以设置仲裁盘投票数为2,节点双方使用ping网关的方式将资金的存货状态写入仲裁盘内,一旦节点心跳发生问题,并且仲裁盘没有收到节点的存货信息,则启动fence设备来进行关闭,或者重启设备!前提都是主机无法通信(心跳问题)的时候发生1,各自ping网关,ping不通自己关机2,主备和仲裁设备连接,出问题的时候,把各自存活状态,写入到仲裁设备,由仲裁设备控制主备服务器的电源stonith,shoot the other node in the head 简写,它是hearbeat软件包的一个组件,他允许使用一个远程或智能的链接到健康服务器的电源设备自动重启失效服务器的电源,stonith设备可以关闭电源并响应软件命令,允许heartbeat的服务器可以通过串口线或者网线向stonith设备传送命令,他控制高可用服务器对其他服务器的电力供应,换句话说,主服务器可以复位备用服务器的电源,备用服务器也可以复位主服务器的电源stonith事件触发工作步骤1,当备用服务器接受不到stontih事件开始这并不意味着主服务器没有发送心跳,心跳可能有多种原因而没有抵达设备,这就是为什么建议至少需要两条物理路径传输避免出现假象的原因、2,备用服务器发出一个stonith复位命令到stonith设备3,stonith设备关闭主服务器的电力供应4,一经切断主服务器的电源,它就不能再访问集群资源,也不能再为客户端提供资源,保证客户端计算机不能访问主服务器上的资源,排除可能发生的脑列状态5,然后备用服务器获得主服务器上的资源,heartbeat用start参数运行资源脚本,并执行ARP欺骗广播以便客户端计算机发送他们的请求到网络接口上
2015年12月06日
4,090 阅读
0 评论
0 点赞
2015-12-05
heartbeat列脑的发生和防止思路
heartbeat和keeplive在实际应用中,heartbeat的功能和keepalived有很多相同之处,但在生产中,对应实际的业务应用也是有区别的,例如:keepalived主要控制IP飘逸,配置,应用简单,而heartbeat则不但可以控制ip飘逸,更擅长对资源服务控制,配置,应用比较复杂,lvs和keepalived是密切配合的一对!http://linux-ha.org/wiki/main_page熟悉相关的业务,使用串口和网线直连方式并用,防止列脑!如web,http的业务,可以网卡直连,或者网线交换机局域网的通信方式即可!A-BA和B使用串口线进行连接,不需要配置IP,传输不易出现问题。串口线对应的服务器端设备/dev/ttvS0.列脑是什么?在双主互传心跳中,备节点或双备接受不到双主活着的消息,都启动服务!主备中,正常情况下主链接数据库,接受用户请求!主节点服务器当掉,备节点启动!如果,备节点接受不到主信息时,备节点会启动VIP,启动数据库链接!这样一来,用户访问到站点,链接的仍然是主。但是有可能会链接到备节点,因为两台主机(主备)都占用同一个VIP地址,如果链接到备节点,在备节点写入数据,主节点也有数据,主备数据未同步,皆不一致。甚至写数据无法写入。这样的列脑,恢复数据都很比较困难!导致脑列发生的原因:1,心跳线链路故障2,网卡故障,ip冲突3,心跳线连接故障,交换机故障4,仲裁故障5,防火墙iptables阻挡6,配置心跳网卡地址配置错误7,其他配置不当,心跳方式不同,心跳广播冲突,软件bug等如:keepalived配置如果virtual_router_id参数,两端配置不一致,也会导致脑列问题防止列脑:1,使用多条心跳线2,当检测不到心跳强行关闭一个心跳节点,这个功能需要特殊设备支持。例如stonith,fence:备节点检测不到主节点信息,在切换的时候就会直接关闭主节点电源,干掉主节点!3,做脑列的监控报警,在问题发生时,人为第一时间介入仲裁。4,启用磁盘锁(存储设备),一个节点在使用的时候,另外一个节点是无法写入的!同时也有一定的问题,如果A节点在写入的时候挂掉,无法释放锁,B将无法写入!所以,锁的应用应该在当A挂掉后,B接手服务后上锁!5,报警在服务器自动接管之前,给人员留足够的处理时间。(在短时间内报警,服务器不接管,5分钟后接管,接管时间较长,数据不丢失,导致用户无法写入数据!当你服务器宕机是不会影响读操作)6,报警后不接管,人员手动接管,人员观察是否脑列7,增加仲裁机制。第三方设备,如:两台机器宕机后,ping网关检测,如果ping不通,则主动放弃竞争!如果ping不通也可以自行重启!8,手机短信上下行,交互式控制!9,在业务许可的情况下,主从即可!如何开发程序报警监控判断?1,“如果备节点发现有VIP立刻报警”(1)备节点正常接管(2)主节点没宕机,脑列状况2,"主服务是否异常,VIP是否切换"人员以以上两种条件来监控,进行判断是否正常切换还是列脑!
2015年12月05日
3,685 阅读
0 评论
0 点赞
1
2