由于文章篇幅过长,种方特将内容分两篇文章发布,种方本篇文章接上一篇:【LinuxSRE工程师培训】Redis集群的种方三种方式,你都掌握了吗?种方跟着小编继续学习吧。

哨兵模式部署
| 准备3个Redis实例
(可以直接基于上一节搭建的种方主从复制环境即可)

| 创建sentinel的配置文件,数据,种方日志存储目录
mkdir /oldboyedu/softwares/redis16379 cat > /oldboyedu/softwares/redis16379/sentinel.conf <<EOF bind 10.0.0.112 127.0.0.1 port 16379 dir /oldboyedu/data/redis16379 sentinel monitor oldboyedu_master 10.0.0.112 16370 1 sentinel down-after-milliseconds oldboyedu_master 5000 sentinel auth-pass oldboyedu_master oldboyedu EOF配置文件参数说明如下:

| 启动sentinel进程并查看日志
启动sentinel进程
redis-sentinel /oldboyedu/softwares/redis16379/sentinel.conf &> /oldboyedu/logs/redis16379/sentinel.log &查看日志信息
tail -100f /oldboyedu/logs/redis16379/sentinel.log
| 手动停止主库运行,种方模拟主库宕机
手动将主库宕机,种方观察从库被sentinel实现了自动切换
redis-cli -p 16370 -a oldboyedu SHUTDOWN # 由于我们将主库服务停了,种方因此无法再次连接主库了 redis-cli -p 16370 -a oldboyedu INFO REPLICATION redis-cli -p 16371 -a oldboyedu INFO REPLICATION
查看sentinel的种方日志信息,不难发现有记录切换的种方过程,如下所示
tail -100f /oldboyedu/logs/redis16379/sentinel.log
| 手动修复宕机的种方主库,sentinel会自动发现
修复之后,种方之前宕机的种方主库会自动加入集群并成为slaves节点
redis-server /oldboyedu/softwares/redis16370/redis.conf redis-cli -p 16370 -a oldboyedu INFO REPLICATION
温馨提示:除了提到上面的变化外,还有一点变化就是种方配置文件也修改了,每个"slave"节点都新增了以下两行:
(本案例只有"redis16370"和"redis16372"这两个实例的配置文件是slave节点,因此这两个节点中是存在的!)
# tail -3 /oldboyedu/softwares/redis16370/redis.conf # Generated by CONFIG REWRITE user default on #4208512d2963b999e0ef7a467cb42671c30be4d629ec75536a0eb6db15ee0d90 ~* &* +@all replicaof 10.0.0.112 16371 # tail -3 /oldboyedu/softwares/redis16372/redis.conf # Generated by CONFIG REWRITE user default on #4208512d2963b999e0ef7a467cb42671c30be4d629ec75536a0eb6db15ee0d90 ~* &* +@all replicaof 10.0.0.112 16371Cluster模式部署
| 实验环境说明
在生产环境中,如果部署6个redis实例,一般会放到3台硬件服务器
在企业规划中,服务器租用一个分片被分配到两个不同的物理机,防止硬件主机宕机造成的整个分片数据丢失
温馨提示:
本案例为了实验方便,就直接将6个Redis实例放在同一个节点上,对应的端口号为:63790-63795
| 创建多Redis实例使用的配置文件,数据,日志目录
mkdir -pv /oldboyedu/softwares/redis1000{0..5} mkdir -pv /oldboyedu/data/redis1000{0..5} mkdir -pv /oldboyedu/logs/redis1000{0..5}| 为各个Redis实例创建配置文件
# 创建"redis10000"实例的配置文件 cat > /oldboyedu/softwares/redis10000/redis.conf <<EOF port 10000 daemonize yes pidfile /oldboyedu/data/redis10000/redis.pid loglevel notice logfile /oldboyedu/logs/redis10000/redis.log dbfilename dump.rdb dir /oldboyedu/data/redis10000 bind 10.0.0.112 127.0.0.1 # 配置RDB持久化策略 save 900 1 save 300 10 save 60 10000 # 配置AOF持久化 appendonly yes appendfsync everysec # 配置Redis Cluster模式 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 EOF # 创建"redis10001"实例的配置文件 cat > /oldboyedu/softwares/redis10001/redis.conf <<EOF port 10001 daemonize yes pidfile /oldboyedu/data/redis10001/redis.pid loglevel notice logfile /oldboyedu/logs/redis10001/redis.log dbfilename dump.rdb dir /oldboyedu/data/redis10001 bind 10.0.0.112 127.0.0.1 # 配置RDB持久化策略 save 900 1 save 300 10 save 60 10000 # 配置AOF持久化 appendonly yes appendfsync everysec # 配置Redis Cluster模式 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 EOF # 创建"redis10002"实例的配置文件 cat > /oldboyedu/softwares/redis10002/redis.conf <<EOF port 10002 daemonize yes pidfile /oldboyedu/data/redis10002/redis.pid loglevel notice logfile /oldboyedu/logs/redis10002/redis.log dbfilename dump.rdb dir /oldboyedu/data/redis10002 bind 10.0.0.112 127.0.0.1 # 配置RDB持久化策略 save 900 1 save 300 10 save 60 10000 # 配置AOF持久化 appendonly yes appendfsync everysec # 配置Redis Cluster模式 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 EOF # 创建"redis10003"实例的配置文件 cat > /oldboyedu/softwares/redis10003/redis.conf <<EOF port 10003 daemonize yes pidfile /oldboyedu/data/redis10003/redis.pid loglevel notice logfile /oldboyedu/logs/redis10003/redis.log dbfilename dump.rdb dir /oldboyedu/data/redis10003 bind 10.0.0.112 127.0.0.1 # 配置RDB持久化策略 save 900 1 save 300 10 save 60 10000 # 配置AOF持久化 appendonly yes appendfsync everysec # 配置Redis Cluster模式 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 EOF # 创建"redis10004"实例的配置文件 cat > /oldboyedu/softwares/redis10004/redis.conf <<EOF port 10004 daemonize yes pidfile /oldboyedu/data/redis10004/redis.pid loglevel notice logfile /oldboyedu/logs/redis10004/redis.log dbfilename dump.rdb dir /oldboyedu/data/redis10004 bind 10.0.0.112 127.0.0.1 # 配置RDB持久化策略 save 900 1 save 300 10 save 60 10000 # 配置AOF持久化 appendonly yes appendfsync everysec # 配置Redis Cluster模式 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 EOF # 创建"redis10005"实例的配置文件 cat > /oldboyedu/softwares/redis10005/redis.conf <<EOF port 10005 daemonize yes pidfile /oldboyedu/data/redis10005/redis.pid loglevel notice logfile /oldboyedu/logs/redis10005/redis.log dbfilename dump.rdb dir /oldboyedu/data/redis10005 bind 10.0.0.112 127.0.0.1 # 配置RDB持久化策略 save 900 1 save 300 10 save 60 10000 # 配置AOF持久化 appendonly yes appendfsync everysec # 配置Redis Cluster模式 protected-mode no cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 EOF配置参数说明:

温馨提示:
1、Redis的端口号范围在10000~55535之间。这是因为当我们启动各个redis实例后,会监听在对应redis实例的端口上加10000;
2、由于上面我使用了"protected-mode no"指令,表示不开启安全模式,如果设置为"YES",尽管配置了"requirepass"和"masterauth"这两个配置项,我们在将redis节点加入到集群时依旧会报错哟!
3、Redis cluster模式无需像redis sentinel模式那样有一个专门的监控模式;
| 启动各个Redis实例
redis-server /oldboyedu/softwares/redis10000/redis.conf redis-server /oldboyedu/softwares/redis10001/redis.conf redis-server /oldboyedu/softwares/redis10002/redis.conf redis-server /oldboyedu/softwares/redis10003/redis.conf redis-server /oldboyedu/softwares/redis10004/redis.conf redis-server /oldboyedu/softwares/redis10005/redis.conf| 将节点加入集群管理
redis-cli --cluster create 10.0.0.112:10000 10.0.0.112:10001 10.0.0.112:10002 10.0.0.112:10003 10.0.0.112:10004 10.0.0.112:10005 --cluster-replicas 1注意:这里需要自己手动输入yes,如果超时了还没有输入,则会自动退出,b2b供应网需要再次创建!
看到以下信息说明创建redis缓存库成功:

| 查看集群的状态
# 查看集群的状态 redis-cli -p 10005 CLUSTER NODES # 查看master节点的状态 redis-cli -p 10005 CLUSTER NODES | grep "master" # 查看slave节点的状态 redis-cli -p 10005 CLUSTER NODES | grep "slave"
每项的含义如下:

各flags的含义 (上面所说数据项3):

温馨提示:
1、如果有"myself"字样,说明你正在连接的是哪个节点;
2、注意观察槽位编号信息,比如"10.0.0.112:10000 master"被分配到的槽位号是"0-5460",而"10.0.0.112:10001"被分配到的槽位号是"5461-10922","10.0.0.112:10002 master"被分配到的槽位号是"10923-16383";
3、每个redis实例都有其独有的id编号,比如"10.0.0.112:10000 master"的编号为"eefe41adf0a9dc823ef56183881bfa14f10571b9",这有点类似于MySQL的"server_uuid";
总结:在本教程中,我们通过一些示例学习了如何去部署Redis的三种集群,你学会了吗?
不是我不明白,这世界变化快!微软面向 Linux 平台推出了 Visual Studio 2015!昔日的对头,如今正走向融合。这么喜大普奔的事,我准备挑战一下微软重量级软件在 Linux 平台上的安装。然没想到哇。根本没有我想象中的挑战性。看完你就知道了。软件名称:Visual Studio 2015 旗舰版 官方最新版软件大小:1.69MB更新时间:2014-11-171、百度 “Visual Studio Downloads”这一溜关键词,在搜索结果中打开 Visual Studio 的主页。2、可以看到页面上有三个磁贴状方块,最右边的是 Visual Studio Code,我们点击它里面的“下载”。3、进入下载页面,页面上地址栏下方的黄色条带里提示有更新的版本,当然,大家要更新的。先点那个黄条里的 New features,看看有啥新鲜东西。4、各种改进,包括文件管理、编辑器选项、JavaScript 支持升级、Git 增强等等。那还等什么,点击上方黄条上的 Update,去下载升级版吧。5、在接下来的页面,我们点击 Updating on Linux 一节里的链接,开始下载。有两个链接,分别是 64 位的和 32 位的,根据自己的情况选择。6、下载完成之后,点击下载管理器里的“在文件夹中显示”,导航到刚才下载的软件包所在的文件夹。7、在软件包上右键——>提取到此处,开始解压软件包。8、解压完成,进入与软件压缩包同名的文件夹,在一个名为 Code 的可执行文件上双击。9、DUANG!Linux 平台上的微软重量级软件一下出现在眼前。原来,Visual Studio Code 是不开源的,我刚开始想象的软件编译呀,软件包依赖呀等挑战,从开始就不存在好嘛。现在,各位年轻的码农,一切就看你们的了。10、假如和我一样觉得无从下手,好吧,附送免费视频培训,我的名字叫雷锋。
以前一直使用window,今天安装了一个ubuntu系统(假如有同学也想装,建议装英文版的),因为以前ubuntu系统用的不多,所以安装软件就是一个问题。就以安装chrome来说吧:1、在Google chrome上面下载Chrome浏览器。选择正确的版本,比如选择【32 bit .deb (适用于 Debian/Ubuntu)】。2、Ctrl+Alt+T 打开终端,进入你刚刚下载好的Chrome包存放的文件夹(我是直接下载到默认位置的):复制代码代码如下:$ sudo dpkg -i google-chrome-stable_current_amd64.deb有很多同学看到类似以下的错误提示会束手无策,不用担心,原因是因为依赖包的问题,我们安装一下这个依赖包就好了:4、出现以上错误,安装依赖包来解决:复制代码代码如下:$ google-chrome注意:安装软件之前确保你已经做过更新和升级假如没有更新到最新请参考以下更新:复制代码代码如下:$ sudo apt-get update$ sudo apt-get upgrade