主从复制:是存储数据的服务结构
主服务器:接受客户端连接的服务器
从服务器:自动与主服务器保持数据一致的服务器
主服务器 主机名:master IP地址:192.168.11.101/24
从服务器 主机名:node01 IP地址:192.168.11.102/24
客户端 主机名:node02 IP地址:192.168.11.103/24
主从服务器都要安装redis服务,分别修改redis监听的地址为192.168.11.101,192.168.11.102
root@Master:~# ss -lntup | grep 6379
tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:* users:(("redis-server",pid=1147,fd=6))
root@Master:~# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
root@Master:~# ss -lntup | grep 6379
root@Master:~# vim /etc/redis/6379.conf
bind 192.168.11.101
root@Master:~# /etc/init.d/redis_6379 start
Starting Redis server...
root@Master:~# redis-cli -h 192.168.11.101 -p 6379
192.168.11.101:6379> ping
PONG
192.168.11.101:6379> INFO replication
# Replication
role:master # 主节点
connected_slaves:0
master_replid:88c2e017cb0ea8cbd01a4f3874b314f8de1775b2
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.11.101:6379>
修改监听的IP地址
# 先停服务器
root@node01:~# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
# 修改配置文件
root@node01:~# vim /etc/redis/6379.conf
# 修改客户端连接redis服务的IP地址
bind 192.168.11.102
root@node01:~# /etc/init.d/redis_6379 start
Starting Redis server...
root@node01:~# ss -lntup |grep 6379
tcp LISTEN 0 128 192.168.11.102:6379 0.0.0.0:* users:(("redis-server",pid=7978,fd=6))
PS:在这还没添加从服务器信息,所以看到是master是正常的!!!
root@node01:~# redis-cli -h 192.168.11.102 -p 6379
192.168.11.102:6379> ping
PONG
192.168.11.102:6379> INFO replication
# Replication
role:master
connected_slaves:0
master_replid:f151ec960f14af322c6b07946a074a30a4c2c731
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.11.102:6379> SLAVEOF 192.168.11.101 6379
OK
192.168.11.102:6379> INFO replication
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:down

root@Master:~# systemctl is-active firewalld.service
active
root@Master:~# systemctl stop firewalld.service
root@Master:~# systemctl disable firewalld.service
root@Master:~# setenforce 0
# 第一次做忘了这条关闭连接命令 苦
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~#
root@node01:~# /etc/init.d/redis_6379 restart
/var/run/redis_6379.pid does not exist, process is not running
Starting Redis server...

root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~# vim /etc/redis/6379.conf
slaveof 192.168.11.101 6379 #修改,指定主服务器的IP地址和端口号
root@node01:~# /etc/init.d/redis_6379 start
root@node01:~# redis-cli -h 192.168.11.102 -p 6379
192.168.11.102:6379> info replication #查看slave服务器的主从信息
# Replication
role:slave #从服务器
master_host:192.168.11.101 #主服务器IP地址
master_port:6379 #主服务器端口号
master_link_status:up #和主服务器的连接状态:up
192.168.11.101:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.11.102,port=6379,state=online,offset=1330,lag=0
master_replid:ecc43c0169695c02204b624365e75859defc0aec
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1330
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:1330
# 添加数据
192.168.11.101:6379> set school qinghua
OK
# 查看数据
192.168.11.101:6379> GET school
"qinghua"
192.168.11.102:6379> KEYS *
1) "school"
192.168.11.102:6379> GET school
"qinghua"
root@node01:~# redis-cli -h 192.168.11.101 -p 6379
192.168.11.101:6379> ping
PONG
192.168.11.101:6379> SLAVEOF no one
OK
192.168.11.101:6379> INFO replication
# Replication
role:master
connected_slaves:1
slave0:ip=192.168.11.102,port=6379,state=online,offset=1853,lag=0
192.168.11.101:6379> exit
主服务器 主机名:master IP地址:192.168.11.101/24
从服务器 主机名:node01 IP地址:192.168.11.102/24
从服务器 主机名:node02 IP地址:192.168.11.103/24
192.168.11.101 192.168.11.102 192.168.11.103
# 停止服务
root@node02:~# /etc/init.d/redis_6379 stop
Stopping ...
Redis stopped
# 修改配置文件
root@node02:~# vim /etc/redis/6379.conf
bind 192.168.11.103
root@node02:~# /etc/init.d/redis_6379 start
Starting Redis server...
root@node02:~# ss -lntup |grep redis
tcp LISTEN 0 128 192.168.11.103:6379 0.0.0.0:* users:(("redis-server",pid=9860,fd=6))
root@Master:~# redis-cli -h 192.168.11.101 -p 6379 shutdown
501 requirepass plj123
root@Master:~# /etc/init.d/redis_6379 start
root@Master:~# redis-cli -h 192.168.11.101 -p 6379 -a plj123
192.168.4.51:6379> info replication
# Replication
role:master
192.168.11.101:6379> set a 1
192.168.11.101:6379> set b 1
192.168.11.101:6379> set c 1
192.168.11.103:6379>
192.168.11.103:6379> SLAVEOF 192.168.11.101 6379
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdown
root@node01:~# vim /etc/redis/6379.conf
289 masterauth plj123
root@node01:~# /etc/init.d/redis_6379 start
192.168.11.102:6379> info replication
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:up
192.168.11.103:6379> INFO replication
# Replication
role:slave
master_host:192.168.11.101
master_port:6379
master_link_status:up
192.168.11.103:6379> KEYS *
1) "school" # 数据已经同步
root@node01:~# redis-cli -h 192.168.11.102 -p 6379 shutdow
192.168.11.101:6379> set AAA CCC
OK
192.168.11.101:6379> KEYS *
1) "school"
2) "AAA"
192.168.11.103:6379> KEYS *
1) "AAA"
2) "school"
root@node01:~# /etc/init.d/redis_6379 restart
root@node01:~# ss -lntup |grep redis
tcp LISTEN 0 128 192.168.11.102:6379 0.0.0.0:* users:(("redis-server",pid=15384,fd=6))
#宕机期间的数据自动同步
root@node01:~# redis-cli -h 192.168.11.102 -p 6379
192.168.11.102:6379> ping
PONG
192.168.11.102:6379> KEYS *
1) "AAA"
2) "school"
我想编写一个ruby脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"
之前有人问过这个问题,我发现了以下clip关于如何一次设置一个类对象的所有属性,但由于批量分配保护,这在Rails中是不可能的。(例如,您不能Object.attributes={})有没有一种很好的方法可以将一个类的属性合并到另一个类中?object1.attributes=object2.attributes.inject({}){|h,(k,v)|h[k]=vifObjectModel.column_names.include?(k);h}谢谢。 最佳答案 利用assign_attributes使用:without_prote
(跟进我之前的问题,Ruby:howcanIcopyavariablewithoutpointingtothesameobject?)我正在编写一个简单的Ruby程序来在.svg文件中进行一些替换。第一步是从文件中提取信息并将其放入数组中。为了避免每次调用此函数时都从磁盘读取文件,我尝试使用memoize设计模式-在第一次调用后的每次调用中都使用缓存结果。为此,我使用了一个在函数之前定义的全局变量。但是,即使我在返回局部变量之前将该变量.dup为局部变量,调用该变量的函数仍在修改全局变量。这是我的实际代码:#memoizetokeepfromhavingtoreadoriginalfi
我有一台服务器,其中只有xls日志文件。每个文件为5-15Mb,并且在文件随时添加的意义上是动态的。现在我需要一种使用Ruby执行以下过程的方法。通过将文件名从一台只有日志文件的服务器发送到另一台服务器来复制文件。我需要将服务器密码作为参数传递。一切都在后台发生,由Ruby脚本触发。 最佳答案 查看Net::SCP和Net::SSHgem。第一个让您使用安全副本检索文件,第二个让您轻松找到可用于检索的文件的名称。在Net::SSH中,ssh.exec!将成为您的friend。来自Net::SCP文档:Net::SCPimplemen
Rails有一个.blank?如果对象为空,将返回true的方法?还是零?可以找到实际代码here.当我尝试在1.9.2上复制它时:classObjectdefblank?respond_to?(:empty?)?empty?:!selfendend调用“.blank”?返回true但调用"".blank?根据railsdocumentation返回false对于.blank,空白字符串应该eval为true?在查看我最初编写的代码之前:classObjectdefblank?!!self.empty?||!!self.nil?endend结果相同。我错过了什么?
当我尝试预编译我的Assets时,出现以下错误。这是具有完整输出的跟踪:RAILS_ENV=productionbundleexecrakeassets:precompile--trace**Invokeassets:precompile(first_time)**Invokeassets:environment(first_time)**Executeassets:environment**Invokeenvironment(first_time)**Executeenvironmentrakeaborted!TypeError:can'tdupNilClass/var/lib/ge
我遇到一个奇怪的问题,我正在使用的Rails引擎中的某些模型在对象空间中被复制。(rdb:1)ObjectSpace.each_object(::Class).each{|klass|putsklass.to_s+":"+klass.object_id.to_sifklass.to_s.eql?("DynamicFieldsets::Field")}DynamicFieldsets::Field:66866100DynamicFieldsets::Field:718363802479发生这种情况时,我不能使用is_a?或相等性检查以测试对象是否是Field类的实例。这个问题只发生在开发
我的目标是将一组由模式指定的文件复制到目标目录。源目录中的文件可以有子目录。我试过:cp_r(Dir.glob('**/*.html'),@target_dir):和cp_r(FileList['**/*.html'],@target_dir):但都不起作用。它只在我做类似的事情时有效:cp_r(Dir['.'],@target_dir):但我只需要复制*.html文件而不是其他任何文件。我需要什么cp--parents命令确实对使用现有的Ruby/Rake方法有什么建议吗?更新看起来用Ant更容易做的事情,用Ruby/Rake堆栈是不可能的-可能我需要研究其他东西。我不想编写自定义代
也许我今天盯着屏幕看的时间太长了,但我认为应该是非常基本的东西却难倒了我。我正在尝试制作一个变量的“副本”,这样我就可以在不修改原始变量的情况下对其进行操作。#originalvarissetfoo=["a","b","c"]#iwantacopyoftheoriginalvarsoidontmodifytheoriginalbar=foo#modifythecopiedvarbar.delete("b")#outputthevaluesputsbar#outputs:["a","c"]-thisisrightputsfoo#outputs:["a","c"]-whyisthisals
我添加到我的.irbrc:IRB.conf[:PROMPT].reverse_merge!(:RAILS_ENV=>{:PROMPT_I=>"#{current_app}#{rails_env}#{prompt}",:PROMPT_N=>"#{current_app}#{rails_env}#{prompt}",:PROMPT_S=>nil,:PROMPT_C=>"?>",:RETURN=>"=>%s\n"})IRB.conf[:PROMPT_MODE]=:RAILS_ENV如果我这样做:current_app="\e[31mfoo_bar_app\e[0m"rails_env="\e