django项目配置mysql主从数据库实现读写分离
"""
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 3306, # 主
'USER': 'root', # 主数据库用户名
'PASSWORD': 'password', # 主数据库密码
'NAME': 'database' # 主数据库名字
},
'slave': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': 3307, #从
'USER': 'root', # 从数据库用户名
'PASSWORD': 'password', # 从数据库密码
'NAME': 'database' # 从数据库名字
}
}
"""
- 2、创建数据库操作的路由分发类
- 在项目的utils中创建db_router.py文件,并在该文件中定义一个db类,用来进行读写分离
"""
class MysqlDBRouter(object):
"""数据库主从读写分离路由"""
def db_read(self, model, **hints):
"""读数据库"""
return "slave"
def db_write(self, model, **hints):
"""写数据库"""
return "default"
def allow_relation(self, obj1, obj2, **hints):
"""是否运行关联操作"""
return True
"""
- 3、项目settings配置文件中配置读写分离的路由
"""
# 配置读写分离
DATABASE_ROUTERS = ['itme_name.utils.db_router.MysqlDBRouter'] # 指定你的路由分发类
"""
redis的主从配置
"""
1、根据配置文件启动redis:redis-server redis.config
2、启动redis客户端:redis-cli-p port
3、slaver连接master:slaveof host:ip
4、关闭redis:shutdown
5、查看主从信息:info replication
"""
"""
1、比如说按照1主2从的结构搭建,即1个master,2个slaver节点
2、redis配置文件redis.conf的配置
master:6379
slaver1:6381 slaveof 127.0.0.1 6379
slaver2:6382 slaveof 127.0.0.1 6379
3、配置主从节点:通过info replication查看主从关系
4、master节点设置key后异步同步到slaver节点;slaver节点只能读取数据,不能修改
5、主节点挂掉之后,手动将s1子节点升级为master(slaveof no one)
master的节点:shutdown关闭节点
slaver1节点:slaveof no one将其升级master节点
slaver2节点:使用slaveof 127.0.0.1 6381重连slave1将其视为master节点
6、哨兵模式:自动监视master节点,当前挂掉后,自动将slaver节点变为master
sentinel.conf配置文件,修改sentinel monitor host6379(主机名称,随便起) 127.0.0.1 6379 1(代表选举,某个slaver得票超过1票即称为新的master)
启动sentinel: ./redis-sentinel ../sentinel.conf
"""