我有一个正在运行的Flask应用程序,正在完成所需的生产配置和架构设计。
理想的设计。
2个WAMP服务器 1 Apache反向代理负载均衡器。
用户将点击负载均衡器,并由其中一个WAMP服务器提供服务。
2个MYSQL数据库将在Master - Slave Data Replication中进行统一。
数据提供者只会更新Master,而Web服务器也只会更新master,从Slave获取所有查询。
因此即使负载均衡器可能会将您连接到主服务器上的Web服务器,它仍然是从从服务器读取的。
我的问题是,如果为数据库创建了新记录,Flask - Admin将仅在用户正在查看主服务器上的管理页面时更新模型。
主数据库和从属数据库都显示正确的数据。但主管理员和奴隶管理员模型没有。为了让管理模型更新,我被迫重启奴隶服务器。
感谢阅读。如果有任何必要的信息,请告诉我,我会将其传递给我。
我正在使用Windows WAMP Server 2.5。 Python 3.4。烧瓶项目
Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://mycluster>
BalancerMember http://100.100.100.1:8080 route=route1
BalancerMember http://100.100.100.2:8080 route=route2
ProxySet stickysession=ROUTEID
</Proxy>
ProxyPass / balancer://mycluster/
<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Allow from all
</Location>
class RoutingSession(Session):
def get_bind(self, mapper=None, clause=None):
if self._flushing:
return engines['edit_leader']
else:
return engines['edit_follower']
session_factory = sessionmaker(class_=RoutingSession, autocommit=False)
Session = scoped_session(session_factory)
@contextmanager
def session_scope():
"""Provide a transactional scope around a series of operations."""
session = Session()
try:
yield session
session.commit()
except:
session.rollback()
raise
finally:
Session.remove()
with session_scope() as temp_session:
admin.add_view(my_admin.ComputerAdmin(Computer, temp_session))
admin.add_view(my_admin.DriveAdmin(Drive, temp_session))
admin.add_view(my_admin.RoomAdmin(Room, temp_session))
admin.add_view(my_admin.WorkgroupAdmin(Workgroup, temp_session))
admin.add_view(my_admin.UserAdmin(User, temp_session))
admin.add_view(my_admin.PhoneCategoryAdmin(PhoneCategory, temp_session))
admin.add_view(my_admin.RoomExtensionAdmin(RoomPhoneNumber, temp_session))
admin.add_view(my_admin.PhoneNumberAdmin(PhoneNumber, temp_session))
admin.add_view(my_admin.RoomIntercomAdmin(RoomIntercomNumber, temp_session))
admin.add_view(my_admin.StationTypeAdmin(StationType, temp_session))
答案 0 :(得分:0)
问题是将isolation level
设置为默认值repeatable read
,将其设置为read commited
诀窍