搭建LVS_nat,负载均衡两个wordpress应用
实验环境:
主机A:
作为调度器
安装ipvsadm,开启核心转发
主机B:
作为RS1,提供wordpress服务,并连接后端数据库服务器获取数据。
安装httpd,php,php-mysql,wordpress
配置默认网关为DIP。
主机C:
作为RS2,提供wordpress服务,并连接后端数据库服务器获取数据。
安装httpd,php,php-mysql,wordpress
配置默认网关为DIP。
主机D:
作为数据库服务器,提供mariadb服务,以及NFS服务。
安装mariadb-server,nfs-server
事前准备
时间服务器设置 主机A:作为内部的时间服务器 安装chrony 编辑配置文件 vim /etc/chrony.conf allow 192.168.60.0/24 #允许本地网络的主机过来同步时间 保存配置文件并重启服务 查看时间同步状态 chronyc sources -V 与远程服务器已经同步成功了。 MS Name/IP address Stratum Poll Reach LastRx Last sample ^* ntp5.flashdance.cx 2 6 7 1 -110us[-7518us] +/- 180ms 主机B,C,D:作为时间同步客户端,向服务器同步时间 安装chrony 编辑配置文件 vim /etc/chrony.conf 禁用其他时间服务器,只添加129主机作为时间服务器。 #server 0.rhel.pool.ntp.org iburst #server 1.rhel.pool.ntp.org iburst #server 2.rhel.pool.ntp.org iburst #server 3.rhel.pool.ntp.org iburst server 192.168.60.129 iburst 重启服务 查看时间同步状态 chronyc sources -V 可见已经同步成功了。 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* www.ilinux.io 3 6 373 41 -374us[ -19ms] +/- 198ms
准备MariaDB服务器 主机D 安装Mariadb-server 安装maria_db yum install -y mariadb-server 编辑mysql配置文件 vim /etc/my.cnf.d/server.cnf [mysqld] skip_name_resolve=ON innodb_file_per_table=ON log_bin=mysql-bin 启动mariadb服务 systemctl start mariadb.service 登陆mysql服务端 mysql -uroot -p123456 创建用户 GRANT ALL ON wordpress.* TO wpuser@'192.168.%.%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES; 登陆 mysql -uwpuser -p123456 -h192.168.60.138 创建数据库 CREATE DATABASE wordpress; 重启mariadb服务。 systemctl restart mariadb.service 准备NFS文件服务器 主机D 安装NFS服务器程序 yum install -y nfs-utils 新建wpuser系统用户 useradd wpuser id wpuser uid=1000(wpuser) gid=1000(wpuser) groups=1000(wpuser) 新建共享的文件夹 mkdir /data/web/wp_photo 修改wp_photo文件夹的属主属组为apache用户 chown 48.48 /data/web/wp_photo -R 由于此文件夹用作httpd服务器的挂载目录,因此当httpd服务进程作为apache写入文件时,应该拥有此挂载目录的写权限。 修改配置文件 vim /etc/exports /data/web/wp_photos 192.168.60.0/24(rw,anonuid=48,anongid=48) #意思是允许本地局域网的主机访问此文件夹。 #并且映射为用户apache 开启nfs服务 systemctl start nfs.service 查看当前已导出的文件夹信息 #exportfs -v /data/web/wp_photos 192.168.60.0/24(sync,wdelay,hide,no_subtree_check,anonuid=1000,anongid=1000,sec=sys,rw,secure,root_squash,no_all_squash) ###其他客户端挂载此文件夹#### 挂载NFS文件系统 安装nfs客户端 yum install -y nfs-utils 运行挂载命令 mount -t nfs -rw 192.168.60.138:/data/web/wp_photo /web/host/wp_photo/ 查看挂载信息 192.168.60.138:/data/web/www/blog on /data/web/www type nfs (rw,vers=4,addr=192.168.60.138,clientaddr=192.168.60.132)
准备httpd服务器(基于php-module方式实现) 主机B yum install -y httpd httpd-tools yum install -y php php-mysql 配置httpd 编辑主配置文件 vim /etc/httpd/conf/httpd.conf 禁用DocumentRoot选项 #DocumentRoot "/var/www/html" 启用NameVirtualHost选项,使用默认80端口 # Use name-based virtual hosting. # NameVirtualHost *:80 编辑虚拟主机的配置文件 vim /etc/httpd/conf.d/blog.conf
ServerName 192.168.60.132
DocumentRoot "/data/web/www"
Options None
AllowOverride None
Order allow,deny
Allow from all
CustomLog "logs/www1/access_log" combined
ErrorLog "logs/www1/error_log"
LogLevel info
SetHandler server-status
AuthType basic
AuthName "Admin area,plz enter username and password."
AuthUserFIle "/etc/httpd/conf.d/.htpasswd"
Require user tom jack
ExtendedStatus On
编辑测试页
vim /data/web/www/index.html
重启httpd服务
service httpd start
主机C
##配置过程同上##
设置主机B,C的网关为129主机
重启网络服务
systemctl restart network
准备调度器 主机A 测试能否访问各个RS curl http://192.168.60.132/index.html curl http://192.168.60.137/index.html 安装ipvsadm 打开核心转发 sysctl -w net.ipv4.ip_forward=1 ~]# sysctl -w net.ipv4.ip_forward=1 net.ipv4.ip_forward = 1 VIP地址为:10.0.71.116 #模拟成公网地址。 DIP:192.168.60.129 配置规则 ipvsadm -A -t 10.0.71.116:80 -s rr ipvsadm -a -t 10.0.71.116:80 -r 192.168.60.132 -m ipvsadm -a -t 10.0.71.116:80 -r 192.168.60.137 -m ipvsadm -Ln [root@129 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.71.116:80 rr -> 192.168.60.132:80 Masq 1 0 0 -> 192.168.60.137:80 Masq 1 0 0 使用客户端测试访问: curl http://10.0.71.116/index.html for %i in (1,2,3,4,5,6,7,8,9,10) do curl http://10.0.71.116/index.html -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.71.116:80 rr -> 192.168.60.132:80 Masq 1 0 32 -> 192.168.60.137:80 Masq 1 0 32
部署wordpress服务 主机B上部署 下载word_press_blog.tar.gz,并放在/web/host文件夹下 解压缩文件 tar xf word_press_blog.tar.gz cd blog 编辑wordpress配置文件 vim wp-config.php 测试访问效果: 看到此页面说明wordpress可以正常运行。 主机C上部署 复制wordpress安装文件到网页的根目录,并修改好数据库的账户和密码。 测试访问: 看到此页面说明wordpress可以正常运行。 填写管理员信息 注意:要设置里面把网站的url改成VIP的地址 否则无法上传图片和,发表文章。 配置图片上传文件夹 把wp-content的目录以及其下的文件的属主属组都修改为apache # mkdir wp-content/uploads [root@132 blog]# chown apache.apache wp-content -R [root@132 blog]# ll wp-content total 20 -rw-r--r-- 1 apache apache 28 Jan 9 2012 index.php drwxr-xr-x 4 apache apache 4096 Jan 11 18:02 languages drwxr-xr-x 3 apache apache 4096 Jan 11 18:00 plugins drwxr-xr-x 5 apache apache 4096 Jan 11 18:02 themes drwxr-xr-x 2 apache apache 4096 May 25 09:51 uploads ####把图片上传目录uploads使用NFS文件服务器提供#### 运行挂载命令 mount -t nfs -rw 192.168.60.138:/data/web/wp_photo /data/web/www/blog/wp-content/uploads 把主机B和主机C的uploads目录都挂载为138NFS文件服务器的/data/web/wp_photo目录。 从而可以实现:上传的图片,在2个httpd服务器上面,都可以浏览。
LVS_nat模式总结要点
时间服务器设置 主机A:作为内部的时间服务器 安装chrony 编辑配置文件 vim /etc/chrony.conf allow 192.168.60.0/24 #允许本地网络的主机过来同步时间 保存配置文件并重启服务 查看时间同步状态 chronyc sources -V 与远程服务器已经同步成功了。 MS Name/IP address Stratum Poll Reach LastRx Last sample ^* ntp5.flashdance.cx 2 6 7 1 -110us[-7518us] +/- 180ms 主机B,C,D:作为时间同步客户端,向服务器同步时间 安装chrony 编辑配置文件 vim /etc/chrony.conf 禁用其他时间服务器,只添加129主机作为时间服务器。 #server 0.rhel.pool.ntp.org iburst #server 1.rhel.pool.ntp.org iburst #server 2.rhel.pool.ntp.org iburst #server 3.rhel.pool.ntp.org iburst server 192.168.60.129 iburst 重启服务 查看时间同步状态 chronyc sources -V 可见已经同步成功了。 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* www.ilinux.io 3 6 373 41 -374us[ -19ms] +/- 198ms
准备MariaDB服务器 主机D 安装Mariadb-server 安装maria_db yum install -y mariadb-server 编辑mysql配置文件 vim /etc/my.cnf.d/server.cnf [mysqld] skip_name_resolve=ON innodb_file_per_table=ON log_bin=mysql-bin 启动mariadb服务 systemctl start mariadb.service 登陆mysql服务端 mysql -uroot -p123456 创建用户 GRANT ALL ON wordpress.* TO wpuser@'192.168.%.%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES; 登陆 mysql -uwpuser -p123456 -h192.168.60.138 创建数据库 CREATE DATABASE wordpress; 重启mariadb服务。 systemctl restart mariadb.service 准备NFS文件服务器 主机D 安装NFS服务器程序 yum install -y nfs-utils 新建wpuser系统用户 useradd wpuser id wpuser uid=1000(wpuser) gid=1000(wpuser) groups=1000(wpuser) 新建共享的文件夹 mkdir /data/web/wp_photo 修改wp_photo文件夹的属主属组为apache用户 chown 48.48 /data/web/wp_photo -R 由于此文件夹用作httpd服务器的挂载目录,因此当httpd服务进程作为apache写入文件时,应该拥有此挂载目录的写权限。 修改配置文件 vim /etc/exports /data/web/wp_photos 192.168.60.0/24(rw,anonuid=48,anongid=48) #意思是允许本地局域网的主机访问此文件夹。 #并且映射为用户apache 开启nfs服务 systemctl start nfs.service 查看当前已导出的文件夹信息 #exportfs -v /data/web/wp_photos 192.168.60.0/24(sync,wdelay,hide,no_subtree_check,anonuid=1000,anongid=1000,sec=sys,rw,secure,root_squash,no_all_squash) ###其他客户端挂载此文件夹#### 挂载NFS文件系统 安装nfs客户端 yum install -y nfs-utils 运行挂载命令 mount -t nfs -rw 192.168.60.138:/data/web/wp_photo /web/host/wp_photo/ 查看挂载信息 192.168.60.138:/data/web/www/blog on /data/web/www type nfs (rw,vers=4,addr=192.168.60.138,clientaddr=192.168.60.132)
准备httpd服务器(基于php-module方式实现) 主机B yum install -y httpd httpd-tools yum install -y php php-mysql 配置httpd 编辑主配置文件 vim /etc/httpd/conf/httpd.conf 禁用DocumentRoot选项 #DocumentRoot "/var/www/html" 启用NameVirtualHost选项,使用默认80端口 # Use name-based virtual hosting. # NameVirtualHost *:80 编辑虚拟主机的配置文件 vim /etc/httpd/conf.d/blog.conf
准备调度器 主机A 测试能否访问各个RS curl http://192.168.60.132/index.html curl http://192.168.60.137/index.html 安装ipvsadm 打开核心转发 sysctl -w net.ipv4.ip_forward=1 ~]# sysctl -w net.ipv4.ip_forward=1 net.ipv4.ip_forward = 1 VIP地址为:10.0.71.116 #模拟成公网地址。 DIP:192.168.60.129 配置规则 ipvsadm -A -t 10.0.71.116:80 -s rr ipvsadm -a -t 10.0.71.116:80 -r 192.168.60.132 -m ipvsadm -a -t 10.0.71.116:80 -r 192.168.60.137 -m ipvsadm -Ln [root@129 ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.71.116:80 rr -> 192.168.60.132:80 Masq 1 0 0 -> 192.168.60.137:80 Masq 1 0 0 使用客户端测试访问: curl http://10.0.71.116/index.html for %i in (1,2,3,4,5,6,7,8,9,10) do curl http://10.0.71.116/index.html -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.71.116:80 rr -> 192.168.60.132:80 Masq 1 0 32 -> 192.168.60.137:80 Masq 1 0 32
部署wordpress服务 主机B上部署 下载word_press_blog.tar.gz,并放在/web/host文件夹下 解压缩文件 tar xf word_press_blog.tar.gz cd blog 编辑wordpress配置文件 vim wp-config.php 测试访问效果: 看到此页面说明wordpress可以正常运行。 主机C上部署 复制wordpress安装文件到网页的根目录,并修改好数据库的账户和密码。 测试访问: 看到此页面说明wordpress可以正常运行。 填写管理员信息 注意:要设置里面把网站的url改成VIP的地址 否则无法上传图片和,发表文章。 配置图片上传文件夹 把wp-content的目录以及其下的文件的属主属组都修改为apache # mkdir wp-content/uploads [root@132 blog]# chown apache.apache wp-content -R [root@132 blog]# ll wp-content total 20 -rw-r--r-- 1 apache apache 28 Jan 9 2012 index.php drwxr-xr-x 4 apache apache 4096 Jan 11 18:02 languages drwxr-xr-x 3 apache apache 4096 Jan 11 18:00 plugins drwxr-xr-x 5 apache apache 4096 Jan 11 18:02 themes drwxr-xr-x 2 apache apache 4096 May 25 09:51 uploads ####把图片上传目录uploads使用NFS文件服务器提供#### 运行挂载命令 mount -t nfs -rw 192.168.60.138:/data/web/wp_photo /data/web/www/blog/wp-content/uploads 把主机B和主机C的uploads目录都挂载为138NFS文件服务器的/data/web/wp_photo目录。 从而可以实现:上传的图片,在2个httpd服务器上面,都可以浏览。
LVS_nat模式总结要点
- 调度器的核心转发必须打开
- RS的网关需要需要指明调度器的DIP
- 要确保RS的AMP功能能够正常实现。
- 要使httpd服务器的服务读写挂载文件夹的要点是
- NFS文件服务器的挂载文件夹的文件系统权限要设置好
- 要把导出的文件夹的属主属组设置为apache用户的UID和GID
- 此处的apache用户的UID和GID要以httpd服务器的为准
- 要把导出的文件夹的nfs服务权限要指定好。(在/etc/exports配置文件中设置。)
- httpd服务器的挂载点的文件系统权限要设置好
- 挂载点的属主属组要设置为apache用户。
- 客户端端要安装NFS客户端的程序,才能挂载nfs文件系统。
- 一定要在WP设置中把站点url设置为调度器的VIP
- 要设置好Mariadb服务的用户和密码,以及数据库。(在wp-config.php中设置)
- 如果出现不能创建文件的情况,要留意是不是文件系统的属主和属组要改成apache。
- 要在配置文件中添加不反解ip的项目。
- 创建要wordpress的用户,以及数据库。
- 客户端要安装mariadbd客户端程序。