【 Linux 】Keepalived实现双主模型高可用集群
要求:
1. 两台web服务器安装wordpress,数据库通过nfs共享
2. 使用keepalived实现双主模型
环境:
主机:
系统:CentOS6.7 x64
1. node1: 192.168.2.11 node2: 192.168.2.12 vip: 192.168.2.200
service iptables stop
selinux: disabled
一、两台主机分别配置lamp架构,并使用nfs实现数据库共享
[root@node1 ~]# yum install nfs-utils httpd php php-mysql mysql-server -y # yum安装软件包
[root@node1 ~]# mkdir -pv /mydata/{web,data} # 创建共享web程序和数据库目录
mkdir: 已创建目录 "/mydata"
mkdir: 已创建目录 "/mydata/web"
mkdir: 已创建目录 "/mydata/data"
[root@node1 ~]# chown -R mysql:mysql /mydata/data/
[root@node1 ~]# chown -R apache:apache /mydata/web/
[root@node1 ~]# vim /etc/exports
/mydata *(rw,no_root_squash)
[root@node1 ~]# service nfs start
启动 NFS 服务: [确定]
关掉 NFS 配额: [确定]
启动 NFS mountd: [确定]
正在启动 RPC idmapd: [确定]
正在启动 RPC idmapd: [确定]
启动 NFS 守护进程: [确定]
[root@node1 ~]# showmount -e 192.168.2.11
Export list for 192.168.2.11:
/mydata *
[root@node2 ~]# mkdir /mydata
[root@node2 ~]# mount -t nfs 192.168.2.11:/mydata/ /mydata/
[root@node2 ~]# vim /etc/fstab
# 插入如下规则
192.168.2.11:/mydata /mydata nfs defaults
[root@node1 ~]# vim /etc/my.cnf
datadir=/mydata/data # 修改mysql数据存放目录 [root@node2 ~]# vim /etc/my.cnf
datadir=/mydata/data # 修改mysql数据存放目录 [root@node1 ~]# service mysqld start # 启动数据库
[root@node1 ~]# ls /mydata/data/ # 确认是否生成数据
ibdata1 ib_logfile0 ib_logfile1 mysql test
[root@node2 ~]# service mysqld start # 第一次读取共享可能会慢点 [root@node1 ~]# wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_UTF8.zip # 下载discuz web程序
[root@node1 ~]# unzip Discuz_X3.2_SC_UTF8.zip
[root@node1 ~]# cp -a upload/* /mydata/web/ # 将web程序复制到nfs共享目录
[root@node1 ~]# chown -R apache:apache /mydata/web/ # 给与apache的执行权限
[root@node1 ~]# vim /etc/httpd/conf/httpd.conf # 修改apache配置文件
# 修改如下参数
行号
276 ServerName localhost:80 292 DocumentRoot "/mydata/web/"
317 <Directory "/mydata/web">
[root@node1 ~]# service httpd start
[root@node1 ~]# scp /etc/httpd/conf/httpd.conf node2:/etc/httpd/conf/ # 将配置文件拷贝至node2服务器
[root@node2 ~]# service httpd start
[root@node1 ~]# mysql # 创建web程序的数据库
mysql> CREATE DATABASE ultrax;
mysql> GRANT ALL ON ultrax.* TO 'ultrax'@127.0.0.1 IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES;
mysql> Bye
# node1 创建了库,node2最好重启下mysql
[root@node2 ~]# service mysqld restart
通过浏览器安装web程序
node1: 192.168.2.11
node2: 192.168.2.12
二、通过keepalived实现主备模式
[root@node1 ~]# yum install keepalived -y
[root@node1 ~]# vim /etc/keepalived/keepalived.conf
# 全部内容如下
! Configuration File for keepalived global_defs {
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server 127.0.0.1
smtp_connect_timeout
router_id nodeA
}
vrrp_script chk_httpd {
script "/etc/keepalived/bash/chk_httpd.sh"
interval
weight -
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
track_script {
chk_httpd
}
virtual_ipaddress {
192.168.2.200/
}
}
[root@node1 ~]# mkdir /etc/keepalived/bash # 创建检查脚本存放目录
[root@node1 ~]# vim /etc/keepalived/bash/chk_httpd.sh # 编写检查脚本
# 使用该脚本必须有wget命令,如没有请执行:yum install wget -y
#!/bin/bash pidfile=/var/lock/subsys/`basename $`.pid
if [ -f $pidfile ] && [ -e /proc/`cat $pidfile` ] ; then
exit
fi
trap "rm -rf $pidfile ; exit 0"
echo $$ > $pidfile
maxfails=
fails=
success= while [ ]
do /usr/bin/wget --timeout= --tries= http://192.168.2.11/ -q -O /dev/null && ping -c1 192.168.2.1 &> /dev/null
if [ $? -ne ] ; then
let fails=$[$fails+]
success=
else
fails=
let success=$[$success+]
fi if [ $fails -ge $maxfails ] ; then
fails=
success=
#check keepalived is running ? try to stop it
/etc/init.d/keepalived status | grep 正在运行
if [ $? -eq ] ; then
/usr/bin/logger -is "local service fails $maxfails times ... try to stop keepalived."
/etc/init.d/keepalived stop >& | /usr/bin/logger
fi fi if [ $success -gt $maxfails ] ; then
#check keepalived is stopped ? try to start it
/etc/init.d/keepalived status | grep 已停 # 脚本中这里要注意,如果系统是英文安装的为 grep stopped 如果是中文为 grep 已停
if [ $? -eq ] ; then
/usr/bin/logger -is "service changes normal, try to start keepalived ."
/etc/init.d/keepalived start
fi
success=
fi
sleep done [root@node1 ~]# chmod +x /etc/keepalived/bash/chk_httpd.sh
[root@node1 ~]# cd /etc/keepalived/bash/
[root@node1 bash]# sh -x chk_httpd.sh # 调试脚本,让脚本来启动keepalived 这样就做到了检查脚本的目的 [root@node1 bash]# ps uaxfww | grep keepalived | grep -v grep
root 0.0 0.1 ? Ss : : /usr/sbin/keepalived -D
root 0.0 0.2 ? S : : \_ /usr/sbin/keepalived -D
root 0.0 0.2 ? S : : \_ /usr/sbin/keepalived -D
root 0.0 0.1 ? S : : /bin/bash /etc/keepalived/bash/chk_httpd.sh
node2 安装keepalived及配置
[root@node2 ~]# yum install keepalived -y
[root@node1 ~]# scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/ #直接使用node1的配置文件覆盖并修改
[root@node1 ~]# scp -r /etc/keepalived/bash node2:/etc/keepalived/ # 将检查脚本也直接复制过去,不过需要修改,切记!
[root@node2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
notification_email {
root@localhost
}
notification_email_from root@localhost
smtp_server 127.0.0.1
smtp_connect_timeout
router_id nodeB
}
vrrp_script chk_httpd {
script "/etc/keepalived/bash/chk_httpd.sh"
interval
weight -
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
track_script {
chk_httpd
}
virtual_ipaddress {
192.168.2.200/
}
} [root@node2 bash]# vim chk_httpd.sh
# 修改如下一行代码
/usr/bin/wget --timeout= --tries= http://192.168.2.12/ -q -O /dev/null && ping -c1 192.168.2.1 &> /dev/null [root@node2 bash]# ps auxfww | grep keepalived | grep -v grep
root 0.0 0.2 ? Ss : : /usr/sbin/keepalived -D
root 0.0 0.6 ? S : : \_ /usr/sbin/keepalived -D
root 0.0 0.4 ? S : : \_ /usr/sbin/keepalived -D
root 0.0 0.2 ? S : : /bin/bash /etc/keepalived/bash/chk_httpd.sh
三、测试
node1:
[root@node1 ~]# ip a
inet 192.168.2.11/ brd 192.168.2.255 scope global eth0
inet 192.168.2.200/ scope global secondary eth0
[root@node1 ~]# service httpd stop # 停止node1的web服务 node2:
[root@node2 bash]# ip a
inet 192.168.2.12/ brd 192.168.2.255 scope global eth0
inet 192.168.2.200/ scope global secondary eth0
测试成功。
四、练习小结:
该服务器架构仅仅只是用来测试,这里存在很多问题:
1. 如果node1节点down掉了,nfs共享也就断掉了
2. keepalived也只是仅仅对http做了检测,如果mysql服务down掉,是无法进行主备切换的。
经过调整,可以使用如下架构:
【 Linux 】Keepalived实现双主模型高可用集群的更多相关文章
- KeepAlived双主模式高可用集群
keepalived是vrrp协议的实现,原生设计目的是为了高可用ipvs服务,keepalived能够配置文件中的定义生成ipvs规则,并能够对各RS的健康状态进行检测:通过共用的虚拟IP地址对外提 ...
- Keepalived+LVS+nginx搭建nginx高可用集群
1. 环境准备 1. VMware; 2. 4台CentOs7虚拟主机:192.168.122.248,192.168.122.68, 192.168.122.110, 192.168.122.167 ...
- keepalived+mysql双主复制高可用方案
MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了 ...
- activitmq+keepalived+nfs 非zk的高可用集群构建
nfs 192.168.10.32 maast 192.168.10.4 savel 192.168.10.31 应对这个需求既要高可用又要消息延迟,只能使用变态方式实现 nfs部署 #yum ins ...
- Linux 笔记 - 第十八章 Linux 集群之(一)Keepalived 高可用集群
一.前言 Linux 集群从功能上可以分为两大类:高可用集群和负载均衡集群.此处只讲高可用集群,负载均衡放在下一篇博客讲解. 高可用集群(High Availability Cluster,简称 HA ...
- Kubernetes容器集群 - harbor仓库高可用集群部署说明
之前介绍Harbor私有仓库的安装和使用,这里重点说下Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制:2)多harbor实例共享后端存储. 一.Harb ...
- 【转】harbor仓库高可用集群部署说明
之前介绍Harbor私有仓库的安装和使用,这里重点说下Harbor高可用集群方案的部署,目前主要有两种主流的Harbor高可用集群方案:1)双主复制:2)多harbor实例共享后端存储. 一.Harb ...
- LVS+Keepalived-DR模式负载均衡高可用集群
LVS+Keepalived DR模式负载均衡+高可用集群架构图 工作原理: Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能. VRRP,虚拟路由冗余协议,是针对路由器的 ...
- 基于Keepalived实现LVS双主高可用集群
Reference: https://mp.weixin.qq.com/s?src=3×tamp=1512896424&ver=1&signature=L1C7us ...
随机推荐
- LeetCode 92 ——反转链表 II
1. 题目 2. 解答 我们需要先找到第 m 个结点及其上一个结点,然后将从 m 到 n 的结点进行反转,最后依次将 m 到 n 反转后的结点和 n 之后的结点放入原链表中即可. 从前往后依次遍历 m ...
- linux中升级安装python2.7
打算自建VPN,新购买了一个虚拟服务器,centOS6.6 自带的是python2.6,因为比较习惯python2.7,所以就升级到最新的python2.7.12 首先要安装:sudo yum ins ...
- 福大软工1816:Alpha(1/10)
Alpha 冲刺 (1/10) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1.自己学习wxpy.pyqt ...
- lintcode-96-链表划分
96-链表划分 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前. 你应该保留两部分内链表节点原有的相对顺序. 样例 给定链表 1->4->3->2-&g ...
- bootstrap-table 增加序号列(支持分页)
columns: [ { checkbox: true }, { title: '序号', align: 'center', halign: 'center', formatter: function ...
- [洛谷P3937]Changing
题目大意:有 $n$ 盏灯环形排列,顺时针依次标号为 $1\cdots n$.初始时刻为 $0$ ,初始时刻第 $i$ 盏灯的亮灭 $a_i$, $0$ 表示灭, $1$ 表示亮.下一时刻每盏灯的亮灭 ...
- LA4273 Post Offices
题目戳这里. 村庄排序.状态\(f[j][i]\)表示考虑前\(i\)个村庄,造\(j\)个邮局且\(i\)造了邮局的最小代价.我们用\(Lb_i,Rb_i\)表示在第\(i\)个村庄造邮局,邮局最左 ...
- 【COGS 461】[网络流24题] 餐巾 最小费用最大流
既然是最小费用最大流我们就用最大流来限制其一定能把每天跑满,那么把每个表示天的点向T连流量为其所需餐巾,费用为0的边,然后又与每天的餐巾对于买是无限制的因此从S向每个表示天的点连流量为INF,费用为一 ...
- CentOS系统缺少库文件解决办法
By francis_hao May 31,2017 程序在编译时出现缺少库文件的提示,如下: as: error while loading shared libraries: libz. ...
- 2017福建省赛 FZU2272~2283
1.FZU2272 Frog 传送门:http://acm.fzu.edu.cn/problem.php?pid=2272 题意:鸡兔同笼通解 题解:解一个方程组直接输出就行 代码如下: #inclu ...