主备模式不能使用uxpool自身的复制功能进行配置,因此配置主备模式时,可以采用UXDB的流复制功能,流复制的配置如下,先建一个简单的示例环境,此环境如下表所示:
表?3.1.?uxpool复制和负载均衡示例环境
主机名称 | IP地址 | uxpool | UXDBSever | 实例名称 | 数据库名称 |
---|---|---|---|---|---|
ux57.com | 192.168.0.157 | 已安装 | 主库 | master | uxdb |
ux58.com | 192.168.0.158 | 已安装 | 备库 | slave_1 | uxdb |
这个数据库实例是在操作系统用户“UXDB”下,uxpool安装在/home/uxdb/uxpool目录下,uxdbsever是安装在/home/uxdb/uxdbinstall/dbsql/bin目录下,具体操作步骤如下:
在192.168.0.157主机下初始化名为master的集群目录。进入/home/uxdb/uxdbinstall/bin目录下执行:
./initdb -W -D master
创建流复制用户:
进入/home/uxdb/uxdbinstall/dbsql/bin目录下,执行./uxsql,进入控制台执行下面操作:
uxdb-# create user repuser replication LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD '123456';
配置ux_hba.conf:
在master的ux_hba.conf最后一行增加如下:
配置uxsinodb.conf:
在master端的uxsinodb.conf配置如下:
listen_addresses = '*' port = 5432 wal_level = replica archive_mode = on archive_command = 'cd ./' hot_standby = on max_wal_senders = 3 wal_keep_segments = 64 full_page_writes = on wal_log_hints = on
如果需要配置同步流复制模式,还需配置如下的参数,不配置时默认为同步流复制模式。
synchronous_commit = on synchronous_standby_names=”ux58” #此处为application_name(此处的应用名称不是机器名,可以为劝拿庞蜗菲教ㄗ⒉嵬锯名称)
重启master数据库:
ux_ctl -D master restart
master主机上创建主库后,根据上面配置就可以在slave_1主机上创建备库了,创建方法为进入/home/uxdb/uxdbinstall/dbsql/bin目录下,执行以下命令:
./ux_basebackup -D slave_1/ -Fp -Xs -v -P -h ux57.com -p 5432 -U repuser -W -R
参数含义:
-h:表示主机地址
-W:表示需要密码
-Fp:表示普通文件格式输出
-Xs:表示通过流复制抓取备份日志
-R:表示在输出目录默认创建一个standby.signal文件(uxdb-2.1.1.0之后将recovery.conf文件合并到了uxsino.conf中,这里将不再生成recovery.conf文件)
-u:表示用户
-D:指定数据库存放的目录
备库创建后,同样需要修改slave_1中ux_hba.conf,进入/uxdb/uxdbinstall/dbsql/bin目录下,在slave_1的ux_hba.conf最后一行增加如下:
master端需要配置如下:
进入/home/uxdb/uxdbinstall/dbsql/share目录下,复制recovery.conf.sample文件并存放于master数据目录下,重命名为recovery.done,如图所示:
配置recovery.done文件:
recovery_target_timeline = 'latest' standby_mode = on primary_conninfo = 'application_name=ux57 host=ux58.com port=5432 user=repuser password=123456' trigger_file = '/home/uxdb/uxdbinstall/dbsql/bin/master/trigger_file'
Salve_1端配置如下:
进入/home/uxdb/uxdbinstall/dbsql/share目录下,复制recovery.conf.sample文件并存放于slave_1数据目录下,重命名为recovery.conf,如图所示:
配置recovery.done文件:
recovery_target_timeline = 'latest' standby_mode := on primary_conninfo = 'application_name=ux58 host=ux57.com port=5432 user=repuser password=123456' trigger_file = '/home/uxdb/uxdbinstall/dbsql/bin/slave_1/trigger_file'
在master上配置访问slave_1参数,在 ~目录下创建并配置 .uxpass文件:
ux58.com:5432:uxdb:repuser:123456
在slave_1上配置访问master参数:
ux57.com:5432:uxdb:repuser:123456
进入/home/uxdb/uxdbinstall/dbsql/slave_1目录下,修改standby.signal文件,添加备节点标识。
vi standby.signal # 添加 standby_mode = 'on'
配置uxsinodb.conf文件。
recovery_target_timeline = 'latest' primary_conninfo = 'application_name=ux67 host=ux68.com port=5432 user=repuser password=123456 ' promote_trigger_file = '/home/uxdb/uxdbinstall/dbsql/bin/slave_1/promote_trigger_file'
配置uxsinodb.auto.conf文件。
在uxsinodb.auto.conf中有自动生成的primary_conninfo配置,里面没有application_name配置, 在里面添加节点名称:
启动备库。
./ux_ctl -D slave_1/ start
分别启动master,slave_1数据库,在master上创建一个数据库和临时表;
在Salve_1上查询刚才创建的表和数据,判定是否有数据同步;
另外可以在主机上通过 select * from ux_stat_replication; 查询主备复制的状态;
到此可见,从库已经同步了主库的数据,到此可以说UXDB流复制热备已经创建完成。