1. 程式人生 > >搭建(nginx+php)+mysql+redis服務平臺

搭建(nginx+php)+mysql+redis服務平臺

為了實現mysql在nginx平臺的快取
應用平臺:

  1. 安裝配置nginx支援php環境.
  2. Php新增redis模組
  3. 建立redis和mysql的連線即mysql的快取為redis
  4. 編寫php指令碼搭建和後臺redis和mysql的平臺連線。

環境部署:server1——–>nginx(80);php(9000)
server2——–>redis(6379)
server3——–>mysql

1 安裝nginx和php:

[root@server1 redis]# vim /etc/php.ini #修改時區Asia/Shanghai
[root@server1 redis]# vim /etc/php-fpm.conf [root@server1 redis]# id nginx uid=498(nginx) gid=499(nginx) groups=499(nginx) [root@server1 redis]# cd /etc/php-fpm.d/ [root@server1 php-fpm.d]# vim www.conf [root@server1 php-fpm.d]# /etc/init.d/php-fpm start Starting php-fpm: [ OK
] [root@server1 php-fpm.d]# netstat -anulp

[root@server1 php-fpm.d]# vim /etc/nginx/nginx.conf#檢視nginx使用者
[root@server1 redis]# vim /etc/php-fpm.conf
[root@server1 redis]# id nginx
uid=498(nginx) gid=499(nginx) groups=499(nginx)
[root@server1 redis]# cd /etc/php-fpm.d/
[root@server1 php-fpm.d]# vim www.conf #修改php使用者為nginx


[[email protected] php-fpm.d]# vim /etc/nginx/conf.d/default.conf
#支援php環境將nginx預設釋出檔案次序設定為index.php

[root@server1 php-fpm.d]# /etc/init.d/nginx start
Starting nginx:                                            [  OK  ]
[root@server1 php-fpm.d]# netstat -antlp
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1864/nginx
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      1836/php-fpm
tcp        0      0 172.25.30.1:22              172.25.30.250:34814         ESTABLI
[root@server1 php-fpm.d]# vim /usr/share/nginx/html/index.php#編輯php檔案在nginx釋出目錄下面訪問測試nginx-php:
[root@server1 php-fpm.d]# nginx -s reload

2.編寫php建立和redis,mysql的連線.
-------------------------
[[email protected] redis]# cp test.php /usr/share/nginx/html/index.php 
cp: overwrite `/usr/share/nginx/html/index.php'? y
[[email protected] redis]# vim /usr/share/nginx/html/index.php
$redis->connect('172.25.30.2',6379) or die ("could net connect redis server");
for ($key = 1; $key < 10; $key++)
        {
                if (!$redis->get($key))
                {
                        $connect = mysql_connect('172.25.30.3','redis','westos');
                        mysql_select_db(test);
                        $result = mysql_query($query);
                        //如果沒有找到$key,就將該查詢sql的結果快取到redis

3.在php中新增redis模組:

[[email protected] redis]# php -m
[PHP Modules] #該php_modules中沒有redis模組我們需要重新編譯新增:
[[email protected] redis]# yum install unzip -y
[[email protected] redis]# unzip phpredis-master.zip

#rpm包編譯安裝
[root@server1 phpredis-master]# ./configure
[root@server1 phpredis-master]# make
[root@server1 phpredis-master]# make install 
Installing shared extensions:     /usr/lib64/php/modules/
[root@server1 modules]# cd /etc/php.d/
[root@server1 php.d]# cp mysql.ini redis.ini
[root@server1 php.d]# vim redis.ini #在redis配置檔案中新增redis.so#模組.重新整理配置php-fpm將redis模組新增成功


Index.php中訪問的是172.25.30.2的redis—–>6379埠.
我們要檢視該後臺伺服器是否有6379埠,redis部署我們已經在之前的學習中學習了:

安裝部署mysql:
在安裝之前把伺服器中高可用mysql資料清空重新安裝mysql這裡我們安裝的是mysql----rpm;

[root@server3 ~]# rpm -e --nodeps `rpm -qa|grep mysql`
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave #取消依賴性解除安裝
[root@server3 ~]# yum install -y mysql-server #安裝初始化
[root@server3 ~]# vim /etc/my.cnf
[root@server3 ~]# /etc/init.d/mysqld start
Initializing MySQL database:  Installing MySQL system tables...
[root@server3 ~]# mysql #mysql-server可以免密登陸
mysql> grant all on test.* to [email protected]'%' identified by 'westos'; #登陸授權在test庫上使用者redis密碼westos;
[root@server3 ~]# vim test.sql #編輯了一個指令碼可以在mysql中插入資料
[root@server3 ~]# mysql < test.sql


所有部署安裝完畢訪問測試平臺:在redis還沒有快取到資料之前得到的資料是從mysql源中取出來的,重新整理之後redis將mysql的資料快取下來之後nginx只奔redis中取資料.


在redis上訪問:

但是客戶端從瀏覽器獲取到的資料沒有發生變化,因為快取還在,先找快取再找mysql不能實現同步更新.到這裡,我們已經實現了 redis 作為 mysql 的快取伺服器,但是如果更新mysql,redis中仍然會有對應的 KEY,資料就不會更新,此時就會出現 mysql 和 redis 資料不一致的情況。所以接下來就要通過 mysql 觸發器將改變的資料同步到 redis 中。

配置 gearman 實現資料同步

Gearman 是一個支援分散式的任務分發框架:
Gearman Job Server:Gearman 核心程式,需要編譯安裝並以守護程序形式執行在後臺。
Gearman Client:可以理解為任務的請求者。
Gearman Worker:任務的真正執行者,一般需要自己編寫具體邏輯並通過守護程序方式
執行,Gearman Worker 接收到 Gearman Client 傳遞的任務內容後,會按順序處理。
大致流程:
下面要編寫的 mysql 觸發器,就相當於 Gearman 的客戶端。修改表,插入表就相當於直接下發任務。然後通過 lib_mysqludf_json UDF 庫函式將關係資料對映為 JSON 格式,然後在通過 gearman-mysql-udf 外掛將任務加入到 Gearman 的任務佇列中,最後通過
redis_worker.php,也就是 Gearman 的 worker 端來完成 redis 資料庫的更新。
server1:安裝包:
gearmand-1.1.8-2.el6.x86_64.rpm
gearman-mysql-udf-0.6.tar.gz
go1.8.linux-amd64.tar.gz
jemalloc-3.6.0-1.el6.x86_64.rpm
jemalloc-devel-3.6.0-1.el6.x86_64.rpm
libevent-1.4.13-4.el6.x86_64.rpm
libevent-devel-1.4.13-4.el6.x86_64.rpm
libevent-doc-1.4.13-4.el6.noarch.rpm
libevent-headers-1.4.13-4.el6.noarch.rpm
libgearman-1.1.8-2.el6.x86_64.rpm
libgearman-devel-1.1.8-2.el6.x86_64.rpm
lib_mysqludf_json-master.zip
libyaml-0.1.3-4.el6_6.x86_64.rpm

1.安裝啟動gearman服務:

[root@server1 redis]# yum install -y gearmand-1.1.8-2.el6.x86_64.rpm libgearman-* lib*
[root@server1 redis]# /etc/init.d/gearmand start   不用配置,直接啟動
Starting gearmand:                                         [  OK  ]
[root@server1 redis]# netstat -antulpe #埠6379
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       User       Inode      PID/Program name   
tcp        0      0 0.0.0.0:6379                0.0.0.0:*                   LISTEN      0          29448      1707/redis-server 0 

server3安裝編譯:

server3:
[[email protected] ~]# yum install -y unzip
[[email protected] ~]# unzip lib_mysqludf_json-master.zip 
[[email protected] ~]# cd lib_mysqludf_json-master
[[email protected] lib_mysqludf_json-master]# ls
lib_mysqludf_json.c     lib_mysqludf_json.so   README.md
lib_mysqludf_json.html  lib_mysqludf_json.sql
[[email protected] lib_mysqludf_json-master]# yum install -y gcc mysql-devel 

[[email protected] lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c 

[[email protected] lib_mysqludf_json-master]# ls
lib_mysqludf_json.c     lib_mysqludf_json.so   README.md
lib_mysqludf_json.html  lib_mysqludf_json.sql
[[email protected] plugin]# cd -
/root/lib_mysqludf_json-master
[[email protected] lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/ 拷貝 lib_mysqludf_json.so 模組:

lib_mysqludf_json.so模組安裝完畢!資料庫註冊!

註冊 UDF 函式:
mysql> CREATE FUNCTION json_object RETURNS STRING SONAME
    -> 'lib_mysqludf_json.so'; 

2. 安裝 gearman-mysql-udf

這個外掛是用來管理呼叫 Gearman 的分散式的佇列。

[root@server3 ~]# tar zxf gearman-mysql-udf-0.6.tar.gz 
[root@server3 ~]# yum install -y libgearman-* libevent-*
[root@server3 ~]# cd gearman-mysql-udf-0.6
[root@server3 gearman-mysql-udf-0.6]# ls
aclocal.m4  config       configure     libgearman_mysql_udf  Makefile.in
AUTHORS     config.h.in  configure.ac  m4                    NEWS
ChangeLog   config.log   COPYING       Makefile.am           README
[root@server3 gearman-mysql-udf-0.6]# ./configure --with-mysql=/usr/bin/mysql_config --libdir=/usr/lib64/mysql/plugin/
[root@server3 gearman-mysql-udf-0.6]# make
[root@server3 gearman-mysql-udf-0.6]# make install
libgearman_mysql_udf.so安裝完畢
資料庫註冊:註冊 UDF 函式
mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME
    -> 'libgearman_mysql_udf.so';
Query OK, 0 rows affected (0.00 sec)

mysql> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME
    -> 'libgearman_mysql_udf.so';
Query OK, 0 rows affected (0.00 sec)

mysql> select * from mysql.func;檢視函式
+--------------------+-----+-------------------------+----------+
| name               | ret | dl                      | type     |
+--------------------+-----+-------------------------+----------+
| json_object        |   0 | lib_mysqludf_json.so    | function |
| gman_do_background |   0 | libgearman_mysql_udf.so | function |
| gman_servers_set   |   0 | libgearman_mysql_udf.so | function |
+--------------------+-----+-------------------------+----------+
指定 gearman 的服務資訊
mysql> SELECT gman_servers_set('172.25.30.1:4730');
+--------------------------------------+
| gman_servers_set('172.25.30.1:4730') |
+--------------------------------------+
| 172.25.30.1:4730                     |
+--------------------------------------+
mysql> SHOW TRIGGERS FROM test;  檢視觸發器
+-------------+--------+-------+----------------------------------------------------------------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
| Trigger     | Event  | Table | Statement                                                                                                      | Timing | Created | sql_mode | Definer        | character_set_client | collation_connection | Database Collation |
+-------------+--------+-------+----------------------------------------------------------------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+
| datatoredis | UPDATE | test  | BEGIN
    SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`)); 
  END | AFTER  | NULL    |          | [email protected] | latin1               | latin1_swedish_ci    | latin1_swedish_ci  |
+-------------+--------+-------+----------------------------------------------------------------------------------------------------------------+--------+---------+----------+----------------+----------------------+----------------------+--------------------+

3. 編寫 mysql 觸發器

[[email protected] ~]# vim test.sql 
use test;
DELIMITER $$
CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
    SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));
  END$$
DELIMITER ;
[[email protected] ~]# mysql < test.sql 

4.server1新增gearman的php模組

[root@server1 redis]# tar zxf gearman-1.1.2.tgz 
[root@server1 redis]# cd gearman-1.1.2
[root@server1 gearman-1.1.2]# phpize 
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@server1 gearman-1.1.2]# ./configure 
[root@server1 gearman-1.1.2]# make && make install
Installing shared extensions:     /usr/lib64/php/modules/
[root@server1 gearman-1.1.2]# cd /usr/lib64/php/modules/
[root@server1 modules]# ls
fileinfo.so  json.so      mysql.so      pdo_sqlite.so  sqlite3.so
gd.so        mbstring.so  pdo_mysql.so  phar.so        zip.so
[root@server1 modules]# cd /etc/php.d/
加入php模組
[root@server1 php.d]# cp redis.ini gearman.ini
[root@server1 php.d]# vim gearman.ini 
extension=gearman.so
重新載入php
[root@server1 php.d]# /etc/init.d/php-fpm reload
[root@server1 php.d]# php -m | grep gearman
gearman
[root@server1 php.d]# cd
[root@server1 ~]# vim /usr/local/worker.php

$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');

$redis = new Redis();
$redis->connect('172.25.30.2', 6379);   這裡是redis伺服器的ip

while($worker->work());
function syncToRedis($job)
{
        global $redis;
        $workString = $job->workload();
        $work = json_decode($workString);
        if(!isset($work->id)){
                return false;
        }
        $redis->set($work->id, $work->name);
}
?>

打入後臺持續執行

[root@server1 ~]# php /usr/local/worker.php &  
[1] 6599
[root@server1 ~]# nohup hup /usr/local/worker.php &
[2] 6600

全部配置完畢server3測試:

[[email protected] ~]# mysql < test.sql 
mysql> update test.test set name='redhat';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 9  Changed: 0  Warnings: 0

mysql> select * from test.test;
+----+--------+
| id | name   |
+----+--------+
|  1 | redhat |
|  2 | redhat |
|  3 | redhat |
|  4 | redhat |
|  5 | redhat |
|  6 | redhat |
|  7 | redhat |
|  8 | redhat |
|  9 | redhat |
+----+--------+

相關推薦

搭建(nginx+php)+mysql+redis服務平臺

為了實現mysql在nginx平臺的快取 應用平臺: 安裝配置nginx支援php環境. Php新增redis模組 建立redis和mysql的連線即mysql的快取為redis 編寫php指令碼搭建和後臺redis和mysql的平臺連線。 環境

centos搭建Nginx+PHP+MySql+Redis環境詳細步驟(CentOS7環境)

一、安裝Nginx 1、下載nginx-release包 2、匯入GPG signing key 3、安裝1中下載的軟體包。 yum install /home/develop/nginx-release-centos-7-0.el7.ngx.noarch.rpm 其中“/home/dev

超詳細搭建SVN+Nginx+PHP+MySQL+MFS服務構建社交網站

int 系統管 賬戶 profile version 索引 script htm index 簡介 公司的社交網站采用PHP語言開發,為了管理PHP程序員開發的代碼,上級領導要求搭建SVN服務器進行版本控制。社交網站的第一個版本部署在LNMP平臺上,前端為Nginx,通過f

linux 下 docker NGINX+PHP+MYSQL+REDIS+Elasticsearch 開發環境搭建

docker-compose 安裝請看此連結 其他 一步步跟我做,搭建屬於自己的 docker 開發環境 作者:風來了.fox nginx 1.8.0 php 5.6.x 1.docker 安裝 1.1 ubuntu 14.x 15.x

CentOS7 搭建nginx+php+mysql運行環境

centos7 nginx php mysql 在centOS上有兩種方式可以安裝nginx、php、mysql,即通過yum指令來安裝;通過編譯源 碼安裝。CentOS 7上系統自帶有yum源,下介紹nginx通過源碼及yum安裝的方法及php、 mysql通過yum指令安裝的方法。 安裝ngi

docker-compose搭建nginx+php+mysql

安裝Docker Compose之前應先確保系統已經安裝了Docker 安裝Docker Compose 1.下載Docker Compose sudo curl -L "https://github.com/docker/compose/release

使用compose構建Docker多應用環境(Nginx+PHP+MySQL+Redis)

首先安裝compose #下載並移動到/usr/local/bin目錄下 curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" \

docker 搭建nginx+php+mysql

docker 搭建nginx+php+mysql docker 部署mysql docker pull mysql:5.7 啟動mysql 服務 docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456

基於CentOS 7 web服務環境搭建(包含JDK+Nginx+Tomcat+Mysql+Redis

前言 安裝和配置防火牆 安裝telnet服務語言包 安裝JDK 安裝Nginx

本地手動一步步搭建WNMP環境(nginx+php+mysql) Windows平臺

環境:Windows 10 x64 參考文章: WNMP完整教程      windows下PHP環境的搭建 我自定義安裝後的目錄結構: +WNMP            

CentOS 6.4安裝配置LNMP服務器(Nginx+PHP+MySQL

mysql- ket 是否 分號 使用 store 重啟 isa tpi 一 安裝篇 1. 安裝nginx yum check-update #更新yum源 yum remove httpd* php* #刪除系統自帶的軟件包 yum install nginx #安裝ng

搭建nginx+php-fpm+php服務遇到的問題

a.php-fpm配置檔案修改(php-fpm.conf) cp php-fpm.conf.default php-fpm.conf vi php-fpm.conf 去掉 ;pid = run/php-fpm.pid中的“;” b.www.conf配置檔案修改(www.co

騰訊雲伺服器Nginx+php+mysql環境搭建

轉 本文有點長,原因是每一步都有截圖佔的篇幅較長,其實並不麻煩,並不複雜。所有命令都可以複製貼上到終端視窗,不用手動輸入(在終端貼上時用滑鼠右鍵+貼上 的方式進行貼上,有些終端工具不支援快捷鍵ctrl + v進行貼上,如果選用putty終端,複製後在 終端視窗直接敲擊滑

斐訊k3搭建nginx+php+MariaDB(mysql )的教程

安裝nginx+php+MariaDB 以前用k3安裝了onmp,中間踩了不少坑。以前發到貼吧的,現在發過來記錄一下,順便給大家參考一下。 斐訊k3效能比較強,拿來建小型網站還是可以的。但是內建儲存太小,需要額外的u盤或是行動硬碟來掛載。我是官改1.6,但是理論

如何在Ubuntu 14.04上利用jexus搭建支援php+mysql資料庫的網站服務

準備部分:sudo apt-get update          sudo apt-get install unzip -y第一部分:安裝jexus    在終端執行以下命令    cd /tmp    wget https://www.linuxdot.net/down/jexus-5.8.2-x64.

伺服器搭建testlink (nginx php mysql環境) 心得分享

公眾號同步更新歡迎關注——測試喵之家 ​ 今天在公司伺服器上搭建了testlink,框架為nginx+php+mysql。基本操作和之 前在Mac上搭建的過程基本一致。 需要注意的是: 輸入資料庫地址,在伺服器上mysql很有可能不是和安裝地址在同一個i

一鍵安裝Linux/CentOS/Aliyun等等系統下Apache/Mysql/Nginx/PHP/Tomcat/Redis/JDK等元件環境

一.LNMP(偏PHP 包含Nginx/MySQL/PHP/Apache等) 1. 一鍵安裝命令環境     yum -y install wget screen 2. 下載lnmp並執行相關安裝命令(以下命令尾部./install.sh lnmp是安裝包

Linux下Nginx+PHP+Mysql環境搭建過程(圖文)

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-de

nginx+php+mysql 搭建完整web伺服器

1、獲取相關開源程式【適用CentOS作業系統】利用CentOS Linux系統自帶的yum命令安裝、升級所需的程式庫: sudo -s LANG=C yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-

ANPM-Apache_httpd-Nginx-PHP-MySQL 官方預編譯包源(Pre-Built Packages Repository)收集

apache httpd nginx php mysql ANPM-Apache_httpd-Nginx-PHP-MySQL 官方預編譯包源(Pre-Built Packages Repository)收集Apache_httpdNginxhttp://nginx.org/en/linux