配置Apache Phoenix QueryServer基于nginx的负载均衡,HA,nginx配置如下:
upstream phoenixServer {
ip_hash;
server 172.18.10.35:8765 max_fails=5 fail_timeout=60s;
server 172.18.10.36:8765 max_fails=5 fail_timeout=60s;
# server 172.18.10.35:8765 backup;
# server 172.18.10.36:8765;
}
server{
listen 8764;
server_name localhost;
location / {
proxy_pass http://phoenixServer;
access_log /var/log/nginx/phoenixServer.log;
error_log /var/log/nginx/phoenixServer_error.log;
}
}
用户请求分配到两台服务器的phoenix的去处理,根据用户的IP值hash的结果分给两台不同的服务器处理,这样也能保证每个用户访问同一台服务器,从而最终保证phoenix的balnace、ha
测试:
1、测试用例:
import phoenixdb
import phoenixdb.cursor
database_url = 'http://localhost:8764/'
conn = phoenixdb.connect(database_url, autocommit=True)
cursor = conn.cursor()
cursor.execute("DROP TABLE users")
cursor.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, username VARCHAR)")
cursor.execute("UPSERT INTO users VALUES (?, ?)", (1, 'admin'))
cursor.execute("SELECT * FROM users")
print(cursor.fetchall())
cursor = conn.cursor(cursor_factory=phoenixdb.cursor.DictCursor)
cursor.execute("SELECT * FROM users WHERE id=1")
print(cursor.fetchone()['USERNAME'])
2、环境配置
3台服务器如上
备注(各台服务器开启的服务):
zt02:nginx、queryserver
zt03:queryserver
3、从zt01执行测试用例:
zt01:
查看queryserver日志:
结果:zt01访问了zt03的queryserver
4、从zt02执行测试用例:
zt02:
查看queryserver日志:
结果:zt02访问了zt02的queryserver
5、停掉zt02的queryserver:
再次从zt02访问queryserver:
查看zt03的queryserver日志:
结果:停掉任意一台的queryserver,依然能够正常访问phoenix
结论:
apache phoenix queryserver的balance、ha可以通过nginx来做