[root@server2 ~]# cd /etc/redis/
[root@server2 redis]# vim 6379.conf ##配置一个master最少要对应一个slave,用户才可以往里面写数据
[root@server2 redis]# /etc/init.d/redis_6379 restart
[root@server1 ~]# /etc/init.d/redis_6379 stop
[root@server1 ~]# chkconfig redis_6379 off
[root@server1 ~]# cd /usr/local/
[root@server1 local]# mkdir rediscluster
[root@server1 local]# cd rediscluster/
[root@server1 rediscluster]# mkdir 7000 7001 7002 7003 7004 7005
[root@server1 rediscluster]# cd 7000
[root@server1 7000]# vim redis.conf
[root@server1 7000]# redis-server redis.conf
[root@server1 7000]# ps aux|grep redis-server
root 2265 0.1 0.7 153824 7700 ? Ssl 17:53 0:00 redis-server *:7000 [cluster]
root 2272 0.0 0.0 112648 964 pts/0 R+ 17:54 0:00 grep --color=auto redis-server
[root@server1 7000]# cd ..
[root@server1 rediscluster]# cp 7000/redis.conf 7001/
[root@server1 rediscluster]# cp 7000/redis.conf 7002
[root@server1 rediscluster]# cp 7000/redis.conf 7003
[root@server1 rediscluster]# cp 7000/redis.conf 7004
[root@server1 rediscluster]# cp 7000/redis.conf 7005
[root@server1 rediscluster]# cd 7001
[root@server1 7001]# vim redis.conf
[root@server1 7001]# redis-server redis.conf
[root@server1 7001]# ps aux|grep redis-server
root 2265 0.1 0.7 153824 7700 ? Ssl 17:53 0:00 redis-server *:7000 [cluster]
root 2295 0.0 0.7 153824 7696 ? Ssl 17:55 0:00 redis-server *:7001 [cluster]
root 2300 0.0 0.0 112648 960 pts/0 R+ 17:55 0:00 grep --color=auto redis-server
[root@server1 7001]# cd ../7002
[root@server1 7002]# vim redis.conf
[root@server1 7002]# redis-server redis.conf
[root@server1 7002]# ps aux|grep redis-server
root 2265 0.1 0.7 153824 7700 ? Ssl 17:53 0:00 redis-server *:7000 [cluster]
root 2295 0.1 0.7 153824 7696 ? Ssl 17:55 0:00 redis-server *:7001 [cluster]
root 2312 0.0 0.7 153824 7700 ? Ssl 17:56 0:00 redis-server *:7002 [cluster]
root 2317 0.0 0.0 112648 964 pts/0 R+ 17:56 0:00 grep --color=auto redis-server
[root@server1 7002]# cd ../7003
[root@server1 7003]# vim redis.conf
[root@server1 7003]# redis-server redis.conf
[root@server1 7003]# ps aux|grep redis-server
root 2265 0.1 0.7 153824 7700 ? Ssl 17:53 0:00 redis-server *:7000 [cluster]
root 2295 0.0 0.7 153824 7696 ? Ssl 17:55 0:00 redis-server *:7001 [cluster]
root 2312 0.1 0.7 153824 7700 ? Ssl 17:56 0:00 redis-server *:7002 [cluster]
root 2328 0.0 0.7 153824 7696 ? Ssl 17:56 0:00 redis-server *:7003 [cluster]
root 2333 0.0 0.0 112648 960 pts/0 R+ 17:57 0:00 grep --color=auto redis-server
[root@server1 7003]# cd ../7004
[root@server1 7004]# vim redis.conf
[root@server1 7004]# redis-server redis.conf
[root@server1 7004]# ps aux|grep redis-server
root 2265 0.1 0.7 153824 7700 ? Ssl 17:53 0:00 redis-server *:7000 [cluster]
root 2295 0.0 0.7 153824 7696 ? Ssl 17:55 0:00 redis-server *:7001 [cluster]
root 2312 0.1 0.7 153824 7700 ? Ssl 17:56 0:00 redis-server *:7002 [cluster]
root 2328 0.1 0.7 153824 7696 ? Rsl 17:56 0:00 redis-server *:7003 [cluster]
root 2344 0.0 0.7 153824 7700 ? Ssl 17:57 0:00 redis-server *:7004 [cluster]
root 2349 0.0 0.0 112648 964 pts/0 R+ 17:57 0:00 grep --color=auto redis-server
[root@server1 7004]# cd ../7005
[root@server1 7005]# vim redis.conf
[root@server1 7005]# redis-server redis.conf
[root@server1 7005]# ps aux|grep redis-server
root 2265 0.1 0.7 153824 7700 ? Ssl 17:53 0:00 redis-server *:7000 [cluster]
root 2295 0.0 0.7 153824 7696 ? Ssl 17:55 0:00 redis-server *:7001 [cluster]
root 2312 0.1 0.7 153824 7700 ? Ssl 17:56 0:00 redis-server *:7002 [cluster]
root 2328 0.1 0.7 153824 7696 ? Rsl 17:56 0:00 redis-server *:7003 [cluster]
root 2344 0.1 0.7 153824 7700 ? Ssl 17:57 0:00 redis-server *:7004 [cluster]
root 2353 0.0 0.7 153824 7700 ? Ssl 17:58 0:00 redis-server *:7005 [cluster]
root 2358 0.0 0.0 112648 964 pts/0 R+ 17:58 0:00 grep --color=auto redis-server
[root@server1 7005]# cd
[root@server1 ~]# cd redis-5.0.3/
[root@server1 redis-5.0.3]# cd src/
[root@server1 src]# cp redis-trib.rb /usr/local/bin/
[root@server1 src]# cd
[root@server1 ~]# yum install ruby -y
[root@server1 ~]# redis-cli --cluster help
[root@server1 ~]# redis-cli --cluster create --cluster-replicas 1 127.0.0.1:7000 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
测试:
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7000
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7001
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7002
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7003
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7004
[root@server1 ~]# redis-cli --cluster check 127.0.0.1:7005
[root@server1 ~]# redis-cli -c -p 7000
127.0.0.1:7000> info
[root@server1 ~]# redis-cli -c -p 7005
127.0.0.1:7005> INFO
127.0.0.1:7005> set name westos
-> Redirected to slot [5798] located at 127.0.0.1:7001
OK
127.0.0.1:7001> get name
"westos"
[root@server1 ~]# redis-cli -c -p 7001
127.0.0.1:7001> SHUTDOWN
not connected>
[root@server1 ~]# ps aux|grep redis-server
root 2265 0.0 1.4 163040 14280 ? Ssl 17:53 0:00 redis-server *:7000 [cluster]
root 2312 0.1 0.7 156384 8084 ? Ssl 17:56 0:01 redis-server *:7002 [cluster]
root 2328 0.0 0.7 156384 8032 ? Ssl 17:56 0:00 redis-server *:7003 [cluster]
root 2344 0.0 0.7 156384 8056 ? Ssl 17:57 0:00 redis-server *:7004 [cluster]
root 2353 0.0 1.2 163040 12540 ? Ssl 17:58 0:00 redis-server *:7005 [cluster]
root 2422 0.0 0.0 112648 964 pts/0 R+ 18:10 0:00 grep --color=auto redis-server
[root@server1 ~]# redis-cli -c -p 7004
127.0.0.1:7004> INFO
[root@server1 ~]# cd /usr/local/rediscluster/7001
[root@server1 7001]# redis-server redis.conf
[root@server1 7001]# ps aux|grep redis-server
root 2265 0.1 1.4 163040 14288 ? Ssl 17:53 0:01 redis-server *:7000 [cluster]
root 2312 0.1 0.7 156384 8092 ? Ssl 17:56 0:01 redis-server *:7002 [cluster]
root 2328 0.0 0.7 156384 8040 ? Ssl 17:56 0:00 redis-server *:7003 [cluster]
root 2344 0.1 1.2 163040 12540 ? Ssl 17:57 0:00 redis-server *:7004 [cluster]
root 2353 0.0 1.4 163040 14520 ? Ssl 17:58 0:00 redis-server *:7005 [cluster]
root 2432 0.1 0.9 156896 10012 ? Ssl 18:11 0:00 redis-server *:7001 [cluster]
root 2439 0.0 0.0 112648 960 pts/0 R+ 18:11 0:00 grep --color=auto redis-server
[root@server1 7001]# redis-cli -c -p 7004
127.0.0.1:7004> INFO
127.0.0.1:7004> get name
"westos"
[root@server1 7001]# redis-cli --cluster check 127.0.0.1:7004
[root@server1 rediscluster]# mkdir 7006
[root@server1 rediscluster]# mkdir 7007
[root@server1 rediscluster]# cp 7000/redis.conf 7006
[root@server1 rediscluster]# cp 7000/redis.conf 7007
[root@server1 rediscluster]# cd 7006
[root@server1 7006]# vim redis.conf
[root@server1 rediscluster]# redis-server redis.conf
[root@server1 rediscluster]# cd ../7007
[root@server1 7007]# vim redis.conf
[root@server1 7007]# redis-server redis.conf
[root@server1 rediscluster]# redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000
[root@server1 rediscluster]# redis-cli --cluster info 127.0.0.1:7006
[root@server1 rediscluster]# redis-cli --cluster add-node --cluster-slave --cluster-master-id
73901351b9303f07bd69c890117062db0c4df571 127.0.0.1:7007 127.0.0.1:7000
[root@server1 rediscluster]# redis-cli --cluster reshard 127.0.0.1:7004
[root@server1 rediscluster]# redis-cli --cluster info 127.0.0.1:7001
哈细槽不完整或过半master宕机都会导致整个集群不可用
不完整:kill一个master、slave进程对
1)PHP的rpm包安装
gearmand-1.1.12-18.el7.x86_64.rpm
libgearman-1.1.12-18.el7.x86_64.rpm
libzip-0.10.1-8.el7.x86_64.rpm
openssl-1.0.2k-16.el7.x86_64.rpm
openssl-libs-1.0.2k-16.el7.x86_64.rpm
php-cli-5.4.16-46.el7.x86_64.rpm
php-common-5.4.16-46.el7.x86_64.rpm
php-fpm-5.4.16-46.el7.x86_64.rpm
php-mysql-5.4.16-46.el7.x86_64.rpm
php-pdo-5.4.16-46.el7.x86_64.rpm
php-pecl-gearman-1.1.2-1.el7.x86_64.rpm
php-pecl-igbinary-1.2.1-1.el7.x86_64.rpm
php-pecl-redis-2.2.8-1.el7.x86_64.rpm
php-process-5.4.16-46.el7.x86_64.rpm
php-xml-5.4.16-46.el7.x86_64.rpm
[root@server1 rhel7]# yum install * -y
[root@server1 rhel7]# cd /etc/php-fpm.d/
[root@server1 php-fpm.d]# vim www.conf
[root@server1 php-fpm.d]# systemctl start php-fpm
2)nginx的原码安装
nginx-1.14.2.tar.gz
[root@server1 ~]# yum install gcc pcre-devel zlib-devel -y
[root@server1 ~]# tar zxf nginx-1.14.2.tar.gz
[root@server1 ~]# cd nginx-1.14.2/
[root@server1 nginx-1.14.2]# vim auto/cc/gcc
[root@server1 nginx-1.14.2]# ./configure --prefix=/usr/local/nginx
[root@server1 nginx-1.14.2]# make
[root@server1 nginx-1.14.2]# make install
[root@server1 nginx-1.14.2]# cd /usr/local/nginx/conf/
[root@server1 conf]# vim nginx.conf
[root@server1 conf]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
[root@server1 conf]# nginx -t
[root@server1 conf]# nginx
[root@server1 conf]# cd /usr/local/nginx/html/
[root@server1 html]# vim index.php
[root@server1 html]# ls
50x.html index.html index.php test.php test.sql worker.php
[root@server1 html]# mv worker.php /usr/local/
[root@server1 html]# mv test.sql ~
[root@server1 html]# ls
50x.html index.html index.php test.php
[root@server1 html]# rm -f index.php
[root@server1 html]# mv test.php index.php
[root@server1 html]# vim index.php
$redis = new Redis();
$redis->connect('172.25.19.2',6379) or die ("could net connect redis server");
# $query = "select * from test limit 9";
$query = "select * from test";
for ($key = 1; $key < 10; $key++)
{
if (!$redis->get($key))
{
$connect = mysql_connect('172.25.19.3','redis','westos');
mysql_select_db(test);
$result = mysql_query($query);
//如果没有找到$key,就将该查询sql的结果缓存到redis
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 "
";
for ($key = 1; $key < 10; $key++)
{
echo "number is $key";
echo "
";
echo "name is $data[$key]";
echo "
";
}
?>
5)redis
[root@server2 redis]# redis-cli
127.0.0.1:6379> INFO [section]
4)maridb
[root@server3 ~]# cd /var/lib/mysql
[root@server3 mysql]# rm -fr *
[root@server3 mysql]# ls
[root@server3 mysql]# cd
[root@server3 ~]# rpm -e `rpm -qa|grep mysql` --nodeps ##卸载mysql相关的包
warning: /etc/my.cnf saved as /etc/my.cnf.rpmsave
[root@server3 ~]# yum install mariadb -y
[root@server3 ~]# yum install mariadb-server -y
[root@server3 ~]# vim /etc/my.cnf
[root@server3 ~]# systemctl start mariadb.service
[root@server1 ~]# scp test.sql server3:
[root@server3 ~]# mysql
MariaDB [(none)]> show databases;
[root@server3 ~]# mysql < test.sql
[root@server3 ~]# mysql
MariaDB [(none)]> use test;
MariaDB [test]> select * from test;
MariaDB [test]> grant all on test.* to redis@'%' identified by 'westos';
【server2】
[root@server2 redis]# redis-cli
127.0.0.1:6379> get 1
"test1"
127.0.0.1:6379> get 2
"test2"
127.0.0.1:6379>
测试存在的数据同步问题:
MariaDB [test]> desc test;
MariaDB [test]> update test set name='westos' where id=1;
MariaDB [test]> select * from test; ##数据库已经更新
[root@server2 redis]# redis-cli ##redis缓存的还是更新前的数据
127.0.0.1:6379> get 1
"test1"
127.0.0.1:6379>
client:mysql ->update -> trigger(触发器生效)->mysqludf_json(转化为json数据结构)->gman_do_background(gearmand:4730)(把通识的json模块发给gearmand)
server:gearmand gearmanip:4730
worker:php->php-gesrman:4730(连接server4370拿更新任务) -> 传给php-redis->sync_to_redis(更新redis)
[root@server1 redis]# yum install -y gearmand-1.1.8-2.el6.x86_64.rpm libgearman-* libevent-*
[root@server1 redis]# systemctl start gearmand
[root@server3 mysql]# yum install unzip -y
[root@server3 ~]# unzip lib_mysqludf_json-master.zip
[root@server3 ~]# cd lib_mysqludf_json-master/
[root@server3 lib_mysqludf_json-master]# yum install gcc mariadb-devel -y
[root@server3 lib_mysqludf_json-master]# cp lib_mysqludf_json.so /usr/lib64/mysql/plugin/ #拷贝 lib_mysqludf_json.so 模块
查看 mysql 的模块目录:
[root@server3 lib_mysqludf_json-master]# mysql
MariaDB [(none)]> show global variables like 'plugin_dir'; #查看模块目录
MariaDB [(none)]> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so'; #注册 UDF 函数
MariaDB [(none)]> select * from mysql.func; #查看函数
这个插件是用来管理调用 Gearman 的分布式的队列
[root@server3 ~]# tar zxf gearman-mysql-udf-0.6.tar.gz
[root@server3 ~]# yum install libgearman-1.1.12-18.el7.x86_64.rpm libgearman-devel-1.1.12-18.el7.x86_64.rpm libevent-devel-2.0.21-4.el7.x86_64.rpm -y
[root@server3 ~]# cd gearman-mysql-udf-0.6/
[root@server3 gearman-mysql-udf-0.6]# ./configure --libdir=/usr/lib64/mysql/plugin/ --with-mysql
[root@server3 gearman-mysql-udf-0.6]# make && make install
[root@server3 gearman-mysql-udf-0.6]# cd /usr/lib64/mysql/plugin/
注册 UDF 函数:
[root@server3 plugin]# mysql
MariaDB [(none)]> CREATE FUNCTION gman_do_background RETURNS STRING SONAME 'libgearman_mysql_udf.so';
MariaDB [(none)]> CREATE FUNCTION gman_servers_set RETURNS STRING SONAME 'libgearman_mysql_udf.so';
MariaDB [(none)]> select * from mysql.func; #查看函数
MariaDB [(none)]> SELECT gman_servers_set('172.25.19.1:4730'); #指定 gearman 的服务信息
[root@server3 plugin]# cd
[root@server3 ~]# vim test.sql
[root@server3 ~]# mysql < test.sql
[root@server1 ~]# rpm -q gearmand
gearmand-1.1.12-18.el7.x86_64
[root@server1 ~]# systemctl start gearmand
[root@server1 ~]# cd /usr/local/
[root@server1 local]# vim worker.php
$worker = new GearmanWorker();
$worker->addServer();
$worker->addFunction('syncToRedis', 'syncToRedis');
$redis = new Redis();
$redis->connect('172.25.19.2', 6379);
while($worker->work());
function syncToRedis($job)
{
global $redis;
$workString = $job->workload();
$work = json_decode($workString);
if(!isset($work->id)){
return false;
}
$redis->set($work->id, $work->name);
}
?>
[root@server1 local]# which php
/usr/bin/php
[root@server1 local]# nohup php /usr/local/worker.php &
[1] 5539
[root@server1 local]# nohup: ignoring input and appending output to ‘nohup.out’
[root@server3 ~]# mysql
MariaDB [(none)]> SHOW TRIGGERS FROM test;
MariaDB [(none)]> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [test]> update test set name='new' where id=1;
MariaDB [test]> select * from test;
[root@server2 redis]# redis-cli
127.0.0.1:6379> get 1
"new"
刷新测试页面数据同步