双机热备+负载均衡线上方案(Heartbeat+DRBD+NFS+Keepalived+Lnmp)

网友投稿 4444 2023-03-20

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

双机热备+负载均衡线上方案(Heartbeat+DRBD+NFS+Keepalived+Lnmp)

我们下面来实现一个架构,heartbeat+drbd+nfs实现mysql和网站数据的同步,keepalived实现nginx的高可用,而用nginx和dns轮询实现负载均衡。

架构说明

目录规划

拓扑工作原理

内网:

外网:

1,两个节点都用Nginx做均衡器,通过内网调度负载两个节点,实现内部均衡

2,DNS配置双IP对应一个域名的方式来实现DNS轮询,实现外网均衡

3,Keepalived使用双主(master)配置虚拟出两个虚拟IP:节点一 12.12.12.100和节点二 12.12.12.200,同时共外网访问,两个节点互为主从关系,当某个节点挂掉的时候,另外一个节点将同时是两个资源的master,同时拥有两个虚拟IP,实现资源转移。

我们知道DNS的缺点就是生效慢,分配资源不合理,理论上有可能把所有的请求都发送给同一节点,导致均衡不合理导致所有资源不可用,这里我们由于有了NGINX内部负载,就不怕DNS轮询不均衡了,因为NGINX内部有严谨的调度方式,不管那台请求有多少,在内部都能实现理想的调度,这样就能把DNS负载均衡和NGINX完美结合,是硬件资源得到合理的利用,然后利用keepalive保证了每个节点的可靠性,几乎完美!

架构实现

LNMP架构配置

配置LNMP架构需要注意三点:

安装配置NFS

安装配置DRBD

配置文件

DRBD有三种配置文件:

/usr/local/drbd/etc/drbd.conf

/usr/local/drbd/etc/drbd.d/*.res

最后复制这些文件到node2。

初始化DRBD资源

2、提升各个节点上的主

3、格式化drbd块设备

在node1上     mkfs.ext3 /dev/drbd1在node2上     mkfs.ext3 /dev/drbd2

在node1上 mkfs.ext3 /dev/drbd1在node2上 mkfs.ext3 /dev/drbd2

4、挂载分区

安装配置heartbeat

1、安装heartbeat

yum install heartbeat

yum install heartbeat

安装完后会自动建立用户hacluster和组haclient,确保两个节点上hacluster用户的的UID和GID相同。

2、同步两台节点的时间

rm -rf /etc/localtimecp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeyum install -y ntpntpdate -d cn.pool.ntp.org

rm -rf /etc/localtimecp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeyum install -y ntpntpdate -d cn.pool.ntp.org

3、配置/etc/ha.d/ha.cf

4、/etc/ha.d/authkeys

auth 11 crc

auth 11 crc

5、/etc/ha.d/haresources

6、创建nfs管理脚本

vi /etc/ha.d/resource.d/nfs写入     #!/bin/bash      NFSD=/etc/rc.d/init.d/nfs     NFSDPID=`/sbin/pidof nfsd`     case $1 in     start)     $NFSD start;     ;;     stop)     $NFSD stop;             if [ "$NFSDPID" != " " ];then                     for NFSPID in $NFSDPID                     do /bin/kill -9 $NFSPID;                     done             fi     ;;     *)     echo "Syntax incorrect. You need one of {start|stop }"     ;;     esac

vi /etc/ha.d/resource.d/nfs写入 #!/bin/bash NFSD=/etc/rc.d/init.d/nfs NFSDPID=`/sbin/pidof nfsd` case $1 in start) $NFSD start; ;; stop) $NFSD stop; if [ "$NFSDPID" != " " ];then for NFSPID in $NFSDPID do /bin/kill -9 $NFSPID; done fi ;; *) echo "Syntax incorrect. You need one of {start|stop }" ;; esac

先启动node1的heartbeat,再启动node2的heartbeat,启动成功后,这里有几项需要检查。

node1:

1、执行ip a,检查是否已经设置有虚拟ip 192.168.1.100

2、执行cat /proc/drbd检查状态是否正常

3、执行df -h查看/dev/drbd1是否已经挂载到/data/mysql

4、执行service mysqld status查看mysql是否已经启动

node2:

1、执行ip a查看是否已经设置虚拟ip 192.168.1.200

2、执行cat /proc/drbd检查状态是否正常

nginx均衡器配置

你可以建立index.php,里面写入:

<?phpecho $_SERVER['SERVER_ADDR'];?>

如果连续刷新几次,得到不同的IP,证明已经均衡负载到不同的服务器。

Keepalived实现nginx和php的HA

1、keepalived安装

2、配置

节点一node1配置如下:

节点二配置:

3、创建监控脚本

node1监控脚本:vi /opt/check.sh     #!/bin/bash     while  :     do     mysqlcheck=`/usr/bin/mysqladmin -uroot ping 2>&1`     mysqlcode=`echo $?`     heartbeat=`ps -C heartbeat --no-header | wc -l`     if [ $mysqlcode -ne 0 ] ;then     if [ $heartbeat-ne 0 ];then     service heartbeat stop     fi     fi     phpcheck=`ps -C php-fpm --no-header | wc -l`     nginxcheck=`ps -C nginx --no-header | wc -l`     keepalivedcheck=`ps -C keepalived --no-header | wc -l`     if [ $nginxcheck -eq 0 ]|| [ $phpcheck -eq 0 ];then                     if [ $keepalivedcheck -ne 0 ];then                        killall -TERM keepalived                     else                        echo "keepalived is stoped"                     fi             else                     if [ $keepalivedcheck -eq 0 ];then                        /etc/init.d/keepalived start                     else                        echo "keepalived is running"                     fi     fi     sleep 5     done

node1监控脚本:vi /opt/check.sh #!/bin/bash while : do mysqlcheck=`/usr/bin/mysqladmin -uroot ping 2>&1` mysqlcode=`echo $?` heartbeat=`ps -C heartbeat --no-header | wc -l` if [ $mysqlcode -ne 0 ] ;then if [ $heartbeat-ne 0 ];then service heartbeat stop fi fi phpcheck=`ps -C php-fpm --no-header | wc -l` nginxcheck=`ps -C nginx --no-header | wc -l` keepalivedcheck=`ps -C keepalived --no-header | wc -l` if [ $nginxcheck -eq 0 ]|| [ $phpcheck -eq 0 ];then if [ $keepalivedcheck -ne 0 ];then killall -TERM keepalived else echo "keepalived is stoped" fi else if [ $keepalivedcheck -eq 0 ];then /etc/init.d/keepalived start else echo "keepalived is running" fi fi sleep 5 done

node2监控脚本:#!/bin/bashwhile  :dophpcheck=`ps -C php-cgi --no-header | wc -l`nginxcheck=`ps -C nginx --no-header | wc -l`keepalivedcheck=`ps -C keepalived --no-header | wc -l`if [ $nginxcheck -eq 0 ]|| [ $phpcheck -eq 0 ];then                if [ $keepalivedcheck -ne 0 ];then                   killall -TERM keepalived                else                   echo "keepalived is stoped"                fi        else                if [ $keepalivedcheck -eq 0 ];then                   /etc/init.d/keepalived start                else                   echo "keepalived is running"                fifisleep 5done

node2监控脚本:#!/bin/bashwhile :dophpcheck=`ps -C php-cgi --no-header | wc -l`nginxcheck=`ps -C nginx --no-header | wc -l`keepalivedcheck=`ps -C keepalived --no-header | wc -l`if [ $nginxcheck -eq 0 ]|| [ $phpcheck -eq 0 ];then if [ $keepalivedcheck -ne 0 ];then killall -TERM keepalived else echo "keepalived is stoped" fi else if [ $keepalivedcheck -eq 0 ];then /etc/init.d/keepalived start else echo "keepalived is running" fifisleep 5done

这个监控代码实现了mysql,nginx,php-fpm的HA。加上权限,并执行。

chmod +x /opt/check.shnohup sh /opt/check.sh &

chmod +x /opt/check.shnohup sh /opt/check.sh &

设置开机启动:

echo “nohup sh /opt/check.sh &” >> /etc/rc.local

echo “nohup sh /opt/check.sh &” >> /etc/rc.local

4、测试keepalived

分别启动keepalived

service keepalived start

service keepalived start

1)执行ip a检查node1和node2是否已经存在vip:12.12.12.100和12.12.12.200

2)测试nginx和php-fpm的HA。在node1执行service nginx stop或者service php-fpm stop停止nginx或php-fpm,过几秒钟后你会发现node2已经接管了vip 12.12.12.100,并且使用vip 12.12.12.100或12.12.12.200浏览nginx网页你会发现网页显示的IP一直是192.168.1.20,表明keepalived已经成功接管node1的vip和nginx或php-fpm服务。

3)测试mysql HA。在node1执行service mysqld stop停止mysql服务,几秒后在node2查看,发现node2已经接管vip 192.168.1.100,并且已经启动mysql服务。

注意:在恢复mysql或nginx,php-fpm时,先停止监控脚本,要不heartbeat或keepalived还没实现接管又被停止。

上一篇:码农代码审计:php漏洞
下一篇:DRBD的编译安装与配置文档
相关文章

 发表评论

暂时没有评论,来抢沙发吧~