Redis Cluster
简介
redis cluster 是redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了redis分布式的需求,当一个redis节点挂了可以快速的切换到另一个节点。当遇到单机内存、并发等瓶颈时,可以采用分布式方案要解决问题。
实验开始
先搭建mysql主从:
首先用yum安装mysql服务
yum -y install mysql mysql-devel mysql-server
主:
再配置文件里添加:
vim /etc/my.cnf
server-id=1
log-bin=master-bin #主主这个也必须都要写
log-slave-updates=true #假如做mysql主主必须两台都要写
binlog-do-db=testdb #这个是你需要同步的库 这两步主从都一样
binlog-ignore-db=mysql #这个是你绝对不能授权同步的库
这个testdb库,主从都要先有库才可以
然后授权步骤:
给主mysql服务器授权
grant replication slave on *.* to 'slave'@'192.168.1.%' identified by '123.com';
这句话是说由服务器拟定一个用户和和密码等下从服务器也用户这个登陆
flush privileges;
show master status;
这个命令是给一个匹配码之类的东西,从服务器要写上去才能和主建立连接
从:
修改my.cnf配置文件
vim /etc/my.cnf
添加:
server-id=2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
重启MySQL
service mysqld restart
进入MySQL
mysql -u root -p
change master to master_host='192.168.1.1',master_user='slave',master_password='123.com',master_log_file='master-bin.000002',master_log_pos=336;
start slave;
show slave status\G
看到两个yes就成功了
创建测试数据:
然后把你主从分别授权一个远程用户方便让php登录:
安装redis
解压软件包
tar -zxvf redis-4.0.6.tar.gz -C /usr/local
安装redis
cd /usr/local/redis/
make && make install
echo "511" > /proc/sys/net/core/somaxconn
echo never > /sys/kernel/mm/transparent_hugepage/enabled
修改配置文件
vim /etc/sysctl.conf
添加:
vm.overcommit_memory = 1
sysctl –p
mkdir /usr/local/clustem
用六台redis做实验,三台主节点,三台从节点,通过修改配置文件的端口号来实现一台服务器上开六台redis
cd /usr/local/clustem/
mkdir 7000 7001 7002 7003 7004 7005
cd /usr/local/redis/
vim redis.conf
`六个端口号的配置文件修改参数一致,修改完复制到每个端口目录下面``
修改:
port 7000 #修改端口号
cluster-enabled yes #开启集群
cluster-config-file nodes-7000.conf #集群节点配置文件
cluster-node-timeout 5000 #集群节点超时时限
appendonly yes #开启持久化
appendfilename "appendonly-7000.aof" #持久化文件
daemonize yes #redis后台运行
bind 192.168.1.50
这是给另外的redis复制主配置文件:
cp /usr/local/redis/redis.conf /usr/local/clustem/7000
cp /usr/local/redis/redis.conf /usr/local/clustem/7001
cp /usr/local/redis/redis.conf /usr/local/clustem/7002
cp /usr/local/redis/redis.conf /usr/local/clustem/7003
cp /usr/local/redis/redis.conf /usr/local/clustem/7004
cp /usr/local/redis/redis.conf /usr/local/clustem/7005
这是分别修改这几个配置文件里的不同处:
sed -i "s/7000/7001/g" /usr/local/clustem/7001/redis.conf
sed -i "s/7000/7002/g" /usr/local/clustem/7002/redis.conf
sed -i "s/7000/7003/g" /usr/local/clustem/7003/redis.conf
sed -i "s/7000/7004/g" /usr/local/clustem/7004/redis.conf
sed -i "s/7000/7005/g" /usr/local/clustem/7005/redis.conf
sed -i"s/127.0.0.1/192.168.1.4/g" /usr/local/clustem/7000/redis.conf 以此类推7001,7002……
然后分别进去主目录开启
cd /usr/local/clustem/7000
redis-server redis.conf
之后就是加入群集
redis-cli -h 192.168.1.50 -p 7000 #用六台中的一台登录
在之后就是分槽点,注意没有槽点是不能存储数据的
redis-cli -h 192.168.1.50 -p 7000 cluster addslots {0..5461} #为主节点分配槽点,一个集群最少三个主节点,少于三个则集群不可用,为主节点分配完槽点之后,集群生效,槽点取值范围0~16383,建议每台主节点之间平均分
redis-cli -h 192.168.1.50 -p 7001 cluster addslots {5462..10922}
redis-cli -h 192.168.1.50 -p 7002 cluster addslots {10923..16383}
剩下的就是没有槽点的变成从服务器
首先要查看几个有槽点的类似于mac的地址的东西
redis-cli -h 192.168.1.50 -p 7000 cluster nodes
最后把对应的mac 写在
redis-cli -h 192.168.1.4 -p 7003 cluster replicate 9edba6261362d1c4ca2c9d68c83c7b482a737d66
redis-cli -h 192.168.1.4 -p 7004 cluster replicate 5ac9540405a0ee221ae90aea85a85d40c9596b54
redis-cli -h 192.168.1.4 -p 7005 cluster replicate 00f8bd781f80e7a8051711dabfb53663b01144eb
然后去lnmp环境里面
安装redis模块
解压源码包
unzip /root/桌面/phpredis-master.zip
phpize #需要autoconf包,如果没有可以通过yum安装
安装软件包
cd phpredis-master
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
修改php.ini
vim /usr/local/php/php.ini #添加模块
添加;
extension=redis.so
重启php
service php-fpm restart
最后编辑
vim /usr/local/nginx/html/index.php
添加:
<?php
$redis = new Redis();
$redis->connect("192.168.1.4",7000) or die("could not connect redis server");
$query = "select * from nihao.dang_an limit 2"; 这个是你要让redis读取到的那个库的那个表
for ($key = 1; $key <=2; $key++){
if (!$redis->get($key)){
$connect = mysql_connect("192.168.1.2","root","123.com");
mysql_select_db(“nihao”,$connect);
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)){
$redis->set($row["id"],$row["name"]);
$myserver = "mysql";break;
}
}
else{
$myserver = "redis";
$data[$key] = $redis->get($key);
}
}
echo $myserver;
echo "<br>";
for ($key =1; $key<=2; $key++){
echo "number is <b><font color=#FF0000>$key</font></b>";
echo "<br>";
echo "name is <b><font color=#FF0000>$data[$key]</font></b>";
echo "<br>";
}
?>
Firefox 192.168.1.1/index.php
然后去redis查看有没有数据