先建一个简单的示例环境,此环境如下表所示:
表?6.1.?uxpool复制和负载均衡示例环境
主机名称 | IP地址 | uxpool | UXDBSever | 实例名称 | 数据库名称 |
---|---|---|---|---|---|
ux57.com | 192.168.0.157 | 已安装 | 已安装 | test01 | uxdb |
ux58.com | 192.168.0.158 | 已安装 | 已安装 | test02 | uxdb |
这个数据库实例是在操作系统用户“UXDB”下,uxpool安装在/home/uxdb/uxpool目录下,uxdbsever是安装在/home/uxdb/uxdbinstall/dbsql/bin目录下。
uxpool的配置项很多,安装完成后有三个模板文件,都存放在安装目录的etc目录下,一般在配置之前,先拷贝这个模板文件,然后在此基础上进行配置。配置方法为进入/home/uxdb/uxpool/etc目录,执行以下命令(ux57.com和ux58.com分别配置):
cp pool_hba.conf.sample pool_hba.conf cp uxpool.conf.sample uxpool.conf cp pcp.conf.sample pcp.conf
pcp.conf配置(ux57.com和ux58.com分别配置):
uxpool有一个用于管理的接口,名为PCP,可通过网络获取数据库的节点信息。要使用pcp命令必须进行用户认证。这种认证需要pcp.conf文件中定义一个用户名和密码。在这个文件中,用户名和密码成对地出现在每一行中,它们用冒号(:)隔开。密码的格式是用md5的哈希加密。如设置一个用户“UXDB”及密码“123456”时,会先计算密码的md5值,如使用UXDB用户,进入/home/uxdb/uxdbinstall/uxpool/bin目录下,执行命令:
./ux_md5 123456
计算完md5后,进入/home/uxdb/uxdbinstall/uxpool/etc目录下pcp.conf文件中配置如下一行内容:
uxdb:e10adc3949ba59abbe56e057f20f883e
其中“e10adc3949ba59abbe56e057f20f883e”就是密码的md5值,如下图所示:
执行命令../bin/ux_md5 -p -m -u uxdb pool_passwd 如下图所示。
pool_hba.conf配置(ux57.com和ux58.com分别配置):
pool_hba.conf是对登录用户进行验证的,要和uxdb的ux_hba.conf保持一致,要么都是trust,要么都是md5验证方式,这里采用了md5验证方式如下设置(test01和test02分别配置),进入/home/uxdb/uxdbinstall/uxpool/etc目录下配置如下:
uxpool.conf配置(ux57.com和ux58.com分别配置):
进入/home/uxdb/uxdbinstall/uxpool/etc目录下uxpool.conf文件,进行编辑。
uxpool.conf配置(ux57.com和ux58.com分别配置):
# - uxpool Connection Settings - listen_addresses = '*' port = 9999 pcp_listen_addresses = '*' pcp_port = 9898 # - Backend Connection Settings - backend_hostname0 = 'ux57.com' backend_port0 = 5432 backend_weight0 = 1 backend_data_directory0 = '/home/uxdb/uxdbinstall/dbsql/bin/test01' #集群数据目录 backend_flag0 = 'ALLOW_TO_FAILOVER' backend_hostname1 = 'ux58.com' backend_port1 = 5432 backend_weight1 = 1 backend_data_directory1 = '/home/uxdb/uxdbinstall/dbsql/bin/ test02' #集群数据目录 backend_flag1 = 'ALLOW_TO_FAILOVER' # - Authentication - enable_pool_hba = on pool_passwd = 'pool_passwd' #pool_passwd文件名 pid_file_name = '/home/uxdb/uxdbinstall/uxpool/uxpool.pid' logdir = '/home/uxdb/uxdbinstall/uxpool/log' replication_mode = on #复制开关 load_balance_mode = on #负载均衡开关 # - Streaming - sr_check_period = 5 sr_check_user = 'repuser' sr_check_password = '123456' sr_check_database = 'uxdb' #------------------------------------------------------------------------------ # HEALTH CHECK GLOBAL PARAMETERS #------------------------------------------------------------------------------ health_check_period = 10 #检查的周期 health_check_timeout = 20 #指定做健康检查的超时时间, health_check_user = 'uxdb' #指定健康检查连接后端数据库的用户。 health_check_password = '123456' #指定做健康检查时,连接后端数据库的密码。 health_check_database = 'uxdb' health_check_period0 = 10 health_check_timeout0 = 20 health_check_user0 = 'uxdb' health_check_password0 = '123456' health_check_database0 = 'uxdb' # - Enabling - use_watchdog = on # - Watchdog communication Settings - wd_hostname = 'ux57.com' wd_port = 9000 delegate_IP = 'uc60.com' #虚拟IP配置 if_cmd_path = '/sbin' if_up_cmd = 'ifconfig ens33:0 inet $_IP_$ netmask 255.255.254.0' if_down_cmd = 'ifconfig ens33:0 down' arping_cmd = 'arping -fqbDUV -w 1 $_IP_$' wd_heartbeat_port = 9694 wd_heartbeat_keepalive = 2 wd_heartbeat_deadtime = 30 heartbeat_destination0 = 'ux58.com' heartbeat_destination_port0 = 9694 heartbeat_device0 = 'ens33' other_uxpool_hostname0 = 'ux58.com' #对端 other_uxpool_port0 = 9999 other_wd_port0 = 9000
如果是uxdb-2.1.1.0之后的版本还需要进行如下配置:
failover_when_quorum_exists = off
权限配置:
如果两台机器之间为主备关系,用于主机宕机后的主备切换时,使用root用户登录,执行以下命令:
[root@ux57 ~]# chmod u+s /sbin/ifconfig [root@ux57 ~]# chmod u+s /usr/sbin/
创建uxpool日志文件(ux57.com和ux58.com分别创建):
进入/home/uxdb/uxdbinstall/uxpool目录下,创建目录:
mkdir log
启动uxpool(ux57.com和ux58.com分别配置):
进入/home/uxdb/uxdbinstall/uxpool/bin目录下,执行命令:
./uxpool -n -D > /home/uxdb/uxdbinstall/uxpool/log/uxpool.log 2>&1 &
使用虚拟IP连接uxpool的端口9999,插入数据,发现两边数据库的数据相同,实现了负载均衡,情况模拟如下:
进入ux57.com主机 /home/uxdb/uxdbinstall/dbsql/bin目录下,执行命令:
[uxdb@ux57 bin]$ ./uxbench -i
进入ux58.com主机 /home/uxdb/uxdbinstall/dbsql/bin目录下,查看数据,发现数据相同,实现了负载均衡。
进入/home/uxdb/uxdbinstall/dbsql/bin目录下,执行命令:
[uxdb@ux57 bin]$ ./uxsql -h uc60.com -p 9999 uxdb=# \d
模拟复制模式下,一台机器宕机后,两台机器分别通过虚拟IP连接uxpool时,可以正常访问,且插入数据后,两边的数据库数据相同,实现了复制功能,具体操作步骤如下:
ux57.com机器,进入/home/uxdb/uxdbinstall/dbsql/bin目录下, 执行命令:
./ux_ctl -D test01 stop
使用外网虚拟IP继续访问:
插入数据:
在ux58上查看,数据相同。