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查看有沒有數據