ansible安装drbd+nfs+keepalived

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

ansible管理机:192.168.8.35 名称:kick

tomcat主机: 192.168.8.234,192.168.8.235   

VIP  : 192.168.8.100

系统版本: Centos7.2


wKioL1lRzV2jTqQfAAAoKl49FBQ419.png-wh_50


##### 实验软件下载地址

配置文件:  http://pan.baidu.com/s/1eSou1Bs

NFS:           http://pan.baidu.com/s/1kVieBgN

DRBD:        http://pan.baidu.com/s/1nvkIxtR



######### 下载drbd 软件及模块

wget http://elrepo.reloumirrors.net/elrepo/el7/x86_64/RPMS/kmod-drbd84-8.4.6-1.el7.elrepo.x86_64.rpm

wget http://elrepo.reloumirrors.net/elrepo/el7/x86_64/RPMS/drbd84-utils-8.9.1-1.el7.elrepo.x86_64.rpm


######### 将下载软件复制到各节点中去,也可以直接下载

[root@kick ~]# ansible store -m copy -a "src=drbd84-utils-8.9.1-1.el7.elrepo.x86_64.rpm dest=/tmp/"

[root@kick ~]# ansible store -m copy -a "src=kmod-drbd84-8.4.6-1.el7.elrepo.x86_64.rpm dest=/tmp/"


######### 三步可以合一起直接yum -y install http://elrepo.reloumirrors.net/elrepo/el7/x86_64/RPMS/kmod-drbd84-8.4.6-1.el7.elrepo.x86_64.rpm

[root@kick ~]# ansible store -m shell -a "yum -y install /tmp/drbd84-utils-8.9.1-1.el7.elrepo.x86_64.rpm"

[root@kick ~]# ansible store -m shell -a "yum -y reinstall /tmp/kmod-drbd84-8.4.6-1.el7.elrepo.x86_64.rpm"


######### 加载drbd模块

[root@kick ~]# ansible store -m shell -a "modprobe drbd"


######### 查看drbd模块是否已加载上

[root@kick ~]# ansible store -m shell -a "lsmod | grep drbd"

192.168.8.235 | SUCCESS | rc=0 >>

drbd                  392583  0 

libcrc32c              12644  2 xfs,drbd


192.168.8.234 | SUCCESS | rc=0 >>

drbd                  392583  0 

libcrc32c              12644  2 xfs,drbd


# 新加一个磁盘分区不需要格式化


######### 配置drbd全局配置及资源

[root@kick ~]# ansible store -m copy -a "src=global_common.conf dest=/etc/drbd.d/"

[root@kick ~]# ansible store -m copy -a "src=mydrbd.res dest=/etc/drbd.d/"


[root@kick ~]# vim global_common.conf

global {

usage-count no;

}


common {

handlers {


pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";

}


startup {

}


options {

}


disk {

on-io-error detach;

}


net {

cram-hmac-alg "sha1";

shared-secret "xiong123";

}

syncer {

rate 1024M;

}

}

################# 资源叫mydrbd,主机名称一定要在本地的/etc/hosts中增加主机名称解析否则会报错

[root@kick ~]# vim mydrbd.res

resource mydrbd{

  device /dev/drbd0;

  disk /dev/sdb1;

  meta-disk internal;


on store1 {

  address 192.168.8.234:7789;

}


on store2 {

  address 192.168.8.235:7789;

}

}


# 更改hosts主机名称

[root@kick ~]# cat /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.8.234 store1

192.168.8.235 store2


[root@kick ~]# ansible store -m copy -a "src=/etc/hosts dest=/etc/hosts"


######### 配置mydrbd资源并启动服务,查看资源信息两个没有主的时候都是seconary

[root@kick ~]# ansible store -m shell -a "drbdadm create-md mydrbd"

[root@kick ~]# ansible store -m shell -a "systemctl start drbd"

[root@kick ~]# ansible store -m shell -a "drbd-overview"

# 随便登陆一台设置成主节点

[root@store1 ~]# drbdadm primary --force mydrbd

# 测试查看




######### 安装nfs软件,也可以直接安装nfs-utils-1.3.0-0.33.el7.x86_64.rpm 这个版本,最后有错误记录

[root@kick ~]# ansible store -m yum -a "name=nfs-utils state=installed"



######### 配置keepalived,直接使用ansible安装即可

################# 主库 ##################################

! Configuration File for keepalived


global_defs {

   notification_email {

        xiong@localhost

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

vrrp_script check_run {

        script "/etc/keepalived/notify_check.sh"

        interval 10

        weight 10

}


vrrp_instance nfs {

    state MASTER

    interface eno16780032

    virtual_router_id 70

    priority 100

    advert_int 1

    nopreempt                   # 不让它强制抢占资源

    authentication {

        auth_type PASS

        auth_pass PPVk7CXXZ5U

    }


    track_script {

        check_run weight 20                            # 检查节点信息状态,关闭keepalived,之后它会调取notify_stop 

    }


    notify_stop /etc/keepalived/notify_stop.sh         # 当节点stop后停止所有服务

    notify_master /etc/keepalived/notify_master.sh     # 当节点成为master时开启所有服务


    virtual_ipaddress {

        192.168.8.100

    }


}

################# 备库 ##################################

! Configuration File for keepalived


global_defs {

   notification_email {

        xiong@localhost

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

vrrp_script check_run {

        script "/etc/keepalived/notify_check.sh"

        interval 10

        weight 10

}


vrrp_instance nfs {

    state BACKUP

    interface eno16780032

    virtual_router_id 70

    priority 95

    advert_int 1

    nopreempt                     # 不让它强制抢占资源

    authentication {

        auth_type PASS

        auth_pass PPVk7CXXZ5U

    }


    track_script {

        check_run weight 20

    }


    notify_stop /etc/keepalived/notify_stop.sh

    notify_master /etc/keepalived/notify_master.sh


    virtual_ipaddress {

        192.168.8.100

    }


}

#############################################################


######### 配置NFS

[root@kick ~]# cat /etc/exports

/data   192.168.8.0/24(rw,async,all_squash,anonuid=2021,anongid=2020)


######### 将配置文件复制到store两个drbd服务器中

[root@kick data]# ansible store -m copy -a "src=exports dest=/etc/"


######### 创建mysql用户mysql组 后续使用

[root@kick /]# ansible store -m shell -a "groupadd -g 2020 mysql"

[root@kick /]# ansible store -m shell -a "useradd -g 2020 -u 2021 mysql -s /sbin/nologin"


[root@kick /]# ansible store -m shell -a "chown mysql.mysql /data/ -R"


######### 复制脚本文件到各节点中

[root@kick ~]# ansible store -m copy -a "src=notify_master.sh dest=/etc/keepalived/"

[root@kick ~]# ansible store -m copy -a "src=notify_stop.sh dest=/etc/keepalived/"

[root@kick ~]# ansible store -m copy -a "src=notify_check.sh dest=/etc/keepalived/"

[root@kick ~]# ansible store -m copy -a "src=keepalived_store_drbd.conf dest=/etc/keepalived/keepalived.conf"



######################### 脚本内容 #####################################################

[root@kick ~]# cat notify_master.sh      # 当keepalived为主节点时重启所有服务并设置drbd为主

#!/bin/bash

#

systemctl  start rpcbind &>/dev/null

systemctl  start nfs &>/dev/null

systemctl  start drbd &>/dev/null

/usr/sbin/drbdadm primary mydrbd &>/tmp/node_change.txt

mount /dev/drbd0 /data &>/tmp/node_change.txt



[root@kick ~]# cat notify_stop.sh # 当检测节点为back时直接停停止各项服务

#!/bin/bash

#

umount /data

systemctl  stop rpcbind &>/dev/null

systemctl  stop nfs &>/dev/null

drbdadm secondary mydrbd &>/tmp/node_change.txt

echo -e "\n" &> /tmp/node_change.txt

systemctl stop keepalived &>/dev/null


[root@kick ~]# cat notify_check.sh     # 检查服务的正常性 当NFS服务不正常时直接停止keepalived然后再调取notify_stop脚本 

#!/bin/sh


###检查nfs可用性:进程和是否能够挂载   # 备用脚本###### check使用下面那个

systemctl  status nfs &>/dev/null

if [ $? -ne 0 ];then

    ###如果服务状态不正常,先尝试重启服务

    systemctl  restart restart

    systemctl  status nfs &>/dev/null

    if [ $? -ne 0 ];then

        ###若重启nfs服务后,仍不正常

        ###卸载drbd设备

        umount /dev/drbd0

        ###将drbd主降级为备

        drbdadm secondary r0

        #关闭keepalived

systemctl  stop keepalived

    fi

fi


################################ 检查三项服务正常,当其中的任何一个不正常都直接干掉 ##################

#/bin/bash

#

systemctl  status rpcbind &>/dev/null

VAR1=$?

systemctl  status nfs &>/dev/null

VAR2=$?

systemctl  status drbd &>/dev/null

VAR3=$?


if [[ $VAR1 -ne 0 || $VAR2 -ne 0 || $VAR3 -ne 0 ]];then

        systemctl  stop rpcbind &>/dev/null

        systemctl  stop nfs &>/dev/null

        umount /data

        drbdadm secondary mydrbd &>/tmp/node_change.txt

        echo -e "\n" >> /tmp/node_change.txt

        systemctl stop keepalived

        systemctl restart drbd

fi



##########################################################################################


############## 启动服务 ###########

[root@kick data]# ansible store -m shell -a "systemctl start keepalived"

[root@kick data]# ansible store -m shell -a "systemctl start rpcbind"

[root@kick data]# ansible store -m shell -a "systemctl start nfs"

############### 配合日志查看 ############

[root@kick data]# ansible store -m shell -a "systemctl status keepalived"

[root@kick data]# ansible store -m shell -a "systemctl status nfs"

[root@kick data]# ansible store -m shell -a "cat /var/log/message"



##########################################################################################




# 检查VIP地址以及NFS是否挂载

[root@kick ~]# showmount -e 192.168.8.100

Export list for 192.168.8.100:

/data 192.168.8.0/24




################################## NFS 出现的一些错误 #################################

[root@kick ~]# mount -t nfs 192.168.8.234:/data /data

mount.nfs: access denied by server while mounting 192.168.8.234:/data


#在/etc/exports中增加insecure,http://blog.chinaunix.net/uid-20554957-id-3444786.html

/data   192.168.8.0(rw,insecure,no_root_squash,async)



[root@store1 data]# systemctl restart nfs



###### 一直报这个错 ###### 排查确认是 centos7 关于nfs 1.3.0-0.21.el7_2 版本的bug

Jun 27 09:29:52 store1 nfsdcltrack[12174]: sqlite_insert_client: insert statement prepare failed: table clients has 2 columns but 3 values were supplied


# 将版本直接升级至nfs-utils-1.3.0-0.33.el7.x86_64

# 需要的软件包 libtirpc需要大于0.2.4-0.7,libtirpc-devel,nfs-utils-1.3.0-0.33.el7

[root@kick ~]# ansible store -m copy -a "src=libtirpc-0.2.4-0.8.el7.x86_64.rpm dest=/tmp"

[root@kick ~]# ansible store -m copy -a "src=libtirpc-devel-0.2.4-0.8.el7.x86_64.rpm dest=/tmp"

[root@kick ~]# ansible store -m copy -a "src=nfs-utils-1.3.0-0.33.el7.x86_64.rpm dest=/tmp"



[root@kick ~]# ansible store -m shell -a "rpm -Uvh /tmp/libtirpc-0.2.4-0.8.el7.x86_64.rpm"

[root@kick ~]# ansible store -m shell -a "rpm -Uvh /tmp/libtirpc-devel-0.2.4-0.8.el7.x86_64.rpm"

[root@kick ~]# ansible store -m shell -a "rpm -Uvh /tmp/nfs-utils-1.3.0-0.33.el7.x86_64.rpm"




     本文转自812374156 51CTO博客,原文链接:http://blog.51cto.com/xiong51/1942319,如需转载请自行联系原作者




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
存储 Kubernetes 容器
第十章 集群安装NFS以及NFS卸载客户端和服务端
第十章 集群安装NFS以及NFS卸载客户端和服务端
116 1
|
5月前
|
Linux
Linux安装NFS挂载NFS卸载客户端服务端都有
Linux安装NFS挂载NFS卸载客户端服务端都有
128 0
|
2月前
|
存储 Ubuntu Linux
在Ubuntu 14.04上安装和配置Ansible的方法
在Ubuntu 14.04上安装和配置Ansible的方法
29 1
|
3月前
|
Serverless 网络安全 Python
Ansible原理和安装
Ansible原理和安装
44 1
|
2月前
|
JSON 运维 Ubuntu
在Ubuntu 18.04上安装和配置Ansible的方法
在Ubuntu 18.04上安装和配置Ansible的方法
37 0
|
2月前
|
JSON 运维 Linux
在CentOS 7上安装和配置Ansible的方法
在CentOS 7上安装和配置Ansible的方法
79 0
|
2月前
|
存储 Kubernetes 调度
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
使用 Kubeadm 部署 Kubernetes(K8S) 安装 -- 持久化存储(NFS网络存储)
48 0
|
3月前
|
Linux 网络安全
NFS 服务器安装
NFS(Network File System)网络文件系统,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。当我们在 NFS 服务器设置好一个共享目录后,其他的有权访问 NFS 客户端就可以将这个共享目录挂载到文件系统自定义的挂载点,挂载好后客户端在本地能够看到服务端共享目录中的所有数据
74 1
|
5月前
|
存储 运维 Shell
Ansible自动化运维工具安装和基本使用
Ansible 是一款无代理的IT自动化工具,通过SSH连接目标主机执行配置管理、应用部署和云端管理任务。它使用YAML编写的Playbook定义任务,核心组件包括Playbook、模块、主机清单、变量等。Ansible的优势在于易用、功能强大、无须在目标主机安装额外软件,并且开源。安装过程涉及配置网络源、yum安装和SSH密钥设置。通过定义主机清单和使用模块进行通信测试,确保连接成功。
218 2
Ansible自动化运维工具安装和基本使用
|
5月前
|
运维 Linux Shell
Ansible的介绍与安装
**自动化与Linux系统管理**\n\n学习自动化运维能减少手动任务的错误和遗漏,提高效率。Ansible是一款Python开发的自动化工具,支持多平台,实现批量配置、部署和命令执行。它是无代理的,通过SSH连接管理主机,无需在远程主机安装额外软件。\n\nAnsible具有跨平台、人类可读的自动化语言、描述应用状态、易版本控制、动态清单管理和与其他系统集成等优点。\n\nAnsible的工作流程包括ad-hoc和playbook模式。安装涉及配置YUM源、EPEL源,然后通过yum或dnf安装软件包。在无网络环境下,可以下载rpm包离线安装。