Redis安裝及主從配置php
server2,3,4.html
安裝mysql
tar zxf redis-4.0.1.tar.gznginx
cd redis-4.0.1web
yum install -y gccredis
makesql
make install數據庫
cd utils/json
./install_server.shvim
cd /etc/redis/
vim 6379.conf
/etc/init.d/redis_6379 restart
redis-cli
server3,4
主從配置(2主,3,4從)
vim /etc/redis/6379.conf
/etc/init.d/redis_6379 restart
此時在server2中redis寫入,server2,3會自動複製
Redis高可用
[root@server2 ~]# cd redis-4.0.1
[root@server2 redis-4.0.1]# cp sentinel.conf /etc/redis/
[root@server2 redis-4.0.1]# cd /etc/redis/
[root@server2 redis]# vim sentinel.conf
[root@server2 redis]# scp sentinel.conf root@172.25.8.3:/etc/redis/
[root@server2 redis]# scp sentinel.conf root@172.25.8.4:/etc/redis/
[root@server2 redis]# redis-sentinel /etc/redis/sentinel.conf ##將三臺機子都啓動sentinel服務
server3
[root@server3 redis]# redis-sentinel /etc/redis/sentinel.conf
server4
[root@server4 ~]# redis-sentinel /etc/redis/sentinel.conf
server2:
[root@server2 ~]# redis-cli -p 26379
127.0.0.1:26379> info
此時,中止server2redis服務:
[root@server2 ~]# redis-cli
127.0.0.1:6379> SHUTDOWN
not connected>
會發現server3選舉成爲新的master
[root@server2 ~]# redis-cli -p 26379
127.0.0.1:26379> info
[root@server2 ~]# vim /etc/redis/6379.conf 將2做爲從再次開啓
[root@server2 redis]# /etc/init.d/redis_6379 start
[root@server2 redis]# redis-cli
127.0.0.1:6379> info
redis集羣
[root@server2 ~]# cd /usr/local/
[root@server2 local]# mkdir cluster ##創建集羣目錄
[root@server2 local]# cd cluster/
[root@server2 cluster]# mkdir 700{1..6}
[root@server2 cluster]# cd 7001/
[root@server2 7001]# vim redis.conf(其他依法操做,只需修改相應port參數)
[root@server2 7001]# redis-server redis.conf ##打開集羣服務
[root@server2 7001]# cd ..
[root@server2 cluster]# cp 7001/redis.conf 7002/
[root@server2 cluster]# cp 7001/redis.conf 7003
[root@server2 cluster]# cp 7001/redis.conf 7004
[root@server2 cluster]# cp 7001/redis.conf 7005
[root@server2 cluster]# cp 7001/redis.conf 7006
[root@server2 cluster]# cd 7002/
[root@server2 7002]# ls
redis.conf
[root@server2 7002]# vim redis.conf
[root@server2 7002]# redis-server redis.conf
[root@server2 7002]# cd ..
[root@server2 cluster]# cd 7003/
[root@server2 7003]# vim redis.conf
[root@server2 7003]# redis-server redis.conf
[root@server2 7003]# cd ..
[root@server2 cluster]# cd 7004/
[root@server2 7004]# vim redis.conf
[root@server2 7004]# redis-server redis.conf
[root@server2 7004]# cd ..
[root@server2 cluster]# cd 7005/
[root@server2 7005]# vim redis.conf
[root@server2 7005]# redis-server redis.conf
[root@server2 cluster]# cd 7006/
[root@server2 7006]# vim redis.conf
[root@server2 7006]# redis-server redis.conf
[root@server2 7006]# cd
[root@server2 ~]# cd redis-4.0.1
[root@server2 redis-4.0.1]# cd src/
[root@server2 src]# cp redis-trib.rb /usr/local/bin/
[root@server2 src]# cd
[root@server2 ~]# yum install rubygems-1.3.7-5.el6.noarch.rpm -y
[root@server2 ~]# yum install libyaml-0.1.3-4.el6_6.x86_64.rpm ruby-2.2.3-1.el6.x86_64.rpm ##安裝依賴包
[root@server2 ~]# gem install --local redis-4.0.1.gem
[root@server2 ~]# redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 ##建立集羣
[root@server2 ~]# redis-trib.rb check 127.0.0.1
[root@server2 ~]# redis-cli -c -p 7001
127.0.0.1:7001> set name westos
-> Redirected to slot [5798] located at 127.0.0.1:7002 ##提示內容會轉到7002上
OK[root@server2 ~]# redis-cli -c -p 7001
127.0.0.1:7001> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"westos"
[root@server2 ~]# redis-cli -c -p 7002
127.0.0.1:7002> get name
"westos"
127.0.0.1:7002>
[root@server2 ~]# redis-cli -c -p 7006
127.0.0.1:7006> get name
-> Redirected to slot [5798] located at 127.0.0.1:7002
"westos"
127.0.0.1:7002>
[root@server2 ~]# redis-cli -p 7002
127.0.0.1:7002> SHUTDOWN ##關閉一個master,會發現集羣會繼續運行
not connected>
[root@server2 ~]# redis-trib.rb check 127.0.0.1:7001 ##查看集羣狀態
[root@server2 ~]# redis-cli -c -p 7001
127.0.0.1:7001> get name
-> Redirected to slot [5798] located at 127.0.0.1:7005
"westos"
127.0.0.1:7005>
root@server2 ~]# redis-cli -c -p 7005 ##再關閉一個master,這時集羣會down掉
127.0.0.1:7005> SHUTDOWN
not connected>
[root@server2 ~]# redis-cli -c -p 7001
127.0.0.1:7001> get name
(error) CLUSTERDOWN The cluster is down
Redis用做mysql緩存
Server3:redis -master
Server4:redis-slave lnmp
Server1:mysql
server1:
[root@server1 ~]# yum install -y mysql-server
[root@server1 ~]# /etc/init.d/mysqld start
[root@server1 ~]# mysql
mysql> show databases;
mysql> grant all on test.* to redis@'%' identified by 'westos'; ##遠程登錄用戶受權
server4;
[root@server4 ~]# cd redis/
[root@server4 redis]# rpm -ivh nginx-1.8.0-1.el6.ngx.x86_64.rpm 安裝nginx與php
[root@server4 redis]# yum install -y php*
[root@server4 redis]# cd /etc/nginx/
[root@server4 nginx]# cd
[root@server4 ~]# vim /etc/php.ini
修改時區
[root@server4 ~]# cd /etc/php.d/
[root@server4 php.d]# /etc/init.d/php-fpm start
[root@server4 php.d]# /etc/init.d/php-fpm reload
[root@server4 php.d]# cd /etc/
[root@server4 etc]# cd php-fpm.d/
[root@server4 php-fpm.d]# vim www.conf( 將29行和41行後的改成nginx)
[root@server4 php-fpm.d]# /etc/init.d/php-fpm reload
配置nginx
[root@server4 php-fpm.d]# cd /etc/nginx/
[root@server4 nginx]# cd conf.d/
[root@server4 conf.d]# vim default.conf
[root@server4 conf.d]# /etc/init.d/nginx start
[root@server4 conf.d]# cd /usr/share/nginx/html/
[root@server4 html]# vim index.php (編輯一個PHP默認訪問頁面)
訪問172.25.8.4
[root@server4 ~]# cd redis/ ##(這裏有一個寫好的測試頁面)
[root@server4 redis]# cp test.php /usr/share/nginx/html/
[root@server4 redis]# cd /usr/share/nginx/html/
[root@server4 html]# vim test.php
[root@server4 html]# yum install unzip -y
[root@server4 ~]# cd redis/
[root@server4 redis]# unzip phpredis-master.zip
[root@server4 redis]# cd phpredis-master
[root@server4 phpredis-master]# phpize
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
[root@server4 phpredis-master]# ./configure
[root@server4 phpredis-master]# make
[root@server4 phpredis-master]# make install
cd /etc/php.d/
[root@server4 php.d]# ls
curl.ini json.ini mysql.ini pdo_sqlite.ini zip.ini
fileinfo.ini mbstring.ini pdo.ini phar.ini
gd.ini mysqli.ini pdo_mysql.ini sqlite3.ini
[root@server4 php.d]# cp mysql.ini redis.ini
[root@server4 php.d]# vim redis.ini
[root@server4 php.d]# /etc/init.d/php-fpm reload
[root@server4 php.d]# php -m |grep redis
[root@server4 ~]# cd redis/ ##有一個本身寫好用來測試的test.sql
[root@server4 redis]# mysql -h 172.25.8.1 -u redis -p < test.sql ##導入到數據庫中
Enter password:
server1:
mysql> use test
mysql> show tables;
mysql> select * from test;
訪問web頁面
至此,Redeis用做mysql緩存已完成,但會有一個問題,此時若是在數據庫中更新表中內容,redis卻不會更新,會出現數據不一樣步的現象,此時就須要mysql經過觸發器改變數據同步到redis。
經過gearman實現數據同步
server4:
[root@server4 redis]# yum install -y gearmand-1.1.8-2.el6.x86_64.rpm libgearman-* libevent-*
[root@server4 redis]# /etc/init.d/gearmand start
[root@server4 redis]# scp lib_mysqludf_json-master.zip gearman-mysql-udf-0.6.tar.gz root@172.25.8.1:
server1:
[root@server1 ~]# yum install unzip -y
[root@server1 ~]# unzip lib_mysqludf_json-master.zip
[root@server1 ~]# ls
gearman-mysql-udf-0.6.tar.gz lib_mysqludf_json-master.zip
lib_mysqludf_json-master
[root@server1 ~]# cd lib_mysqludf_json-master
[root@server1 lib_mysqludf_json-master]# ls
lib_mysqludf_json.c lib_mysqludf_json.so README.md
lib_mysqludf_json.html lib_mysqludf_json.sql
[root@server1 lib_mysqludf_json-master]# yum install gcc -y
[root@server1 lib_mysqludf_json-master]# yum install -y mysql-devel
[root@server1 lib_mysqludf_json-master]# gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c
[root@server1 ~]# ls
gearman-mysql-udf-0.6.tar.gz lib_mysqludf_json-master.zip
lib_mysqludf_json-master
[root@server1 ~]# cd lib_mysqludf_json-master
[root@server1 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/
[root@server1 lib_mysqludf_json-master]# mysql
mysql> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
##註冊udf函數
mysql> select * from mysql.func;
[root@server1 ~]# tar zxf gearman-mysql-udf-0.6.tar.gz
[root@server1 ~]# cd gearman-mysql-udf-0.6
[root@server1 ~]# yum install -y libgearman-* libevent-*
[root@server1 gearman-mysql-udf-0.6]# ./configure --with-mysql --libdir=/usr/lib64/mysql/plugin/
[root@server1 gearman-mysql-udf-0.6]# make
[root@server1 gearman-mysql-udf-0.6]# make install
[root@server1 ~]# mysql ##註冊udf函數
mysql> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
mysql> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
mysql> select * from mysql.func;
mysql> SELECT gman_servers_set('172.25.8.4:4730');
server4:
[root@server4 redis]# vim test.sql
[root@server4 redis]# mysql -h 172.25.8.1 -u redis -p < test.sql
server1:
mysql> SHOW TRIGGERS FROM test; ##查看觸發器
server4:
[root@server4 redis]# tar zxf gearman-1.1.2.tgz
[root@server4 redis]# cd gearman-1.1.2
[root@server4 gearman-1.1.2]# phpize
[root@server4 gearman-1.1.2]# ./configure
[root@server4 gearman-1.1.2]# make
[root@server4 gearman-1.1.2]# make install
[root@server4 gearman-1.1.2]# cd /etc/php.d/
[root@server4 php.d]# cp redis.ini gearman.ini
[root@server4 php.d]# vim gearman.ini
[root@server4 php.d]# /etc/init.d/php-fpm reload
[root@server4 php.d]# cd
[root@server4 ~]# cd redis/
[root@server4 redis]# cp worker.php /usr/local/
[root@server4 redis]# cd /usr/local/
[root@server4 local]# vim worker.php
[root@server4 local]# nohup php /usr/local/worker.php &
server1:
mysql> use test;
mysql> update test set name='hello' where id=1; ##更新數據
mysql> select * from test;
server3:
[root@server3 redis]# redis-cli
127.0.0.1:6379> get 1
"hello"
頁面訪問;
172.25.8.4/test.php
Ok。