Record Server Load balancer web Service requests based on DNS
As a forum site: There are two types of data to be processed:
1. structured data, such as user names and user comments, can be stored in relational databases. 2. unstructured data, such as attachments uploaded by users. Stored in the file system.
Forum architecture:
Use two httpd servers to serve users' access requests. Use the record of DNS for customer access to the two servers. Php serves as the httpd module.
Shows the Forum architecture:
1. Set up an NFS file sharing server.
Key Point: ensure that the processes of the two httpd servers 192.168.60.99 and 192.168.60.40 can write data to the Shared File System (directory.
1. Create a shared directory.
[Root @ nfs ~] # Vim/etc/exports [root @ nfs ~] # Cat/etc/exports/web192.168.60.0/24 (rw, no_root_squash)
Note: users in the 192.168.60.0 network segment can mount directories shared by NFS.
2. Two httpd servers try to mount the NFS shared directory.
(1) httpd A (192.168.60.99): Server Mount/web
View the directory shared by the NFS server (File System)
[Root @ stu13 ~] # Showmount-e192.168.60.88Exportlistfor192.168.60.88:/web192.168.60.0/24
Mount shared directory
[Root @ stu13 ~] # Mount-tnfs192.168.60.88: // web/mnt/nfs/
Check whether the disk is mounted.
[Root @ stu13 ~] # Mount | grep "nfs [[: space:]" 192.168.60.88:/webon/mnt/nfstypenfs (rw, addr = 192.168.60.88)
(2) httpd B (192.168.60.40): the server is also mounted:/web
View the directory shared by the NFS server (File System)
[Root @ localhost ~] # Showmount-e192.168.60.88Exportlistfor192.168.60.88:/web192.168.60.0/24
Mount shared directory
[Root @ localhost ~] # Mount-tnfs192.168.60.88: // web/mnt/nfs/
Check whether the mounting is successful
[Root @ localhost ~] # Mount | grep "nfs [[: space:]" 192.168.60.88:/webon/mnt/nfstypenfs (rw, addr = 192.168.60.88)
3. Create a user who uses the NFS server Shared File System (directory;
For both httpd A (192.168.60.99) and httpd B (192.168.60.40) servers: User and Group: usenfs
That is, the owner and group of the processes or threads requested by the service user are usenfs. If the user uploads attachments, data should be written to the shared file system. Therefore, we must ensure that this user can write data to the NFS shared file directory of the Shared Server.
(1) set usenfs users on httpd A and httpd B servers respectively. The user ID is 400.
[Root @ stu13 ~] # Idusenfsuid = 400 (usenfs) gid = 400 (usenfs) groups = 400 (usenfs)[Root @ localhost ~] # Useradd-u400-rusenfs [root @ localhost ~] # Idusenfsuid = 400 (usenfs) gid = 400 (usenfs) groups = 400 (usenfs)
(2) create a user with the same ID on the NFS server and require the user to have a file system (/web) shared by NFS) you have read and write permissions.
[Root @ nfs ~] # Useradd-u400-rusenfs [root @ nfs ~] # Idusenfsuid = 400 (usenfs) gid = 400 (usenfs) groups = 400 (usenfs)
Use the file authorization in the Control List
Before setting:
[Root @ nfs ~] # Getfacl/webgetfacl: Removingleading '/'fromabsolutepathnames # file: web # owner: root # group: rootuser: rwxgroup: r-xother: r-x
Note:
According to the above information, usenfs users cannot create files in this directory.
Grant permissions to a user by using the File Permission list method.
[Root @ nfs ~] # Setfacl-mu: usenfs: rwx/web [root @ nfs ~] # Getfacl/webgetfacl: Removingleading '/'authorization # file: web # owner: root # group: rootuser: rwxuser: usenfs: rwxgroup: r-xmask: rwxother :: r-x
Note:
Because the usenfs user has the rwx permission, you can create a file in this directory when you initiate a file creation process as this user.
2. Create a LAMP Platform
Note: php is used as a module to interact with httpd. The database mariadb and NFS server work on the same host 192.168.60.88.
1. Compile the httpd server software:
Both httpd servers use the same settings for source code compilation and installation.
The method is as follows:
Required software package:
Httpd-2.4.9.tar.bz2apr-util-1.4.1.tar.bz2apr-1.4.6.tar.bz2
(Httpd-2.4 version requirements: apr version must be above 1.4.
View the apr database version of the system,
[Root @ stu13admin] # ldconfig-v | grepaprlibaprutil-1.so.0-> libaprutil-1.so.0.3.9libgstdataprotocol-0.10.so.0-> libgstdataprotocol-0.10.so.0.25.0libapr-1.so.0-> libapr-1.so.0.3.9
(Because apr version is not suitable for httpd-2.4, so to upgrade apr library. Upgrade Method: rpm package and source code package. Select the source code package.
Installation: apr-1.4.6.tar.bz2 and apr-util-1.4.1.tar.bz2
Export root@stu13admin1_tar-xfapr-1.4.6.tar.bz2 [root @ stu13admin] # cdapr-1.4.6 [root@stu13apr-1.4.6] #./configure -- prefix =/usr/local/apr-1.4 [root@stu13apr-1.4.6] # make & makeinstallExport root@stu13admin1_tar-xfapr-util-1.4.1.tar.bz2 [root @ stu13admin] # cdapr-util-1.4.1 [root@stu13apr-util-1.4.1] #. /configure -- prefix =/usr/local/apr-util-1.4 -- with-apr =/usr/local/apr-1.4 [root@stu13apr-util-1.4.1] # make & makeinstall
Compile and install the httpd server
Export root@stu13admin1_tar-xfhttpd-2.4.9.tar.bz2 [root@stu13httpd-2.4.9] #. /configure \ -- prefix =/usr/local/httpd-2.4.9 \ location where the installer is stored -- sysconfdir =/etc/httpd-2.4.9 \ location where the configuration file is stored -- enable-so \ with shared Module to compile and install httpd. You can flexibly load and uninstall modules. -- Enable-ssl \ enable ssl Secure Transmission feature -- enable-cgi \ enable cgi feature -- enable-rewrite \ enable redirect feature -- with-zlib \ supports compression. Enabling this feature saves bandwidth when transferring data -- with-pcre \ encrypted -- with-apr =/usr/local/apr-1.4 \ uses the newly installed apr because the library is not exported. So specify the directory in which -- with-apr-util =/usr/local/apr-util-1.4 \ -- enable-modules = all \ install all modules -- enable-mpms-shared = all \ prefork, worker, and event are all compiled. The httpd-2.4 supports dynamic mpm switching. -- With-mpm = the default mpm used by event is: event
[Root@stu13httpd-2.4.9] # make & makeinstall
Install the encryption tool:
Install libmcrypt
Export root@stu13lamp;{tar-xflibmcrypt-2.5.8.tar.bz2 [root @ stu13lamp] # cdlibmcrypt-2.5.8 [root@stu13libmcrypt-2.5.8] #./configure -- prefix =/usr/local/libmcrypt [root@stu13libmcrypt-2.5.8] # make & makeinstall
2. Compile php
(1) Compile php
Export root@stu13admin1_tar-xfphp-5.4.26.tar.bz2 [root @ stu13admin] # cdphp-5.4.26 [root@stu13php-5.4.26] #. /configure \ -- prefix =/usr/local/php-5.4 \ php installation directory -- with-mysql = mysqlnd \ Use php built-in connection to the database driver -- with-pdo-mysql = mysqlnd \ use php built-in database connection driver -- with-mysqli = mysqlnd \ Use php built-in database connection driver -- with-openssl \ enable support for ssl -- enable-mbstring \ support for more word sets -- -freetype-dir \ -- with-jpeg-dir \ supports jpeg images -- with-png-dir \ supports images in png format -- with-libxml-dir \ supports Extended Markup Language x Ml -- enable-xml \ -- with-apxs2 =/usr/local/httpd-2.4.9/bin/apxs \ edit php to the httpd module -- with-mcrypt =/usr/local/libmcrypt \ Use encryption -- with-config-file-path =/etc/storage location of the configuration file -- with-config-file-scan-dir =/etc/php. d \ -- with-bz2 \ supports bz2 Data Compression -- enable-maintainer-zts secure thread, use httpd: event, wordker to enable this option. [Root@stu13php-5.4.26] # make & makeinstall
Copy the configuration file
# Cpphp. ini-production/etc/php. ini
(2) edit the configuration file of the httpd server to combine the httpd server with php.
Home page of index. php
<IfModuledir_module> DirectoryIndexindex.phpindex.html </IfModule>
Support for. php web pages
AddTypeapplication/x-httpd-php.phpAddTypeapplication/x-httpd-php-source.phps
Check whether the php module is enabled
[Root@stu13php-5.4.26] # grep "^ LoadModule [[: space:] php. *"/etc/httpd-2.4.9/httpd. confLoadModulephp5_modulemodules/libphp5.so
Modify the owner Group of the httpd Session Service Process
UserusenfsGroupusenfs
Modify the root of the webpage document:
DocumentRoot "/mnt/nfs" <Directory "/mnt/nfs"> Options-Indexes-FollowSymLinksAllowOverrideNoneRequireallgranted </Directory>
3. Install the mariadb database in binary format
Export-C/usr/local [root @ localhostlocal] # ln-svmariadb-5.5.36-linux-i686mysqlcreatesymboliclink 'mysql' to 'mariadb-5.5.36-linux-i686 '[root @ localhostlocal] # ll | grepmysqllrwxrwxrwx1rootroot25Aug1720
Create a mysql user. You 'd better create it as a system user.
Root @ localhostlocal] # useradd-rmysql [root @ localhostlocal] # idmysqluid = 101 (mysql) gid = 103 (mysql) groups = 103 (mysql)
Put the data directory in/mydata.
Key points:
Data redundancy: You need to make the block device that stores data into a raid combination that provides data redundancy. Data backup: You need to make the block device that stores the data into lvm. This is skipped .....
(1) modify the owner Group of the database data storage directory
[Root @ localhost/] # chownmysql: mysql/mydata/[root @ localhost/] # ll | grepmydatadrwxr-xr-x2mysqlmysql4096Aug1721: 03 mydata
(2) modify the unzipped binary program. The owner is mysql and the group is mysql.
[Root @ localhostmysql] # chown-Rmysql: mysql./* [root @ localhostmysql] # lltotal216drwxr-xr-x2mysqlmysql4096Aug1720: 02bin-rw-r -- r -- 1mysqlmysql17987Feb2407: 50 COPYING ...... Drwxr-xr-x4mysqlmysql4096Aug1720: 02sql-benchdrwxr-xr-x4mysqlmysql4096Aug1720: 02support-files
(3) initialize mysql.
[Root @ localhostmysql] # scripts/mysql_install_db -- user = mysql -- datadir =/mydataInstallingMariaDB/MySQLsystemtablesin '/mydata'... OKFillinghelptables... OK
Change owner to root
[Root @ localhostmysql] # chown-Rroot. [root @ localhostmysql] # cpsupport-files/my-large.cnf/etc/my. cnf
Edit the configuration file as needed and add the following two lines
[Root @ localhostmysql] # vim/etc/my. cnthread_concurrency = 4 ------> ing between CPU and thread datadir =/web ------> data storage directory
(4) Provide the MySQL STARTUP script and check whether the execution permission is available.
[Root @ localhostmysql] # cpsupport-files/mysql. server/etc/init. d/mysqld [root @ localhostmysql] # chkconfig -- addmysqld [root @ localhostmysql] # chkconfig -- listmysqldmysqld0: off1: off2: on3: on4: on5: on6: off [root @ localhostmysql] # chkconfigmysqldoff
(5) Start the Database Server
[Root @ localhostmysql] # servicemysqldstartStartingMySQL... [OK]
Test whether the database can be operated
[Root @ localhostmysql] #./bin/mysqlWelcometotheMariaDBmonitor. Commandsendwith; or \ g. YourMariaDBconnectionidis2 ..... MariaDB [(none)]> showdatabases; + -------------------- + | Database | + -------------------- + | information_schema | mydb | mysql | performance_schema | test | + ------------------ + 5 rowsinset (0.00sec)
Note: The default user when installing the database. You can log on to the database system without a password. For security considerations. Therefore, you need to delete it or add a password.
MariaDB [(none)]> selectuser, host, passwordfrommysql. user; + ------ + ---------------- + ---------- + | user | host | password | + ------ + ---------------- + ---------- + | root | localhost | root | nfs.9527du.com | root | 127.0.0.1 | root |:: 1 | localhost | nfs.9527du.com | + ------ + ---------------- + ---------- + 6 rowsinset (0.00sec)
Clear unwanted users
MariaDB [(none)]> dropuser 'root' @ 'nfs .9527du.com '; MariaDB [(none)]> dropuser 'root' @': 1 '; mariaDB [(none)]> dropuser ''@ 'localhost'; MariaDB [(none)]> dropuser'' @ 'nfs .9527du.com '; MariaDB [(none)]> dropuser 'root' @ 'localhost ';
Set password:
MariaDB [(none)]> setpasswordfor 'root' @ '127. 0.0.1 '= password ('root'); MariaDB [(none)]> selectuser, host, passwordfrommysql. user; + ------ + ----------- + Principal + | user | host | password | + ------ + ----------- + Principal + | root | 127.0.0.1 | * Principal | + ------ + ----------- + Principal + 1 rowinset (0.00sec)
Users who add a database management interface can log on to the database from any IPv4 address. Authorize all rights to operate databases
MariaDB [(none)]> grantallon *. * to 'root' @ '%. %' identifiedby 'root'; QueryOK, 0 rowsaffected (0.00sec)
Refresh the database authorization table to take effect immediately
MariaDB [(none)]> flushprivileges; QueryOK, 0 rowsaffected (0.00sec)
Iii. Test the LAMP platform:
1. httpd A (192.168.60.99) and httpd B (192.168.60.40) mount the/web directory shared by the NFS server.
View NFS shared directories
[Root@stu13httpd-2.4.9] # showmount-e192.168.60.88Exportlistfor192.168.60.88:/web192.168.60.0/24
Mount and check whether the mounting is successful
[Root@stu13httpd-2.4.9] # mount-tnfs192.168.60.88:/web/mnt/nfs/[root@stu13httpd-2.4.9] # mount | grep "nfs [[: space:]" 192.168.60.88: /webon/mnt/nfstypenfs (rw, addr = 192.168.60.88)
View the NFS shared directory on another httpd server
[Root @ node1 ~] # Showmount-e192.168.60.88Exportlistfor192.168.60.88:/web192.168.60.0/24
Mount the shared directory and check whether the shared directory is mounted successfully.
[Root @ node1 ~] # Mount-tnfs192.168.60.88:/web/mnt/nfs/[root@node1http-2.4.9] # mount | grep "nfs [[: space:]" 192.168.60.88:/webon/mnt/nfstypenfs (rw, addr = 192.168.60.88)
2. Start the httpd A and httpd B servers to ensure that the owner of the Service session process is usenfs;
Httpd A (192.168.60.99)
[Root@stu13httpd-2.4.9] # psaux | grephttpdroot24270.22.02470213656? Ss14: 520: 00/usr/local/httpd-2.4.9/bin/httpd-kstartusenfs24280.01.93024369968? Sl14: 520: 00/usr/local/httpd-2.4.9/bin/httpd-kstartusenfs24290.01.93024369972? Sl14: 520: 00/usr/local/httpd-2.4.9/bin/httpd-kstartusenfs24310.01.93034609976? Sl14: 520: 00/usr/local/httpd-2.4.9/bin/httpd-kstart
Httpd A (192.168.60.40)
[Root@node1http-2.4.9] # psaux | grephttpdroot188801162.02470116660? Ss15: 120: 00/usr/local/http-2.4.9/bin/httpd-kstartusenfs18890.01.93024369972? Sl15: 120: 00/usr/local/http-2.4.9/bin/httpd-kstartusenfs18900.01.93034609980? Sl15: 120: 00/usr/local/http-2.4.9/bin/httpd-kstartusenfs18960.01.93024369976? Sl15: 120: 00/usr/local/http-2.4.9/bin/httpd-kstart
3. Add a test page to check whether the web page in. php format can be interpreted by the MySQL and httpd servers.
Create the checkmysql. php webpage file in the shared directory/web. Content.
<? Php $ link = mysql_connect ('2017. 168.60.88 ', 'root', 'root'); if ($ link) echo "Success... "; elseecho" Failure... ";?>
4. Test the access page
Start the mariadb database:
[Root @ nfs ~] # ServicemysqldstartStartingMySQL... [OK]
Test httpd A (192.168.60.99 ):
[Root @ nfs ~] # Curl-eIhttp: // 192.168.60.99/checkmysql. phpSuccess...
Note: httpd A (192.168.60.99) is successfully connected to the mariadb database. Enable php to interpret php code.
Test httpd B (192.168.60.40 ):
[Root @ nfs ~] # Curl-eIhttp: // 192.168.60.40/checkmysql. phpSuccess...
Note: httpd A (192.168.60.40) is successfully connected to the mariadb database. Enable php to interpret php code.
Shut down the mariadb database and test it once.
[Root @ nfs ~] # ServicemysqldstopShuttingdownMySQL. [OK] [root @ nfs ~] # Curl-eIhttp: // 192.168.60.99/checkmysql. phpFailure... [roocurl-eIhttp: // 192.168.60.40/checkmysql. phpFailure...
Note:
The two httpd servers can interact with the backend MySQL servers. This document explains the php format.
4. Deployment: wordpress-3.3.1.zh.CN blog Program:
1. Create a wordpress blog program to connect to the MySQL database and the database it uses.
MariaDB [(none)]> createdatabasewordpress; MariaDB [(none)]> grantallonwordpress. * to 'wordpress '@' 192. 168.60.% 'identifiedby 'wordpress '; MariaDB [(none)]> flushprivileges
Note:
Based on security considerations, wordpress users only have the right to use the wordpress database. You are not authorized to operate other databases.
2. Configure the wordpress blog Program
Export root@stu13nfs]unzip unzipwordpress-3.3.1-zh_cn.zip [root @ stu13wordpress] # cpwp-config-sample.phpwp-config.php
Edit the wp-config.php profile, enter the user and password to connect to MySQL data, and the database to use
[Root @ stu13wordpress] # vimwp-config.php // ** MySQL settings-specific information from the host you are using ** // ** WordPress database name */define ('db _ name ', 'wordpres');/** MySQL database username */define ('db _ user', 'wordpres '); /** MySQL Database PASSWORD */define ('db _ password', 'wordpres');/** MySQL HOST */define ('db _ host', '2014. 192. 168.60.88 ');/** default text encoding when creating a data table */define ('db _ charset', 'utf8 ');
On the server 192.168.60.99, open the wordpress Installation Wizard.
On the httpd server 192.168.60.40, open the wordpress Installation Wizard and install the wordpress blog program. For the installed interface:
Browse through another server
OK ....
This article is from the "Linux" blog, please be sure to keep this source http://9528du.blog.51cto.com/8979089/1541380