LNMP+WordPress架构实现
本实验创建lnmp架构,数据库采用一主两从的结构跑在docker容器内,实现主从复制,用proxysql实现读写分离;WordPress站点采用Nginx+php的结构实现高可用(10.10.10.25,10.10.10.6),wordeprss中用户上传的图片使用nfs共享存储并实现nfs高可用,两台nfs服务器之间采用inotify+rsync实现实时同步;整个集群的前端采用nginx做代理服务器接受用户请求。
搭建数据库主从复制和读写分离
本次实验在10.10.10.8上采用docker容器的方式实现mysql主从,在宿主机上安装proxysql实现读写分离。
在容器中运行三个mysql的容器,并实现主从复制
下载镜像并运行容器
1 | [root@10-10-10-8 ~]#docker image pull mysql:5.7 |
修改容器的配置文件,并实现db1做主库,db2,db3做从库。
1 | [root@10-10-10-8 ~]#docker exec -it db1 bash |
在宿主机上安装proxysql,并实现读写分离
安装启动proxysql,并在proxysql上添加所有的数据库节点
1 | [root@10-10-10-8 ~]#cat <<EOF | tee /etc/yum.repos.d/proxysql.repo |
在master上添加监控用户
1 | [root@10-10-10-8 ~]#docker exec -it db1 bash |
在proxysql上配置监控用户
1 | [root@10-10-10-8 ~]#mysql -uadmin -padmin -P6032 -h127.0.0.1 |
在proxysql上设置分组信息
1 | mysql > insert into mysql_replication_hostgroups values(10,20,"test"); |
在master节点上创建WordPress用的数据库和管理员用户
1 | mysql> create database wpdb; |
在proxysql上配置,将用户sqluser添加到mysql_users表中, default_hostgroup默认组设置为写组10,当读写分离的路由规则不符合时,会访问默认组的数据库。
1 | mysql > insert into mysql_users(username,password,default_hostgroup) values('wpuser','centos',10); |
在proxysql上配置路由规则,将select语句分离到20的读组,select语句中有一个特殊语句SELECT…FOR UPDATE它会申请写锁,应路由到10的写组
1 | mysql > insert into mysql_query_rules |
搭建web服务器
搭建两套Nginx+php服务器,并将用户上传的图片等静态资源通过nfs服务实现共享存储,nfs服务器也搭建两台,并通过inotify+rsync实现实时备份。
搭建nginx+php
本实验的web服务器有两台,以实现高可用,由于连哪个台服务器的配置并无差异,故只演示其中一台的安装配置步骤。
编译安装php-7.2.14
安装php相关依赖包
1 | ~]#yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-deve |
创建php运行用户
1 | ~]#useradd -r -s /sbin/nologin |
到官网下载php-7.2.14源码包,并编译安装
1 | [root@host-10-10-10-25 src]#pwd |
php安装好之后无需做过多配置,只需生成相关配置文件即可
1 | [root@host-10-10-10-25 etc]#pwd |
yum安装Nginx并配置反向代理
有与yum提供的包已经到1.12.2,所以采用yum安装的方式。安装好之后配置反向代理,将动态请求通过fastcgi转发至php。
1 | [root@host-10-10-10-25 etc]#yum -y install nginx |
运行WordPress
到官网下载WordPress,并放入php的工作目录中,做相应配置。
1 | [root@host-10-10-10-25 src]#pwd |
此时,lnmp+php+WordPress敬意初步搭建完成,在浏览器访问web站点即可完成WordPress的安装,下面继续剩余工作。
搭建nfs共享存储服务器
安装启动配置nfs服务器,centos7可移植接启动nfs,而centos6则需要先启动rpcbind再启动nfs。
1 | [root@10-10-10-11 ~]#yum -y install nfs |
在两个web上都将该共享目录挂载,挂载的服务器上也需要安装nfs-utils包,否则有可能导致写入性能非常差!
1 | [root@host-10-10-10-25 uploads]#mount 10.10.10.11:/nfsdata/images /usr/share/nginx/html/wp-content/uploads |