redisd的基本搭建

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 *算法

wKiom1fQFFXTkCwiAABkMBpRHEc500.png 

解決完依賴性後,須要從新解壓sql

4.ls /usr/local/bin數據庫

   wKiom1fQFFaxsEc1AAA_WNR6DDI746.png 

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)

    wKiom1fQFF2S5FnQAAICebHHjiE252.png 

7.會自動啓動服務

    wKioL1fQFF7QCjApAABMCaVIapg748.png 

8.redis-cli

    wKioL1fQFGKyImnJAACsYQO8ZVg818.png 

......

 

二.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

wKiom1fQFGLi6ezzAAAYciwOn9Y893.png

(2)配置nginx

vim /etc/nginx/conf.d/default.conf

wKiom1fQFGPzi4tWAAA60tEW_AE543.png 

wKioL1fQFGfhUXuOAACPW1HDcUM130.png 

(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

        wKioL1fQFGugqNh-AABuLuJ0fcs710.png

 

-->  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

wKiom1fQFHCzLUciAACj_C8WOoU549.png 

cd /etc/php.d------- 加載redis模塊

cp mysql.ini redis.ini

vim redis.ini

wKioL1fQFHPBI7OkAAAj4hz_-X8874.png 

4.導入數據

/etc/init.d/mysqld start

mysql_secure_installation

mysql -pwestos -e "create database test"

mysql -pwestos test < test.sql

cat test.sql

wKiom1fQFHXTsHMrAACBxo7EWK8248.png 

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

wKiom1fQFHbg_QzfAABYyifzSCE392.png 

 

(2) 訪問172.25.23.1

第一次的時候獲取的是redis的數據,再次刷新redis再從mysql獲取數據,

wKiom1fQFH-CCgZWAABrSKX00FI737.png       wKioL1fQFIHwzKnmAAB_ywOIr1k367.png

5.在修改mysql的數據時,不能同步到redisredis中仍然會有對應的 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

/etc/init.d/gearmand startwKioL1fQFJbBZjPjAACZ5-kZ_c0482.png 

 

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

wKiom1fQFJiDilbbAABZ-oi3E-I424.png 

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 的模塊目錄

wKioL1fQFJrz_dm6AABs6k7C0dA822.png 

註冊 UDF 函數

wKiom1fQFJygLTybAAC-tUnTjuM652.png 

 

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

wKiom1fQFJ2TZkZBAAAr8YU5Rfo716.png 

yum install -y gcc-c++

./configure --libdir=/usr/lib64/mysql/plugin

make && make install

 

註冊 UDF 函數

wKioL1fQFKSi7j20AAFJ9TvT3WU834.png 

 

4.安裝 php gearman 擴展

tar zxf gearman-1.1.2.tgz

cd gearman-1.1.2

phpize

./configure

make && make install

wKiom1fQFKqRpVDdAACqv66nNl0210.png 

cd /etc/php.d/

cp mysql.ini gearman.ini

vim gearman.ini

wKioL1fQFKrwDNspAAAj8LWtP98449.png 

/etc/init.d/php-fpm reload

5.導入數據庫

/etc/init.d/php-fpm reload

mysql -pwestos test < test.sql

cat test.sql (mysql觸發器)

wKioL1fQFK-RtD0uAACVzMs_h4k140.png 

指定 gearman 的服務信息

wKiom1fQFLGhJaUDAABp7vfLAbM290.png 

查看觸發器

wKiom1fQFLrQT77gAAGFvkmPMSM495.png 

 

6.編寫worker.php

cp worker.php /usr/share/nginx/html/

vim worker.php

wKioL1fQFLyhsS3mAADnrMHJpeM659.png 

nohup php worker.php &  ------- 打入後臺運行

 

7.測試

更新數據

wKioL1fQFL2C_LiUAABF1y24QqA495.png 

查看redis

wKiom1fQFL7Ri4ebAAA9otY9n44842.png 

查看瀏覽頁

wKioL1fQFL7A2B0wAABzXQ8MkkE614.png 

 

四.開啓多個redis 服務

1.從新運行安裝文件,改端口號

wKioL1fQFSGgOp1GAAHmsdG_bcs381.png 

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

wKiom1fQFSKxRX56AAAsaF1Y_l8805.png 

/etc/init.d/redis_6379 restart

3.slave測試能夠獲取master 端的數據

wKioL1fQFSPzb_99AABD_XGaLU0508.png 

4.Master

vim /etc/redis/6379.conf

wKioL1fQFSSTNIRLAAAiJO4GWYs848.png 

# 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

wKiom1fQFSWhcpe2AAAdW-uLwHk078.png 

監聽172.25.23.1 6379端口,有一個出現故障就報告

wKioL1fQFSWxyKv4AAAyVQFTLRA583.png 

默認的是30s 測試時,能夠將時間縮短

/etc/init.d/redis_6379 restart

3.測試

(1)啓動監聽服務

 redis-server /etc/redis/sentinel.conf --sentinel

# /etc/redis/sentinel.conf  sentinel.conf的路徑

wKiom1fQFSfDvxdnAAFx-PkR8ZQ026.png

......

(2) redis-cli -p 26379 info(不能關掉監聽服務,從新打開一個bash,再次ssh 連接server3,測試)

wKiom1fQFSnT8ZoNAAFZ5KGQFUU068.png 

wKioL1fQFS7B4_4_AACQ8lT2670538.png 

(3) 斷掉master的服務,slave會接管

wKioL1fQFTLzQYy9AAC44wkqeDw204.png 

在監聽服務開啓的頁面會顯示

wKiom1fQFTKw8qW0AAAdtVhhvhQ637.png 

......

wKiom1fQFTajATPBAAJQW_4RlRo364.png 

......

從新開啓master 的服務

wKioL1fQFTjzmIZtAACJp8qIhCc699.png 

仍然是slave接管,直至slave出現故障,master纔會再次接管

在監聽服務開啓的頁面會顯示

wKioL1fQFTjD3fo5AAAdtVhhvhQ423.png 

......

wKiom1fQFTvzOR04AABmwCplzdk200.png 

 

七.性能測試

wKiom1fQFUDB3_qYAAEXZtx8Zsk442.png 

.....

wKioL1fQFUKj2VU9AAEzyEoU2xw423.png 

......

redis-benchmark -h 172.25.23.1 -p 6379 -n 100000 -c 20

執行100000次請求,在有20個併發時的性能

wKiom1fQFUeA83cJAAD69h6ACIQ741.png 

......

 

八.集羣管理

1.安裝軟件

yum install -y rubygems-1.3.7-5.el6.noarch.rpm

gem install redis-3.3.1.gem --local

2.建立集羣

(1)

wKioL1fQFUmx2KhMAABXaiQN4RQ276.png 

(2) 開啓服務

wKiom1fQFUqgc3FBAABddfCNZRo244.png 

建立集羣,每個主節點有一個從節點

wKioL1fQFVbzj4TJAAGNoIE23Tk655.png 

wKiom1fQFWaCQQSsAAH4qcx4rb8350.png 

......

(3) 數據去中心化(根據內部的一系列hash算法等,算出中心區域的hash槽,將數據存入該hash)

wKioL1fQFWqxq6TLAABpQwDCUI8059.png 

(4)

ps -ax | grep  cluster

wKioL1fQFW-xa_TtAACmufJUgUg057.png 

wKiom1fQFXrA93xhAABrbSWDSqM061.png 

wKiom1fQFbqjMJWsAADvCqCC1lE029.png 

wKiom1fQFhDhQy7EAAENlUygA3E841.png 

當集羣的數據中心節點的主從都掛掉時,整個集羣也就掛掉了

相關文章
相關標籤/搜索