Redis 集群教程

本文档是Redis集群的一般介绍,没有涉及复杂难懂的分布式概念的赘述,只是提供了从用户角度来如何搭建测试以及使用的方法,如果你打算使用并深入了解Redis集群,推荐阅读完本章节后,仔细阅读 Redis 集群规范 一章。

本教程试图提供最终用户一个简单的关于集群和一致性特征的描述

请注意,本教程使用于Redis3.0(包括3.0)以上版本

如果你计划部署集群,那么我们建议你从阅读这个文档开始。

Redis集群介绍

Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。

Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下可能会导致不可预料的错误.

Redis 集群通过分区来提供一定程度的可用性,在实际环境中当某个节点宕机或者不可达的情况下继续处理命令. Redis 集群的优势:

自动分割数据到不同的节点上。
整个集群的部分节点失败或者不可达的情况下能够继续处理命令。

centos安装redis

官网下载的安装包 redis-4.0.2.tar.gz

1.解压文件tar -zxvf redis-4.0.2.tar.gz
2.make   #如果错误则使用下面的命令
make MALLOC=libc

a001

3.安装完毕后就配置文件

3.1 设置redis可以一直在后台运行,以守护进程方式运行,即关闭SSH工具程序也在运行。
daemonize no 改成 daemonize yes

3.2 默认的话redis-server启动时会在当前目录生成或读取dump.rdb,可以指定生成的路径
dir ./ 改成 dir /usr/local/redis/

3.3 指定是否在每次更新操作后进行日志记录
appendonly no 改成 appendonly yes

因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

3.4 默认redis是只能内网127.0.0.0访问,如果想外网访问需要修改绑定的地址
bind 127.0.0.1 改成 bind 0.0.0.0
改成任何IP都能访问的,当然这里也可以绑定单独的IP;改成外网访问需要设置密码,否则会报错;

3.5 修改保护模式,不修改保护模式也是只能内网访问的
protected-mode yes 改成 protected-mode no

3.6 设置密码
将”# requirepass foobared“ 改成 requirepass 123
4.启动redis服务

./redis-server redis.conf
*注:必需指定redis.conf文件,如果不指定,会加载默认的配置,那修改过的配置也不会生效。

5.验证服务是否启动:

ps aux|grep redis

a003

redis-cli测试内网
cd /www/server/redis.4.0.2/src
./redis-cli #我的是没有设置密码,所以直接回车
./redis-cli -a 123
备注:redis-cli -h 实例连接地址 -a 密码

a002

 

yum -y install gcc gcc-c++ gcc-g77 make libtool autoconf patch unzip automake libxml2 libxml2-devel ncurses ncurses-devel libtool-ltdl-devel libtool-ltdl libmcrypt libmcrypt-devel libpng libpng-devel libjpeg-devel openssl openssl-devel curl curl-devel libxml2 libxml2-devel ncurses ncurses-devel libtool-ltdl-devel libtool-ltdl autoconf automake libaio*

Nginx支持socket转发

有个接口是通过socket通信,对端服务器访问存在IP限制,只好通过跳板机,因为它具备访问对端服务器的权限。nginx1.9开始支持tcp层的转发,通过stream实现的,而socket也是基于tcp通信。

一.实现过程:

1.安装nginx,stream模块默认不安装的,需要手动添加参数:–with-stream,官方下载地址:download,根据自己系统版本选择nginx1.9或以上版本。

2.nginx.conf 配置,参考说明:ngx_stream_core_module

nginx.conf

user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
……………..
}

# tcp层转发的配置文件夹

include /etc/nginx/tcp.d/*.conf;
请注意,stream配置不能放到http内,即不能放到/etc/nginx/conf.d/,因为stream是通过tcp层转发,而不是http转发。

如配置在http内,启动nginx会报如下错误:

nginx: [emerg] “server” directive is not allowed here
3.在tcp.d下新建个bss_num_30001.conf文件,内容如下:

Nginx使用upstream模块实现tomcat负载均衡

UPSTREAM负载均衡模块

负载均衡模块用于从”upstream”指令定义的后端主机列表中选取一台主机。nginx先使用负载均衡模块找到一台主机,再使用upstream模块实现与这台主机的交互。为了方便介绍负载均衡模块,做到言之有物,以下选取nginx内置的ip hash模块作为实际例子进行分析。

配置

要了解负载均衡模块的开发方法,首先需要了解负载均衡模块的使用方法。因为负载均衡模块与之前书中提到的模块差别比较大,所以我们从配置入手比较容易理解。

在配置文件中,我们如果需要使用ip hash的负载均衡算法。我们需要写一个类似下面的配置:

redis队列例子详解

测试的时候我用的是Win环境,目前Redis官方是没有Redis环境安装包下载,但是庆幸的是微软有团队在维护Redis WinX64环境的版本,下面是下载网址:

Redis Windows环境下载:
https://github.com/MSOpenTech/redis/releases

下载直接执行redis-server.exe即可

还需要PHP-redis.dll的插件,下载复制到ext目录下,并且在php.ini增加一行:

extension=php_redis.dll

使用的代码非常简单,以下是一个简单的使用类,如果实用在正式环境中,可能要需要进行优化:

class RedisEx{

private $_redis = null;
private $_host = “127.0.0.1”;
private $_prot = 6379;

function __construct(){
self::_connect();
}

public function push($key,$val){
self::_connect();

if($key&&$val){
return $this->_redis->lPush($key,$val);
}
return null;
}

public function pop($key) {
self::_connect();

return $this->_redis->rPop($key);
}

private function _connect(){
if(!$this->_redis){
$this->_redis = new Redis();
$this->_redis->connect($this->_host,$this->_prot);
}
}
}

 

有了处理类,那么我们需要写一个操作代码:

<?php
/**
* http://test.com/1.php?a=POST&key=key1&val=a0000001//加入队列
* http://test.com/1.php?a=GET&key=key1//取出队列
* @var unknown
*/
$action = $_GET[‘a’];

$redisEx = new RedisEx();

if(strtoupper($action) == ‘POST’){
$key = $_GET[‘key’];
$val = $_GET[‘val’];

$res = $redisEx->push($key, $val);

echo $res;

}elseif (strtoupper($action) == ‘GET’){

$key = $_GET[‘key’];

$res = $redisEx->pop($key);

echo $res;
}

echo ‘succ';

 

1234517