一、实验拓扑
二、实验说明
该试验是基于corosync和NfS服务器实现了LNMP的高可用,当一个节点出现故障时,所有的资源会自动转移到另一节点,从而能够正常提供服务
三、实验准备
- 1.修改两台主机名使其uname -n的保持一致
- #vim /etc/sysconfig/network 修改为 hostname=node1
- #hostname node1
- #unanme -n
- 2.修改hosts文件,因为高可用集群服务的解析依赖与自己的hosts文件
- 编辑Director1、2的/etc/hosts文件,添加如下内容
- 172.16.29.1 node1
- 172.16.29.2 node2
- 3.配置系统时间,使两台的时间保持一致
- 4.配置Director的ssh,以实现双机互信
- node1
- #ssh-keygen -t rsa
- #ssh-copy-id -i .ssh/id_rsa.pub root@node2
- #ssh node2 'ifconfig' 测试连接
- node2
- #ssh-keygen -t rsa
- #ssh-copy-id -i .ssh/id_rsa.pub root@node1
- #ssh node1 'ifconfig' 测试连接
四、实验步骤
配置NFS共享服务
- .创建逻辑卷
- #fdisk /dev/sda
- #partprobe /dev/sda
- #pvcreate /dev/sda5
- #vgcreate myvg /dev/sda5
- #lvcreate -n mylv -L 10G myvg
- #mke2fs -j /dev/myvg/mylv
- 2.创建共享目录并开机自动挂载逻辑卷
- #mkdir /mydata //创建共享目录
- #vim /etc/fstab //开机自动挂载
- /dev/myvg/mydata /mydata ext3 defaults 0 0
- 3.添加mysql用户
- #groupadd -g 306 -r mysql
- useradd -g mysql -r -u 306 mysql
- #chown mysql:mysql /mydata //修改共享目录的属主属组为mysql
- 4.添加共享
- #vim /etc/exports
- /mydata 172.16.29.1(rw,no_root_squash) 172.16.29.2(rw,no_root_squash)
- #exportfs -ra //导出共享目录
- #service nfs start //启动nfs服务
- #chkconfig nfs on //开机自动启动
- #showmount -d localhost //查看是否导出成功
配置node1和node2的LNMP
创建用户和挂载目录
- 添加用户,用户UID和NFS服务器上的mysql用户a的UID相同
- #groupadd -g 306 -r mysql
- #usradd -g mysql -r -u 306 mysql
- 2、创建目录并挂载
- #mkdir -pv /mydata/data
- #chown -R mysql:mysql /mydata/data
- #mount -t nfs 172.16.26.1:/sharedata /mydata/data
安装mysql
在这里需要说明一下,在节点node1上执行如下步骤后,在节点node2上不需要初始化mysql即可启动。
- #tar xf mysql-5.5.20-linux2.6-i686 -C /usr/local
- # cd /usr/local
- #ln -sv mysql-5.5.20-linux2.6-i686 mysql //创建连接
- #chown -R mysql:mysql .
- #cp support-files/my-large.cnf /etc/my.cnf //配置文件
- #vim /etc/my.cnf
- 在[mysqld]处 添加datadir=/mydata/data //添加数据存放位置
- #scripts/mysql_install_db --user=mysql --datadir=/mydata/data //初始化Mysql
- #chown -R root .
- #cp support-files/mysql.server /etc/rc.d/init.d/mysqld //提供mysql脚本
- #servie mysqld start
- #/usr/local/mysql/bin/mysql //启动并测试mysql是否可用
- #service mysqld stop //必须关闭,否则在节点2上无法启动
- #scp /etc/my.cnf node2:/etc/my.cnf //把mysql的配置文件复制到node2上
- #scp /etc/rc.d/init.d/mysqld node2:/etc/rc.d/init.d/mysqld //复制服务脚本
安装nginx
- 1.解决依赖关系
- #yum -y groupinstall "Development Libraries"
- #yum -y install pcre-devel
- 2.添加用户,实现以之运行nginx服务进程
- # groupadd -r nginx
- # useradd -r -g nginx -s /bin/false -M nginx
- 3、编译安装
- #tax xf nginx-1.0.4.tar.gz
- #cd nginx-1.0.4
- #./configure \
- --prefix=/usr \
- --sbin-path=/usr/sbin/nginx \
- --conf-path=/etc/nginx/nginx.conf \
- --error-log-path=/var/log/nginx/error.log \
- --http-log-path=/var/log/nginx/access.log \
- --pid-path=/var/run/nginx/nginx.pid \
- --lock-path=/var/lock/nginx.lock \
- --user=nginx \
- --group=nginx \
- --with-http_ssl_module \
- --with-http_flv_module \
- --with-http_stub_status_module \
- --with-http_gzip_static_module \
- --http-client-body-temp-path=/var/tmp/nginx/client/ \
- --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
- --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
- --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
- --http-scgi-temp-path=/var/tmp/nginx/scgi \
- --with-pcre
- #make && make install
- 提供nginx的服务脚本,脚本内容这里就不再给出
- #vim /etc/rc.d/init.d/nginx
- # chmod +x /etc/rc.d/init.d/nginx
- #service nginx start
安装php
- php所依赖的包,使用rpm -Uvh升级安装
- libmcrypt-2.5.8-4.el5.centos.i386.rpm
- libmcrypt-devel-2.5.8-4.el5.centos.i386.rpm
- mhash-0.9.9-1.el5.centos.i386.rpm
- mhash-devel-0.9.9-1.el5.centos.i386.rpm
- libevent-2.0.17-2.i386.rpm /memecached
- libevent-devel-2.0.17-2.i386.rpm
- mcrypt-2.6.8-1.el5.i386.rpm
- # tar xf php-5.3.10.tar.bz2
- # cd php-5.3.10
- #./configure \
- --prefix=/usr/local/php \
- --with-mysql=/usr/local/mysql \
- --with-openssl --enable-fpm --enable-sockets --enable-sysvshm \
- --with-mysqli=/usr/local/mysql/bin/mysql_config \
- --enable-mbstring --with-freetype-dir --with-jpeg-dir \
- --with-png-dir --with-zlib-dir \
- --with-libxml-dir=/usr --enable-xml --with-mhash --with-mcrypt \
- --with-config-file-path=/etc/php\
- --with-config-file-scan-dir=/etc/php --with-bz2 --with-curl \
- # make
- # make test
- # make intall
- 为php提供配置文件:
- # cp php.ini-production /etc/php/php.ini
- 为php-fpm提供Sysv init脚本,并将其添加至服务列表:
- # cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
- # chmod +x /etc/rc.d/init.d/php-fpm
- # chkconfig --add php-fpm
- # chkconfig php-fpm on
- 为php-fpm提供配置文件:
- # cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
- 编辑php-fpm的配置文件:
- # vim /usr/local/php/etc/php-fpm.conf
- 配置pm.的相关选项为你所需要的值,并启用pid文件(如下最后一行):
- pm.max_children = 50
- pm.start_servers = 5
- pm.min_spare_servers = 2
- pm.max_spare_servers = 8
- pid = /usr/local/php/var/run/php-fpm.pid
- 接下来就可以启动php-fpm了:
- # service php-fpm start
- 使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):
- # ps aux | grep php-fpm
整合nginx和php
- 1、编辑/etc/nginx/nginx.conf,启用如下选项:
- location ~ \.php$ {
- root html;
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
- include fastcgi_params;
- }
- 2、编辑/etc/nginx/fastcgi_params,添加如下行:
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- fastcgi_param SERVER_SOFTWARE nginx;
- 并在所支持的主页面格式中添加php格式的主页,类似如下:
- location / {
- root html;
- index index.php index.html index.htm;
- }
- # service nginx reload //重新载入nginx的配置文件
- 3、在/usr/html新建index.php的测试页面,测试php是否能正常工作:
- #vim /user/html/inde.php
- <?php
- phpinfo();
- ?>
在两个节点上分别配置LNMP后,测试成功如下图所示
测试成功后,关闭所有服务,并卸载mysql
- # service nginx stop
- # service mysqld stop
- # service php-fpm stop
- # umount /mydata/data
安装corosync
- cluster-glue-1.0.6-1.6.el5.i386.rpm libesmtp-1.0.4-5.el5.i386.rpm
- cluster-glue-libs-1.0.6-1.6.el5.i386.rpm
- resource-agents-1.0.4-1.1.el5.i386.rpm
- corosync-1.2.7-1.1.el5.i386.rpm pacemaker-1.1.5-1.1.el5.i386.rpm
- corosynclib-1.2.7-1.1.el5.i386.rpm pacemaker-cts-1.1.5-1.1.el5.i386.rpm
- heartbeat-3.0.3-2.3.el5.i386.rpm pacemaker-libs-1.1.5-1.1.el5.i386.rpm
- heartbeat-libs-3.0.3-2.3.el5.i386.rpm
- #yum -y --nogpgcheck localinstall *.rpm
- # cd /etc/corosync
- # cp corosync.conf.example corosync.conf
- # vim corosync.conf 添加如下内容
- service {
- ver: 0
- name: pacemaker
- # use_mgmtd: yes
- }
- aisexec {
- user: root
- group: root
- }
- 并设定此配置文件中 bindnetaddr后面的IP地址为你的网卡所在网络的网络地址
- 我们这里设定为 bindnetaddr:172.16.0.0
- to_logfile: yes
- to_syslog: no //关闭系统日志文件
- logfile: /var/log/cluster/corosync.log
- secauth: on //启用认证
- # corosync-keygen //生成节点间的密钥文件
- # scp -p corosync authkey node2:/etc/corosync/ //复制文件到Director2上
- # mkdir /var/log/cluster //创建日志所用到的目录
- # ssh node2 'mkdir /var/log/cluster'
配置集群的工作属性
- 修改忽略quorum不能满足的集群状态检查:
- # crm configure property no-quorum-policy=ignore
- 禁用stonith
- # crm configure property stonith-enabled=false
添加资源
- #crm
- crm(live)#configure
- primitive mynfs ocf:heartbeat:Filesystem \
- params device="172.16.26.1:/sharedata" \
- directory="/mydata/data" fstype="nfs" \
- op start interval="0" timeout="60s" \
- op stop interval="0" timeout="60s"
- primitive mysqld lsb:mysqld
- primitive vip ocf:heartbeat:IPaddr \
- params ip="172.16.200.1"
- colocation mysqd_and_mynfs_vip inf: mysqld mynfs vip
- order mysqld_after_mynfs inf: mynfs mysqld:start
- order mysqld_after_vip inf: vip mysqld
使用crm_mon -1 查看,结果如下图所示
然后查看node2节点的端口如下图,证明资源添加生效
在浏览器里输入VIP 查看结果如下图所示
现在模拟node2出现了故障,则所有的资源都会转移到节点node1上
- #crm node standby //让节点二变成从节点
本文转自 沐木小布丁 51CTO博客,原文链接:http://blog.51cto.com/sxhxt/960606