LINUX学习------Linux自动化运维——REDIS

一、REDIS

1、Redis 简介

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
特点
1.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
2.Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。

2、Redis 安装部署

server1
获取软件 redis-6.2.4.tar.gz

cd redis-6.2.4/ 
make 									##编译
//当遇到’fatal error: jemalloc/jemalloc.h: No such file or directory‘错误
//删除redis 重新解压编译
make install						
./install_server.sh				##安装 			
vim install_server.sh		##报错需注释
// _pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
#       echo "This systems seems to use systemd."
#       echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
#       exit 1
// #fi

vim /etc/redis/6379.conf
// # bind 127.0.0.1	
//  protected-mode=no	

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

server2
获取软件 redis-6.2.4.tar.gz

tar zxf redis-6.2.4.tar.gz
make 
make install 
./install_server.sh (系统级服务)
cp systemd-redis_server.service  /usr/lib/systemd/system/redis.service
vim /usr/lib/systemd/system/redis.service
[Service]
// #ExecStart=/usr/local/bin/redis-server --supervised systemd --daemonize no
#Alternatively, have redis-server load a configuration file: 
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
#LimitNOFILE=10032
#NoNewPrivileges=yes
#OOMScoreAdjust=-900
#PrivateTmp=yes 
Type=forking
#TimeoutStartSec=infinity
#TimeoutStopSec=infinity
#UMask=0077
#User=redis
#Group=redis
// #WorkingDirectory=/var/lib/redis

mkdir /etc/redis/ 
vim /etc/redis/redis.conf
// protected-mode no				##关闭保护模式
# bind 127.0.0.1					##注释此行本地连接,使用远程连接
daemonize yes  						##redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes时,启用守护进程
logfile "/var/log/redis.log" 		##日志文件路径
// dir /var/lib/redis/ 				##指定本地数据库存放目录
					
mkdir /var/lib/redis/
systemctl daemon-reload
systemctl start redis.service

server3
获取软件 redis-6.2.4.tar.gz

tar zxf redis-6.2.4.tar.gz
make 
make install 
./install_server.sh
vim /etc/redis/6379.conf
daemonize yes
#bind 127.0.0.1 -::1
protected-mode no

二、Redis主从复制

server1

 /etc/init.d/redis_6379 restart			##刷新服务
 redis-cli								##连接 redis
 > set name westos
 > get name 

server2

vim /etc/redis/redis.conf 
slaveof 172.25.22.1 6379 
systemctl stop redis.service  	
systemctl start redis.service 		##刷新服务

server3

vim /etc/redis/redis.conf 
slaveof 172.25.22.1 6379
/etc/init.d/redis_6379 restart

测试
在这里插入图片描述在这里插入图片描述在这里插入图片描述

三、自动选举master

server1

 cd redis-6.2.4/ cp sentinel.conf /etc/redis/ 
 vim /etc/redis/sentinel.conf 
// sentinel monitor mymaster 172.25.22.1 6379 2
// sentinel down-after-milliseconds mymaster 10000

scp  /etc/redis/sentinel.conf server2:/etc/redis/sentinel.conf 
scp  /etc/redis/sentinel.conf server3:/etc/redis/sentinel.conf

检测:

redis-sentinel  /etc/redis/sentinel.conf 
redis-cli 
info

在这里插入图片描述在这里插入图片描述
停掉server1 master主机
server3为master主机
在这里插入图片描述

四、redis 集群

手动添加

mkdir /usr/local/redis 
cd /usr/local/redis/ 
mkdir 700{1..6} 
cd 7001 
vim redis.conf 						##重复
// port 7002 
cluster-enabled yes 
cluster-config-file nodes.conf 
cluster-node-timeout 5000 
appendonly yes 
// daemonize yes

redis-server redis.conf		##启动端口
redis-cli --cluster create 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 --cluster-replicas 1			##创建主从集群

当需要加入新的主从

mkdir 7007 /7008 
vim redis.conf 
redis-cli --cluster add-node
127.0.0.1:7001 127.0.0.1:7001 redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7001 --cluster-slave --cluster-master-id dadafcsfvsvsdcsc redis-cli --cluster reshard 127.0.0.1:30001    ##分配哈希
redis-cli --cluster check 127.0.0.1:30001			##检查该节点主从

脚本添加

cd /root/redis-6.2.4/utils/create-cluster
./create-cluster start					##启动脚本 
./create-cluster create					##创建集群 
redis-cli --cluster check 127.0.0.1:30001  检查  
redis-cli --cluster info 127.0.0.1:30001		 

五、redis+mysql

server1(nginx)

下载rpm cd /pub/docs/redis 
mirror rhel7
cd rehel7
 yum install *.rpm -y

cp test.php /usr/local/nginx/html/

vim /usr/local/nginx/html/test.php
// <?php
        $redis = new Redis();
        $redis->connect('172.25.22.2',6379) or die ("could net connect redis server");   #      $query = "select * from test limit 9";		##redis端
        $query = "select * from test";
        for ($key = 1; $key < 10; $key++)
        {
                if (!$redis->get($key))
                {
                        $connect = mysql_connect('172.25.22.3','redis','westos');			##mysql端
                        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;
//                 }

nginx -s reload 
systemctl daemon-reload  
systemctl start php-fpm
systemctl stop php-fpm 
systemctl restart php-fpm

server2(redis)

vim /etc/redis/redis.conf		##设定server2为master 
systemctl restart redis.service

server3 (mysql)

vim .bash_profile  	
PATH=$PATH:$HOME/bin 
source .bash_profile 
yum install -y mariadb-server
vim /etc/my.cnf

[mysqld] 
datadir=/var/lib/mysql 
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks 
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe] 
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
!includedir /etc/my.cnf.d
 
systemctl start mariadb.service
mysql
mysql> grant all on test.* to redis@'%' identified by 'westos';

vim test.sql
 use test; 
 CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
 INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');

#DELIMITER $$
#CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
#    SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));
#  END$$
#DELIMITER ; 
mysql < test.sql

##此配置只能同步复制,不能异步复制,之可在redis上改写和读取数据,mysql端改写和读取不生效
在这里插入图片描述

mysql端读取和写入数据

server3(mysql) 
yum install mariadb-devel -y 
yum install -y unzip 
unzip lib_mysqludf_json-master.zip 
cd lib_mysqludf_json-master/
yum install -y gcc 
gcc $(mysql_config --cflags) -shared -fPIC -o lib_mysqludf_json.so lib_mysqludf_json.c 
cp lib_mysqludf_json.so  /usr/lib64/mysql/plugin/

mysql
mysql> show global variables like 'plugin_dir';

在这里插入图片描述

mysql> CREATE FUNCTION json_object RETURNS STRING SONAME 'lib_mysqludf_json.so';
mysql> select * from mysql.func;

在这里插入图片描述

tar zxf gearman-mysql-udf-0.6.tar.gz  
cd gearman-mysql-udf-0.6/
./configure --libdir=/usr/lib64/mysql/plugin/ 
yum install -y libgearman* libevent* 
libevent-devel-2.0.21-4.el7.x86_64.rpm
libgearman-1.1.12-18.el7.x86_64.rpm
libgearman-devel-1.1.12-18.el7.x86_64.rpm 
./configure --libdir=/usr/lib64/mysql/plugin/ 
make 
make install

cd /usr/local/lib (目录为空) 
mysql 
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.22.1:4730’);

在这里插入图片描述
vim test.sql

use test;
#CREATE TABLE `test` (`id` int(7) NOT NULL AUTO_INCREMENT, `name` char(8) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
#INSERT INTO `test` VALUES (1,'test1'),(2,'test2'),(3,'test3'),(4,'test4'),(5,'test5'),(6,'test6'),(7,'test7'),(8,'test8'),(9,'test9');

DELIMITER $$ 
CREATE TRIGGER datatoredis AFTER UPDATE ON test FOR EACH ROW BEGIN
    SET @RECV=gman_do_background('syncToRedis', json_object(NEW.id as `id`, NEW.name as `name`));   
    END$$ 
DELIMITER ; 
 
server1(nginx) 
systemctl start gearmand 
php -m | grep gearman 
php -m | grep redis 
vim worker.php 

在这里插入图片描述
在这里插入图片描述

nohup php worker.php &`
 mysql> mysql use test update test set name='hush' where id=1;		##修改mysql数据

修改mysql端数据会异步更新
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值