Redisphp
Rhel6.5 server1.example.com 172.25.23.1html
Selinux iptables disables 加解析mysql
一.安裝redislinux
1.tar zxf redis-3.0.2.tar.gznginx
2.cd redis-3.0.2c++
3.make && make installredis
注意:在安裝的過程當中可能要解決依賴性yum install -y gcc yum install -y *算法
解決完依賴性後,須要從新解壓sql
4.ls /usr/local/bin數據庫
redis-server: Redis 服務主程序。
redis-cli: Redis 客戶端命令行工具,也能夠用 telnet 來操做。
redis-benchmark: Redis 性能測試工具,用於測試讀寫性能。
redis-check-aof:檢查 redis aof 文件完整性,aof 文件持久化記錄服務器執行的全部寫操做命令,用於還原數據。
redis-check-dump:檢查 redis rdb 文件的完整性,rdb 就是快照存儲,即按照必定的策略週期性的將數據保存到磁盤,是默認的持久化方式。
redis-sentinel:是集羣管理工具,主要負責主從切換
5.cd utils
6. ./install_server.sh (一路Enter)
7.會自動啓動服務
8.redis-cli
......
二.Redis 做 mysql 的緩存服務器
1.安裝軟件
安裝 lnmp 環境,安裝如下軟件包:
nginx php php-fpm php-cli php-common php-gd php-mbstring php-mysql php-pdo php-devel mysql mysql-server
yum install -y mysql-server nginx-1.8.0-1.el6.ngx.x86_64.rpm php-*
2.修改配置文件
(1)修改時區 vim /etc/php.ini
(2)配置nginx
vim /etc/nginx/conf.d/default.conf
(3)導入php測試網頁
cp ~/redis/test.php /usr/share/nginx/html/
cd /usr/share/nginx/html/
mv test.php index.php
3.安裝 php 的 redis 擴展
unzip phpredis-master.zip
cd phpredis-master
phpize
--> ls後可看到有configure
./configure (缺乏re2c)
yum install re2c-0.13.5-1.el6.x86_64.rpm -y
./configure
make && make install
ls /root/redis/phpredis-master/modules
--> 可看到有redis.so
cd /etc/php.d------- 加載redis模塊
cp mysql.ini redis.ini
vim redis.ini
4.導入數據
/etc/init.d/mysqld start
mysql_secure_installation
mysql -pwestos -e "create database test"
mysql -pwestos test < test.sql
cat test.sql
mysql -pwestos -e "grant all on test.* to redis@localhost identified by 'westos'"
/etc/init.d/nginx start
/etc/init.d/php-fpm start
4.測試
(1) Redis-cli
(2) 訪問172.25.23.1
第一次的時候獲取的是redis的數據,再次刷新redis再從mysql獲取數據,
5.在修改mysql的數據時,不能同步到redis。redis中仍然會有對應的 KEY,數據就不會更新,此時就會出現 mysql 和 redis 數據不一致的狀況。
三.配置 gearman 實現數據同步
Update mysql -> gearmand (job service) -> worker ->redis
Update mysql -> trigger -> udf -> json -> plugin ->gearmand -> worker ->redis
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 數據庫的更新。
1.安裝gearman軟件包
yum installl -y gearmand-1.1.8-2.el6.x86_64.rpm
2.安裝lib_mysqludf_json
lib_mysqludf_json UDF 庫函數將關係數據映射爲 JSON 格式。一般,數據庫中的數據映射爲格式,是經過程序來轉換的。
yum install -y mysql-devel
unzip lib_mysqludf_json-master.zip
cd lib_mysqludf_json-master
cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
查看 mysql 的模塊目錄
註冊 UDF 函數
3.安裝gearman-mysql-udf
這個插件是用來管理調用 Gearman 的分佈式的隊列
tar zxf gearman-mysql-udf-0.6.tar.gz
cd gearman-mysql-udf-0.6
./configure --libdir=/usr/lib64/mysql/plugin
yum install -y gcc-c++
./configure --libdir=/usr/lib64/mysql/plugin
make && make install
註冊 UDF 函數
4.安裝 php 的 gearman 擴展
tar zxf gearman-1.1.2.tgz
cd gearman-1.1.2
phpize
./configure
make && make install
cd /etc/php.d/
cp mysql.ini gearman.ini
vim gearman.ini
/etc/init.d/php-fpm reload
5.導入數據庫
/etc/init.d/php-fpm reload
mysql -pwestos test < test.sql
cat test.sql (mysql觸發器)
指定 gearman 的服務信息
查看觸發器
6.編寫worker.php
cp worker.php /usr/share/nginx/html/
vim worker.php
nohup php worker.php & ------- 打入後臺運行
7.測試
更新數據
查看redis
查看瀏覽頁
四.開啓多個redis 服務
1.從新運行安裝文件,改端口號
2.複製配置文件並修改
cd /etc/redis/
cp 6379.conf 6376.conf
vim 6376.conf ---> :%s/6379/6376/g
redis-server 6376.conf# 啓動服務
五.Redis 主從設置
Server1.example.com 172.25.23.1 master
Server2.example.com 172.25.23.2 slave
1.slave安裝軟件 ------ 過程同master端相同
2.slave修改配置文件
vim /etc/redis/6379.conf
/etc/init.d/redis_6379 restart
3.slave測試能夠獲取master 端的數據
4.Master
vim /etc/redis/6379.conf
# save <seconds> <changes> #指定在多長時間內,有多少次更新操做,纔將數據同步到數據文件,這個選項有兩個屬性值,只有當兩個屬性值均知足時纔會觸
發;能夠設置多種級別:
save 900 1 # 每900秒(15分鐘)至少一次鍵值變動時被觸發;
save 300 10 # 每300秒(5分鐘)至少 10 次鍵值變動時被觸發;
save 60 10000 # 每60秒至少 10000 次鍵值變動時被觸發
/etc/init.d/redis_6379 restart
六.Redis監控端
Server1.example.com 172.25.23.1 master
Server2.example.com 172.25.23.2 slave
Server3.example.com 172.25.23.3 sentiel
1.監聽端安裝軟件----- 同master 相同
2.將監聽的配置文件拷貝到主配置目錄中
cd ~/redis-3.0.2
cp sentinel.conf /etc/redis/
cd /etc/redis/
vim sentinel.conf
監聽172.25.23.1 的6379端口,有一個出現故障就報告
默認的是30s 測試時,能夠將時間縮短
/etc/init.d/redis_6379 restart
3.測試
(1)啓動監聽服務
redis-server /etc/redis/sentinel.conf --sentinel
# /etc/redis/sentinel.conf 是sentinel.conf的路徑
......
(2) redis-cli -p 26379 info(不能關掉監聽服務,從新打開一個bash,再次ssh 連接server3,測試)
(3) 斷掉master的服務,slave會接管
在監聽服務開啓的頁面會顯示
......
......
從新開啓master 的服務
仍然是slave接管,直至slave出現故障,master纔會再次接管
在監聽服務開啓的頁面會顯示
......
七.性能測試
.....
......
redis-benchmark -h 172.25.23.1 -p 6379 -n 100000 -c 20
執行100000次請求,在有20個併發時的性能
......
八.集羣管理
1.安裝軟件
yum install -y rubygems-1.3.7-5.el6.noarch.rpm
gem install redis-3.3.1.gem --local
2.建立集羣
(1)
(2) 開啓服務
建立集羣,每個主節點有一個從節點
......
(3) 數據去中心化(根據內部的一系列hash算法等,算出中心區域的hash槽,將數據存入該hash槽)
(4)
ps -ax | grep cluster
當集羣的數據中心節點的主從都掛掉時,整個集羣也就掛掉了