标签(linux): nfs+keepalived

笔者Q:972581034 交流群:605799367。有任何疑问可与笔者或加群交流

这套解决方法案的优点是配置比较简单。容易上手,缺点是当主NFS宕机后需要约90秒的时间才能在备节点进行挂载。需要先在客户端卸载后再进行挂载,存在用户体验不好,数据丢失的问题。


主机:

backup nfs01

系统环境:

[root@backup ~]# cat /etc/redhat-release
CentOS release 6.8 (Final)
[root@backup ~]# uname -r
2.6.32-642.el6.x86_64
[root@backup ~]# /etc/init.d/iptables status
iptables: Firewall is not running.
[root@backup ~]# getenforce
Disabled

安装包

yum install keepalived -y

keepalived配置文件

###backup

global_defs {
router_id LVS_02
} vrrp_script check_nfs {
script "/server/scripts/check_nfs.sh"
interval 2
weight 2
} vrrp_instance VI_1 {
state BACKUP
interface eth1
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.1.3/16 dev eth1 label eth1:1
}
track_script {
check_nfs
}
}

###nfs01

global_defs {
router_id LVS_01
} vrrp_script check_nfs {
script "/server/scripts/check_nfs.sh"
interval 2
weight 2
} vrrp_instance VI_1 {
state MASTER
interface eth1
virtual_router_id 100
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.16.1.3/16 dev eth1 label eth1:1
}
track_script {
check_nfs
}
}

修改backup rsyncd.conf配置文件

######rsync_config_______________start
##rsyncd.conf start##
uid = www
gid = www
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /backup/
[nfsbackup]
path = /nfsbackup/
[web01backup]
path = /web01backup/
[data]
path = /data
#rsync_config_______________end

修改rsync匿名用户为www uid为888,添加一个模块/data


添加用户

useradd -s /sbin/nologin -M -u888 www
id www
mkdir /data chown -R www.www /web01backup /nfsbackup /backup /data

修改nfs01的sersync配置文件,将rsync的模块改为data

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5">
<host hostip="localhost" port="8008"></host>
<debug start="false"/>
<fileSystem xfs="false"/>
<filter start="false">
<exclude expression="(.*)\.svn"></exclude>
<exclude expression="(.*)\.gz"></exclude>
<exclude expression="^info/*"></exclude>
<exclude expression="^static/*"></exclude>
</filter>
<inotify>
<delete start="true"/>
<createFolder start="true"/>
<createFile start="false"/>
<closeWrite start="true"/>
<moveFrom start="true"/>
<moveTo start="true"/>
<attrib start="false"/>
<modify start="false"/>
</inotify> <sersync>
<localpath watch="/data">
<remote ip="172.16.1.41" name="data"/>
<!--<remote ip="192.168.8.39" name="tongbu"/>-->
<!--<remote ip="192.168.8.40" name="tongbu"/>-->
</localpath>
<rsync>
<commonParams params="-az --delete"/>
<auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/>
<userDefinedPort start="false" port="874"/><!-- port=874 -->
<timeout start="false" time="100"/><!-- timeout=100 -->
<ssh start="false"/>
</rsync>
<failLog path="/var/log/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
<crontab start="false" schedule="600"><!--600mins-->
<crontabfilter start="false">
<exclude expression="*.php"></exclude>
<exclude expression="info/*"></exclude>
</crontabfilter>
</crontab>
<plugin start="false" name="command"/>
</sersync> <plugin name="command">
<param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
<filter start="false">
<include expression="(.*)\.php"/>
<include expression="(.*)\.sh"/>
</filter>
</plugin> <plugin name="socket">
<localpath watch="/opt/tongbu">
<deshost ip="192.168.138.20" port="8009"/>
</localpath>
</plugin>
<plugin name="refreshCDN">
<localpath watch="/data0/htdocs/cms.xoyo.com/site/">
<cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
<sendurl base="http://pic.xoyo.com/cms"/>
<regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
</localpath>
</plugin>
</head>

在backup启动rpcbind nfs服务,共享/data目录

[root@backup data]# cat /etc/exports
#share /data by oldboy for bingbing at 20160425
/data/www 172.16.1.0/24(rw,sync,all_squash,anonuid=888,anongid=888)
/data/bbs 172.16.1.0/24(rw,sync,all_squash,anonuid=888,anongid=888)
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=888,anongid=888)

启动服务

chkconfig rpcbind on
chkconfig nfs on

将web服务的挂载ip改为172.16.1.3

umount -lf /application/nginx-1.10.2/html/www/uploads
umount -lf /application/nginx-1.10.2/html/bbs
umount -lf /application/nginx-1.10.2/html/blog/wp-content

NFS客户端内核优化

cat >>/etc/sysctl.conf<<EOF
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
EOF
sysctl -p

客户端挂载优化

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=131072 172.16.1.3:/data/www /application/nginx-1.10.2/html/www/uploads

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=131072 172.16.1.3:/data/bbs /application/nginx-1.10.2/html/bbs

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=131072 172.16.1.3:/data/blog /application/nginx-1.10.2/html/blog/wp-content

解决nfs服务停止keepalived不跳到backup的问题,编写脚本

[root@m01 storage]# cat check_nfs.sh
#!/bin/bash
if [ `showmount -e localhost|wc -l` -lt 4 ];then
/etc/init.d/keepalived stop
fi

启动服务,加入开机自启动

/etc/init.d/keepalived start
chkconfig keepalived on

对于keepalived脑裂问题的解决方案如下:

1.连两台服务器之间用串行电缆连接,即串口,距离2-3米。(首选)

2.用以太网电缆两网卡直连,距离可以稍远。(次选)

3.通过交机机连接(不推荐)

NFS+sersync+Keepalived高可用方案的更多相关文章

  1. nginx+keepalived 高可用方案

    nginx+keepalived 高可用方案 准备工作 192.168.157.11 192.168.157.12 安装nginx 跟新yum源文件 rpm -ivh http://nginx.org ...

  2. nginx keepalived 高可用方案(转)

    转自: https://www.cnblogs.com/leeSmall/p/9356535.html 一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含 ...

  3. Redis+Keepalived高可用方案详细分析

    背景 目前,Redis集群的官方方案还处在开发测试中,未集成到稳定版中.且目前官方开发中的Redis Cluster提供的功能尚不完善(可参考官方网站或http://www.redisdoc.com/ ...

  4. Centos下部署DRBD+NFS+Keepalived高可用环境记录

    使用NFS服务器(比如图片业务),一台为主,一台为备.通常主到备的数据同步是通过rsync来做(可以结合inotify做实时同步).由于NFS服务是存在单点的,出于对业务在线率和数据安全的保障,可以采 ...

  5. keepalived+mysql双主复制高可用方案

    MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了 ...

  6. MySQL+Keepalived实现主主高可用方案

    Mysql主主高可用方案 master配置 [root@master ~]# yum -y install keepalived [root@master ~]# vim /etc/keepalive ...

  7. 暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案

    暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案 这是悟空的第 158 篇原创文章 原文链接:首发悟空聊架构 官网:www.passjava.cn 你好,我是悟空. 前言 ...

  8. Linux搭建Nexus仓库+高可用方案

    Linux搭建nexus仓库 1.安装jdk 1.1 获取安装包,解压到指定目录: tar xf jdk.tar.gz -C /opt/export 1.2 配置环境变量: # vim /etc/pr ...

  9. Linux下"负载均衡+高可用"集群的考虑点 以及 高可用方案说明(Keepalive/Heartbeat)

    当下Linux运维技术越来越受到企业的关注和追捧, 在某些企业, 尤其是牵涉到电子商务和电子广告类的网站,通常会要求作负载均衡和高可用的Linux集群方案.那么如何实施Llinux集群架构,才能既有效 ...

随机推荐

  1. Friday for Oldboy

    计算机的硬件介绍 1.  CPU的工作流程:取指令->解码->执行 .  程序状态字寄存器(Program Status Word,PSW)中有一个二进制位控制这两种模式. 内核态:当cp ...

  2. CTF---安全杂项入门第二题 A记录

    A记录分值:20 来源: sammie 难度:中 参与人数:2255人 Get Flag:566人 答题人数:621人 解题通过率:91% 他在看什么视频,好像很好看,不知道是什么网站的. 还好我截取 ...

  3. [bzoj1969] [Ahoi2005]LANE 航线规划

    tarjan.并查集.树状数组.树链剖分. 时间倒流,变删边为加边. 先求一波边双联通分量,缩点. 题目保证最后还是整张图联通的..所以就是一棵树. 现在的操作就是,将路径上的边权置0(加边时),查询 ...

  4. 《SpringMVC从入门到放肆》四、SpringMVC配置式开发(处理器映射器)

    上一篇我们讲解了DispatcherServlet的url-pattern配置详解,今天我们来真正对SpringMVC进行配置式开发.所谓配置式开发是指“处理器类是程序员自己定义的.实现了特定接口的类 ...

  5. c++(线性结构的处理)

    我们知道,在内存中的空间都是连续的.也就是说,0x00000001下面的地址必然是0x00000002.所以,空间上是不会出现地址的突变的.那什么数据结构类型是连续内部空间呢,其实就是数组,当然也可以 ...

  6. JS实现单选按钮回显时页面效果出现,但选中单选框的值为空

    最近做了很多前端页面的工作,遇到的一个感觉很头疼的问题在这里记一下: 经常用JS回显单选框,但是明明从页面效果上来看,单选框已经被选中了,可是却不能触发单选框的change事件,取值的时候用某种方法取 ...

  7. ajax跳转到新的jsp页面

    ajax可以实现局部刷新页面,即在不刷新整个页面的情况下更新页面的局部信息. 项目中遇到一个问题:在用户列表也,当点击某个按钮时需要去查询用户的信息,查询成功跳转到用户详情界面:查询失败,则在原页面弹 ...

  8. HDU 4763 Theme Section

    题目: It's time for music! A lot of popular musicians are invited to join us in the music festival. Ea ...

  9. DOM解析原理示意

    DOM解析原理示意  

  10. 算法-java代码实现希尔排序

    希尔排序 第8节 希尔排序练习题 对于一个int数组,请编写一个希尔排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组.保证元素小于等于2000. 测试样例: [1,2 ...