搭建(nginx+php)+mysql+redis服務平臺
為了實現mysql在nginx平臺的快取
應用平臺:
- 安裝配置nginx支援php環境.
- Php新增redis模組
- 建立redis和mysql的連線即mysql的快取為redis
- 編寫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