基于corosync和NFS服务器实现LNMP的高可用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

一、实验拓扑

 二、实验说明

  该试验是基于corosync和NfS服务器实现了LNMP的高可用,当一个节点出现故障时,所有的资源会自动转移到另一节点,从而能够正常提供服务

三、实验准备


 
 
  1. 1.修改两台主机名使其uname -n的保持一致 
  2.        #vim /etc/sysconfig/network 修改为 hostname=node1 
  3.        #hostname node1 
  4.        #unanme -n 
  5.  2.修改hosts文件,因为高可用集群服务的解析依赖与自己的hosts文件 
  6.        编辑Director1、2的/etc/hosts文件,添加如下内容 
  7.        172.16.29.1  node1 
  8.        172.16.29.2  node2 
  9.  3.配置系统时间,使两台的时间保持一致 
  10.  4.配置Director的ssh,以实现双机互信 
  11.       node1 
  12.        #ssh-keygen -t rsa 
  13.        #ssh-copy-id -i .ssh/id_rsa.pub root@node2 
  14.        #ssh node2 'ifconfig' 测试连接 
  15.     node2 
  16.        #ssh-keygen -t rsa 
  17.        #ssh-copy-id -i .ssh/id_rsa.pub root@node1 
  18.        #ssh node1 'ifconfig' 测试连接 

四、实验步骤

配置NFS共享服务


 
 
  1. .创建逻辑卷 
  2. #fdisk /dev/sda  
  3. #partprobe /dev/sda  
  4. #pvcreate /dev/sda5  
  5. #vgcreate myvg /dev/sda5   
  6. #lvcreate -n mylv -L 10G myvg  
  7. #mke2fs -j /dev/myvg/mylv  
  8. 2.创建共享目录并开机自动挂载逻辑卷 
  9. #mkdir /mydata                   //创建共享目录  
  10. #vim /etc/fstab                  //开机自动挂载  
  11.      /dev/myvg/mydata        /mydata         ext3    defaults        0 0  
  12. 3.添加mysql用户 
  13. #groupadd -g 306 -r mysql  
  14. useradd -g mysql -r -u 306 mysql  
  15. #chown mysql:mysql /mydata       //修改共享目录的属主属组为mysql  
  16. 4.添加共享 
  17.  #vim /etc/exports                 
  18.   /mydata    172.16.29.1(rw,no_root_squash) 172.16.29.2(rw,no_root_squash)  
  19. #exportfs -ra                     //导出共享目录   
  20. #service nfs start                 //启动nfs服务  
  21. #chkconfig nfs on                   //开机自动启动  
  22. #showmount -d localhost                  //查看是否导出成功  
  23.   

配置node1和node2的LNMP

创建用户和挂载目录


 
 
  1. 添加用户,用户UID和NFS服务器上的mysql用户a的UID相同 
  2. #groupadd -g 306 -r mysql  
  3.  #usradd -g mysql -r -u 306 mysql  
  4. 2、创建目录并挂载 
  5.  #mkdir -pv /mydata/data  
  6. #chown -R mysql:mysql /mydata/data  
  7. #mount -t nfs 172.16.26.1:/sharedata  /mydata/data  
  安装mysql
    在这里需要说明一下,在节点node1上执行如下步骤后,在节点node2上不需要初始化mysql即可启动。

 
 
  1. #tar xf mysql-5.5.20-linux2.6-i686 -C /usr/local  
  2. # cd  /usr/local  
  3. #ln -sv mysql-5.5.20-linux2.6-i686  mysql //创建连接   
  4. #chown -R mysql:mysql .  
  5. #cp support-files/my-large.cnf  /etc/my.cnf  //配置文件  
  6. #vim /etc/my.cnf   
  7.      在[mysqld]处 添加datadir=/mydata/data    //添加数据存放位置  
  8. #scripts/mysql_install_db --user=mysql --datadir=/mydata/data //初始化Mysql  
  9. #chown -R root .  
  10. #cp support-files/mysql.server  /etc/rc.d/init.d/mysqld //提供mysql脚本  
  11. #servie mysqld start  
  12. #/usr/local/mysql/bin/mysql        //启动并测试mysql是否可用  
  13. #service mysqld stop                     //必须关闭,否则在节点2上无法启动  
  14. #scp /etc/my.cnf node2:/etc/my.cnf           //把mysql的配置文件复制到node2上  
  15. #scp /etc/rc.d/init.d/mysqld node2:/etc/rc.d/init.d/mysqld  //复制服务脚本  

安装nginx


 
 
  1. 1.解决依赖关系   
  2. #yum -y groupinstall "Development Libraries"   
  3. #yum -y install pcre-devel   
  4. 2.添加用户,实现以之运行nginx服务进程   
  5. # groupadd -r nginx   
  6. # useradd -r -g nginx -s /bin/false -M nginx   
  7. 3、编译安装   
  8. #tax xf nginx-1.0.4.tar.gz   
  9. #cd nginx-1.0.4   
  10. #./configure \   
  11.   --prefix=/usr \   
  12.   --sbin-path=/usr/sbin/nginx \   
  13.   --conf-path=/etc/nginx/nginx.conf \   
  14.   --error-log-path=/var/log/nginx/error.log \   
  15.   --http-log-path=/var/log/nginx/access.log \   
  16.   --pid-path=/var/run/nginx/nginx.pid  \   
  17.   --lock-path=/var/lock/nginx.lock \   
  18.   --user=nginx \   
  19.   --group=nginx \   
  20.   --with-http_ssl_module \   
  21.   --with-http_flv_module \   
  22.   --with-http_stub_status_module \   
  23.   --with-http_gzip_static_module \   
  24.   --http-client-body-temp-path=/var/tmp/nginx/client/ \   
  25.   --http-proxy-temp-path=/var/tmp/nginx/proxy/ \   
  26.   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \   
  27.   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \   
  28.   --http-scgi-temp-path=/var/tmp/nginx/scgi \   
  29.   --with-pcre   
  30. #make && make install   
  31. 提供nginx的服务脚本,脚本内容这里就不再给出
  32. #vim /etc/rc.d/init.d/nginx
  33. # chmod +x /etc/rc.d/init.d/nginx 
  34. #service nginx start 

安装php


 
 
  1. php所依赖的包,使用rpm -Uvh升级安装 
  2. libmcrypt-2.5.8-4.el5.centos.i386.rpm 
  3. libmcrypt-devel-2.5.8-4.el5.centos.i386.rpm 
  4. mhash-0.9.9-1.el5.centos.i386.rpm 
  5. mhash-devel-0.9.9-1.el5.centos.i386.rpm 
  6. libevent-2.0.17-2.i386.rpm    /memecached 
  7. libevent-devel-2.0.17-2.i386.rpm 
  8. mcrypt-2.6.8-1.el5.i386.rpm 
  9. # tar xf php-5.3.10.tar.bz2 
  10. # cd php-5.3.10 
  11. #./configure  \
  12. --prefix=/usr/local/php \
  13. --with-mysql=/usr/local/mysql \
  14. --with-openssl --enable-fpm --enable-sockets --enable-sysvshm \
  15.  --with-mysqli=/usr/local/mysql/bin/mysql_config  \
  16. --enable-mbstring --with-freetype-dir --with-jpeg-dir \
  17. --with-png-dir --with-zlib-dir \
  18. --with-libxml-dir=/usr --enable-xml  --with-mhash --with-mcrypt \
  19.  --with-config-file-path=/etc/php\
  20.  --with-config-file-scan-dir=/etc/php --with-bz2 --with-curl  \
  21. # make 
  22. # make test 
  23. # make intall 
  24. 为php提供配置文件: 
  25. # cp php.ini-production /etc/php/php.ini 
  26.  
  27. 为php-fpm提供Sysv init脚本,并将其添加至服务列表: 
  28. # cp sapi/fpm/init.d.php-fpm  /etc/rc.d/init.d/php-fpm 
  29. # chmod +x /etc/rc.d/init.d/php-fpm 
  30. # chkconfig --add php-fpm 
  31. # chkconfig php-fpm on 
  32.  
  33. 为php-fpm提供配置文件: 
  34. # cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf  
  35.  
  36. 编辑php-fpm的配置文件: 
  37. # vim /usr/local/php/etc/php-fpm.conf 
  38. 配置pm.的相关选项为你所需要的值,并启用pid文件(如下最后一行): 
  39. pm.max_children = 50 
  40. pm.start_servers = 5 
  41. pm.min_spare_servers = 2 
  42. pm.max_spare_servers = 8 
  43. pid = /usr/local/php/var/run/php-fpm.pid  
  44.  
  45. 接下来就可以启动php-fpm了: 
  46. # service php-fpm start 
  47.  
  48. 使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了): 
  49. # ps aux | grep php-fpm 

整合nginx和php


 
 
  1. 1、编辑/etc/nginx/nginx.conf,启用如下选项: 
  2. location ~ \.php$ { 
  3.             root           html; 
  4.             fastcgi_pass   127.0.0.1:9000; 
  5.             fastcgi_index  index.php; 
  6.             fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 
  7.             include        fastcgi_params; 
  8.         } 
  9.  
  10. 2、编辑/etc/nginx/fastcgi_params,添加如下行: 
  11. fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name; 
  12.  fastcgi_param SERVER_SOFTWARE nginx;
  13. 并在所支持的主页面格式中添加php格式的主页,类似如下: 
  14. location / { 
  15.             root   html; 
  16.             index  index.php index.html index.htm; 
  17.         }       
  18. # service nginx reload  //重新载入nginx的配置文件 
  19. 3、在/usr/html新建index.php的测试页面,测试php是否能正常工作: 
  20. #vim /user/html/inde.php
  21. <?php 
  22. phpinfo(); 
  23. ?> 

在两个节点上分别配置LNMP后,测试成功如下图所示

测试成功后,关闭所有服务,并卸载mysql


 
 
  1. # service nginx stop 
  2. # service mysqld stop 
  3. # service php-fpm stop 
  4. # umount /mydata/data 

安装corosync


 
 
  1.  cluster-glue-1.0.6-1.6.el5.i386.rpm     libesmtp-1.0.4-5.el5.i386.rpm  
  2. cluster-glue-libs-1.0.6-1.6.el5.i386.rpm  
  3. resource-agents-1.0.4-1.1.el5.i386.rpm  
  4. corosync-1.2.7-1.1.el5.i386.rpm           pacemaker-1.1.5-1.1.el5.i386.rpm  
  5. corosynclib-1.2.7-1.1.el5.i386.rpm    pacemaker-cts-1.1.5-1.1.el5.i386.rpm  
  6. heartbeat-3.0.3-2.3.el5.i386.rpm      pacemaker-libs-1.1.5-1.1.el5.i386.rpm  
  7. heartbeat-libs-3.0.3-2.3.el5.i386.rpm  
  8. #yum -y --nogpgcheck localinstall *.rpm  
  9. # cd /etc/corosync   
  10.    # cp corosync.conf.example corosync.conf   
  11.    # vim corosync.conf  添加如下内容   
  12.     service {   
  13. ver:  0   
  14. name: pacemaker   
  15. # use_mgmtd: yes   
  16.      }   
  17.     aisexec {   
  18. user:   root   
  19. group:  root   
  20.        }   
  21.      并设定此配置文件中 bindnetaddr后面的IP地址为你的网卡所在网络的网络地址   
  22.      我们这里设定为 bindnetaddr:172.16.0.0   
  23.         to_logfile: yes     
  24.         to_syslog: no      //关闭系统日志文件   
  25.        logfile: /var/log/cluster/corosync.log   
  26.        secauth: on         //启用认证   
  27. # corosync-keygen        //生成节点间的密钥文件   
  28. # scp -p corosync authkey  node2:/etc/corosync/   //复制文件到Director2上   
  29. # mkdir /var/log/cluster                          //创建日志所用到的目录   
  30. # ssh node2  'mkdir /var/log/cluster'   

配置集群的工作属性


 
 
  1. 修改忽略quorum不能满足的集群状态检查: 
  2. # crm configure property no-quorum-policy=ignore 
  3. 禁用stonith 
  4. # crm configure property stonith-enabled=false 

添加资源


 
 
  1. #crm 
  2. crm(live)#configure 
  3. primitive mynfs ocf:heartbeat:Filesystem \ 
  4.     params device="172.16.26.1:/sharedata" \
  5. directory="/mydata/data" fstype="nfs" \ 
  6.     op start interval="0" timeout="60s" \ 
  7.     op stop interval="0" timeout="60s" 
  8. primitive mysqld lsb:mysqld 
  9. primitive vip ocf:heartbeat:IPaddr \ 
  10.     params ip="172.16.200.1" 
  11. colocation mysqd_and_mynfs_vip inf: mysqld mynfs vip 
  12. order mysqld_after_mynfs inf: mynfs mysqld:start 
  13. order mysqld_after_vip inf: vip mysqld 

使用crm_mon -1 查看,结果如下图所示

然后查看node2节点的端口如下图,证明资源添加生效

在浏览器里输入VIP 查看结果如下图所示

现在模拟node2出现了故障,则所有的资源都会转移到节点node1上


 
 
  1. #crm node standby  //让节点二变成从节点

本文转自  沐木小布丁  51CTO博客,原文链接:http://blog.51cto.com/sxhxt/960606

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
存储 Linux 网络安全
Linux系统安装NFS服务器
NFS是一种网络文件系统,英文全称Network File System,通过NFS可以让不同的主机系统之间共享文件或目录。通过NFS,用户可以直接在本地NFS客户端读写NFS服务端上的文件,是非常好的共享存储工具。本篇文章将介绍如何在CentOS7上安装NFS服务器,包括服务端和客户端安装两部分。
147 0
|
7月前
|
存储 Linux 网络安全
借PVE8.0的Debian 12系统配置一下NFS服务器
借PVE8.0的Debian 12系统配置一下NFS服务器
|
7月前
|
存储 Linux 虚拟化
CentOS 7搭建NFS服务器
CentOS 7搭建NFS服务器
|
7月前
|
网络协议 Unix Linux
Centos下nfs+rpcbind实现服务器之间的文件共享
Centos下nfs+rpcbind实现服务器之间的文件共享
273 0
|
6月前
|
存储 负载均衡 网络协议
杨老师课堂之JavaWeb项目架构之NFS文件服务器
杨老师课堂之JavaWeb项目架构之NFS文件服务器
50 0
|
4月前
|
弹性计算 关系型数据库 应用服务中间件
从零基础到博主大亨!一键解锁阿里云ECS,LNMP秒搭WordPress,你的个性博文帝国,今日崛起!
【8月更文挑战第5天】随着互联网技术的发展,个人博客成为技术爱好者和内容创作者分享知识的平台。阿里云ECS以其高性能和灵活性成为搭建博客的优选。本文指导你购买配置ECS,并安装CentOS 7。通过SSH登录后,更新系统并安装LNMP环境,包括Nginx、MariaDB、PHP。配置Nginx处理PHP请求,初始化数据库并设置WordPress数据库。接着下载WordPress,解压并设置权限。最后,通过浏览器完成安装向导。利用WordPress丰富的资源定制网站,开启个性化创作之旅。记得定期备份数据,利用ECS的扩展性支持网站成长。
69 4
|
5月前
|
Java Scala C++
云计算存储问题之中心NFS服务器如何解决
云计算存储问题之中心NFS服务器如何解决
|
5月前
|
Linux 网络安全
NFS 服务器安装
NFS(Network File System)网络文件系统,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。当我们在 NFS 服务器设置好一个共享目录后,其他的有权访问 NFS 客户端就可以将这个共享目录挂载到文件系统自定义的挂载点,挂载好后客户端在本地能够看到服务端共享目录中的所有数据
86 1
|
7月前
|
存储 Linux 块存储
DRBD+Heratbeat+NFS高可用文件共享存储
DRBD+Heratbeat+NFS高可用文件共享存储
|
7月前
|
消息中间件 存储 Kafka
Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
【2月更文挑战第19天】Kafka【环境搭建 02】kafka_2.11-2.4.1 基于 zookeeper 搭建高可用伪集群(一台服务器实现三个节点的 Kafka 集群)
233 1