【ubuntu keepalived+mysql+tomcat+redis 高可用部署】

ubuntu keepalived+mysql+tomcat+redis** 高可用部署**

环境

服务器 IP端口角色说明
192.169.3.2116379Redis主redis
192.169.3.2113306Mysql从节点1
192.169.3.2118080、8899Tomcat从节点2
192.169.3.2086379Redis哨兵1
192.169.3.2083306Mysql哨兵2
192.169.3.2088080、8899Tomcat哨兵3
虚拟服务器 IP端口角色说明
192.169.3.1796379RedisRedis VIP
192.169.3.1813306MysqlMysql VIP
192.169.3.2108080、8899TomcatTomcat VIP

架构图

在这里插入图片描述

环境

Ubuntu:22.04

Java:jdk1.8.0\_381

Tomcat:apache-tomcat-9.0.78

Keepalived :Keepalivedv2.2.8

Redis:redis-7.0.1

Mysql:mysql-8.3.33

准备工作

  1. 在/home文件夹下面新增yuno文件夹,/home/yuno
  2. 将JDK、Tomcat、Redis、Mysql、Keepalived安装文件包上传到两台服务器/home/yuno

Tomcat+JDK配置

  1. 创建并设置Tomcat用户

    groupadd tomcat
    
    useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
    
  2. 解压缩、移动文件

    mkdir /opt/tomcat
    
    tar xzvf apache-tomcat-9.0.78.tar.gz -C /opt/tomcat --strip-components=1
    
    tar -zxvf jdk-8u381-linux-x64.tar.gz
    
    mv jdk1.8.0\_381/ /usr/local/
    
  3. 设置JAVA_HOME环境变量

    vim /etc/profile
    

    输入以下内容

    export JAVA\_HOME=/usr/local/jdk1.8.0\_381
    
    export JRE\_HOME=${JAVA\_HOME}/jre
    
    export CLASSPATH=.:${JAVA\_HOME}/lib:${JRE\_HOME}/lib
    
    export PATH=${JAVA\_HOME}/bin:$PATH
    
  4. 使设置生效

    source /etc/profile
    
  5. 测试

    java -version
    
  6. 更新Tomcat文件权限

    cd /opt/tomcat
    
    sudo chgrp -R tomcat /opt/tomcat
    
    sudo chmod -R g+r conf
    
    sudo chmod g+x conf
    
    sudo chown -R tomcat webapps/ work/ temp/ logs
    
    sudo chown -R tomcat webapps/ work/ temp/ logs
    
    mkdir /home/tomcat
    
    cd /home/tomcat
    
    mkdir .java
    
    mkdir .java/.userPrefs
    
    mkdir .java/.systemPrefs
    
    chown tomcat:tomcat -R /home/tomcat/.java/.systemPrefs
    
    chown tomcat:tomcat -R /home/tomcat/.java
    
  7. Tomcat环境变量设置

    cd /usr/local/apache-tomcat-9.0.78/bin/
    
    touch setenv.sh
    
    vim setenv.sh
    
    

    输入以下内容

    # 设置JAVA\_HOME
    
    export JAVA\_HOME=/usr/local/jdk1.8.0\_381
    
    export JRE\_HOME=$JAVA\_HOME/jre
    
    export CLASSPATH=$JAVA\_HOME/lib:$JRE\_HOME/lib:$CLASSPATH
    
    export PATH=$JAVA\_HOME/bin:$JRE\_HOME/bin:$PATH
    
    export CATALINA\_HOME=/usr/local/apache-tomcat-9.0.78
    
    export CATALINA\_BASE=/usr/local/apache-tomcat-9.0.78
    
    # 设置Tomcat的PID文件
    
    CATALINA\_PID="$CATALINA\_BASE/tomcat.pid"
    
    # 添加JVM选项
    
    JAVA\_OPTS="-server -XX:PermSize=256M -XX:MaxPermSize=1024m -Xms512M -Xmx1024M -XX:MaxNewSize=256m"
    
  8. 设置Tomcat自启动

    vim /etc/systemd/system/tomcat.service
    

    输入以下内容

    [Unit]
    
    Description=Apache Tomcat Web Application Container
    
    After=network.target
    
    [Service]
    
    Type=forking
    
    Environment=JAVA\_HOME=/usr/local/jdk1.8.0\_381
    
    Environment=CATALINA\_PID=/opt/tomcat/temp/tomcat.pid
    
    Environment=CATALINA\_HOME=/opt/tomcat
    
    Environment=CATALINA\_BASE=/opt/tomcat
    
    Environment='CATALINA\_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC'
    
    Environment='JAVA\_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom -Djava.util.prefs.systemRoot=/home/tomcat/.java -Djava.util.prefs.userRoot=/home/tomcat/.java/.userPrefs'
    
    ExecStart=/opt/tomcat/bin/startup.sh
    
    ExecStop=/opt/tomcat/bin/shutdown.sh
    
    User=tomcat
    
    Group=tomcat
    
    UMask=0007
    
    RestartSec=10
    
    Restart=always
    
    [Install]
    
    WantedBy=multi-user.target
    
    
  9. 测试

    systemctl daemon-reload
    
    systemctl start tomcat.service
    
    systemctl status tomcat.service
    

Mysql 安装和双主配置

  1. 安装并测试

    sudo apt update
    
    sudo apt install mysql-server
    
    sudo systemctl status mysql
    
  2. 新增copying和root账号

    sudo mysql -u root -p
    
    CREATE USER 'copying'@'%' IDENTIFIED WITH mysql\_native\_password BY 'abc.123';
    
    CREATE USER 'root'@'%' IDENTIFIED WITH mysql\_native\_password BY 'abc.123';
    
    alter user 'copying'@'localhost' identified with mysql\_native\_password by 'abc.123';
    
    alter user 'copying'@'%' identified with mysql\_native\_password by 'abc.123';
    
    alter user 'root'@'localhost' identified with mysql\_native\_password by 'abc.123';
    
    alter user 'root'@'%' identified with mysql\_native\_password by 'abc.123';
    
    GRANT ALL PRIVILEGES ON \*.\* TO 'copying'@'localhost';
    
    GRANT ALL PRIVILEGES ON \*.\* TO 'copying'@'%';
    
    GRANT ALL PRIVILEGES ON \*.\* TO copying@'%' IDENTIFIED BY 'abc.123' with grant option ;
    
    flush privileges;
    
  3. 开机自启动

    systemctl enable mysql
    

    测试

    systemctl is-enable mysql
    

Mysql双主配置

  1. Server 192.168.3.211配置:/etc/mysql/my.cnf

    [mysqld]
    
    user = mysql
    
    bind-address = 0.0.0.0
    
    mysqlx-bind-address = 127.0.0.1
    
    key\_buffer\_size = 16M
    
    myisam-recover-options = BACKUP
    
    log\_error = /var/log/mysql/error.log
    
    server-id = 1
    
    log\_bin = /var/log/mysql/mysql-bin.log
    
    max\_binlog\_size = 100M
    
    binlog\_do\_db = yzy
    
    binlog\_ignore\_db = mysql
    
    binlog\_format = MIXED
    
    log-slave-updates
    
    auto-increment-offset = 1
    
    auto-increment-increment = 2
    
  2. Server 192.168.3.208配置:/etc/mysql/my.cnf

    [mysqld]
    
    user = mysql
    
    bind-address = 0.0.0.0
    
    mysqlx-bind-address = 127.0.0.1
    
    key\_buffer\_size = 16M
    
    myisam-recover-options = BACKUP
    
    log\_error = /var/log/mysql/error.log
    
    server-id = 2
    
    log\_bin = /var/log/mysql/mysql-bin.log
    
    max\_binlog\_size = 100M
    
    binlog\_do\_db = yzy
    
    binlog\_ignore\_db = mysql
    
    binlog\_format = MIXED
    
    log-slave-updates
    
    auto-increment-offset = 2
    
    auto-increment-increment = 2
    
  3. 重启Mysql

    sudo service mysql restart
    
  4. 设置主备

    Server 192.168.3.208执行命令行:

    CHANGE MASTER TO MASTER\_HOST='192.168.3.211',master\_port=3306,master\_user='copying',master\_password='abc.123',MASTER\_LOG\_FILE = 'mysql-bin.000008',MASTER\_LOG\_POS = 157;
    

    Server 192.168.3.211执行命令行:

    CHANGE MASTER TO MASTER\_HOST='192.168.3.208',master\_port=3306,master\_user='copying',master\_password='abc.123',MASTER\_LOG\_FILE = 'mysql-bin.000003',MASTER\_LOG\_POS = 157;
    
  5. 开启slave

    mysql\> start slave;
    
  6. 查看同步状态

    mysql\> show slave status\G;
    

    分别查看Server1和Server2状态,若Slave_IO_Running和Slave_SQL_Running是Yes则主主复制成功

  7. 重置操作

    mysql\> stop slave;
    
    mysql\> reset master;
    
    mysql\> CHANGE MASTER...
    
    mysql\> start slave;
    

Redis安装

  1. 安装依赖包

    apt-get install gcc gpg python3 make automake libssl-dev
    
  2. 解压缩和移动文件夹

    tar -zxvf redis-7.0.1.tar.gz
    
    mv ./redis-7.0.1 /usr/local/
    
    cd /usr/local/redis-7.0.1
    
  3. 编译和安装

    make
    
    cd src
    
    make install
    
  4. 检查运行状态

    systemctl status redis
    
  5. 设置开机自启动

    systemctl enable redis
    

Redis主从配置

  1. Server 192.168.3.211配置

    daemonize yes
    
    requirepass abc.123
    
    bind 0.0.0.0
    
    slave-serve-stale-data yes
    
    slave-read-only no
    
  2. Server 192.168.3.208配置

    slaveof 192.168.3.211 6379
    
    requirepass abc.123
    
    masterauth abc.123
    
    slave-serve-stale-data yes
    
    slave-read-only no
    
  3. 测试是否成功

    在192.168.3.211中执行

    cd /usr/local/redis/
    
    redis-cli -a 123456
    
    set name sunwu
    
    get name
    
    keys \*
    

    192.168. 3.208 slave 中

    如果可以get到name的值,就证明成功了。

    cd /usr/local/redis/
    
    redis-cli -a 123456
    
    get name
    
    keys \*
    

安装 Keepalived

  1. 安装

     tar -zxvf keepalived-2.2.8.tar.gz
    ./configure --prefix=/usr/local/keepalived
    mkdir /etc/keepalived
    ln -s keepalived/sbin/keepalived /usr/sbin/
    cp keepalived/etc/keepalived/keepalived.conf.sample /etc/keepalived/keepalived.conf
    cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    
  2. 检查运行状态

    systemctl status keepalived
    
  3. 配置开机自启

     systemctl enable keepalived
    

Keepalived 配置高可用

  1. 修改Server192.168.3.211 master keepalived.conf 配置文件

    cd /etc/keepalived/
    
    vim keepalived.conf
    

    内容如下

    ! Configuration File for keepalived
    
    global_defs {
        router_id 214
    	script_user root
    }
    
    vrrp_script chk_redis {
       	script "/etc/keepalived/scripts/redis_check.sh"   
        interval 2
    }
     vrrp_script chk_mysql {
       	script "/etc/keepalived/scripts/mysql_check.sh"   
        interval 2
    }
     vrrp_script chk_http_port {
        script "/opt/tomcat/tomcat.pid"   
        interval 2
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens160  
        virtual_router_id 55
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
     
        track_script {
            chk_redis
        }
        virtual_ipaddress {
            192.168.3.179  #VIP地址
        }
     
        notify_master /etc/keepalived/scripts/redis_master.sh
        notify_backup /etc/keepalived/scripts/redis_backup.sh
        notify_fault /etc/keepalived/scripts/redis_fault.sh
        notify_stop /etc/keepalived/scripts/redis_stop.sh
    }
    vrrp_instance VI_2 {
        state BACKUP
        interface ens160  
        virtual_router_id 60
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
     
        track_script {
            chk_mysql 
        }
        virtual_ipaddress {
            192.168.3.181  #VIP
        }
     
    }
    
    vrrp_instance VI_3 {
       state BACKUP
       interface ens160  
       virtual_router_id 52
       priority 90
       advert_int 1
     
       authentication {
           auth_type PASS
           auth_pass 1111
        }
     
       track_script {
           chk_http_port
        }
     
       virtual_ipaddress {
           192.168.3.210
        }
    }
    
    
  2. 修改Server192.168.3.208 slave keepalived.conf 配置文件

    cd /etc/keepalived/
    
    vim keepalived.conf
    

    conf 内容如下

    ! Configuration File for keepalived
    
    global_defs {
        router_id 214
    	script_user root
    }
    
    vrrp_script chk_redis {
       	script "/etc/keepalived/scripts/redis_check.sh"   
        interval 2
    }
     vrrp_script chk_mysql {
       	script "/etc/keepalived/scripts/mysql_check.sh"   
        interval 2
    }
     vrrp_script chk_http_port {
        script "/opt/tomcat/tomcat.pid"   
        interval 2
    }
    
    vrrp_instance VI_1 {
        state MASTER
        interface ens160  
        virtual_router_id 55
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
     
        track_script {
            chk_redis
        }
        virtual_ipaddress {
            192.168.3.179  #VIP地址
        }
     
        notify_master /etc/keepalived/scripts/redis_master.sh
        notify_backup /etc/keepalived/scripts/redis_backup.sh
        notify_fault /etc/keepalived/scripts/redis_fault.sh
        notify_stop /etc/keepalived/scripts/redis_stop.sh
    }
    vrrp_instance VI_2 {
        state BACKUP
        interface ens160  
        virtual_router_id 60
        priority 90
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
     
        track_script {
            chk_mysql 
        }
        virtual_ipaddress {
            192.168.3.181  #VIP
        }
     
    }
    
    vrrp_instance VI_3 {
       state BACKUP
       interface ens160  
       virtual_router_id 52
       priority 90
       advert_int 1
     
       authentication {
           auth_type PASS
           auth_pass 1111
        }
     
       track_script {
           chk_http_port
        }
     
       virtual_ipaddress {
           192.168.3.210
        }
    }
    
    
  3. 添加Server192.168.3.211 master脚本文件

  4. 添加Server192.168.3.208 slave脚本文件

常见问题

  1. Failed to start keepalived.service: Unit keepalived.service is masked

    systemctl unmask keepalived
    
  2. MySQL执行脚本或连接访问报Access denied for user ‘root’@‘%’ to database ‘xxx’

    UPDATE mysql.user SET Grant\_priv='Y', Super\_priv='Y' WHERE User='root';
    
    flush privileges;
    
    quit;
    
    systemctl restart mysql
    
  3. Keepalived安装时:OpenSSL is not properly installed on your system. !!!

    apt install libssl-dev
    
  4. ssh 开root访问

    vim /etc/ssh/sshd\_config
    

    找到PermitRootLogin without-password 修改为PermitRootLogin yes

    service ssh restart
    
  5. keepalived Default-Start contains no runlevels, aborting

    https://www.cnblogs.com/hellojesson/p/10731620.html
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值