1.4.?双机备份

1.4.1. 数据库双机备份配置使用步骤
1.4.2. 服务器双机备份配置使用步骤

1.4.1.?数据库双机备份配置使用步骤

1.4.1.1.?网络配置和安装

1.4.1.1.1.?网络配置

需要三台机器,分别配置对应/etc/hosts,其中一台作为主机master(192.168.1.64)、一台作为备机backup(192.168.1.62),一台作为虚拟ip所在的机器vip(192.168.1.63),最后一行增加如下内容并保存:

192.168.1.64 master
192.168.1.62 slave
192.168.1.63 vip

注意

保证主备机可以互相ping通,并且关闭防火墙。

1.4.1.1.2.?安装

在主机master和备机backup上:

  1. 首先检测uxpool工具安装包是否存在。

  2. 如果存在,则检测uxpool是否安装,如果没安装,则安装uxpool到/home/uxdb/uxdbinstall路径下,如果已经安装,则跳过进行下一步;如果不存在,拷贝uxpool安装包,然后解压安装包,安装uxpool。

1.4.1.2.?流复制配置

1.4.1.2.1.?主备集群配置

提示用户输入当前机器角色【master/backup】。

  1. 如果是master机器

    在master机器上连接uxkms数据库,创建repuser用户:

    create user repuser replication LOGIN CONNECTION LIMIT 3 ENCRYPTED PASSWORD '1qaz!QAZ';

    修改/home/uxdb/.uxkms/database/uxkmsdb/ux_hba.conf,最后一行增加如下内容并保存:

    host   replication   all   slave   trust

    修改/home/uxdb/.uxkms/database/uxkmsdb/uxsinodb.conf配置如下:

    listen_addresses = '*' 
    port = 6556  //uxkmsdb集群的端口
    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

    配置完成后,重启master数据库:

    ux_ctl -D master restart
  2. 如果是backup机器

    修改slave中/home/uxdb/.uxkms/database/uxkmsdb/uxsinodb.conf配置如下:

    listen_addresses = '*' 
    port = 6556  //uxkmsdb集群的端口
    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

    配置完成后,重启slave数据库:

    ux_ctl -D slave restart
1.4.1.2.2.?ux_basebackup 创建备库

在slave节点执行以下操作:

./ux_basebackup -D /home/uxdb/.uxkms/database/slave/ -Fp -Xs -v -P -h master -p 6556 -U repuser

修改slave节点/home/uxdb/.uxkms/database/uxkmsdb/ux_hba.conf,最后一行增加如下内容并保存(是trust模式还是md5模式,需要和主机保持一致):

host   replication   all   master   trust
1.4.1.2.3.?配置recovery.conf
  1. Master端配置如下:

    cp /home/uxdb/uxdbinstall/share/recovery.conf.sample /home/uxdb/.uxkms/database/uxkmsdb/recovery.done
    
    #编辑内容如下 
    recovery_target_timeline = 'latest' 
    standby_mode = on 
    primary_conninfo = 'application_name=master host=slave port=6556 user=repuser password=1qaz!QAZ' 
    trigger_file = '/home/uxdb/uxdbinstall/dbsql/bin/master/trigger_file'
  2. Salve端配置如下:

    cp /home/uxdb/uxdbinstall/share/recovery.conf.sample /home/uxdb/.uxkms/database/uxkmsdb/recovery.conf
    
    #编辑内容如下 
    recovery_target_timeline = 'latest'
    standby_mode = on 
    primary_conninfo = 'application_name=slave host=master port=6556 user=repuser password=1qaz!QAZ' 
    trigger_file = '/home/uxdb/uxdbinstall/dbsql/bin/slave/trigger_file'
1.4.1.2.4.?配置 .uxpass

master上配置访问slave参数。在 ~目录下创建并配置 .uxpass文件,保存并修改权限:

slave:6556:uxdb:repuser:1qaz!QAZ
chmod –R 600 .uxpass

slave上配置访问master参数。在 ~目录下创建并配置 .uxpass文件,保存并修改权限:

master:6556:uxdb:repuser:1qaz!QAZ
chmod –R 600 .uxpass
1.4.1.2.5.?流复制数据同步测试

分别启动master,slave数据库:在master上创建一个数据库和临时表;在slave上查询刚才创建的表和数据,判定是否有数据同步。

另外可以在主机上通过下面的命令查询主备复制的状态:

select * from ux_stat_replication;

到此可见,从库已经同步了主库的数据,到此可以说UXDB流复制热备已经创建完成。

1.4.1.3.?初始化集群及uxpool配置

基于uxpool的双机集群:uxdb主节点和备节点实现流复制热备,uxpool1,uxpool2作为中间件,将主备master节点加入集群,实现读写分离,负载均衡和HA故障自动切换。两uxpool节点可以委托一个虚拟ip节点作为应用程序访问的地址,两节点之间通过watchdog进行监控,当uxpool1宕机时,uxpool2会自动接管虚拟ip继续对外提供不间断服务。

1.4.1.3.1.?设置主备切换时需要执行的命令的权限
vim ~/.uxpass
sudo chmod u+s /sbin/ifconfig
sudo chmod u+s /usr/sbin
1.4.1.3.2.?配置ssh秘钥
  1. 在master、slave机器上都生成ssh,默认保存在~/.ssh目录中,使用UXDB用户登录,进入/home/uxdb目录,如下执行命令:

    ssh-keygen -t rsa
  2. 两个节点同时配置互信。

    主库:

    ssh-keygen -t rsa
    cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_key64

    备库:

    ssh-keygen -t rsa
    将主库authorized_key64拷贝到备库
    cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_key62 
    此时文件中有主库和备库的公钥信息,将备库的authorized_key62 再次拷贝到主库

    修改权限,进入/home/uxdb目录,执行命令:

    chmod 600 ~/.ssh/authorized_keys64 
    chmod 600 ~/.ssh/authorized_keys62

    分别将master的公钥复制到slave,slave的公钥复制到master,然后分别修改公钥名称为authorized_keys:

    scp authorized_key64 uxdb@192.168.1.62:/home/uxdb/.ssh/
    scp authorized_key62 uxdb@192.168.1.64:/home/uxdb/.ssh/

    验证ssh配置是否成功:

1.4.1.3.3.?配置uxpool

uxpool的配置项很多,安装完成后有三个模板文件,都存放在安装目录的etc目录下,一般在配置之前,先拷贝这个模板文件,然后在此基础上进行配置。进入/home/uxdb/uxpool/etc目录,执行以下命令:

cp pool_hba.conf.sample pool_hba.conf
cp uxpool.conf.sample uxpool.conf
cp pcp.conf.sample pcp.conf
  1. 配置pool_hba.conf(master和slave)

    pool_hba.conf用于对登录用户进行验证,要和ux_hba.conf保持一致,要么都是trust,要么都是md5验证方式,这里采用了trust验证方式如下设置:

    vim pool_hba.conf
    
    #编辑内容如下
    # "local" is for Unix domain socket connections only
    local   all   all                 trust
    # IPv4 local connections :
    host   all   all   127.0.0.1/32   trust
    host   all   all   ::1/128        trust
  2. 配置pcp.conf(master和slave)

    pcp.conf配置用于uxpool登录管理,一些操作uxpool的工具会要求提供密码等,配置如下:

  3. 配置uxpool环境变量(master和slave)

    查看本机网卡:ifconfig

    对/hom/uxdb/uxdbinstall/uxpool/etc目录下uxpool.conf进行编辑。编辑内容如下:

    master配置:
    # - uxpool Connection Settings -
    listen_addresses = '*'
    port = 9999
    pcp_listen_addresses = '*'
    pcp_port = 9898
    # - Backend Connection Settings -
    backend_hostname0 = 'master'    #主机master的hostname或者ip
    backend_port0 = 6556
    backend_weight0 = 1
    backend_data_directory0 = '/home/uxdb/.uxkms/database/uxkmsdb'
    backend_flag0 = 'ALLOW_TO_FAILOVER'
    backend_hostname1 = 'slave'
    backend_port1 = 6556
    backend_weight1 = 1
    backend_data_directory1 = '/home/uxdb/.uxkms/database/uxkmsdb '
    backend_flag1 = 'ALLOW_TO_FAILOVER'
    # - Authentication -
    enable_pool_hba = on
    pool_passwd = 'pool_passwd'
    pid_file_name = '/home/uxdb/uxdbinstall/uxpool/uxpool.pid'
    logdir = '/home/uxdb/uxdbinstall/uxpool/log'
    replication_mode = off
    load_balance_mode = on
    master_slave_mode = on
    master_slave_sub_mode = 'stream'
    # - 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'
    #必须设置,否则primary数据库down了,uxpool不知道,不能及时切换。从库流复制还在连接数据,报连接失败。
    #只有下次使用uxpool登录时,发现连接不上,然后报错,这时候,才知道挂了,uxpool进行切换。
    failover_command = '/home/uxdb/uxdbinstall/uxpool/failover_stream.sh %H '
    # - Enabling - 
    use_watchdog = on 
    # - Watchdog communication Settings - 
    wd_hostname = 'master' 
    wd_port = 9000 
    delegate_IP = 'vip' 
    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 = 'slave'
    heartbeat_destination_port0 = 9694
    heartbeat_device0 = 'ens33'
    other_pgpool_hostname0 = 'slave' #对端
    other_pgpool_port0 = 9999
    other_wd_port0 = 9000
    
    Slave节点配置(该节点的配置与master节点基本相同,此处仅将配置不同的参数列出来):
    wd_hostname = 'slave'                 #本端
    heartbeat_destination0 = 'master'     #对端
    other_pgpool_hostname0 = 'master'     #对端

    uxpool.conf配置文件里,故障处理配置的是:

    failover_command = '/home/uxdb/uxdbinstall/uxpool/failover_stream.sh %H '

    因此,需要在/home/uxdb/uxdbinstall/uxpool/目录中新建failover_stream.sh脚本,写入如下内容并保存:

    赋予failover_stream.sh可执行权限:

    chmod 777  /opt/pgpool/failover_stream.sh
  4. 分别在master机器和slave机器的集群下(/home/uxdb/uxdbinstall/uxpool)创建一个日志文件路径,即log文件夹(uxpool.conf中配置的)。

1.4.1.4.?集群管理

1.4.1.4.1.?启动集群
  1. 分别启动两个集群,master和slave。

  2. 分别启动uxpool命令。

    uxpool -n -d -D > /home/uxdb/uxdbinstall/uxpool/log/uxpool.log 2>&1 & 

    master机器:

    backup机器:

    启动uxpool后,查看集群节点状态命令:

    show pool_nodes;

    快速终止uxpool命令:

    uxpool -m fast stop
1.4.1.4.2.?uxpool的主备切换
  1. 模拟master端uxpool宕机。

    停止主机uxpool后,稍等片刻,继续访问vip地址,访问成功查看主机节点状态。

  2. 模拟master端ux primary宕机。

    停止当前主节点服务,然后稍等几秒钟,重新连接虚拟节点vip,发现连接成功,查看节点状态,slave节点已经切换为主节点。

  3. 修复master节点重新加入集群。

    启动主机集群,并加入加群管理节点后,查询节点状态:

    pcp_attach_node -d -U uxdb -h vip -p 9898 -n 0
  4. 同步数据时间线。

    如果宕机后导致两个节点数据时间线不一致,需要做数据同步操作:

    ./ux_ctl -D slave/ stop   #停掉需要做同步的节点uxdb服务
    ./ux_rewind  --target-uxdata=/home/uxdb/.uxkms/database/uxkmsdb --source-server='host=master port=6556 user=uxdb dbname=uxdb password=123456'   #同步master节点上时间线

    修改ux_hba.conf如下:

    # "local" is for Unix domain socket connections only
    local   all           all                  md5
    # IPv4 local connections :
    host    all           all   0.0.0.0/0      md5
    # IPv6 local connections :
    host    all           all   ::1/128        md5
    # Allow replication connections from localhost, by a user with the replication privilege.
    local   replication   all                  md5
    host    replication   all   127.0.0.1/32   md5
    host    replication   all   ::1/128        md5
    host    replication   all   master         trust
    #更名recovery.conf为recovery.done
    mv recovery.conf recovery.done
    #重启uxdb服务
    ux_ctl -D slave/ start
    #重新加入集群
    pcp_attach_node -d -U uxdb -h vip -p 9898 -n 0
    #查看集群节点状态,数据时间线一致
    show pool_nodes;

1.4.2.?服务器双机备份配置使用步骤

  1. 安装uxkms时,根据安装包提示,输入主服务器ip、备服务器ip、网卡名、虚拟 ip,输入完成后会自动启动nginx服务和keepalived服务。

  2. 安装完成并启动uxkms后,使用ipaddr命令查看虚拟ip是否绑定成功,如果虚拟ip没绑定成功,手动执行如下命令:

    ifconfigens33:1192.168.1.65 netmask255.255.254.0up

    up表示立即启用这个VIP;ens33:1表示这个VIP绑定的目标网卡设备;192.168.1.65表示vip的值;255.255.254.0表示子网掩码(主备机器都要执行)。

  3. 在浏览器访问https://vip:7012,如果可以正常访问,停掉主服务器的uxkms服务,然后再次访问https://vip:7012,如果可以正常访问,则双机备份功能正常;如果不能正常访问,用root用户手动修改/usr/local/keepalived/etc/keepalived/keepalived.conf配置文件的stat值和virtual_ipaddress值(主备机器都要执行)。

XML 地图 | Sitemap 地图