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 

当集群的数据中心节点的主从都挂掉时,整个集群也就挂掉了

相关文章
相关标签/搜索