linux keepalived双主模式,【 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.11Export listfor 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 0 0

[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

[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程序

1b23938d6e70f36bc8f732160005e3b7.png

node1: 192.168.2.11

02e7197635865c14fce2b2ae22228c22.png

node2: 192.168.2.12

8ef6e69c9441792f576fb55cf825c972.png

二、通过keepalived实现主备模式

[root@node1 ~]# yum install keepalived -y

[root@node1~]# vim /etc/keepalived/keepalived.conf

# 全部内容如下! Configuration File forkeepalived

global_defs {

notification_email {

root@localhost

}

notification_email_from root@localhost

smtp_server127.0.0.1smtp_connect_timeout30router_id nodeA

}

vrrp_script chk_httpd {

script"/etc/keepalived/bash/chk_httpd.sh"interval5weight-10}

vrrp_instance VI_1 {

state MASTERinterfaceeth0

virtual_router_id51priority100advert_int1authentication {

auth_type PASS

auth_pass1111}

track_script {

chk_httpd

}

virtual_ipaddress {192.168.2.200/24}

}

[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 $0`.pidif [ -f $pidfile ] && [ -e /proc/`cat $pidfile` ] ; then

exit1fi

trap"rm -rf $pidfile ; exit 0" 1 2 3 15echo $$>$pidfile

maxfails=3fails=0success=0

while [ 1]do

/usr/bin/wget --timeout=3 --tries=1 http://192.168.2.11/ -q -O /dev/null && ping -c1 192.168.2.1 &> /dev/null

if [ $? -ne 0] ; then

let fails=$[$fails+1]

success=0

elsefails=0let success=$[$success+1]

fiif [ $fails -ge $maxfails ] ; then

fails=0success=0#check keepalivedis running ? tryto stop it/etc/init.d/keepalived status |grep 正在运行if [ $? -eq 0] ; then/usr/bin/logger -is "local service fails $maxfails times ... try to stop keepalived."

/etc/init.d/keepalived stop 2>&1 | /usr/bin/logger

fi

fiif [ $success -gt $maxfails ] ; then

#check keepalivedis stopped ? tryto start it/etc/init.d/keepalived status |grep 已停    # 脚本中这里要注意,如果系统是英文安装的为 grep stopped 如果是中文为 grep 已停if [ $? -eq 0] ; then/usr/bin/logger -is "service changes normal, try to start keepalived ."

/etc/init.d/keepalived start

fi

success=0fi

sleep3done

[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

root26552 0.0 0.1 109656 1112 ? Ss 22:35 0:00 /usr/sbin/keepalived -D

root26555 0.0 0.2 111760 2776 ? S 22:35 0:00 \_ /usr/sbin/keepalived -D

root26556 0.0 0.2 111760 2128 ? S 22:35 0:00 \_ /usr/sbin/keepalived -D

root26569 0.0 0.1 106092 1284 ? S 22:35 0:00 /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 forkeepalived

global_defs {

notification_email {

root@localhost

}

notification_email_from root@localhost

smtp_server127.0.0.1smtp_connect_timeout30router_id nodeB

}

vrrp_script chk_httpd {

script"/etc/keepalived/bash/chk_httpd.sh"interval5weight-10}

vrrp_instance VI_1 {

state BACKUPinterfaceeth0

virtual_router_id51priority99advert_int1authentication {

auth_type PASS

auth_pass1111}

track_script {

chk_httpd

}

virtual_ipaddress {192.168.2.200/24}

}

[root@node2 bash]# vim chk_httpd.sh

# 修改如下一行代码16 /usr/bin/wget --timeout=3 --tries=1 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

root3442 0.0 0.2 110276 1380 ? Ss 02:18 0:00 /usr/sbin/keepalived -D

root3444 0.0 0.6 112380 2980 ? S 02:18 0:00 \_ /usr/sbin/keepalived -D

root3446 0.0 0.4 112380 2192 ? S 02:18 0:00 \_ /usr/sbin/keepalived -D

root3454 0.0 0.2 106064 1420 ? S 02:18 0:00 /bin/bash /etc/keepalived/bash/chk_httpd.sh

三、测试

node1:

[root@node1~]# ip a

inet192.168.2.11/24 brd 192.168.2.255 scope globaleth0

inet192.168.2.200/24 scope global secondary eth0

1dd563b7e4b9c68ab784638abc5f8f57.png

[root@node1 ~]# service httpd stop # 停止node1的web服务

node2:

[root@node2 bash]# ip a

inet192.168.2.12/24 brd 192.168.2.255 scope globaleth0

inet192.168.2.200/24 scope global secondary eth0

298efba163472efe59f575a41233e1bc.png

测试成功。

四、练习小结:

该服务器架构仅仅只是用来测试,这里存在很多问题:

1. 如果node1节点down掉了,nfs共享也就断掉了

2. keepalived也只是仅仅对http做了检测,如果mysql服务down掉,是无法进行主备切换的。

经过调整,可以使用如下架构:

36a0ff77468fc026e8851080d4d28850.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值