• 实现分别在Linux、Docker、Kubernetes上安装部署Mysql、Redis、Nginx软件


    目录

    实现目的:

    Linux上一键安装Mysql、Nginx、Redis软件

    一键安装Mysql脚本

    一键安装Redis脚本

    一键安装Nginx脚本

    docker上安装部署Mysql、Nginx、Redis容器

    Kubernetes上安装部署Mysql、Nginx、Redis的Pod和通过Service发布

    创建Pod生成容器

    使用Service发布


    实现目的:

    目的是方便用户快速安装Mysql、Redis、Nginx这三个软件,其中有部分配置可以自行舍取,脚本经供参考,实际工作可按需求调整。

    Linux上一键安装Mysql、Nginx、Redis软件

    一键安装Mysql脚本

    1. [root@localhost ~]# cat onekey_install_mysql_binary.sh
    2. #!/bin/bash
    3. #步骤:
    4. #解决软件依赖关系
    5. yum install libaio cmake ncurses-devel gcc gcc-c++ vim lsof bzip2 openssl-devel -y
    6. #需要自己下载Mysql二进制镜像
    7. #解压二进制安装包
    8. tar -xvf mysql-8.0.33-linux-glibc2.28-x86_64.tar.gz
    9. #移动mysql解压文件到/usr/local下,改名为mysql
    10. mv mysql-8.0.33-linux-glibc2.28-x86_64 /usr/local/mysql
    11. #新建组和用户 mysql
    12. groupadd mysql
    13. #mysql这个用户的shell 是/bin/false 无法被调用 表示系统用户 属于mysql这个组
    14. useradd -r -g mysql -s /bin/false mysql
    15. #进入/usr/local/mysql
    16. cd /usr/local/mysql
    17. #关闭firewalld防火墙服务,并且设置开机不启动
    18. service firewalld stop
    19. systemctl disable firewalld
    20. #临时关闭selinux,永久关闭selinux
    21. setenforce 0
    22. sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
    23. #mysql初始化操作
    24. #创建/data/mysql文档用于存放数据使用
    25. mkdir /data/mysql -p
    26. #修改文件权限和组别,这样mysql用户可以对这个文件夹进行读写操作了
    27. chown -R mysql:mysql /data/mysql/
    28. chmod -R 750 /data/mysql/
    29. #进入/usr/local/mysql/bin目录下进行初始化操作
    30. cd /usr/local/mysql/bin
    31. #设置启动用户为mysql base目录为/usr/local/mysql/ data目录为/data/mysql &>passwd.txt目的是将生成的临时密码存入passwd.txt文件中
    32. ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql --lower-case-table-names=1 &>passwd.txt
    33. #让mysql支持ssl方式登录的设置
    34. ./mysql_ssl_rsa_setup --datadir=/data/mysql/
    35. #获得临时密码
    36. tem_passwd=$(cat passwd.txt| grep "temporary" | awk '{print $NF}')
    37. #$NF表示最后一个字段
    38. #修改环境变量,添加我们编译安装的mysql的可执行命令的路径
    39. #临时修改PATH变量的值
    40. export PATH=/usr/local/mysql/bin/:$PATH
    41. #永久修改
    42. echo "PATH=/usr/local/mysql/bin:$PATH" >>/root/.bashrc
    43. #刷新环境变量
    44. source ~/.bashrc
    45. #复制support-files里的mysql.server文件到/etc/init.d目录下叫mysqld
    46. cp ../support-files/mysql.server /etc/init.d/mysqld
    47. #修改/etc/init.d/mysqld内的第70行的内容(datadir目录的值)
    48. sed -i '70c datadir=/data/mysql' /etc/init.d/mysqld
    49. #生成/etc/my.cnf配置文件
    50. cat >/etc/my.cnf <<EOF
    51. [mysqld_safe]
    52. [client]
    53. socket=/data/mysql/mysql.sock
    54. [mysqld]
    55. socket=/data/mysql/mysql.sock
    56. port = 3306
    57. open_files_limit = 8192
    58. innodb_buffer_pool_size = 512M
    59. character-set-server=utf8
    60. [mysql]
    61. auto-rehash
    62. prompt=\\u@\\d \\R:\\m mysql>
    63. EOF
    64. #启动mysqld服务
    65. service mysqld start
    66. #将mysqld添加到linux系统里的服务管理名单里
    67. chkconfig --add mysqld
    68. #设置mysqld服务开机启动
    69. /sbin/chkconfig mysqld on
    70. #登录重新设置初始密码为123456
    71. #初次修改密码需要使用 --connect-expired-password 选项
    72. #-e 后面接的命令是表示我们需要在mysql里执行的命令
    73. #set password='123456'; 表示修改root用户的密码为:123456
    74. mysql -uroot -p$tem_passwd --connect-expired-password -e "set password='123456';"
    75. #建议修改密码是否修改成功
    76. mysql -uroot -p123456 -e 'show databases;' && echo "database is installed success"
    77. [root@localhost ~]#

    注意:当部署好Mysql的时候,需要外部访问的时候,我们需要在Mysql内创建一个用户使他有权限被外部访问,因为我们的Mysql默认是不允许root用户外部登陆的

    参考:Mysql服务器的外部连接_mysql外部连接_Claylpf的博客-CSDN博客

    一键安装Redis脚本

    1. [root@localhost ~]# cat onekey_install_redis.sh
    2. #!/bin/bash
    3. #安装Redis依赖
    4. yum install gcc tcl -y
    5. mkdir /usr/local/redis/
    6. #下载好的redis安装包
    7. #wget https://github.com/redis/redis/archive/7.2.1.tar.gz
    8. #上传到/usr/local/src目录下
    9. #mv redis-7.2.1.tar.gz /usr/loacl/redis/redis-7.2.1.tar.gz
    10. cd /usr/local/redis/
    11. #解压redis安装包
    12. tar -zxvf redis-7.0.11.tar.gz
    13. #进入redis包,并运行编译
    14. cd redis-7.0.11
    15. make && make install
    16. #关闭firewalld防火墙服务,并且设置开机不启动
    17. service firewalld stop
    18. systemctl disable firewalld
    19. #临时关闭selinux,永久关闭selinux
    20. setenforce 0
    21. sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
    22. #将redis配置文件备份一份
    23. cp redis.conf redis.conf.bck
    24. # 修改redis备份文件
    25. sed -i 's/^bind .*/bind 0.0.0.0/' redis.conf
    26. sed -i 's/^\(daemonize\) no$/\1 yes/' redis.conf
    27. sed -i '/^# requirepass/s/^# //; /^requirepass/s/.*/requirepass 123456/' redis.conf
    28. sed -i 's/^logfile ""$/logfile "redis.log"/' redis.conf
    29. #重新启动redis
    30. redis-server redis.conf
    31. #实现redis开机自启
    32. cat >/etc/systemd/system/redis.service <<EOF
    33. [Unit]
    34. Description=redis-server
    35. After=network.target
    36. [Service]
    37. Type=forking
    38. ExecStart=/usr/local/bin/redis-server /usr/local/redis/redis-7.0.11/redis.conf
    39. PrivateTmp=true
    40. [Install]
    41. WantedBy=multi-user.target
    42. EOF
    43. #重载系统服务
    44. systemctl daemon-reload
    45. #重启redis
    46. systemctl restart redis
    47. #实现开机自启
    48. systemctl enable redis
    49. #查看redis状态
    50. systemctl status redis
    51. #查看redis版本
    52. redis-server --version
    53. [root@localhost ~]#

    一键安装Nginx脚本

    1. [root@localhost ~]# cat onekey_install_nginx.sh
    2. #!/bin/bash
    3. #新建一个文件夹用来存放下载的nginx源码包
    4. mkdir -p /nginx
    5. cd /nginx
    6. #新建工具人用户、设置无法登录模式
    7. useradd -s /sbin/nologin clay
    8. #下载nginx
    9. #wget http://nginx.org/download/nginx-1.23.2.tar.gz
    10. #curl -O http://nginx.org/download/nginx-1.24.0.tar.gz
    11. mv ~/nginx-1.24.0.tar.gz nginx-1.24.0.tar.gz
    12. #解压nginx源码包
    13. tar xf nginx-1.24.0.tar.gz
    14. #解决软件依赖关系、需要安装的软件包
    15. yum install epel-release -y
    16. yum install gcc gcc-c++ openssl openssl-devel pcre pcre-devel automake make psmisc net-tools lsof vim geoip geoip-devel wget zlib zlib-devel -y
    17. #到达nginx配置文件目录下
    18. cd nginx-1.24.0
    19. #编译前的配置
    20. ./configure --prefix=/usr/local/nginx --user=clay --with-http_ssl_module --with-http_v2_module --with-stream --with-http_stub_status_module --with-threads
    21. #编译、开启一个进程同时编译
    22. make -j 1
    23. #编译安装
    24. make install
    25. #启动nginx
    26. /usr/local/nginx/sbin/nginx
    27. #永久修改PATH变量
    28. PATH=$PATH:/usr/local/nginx/sbin
    29. echo "PATH=$PATH:/usr/local/nginx/sbin" >>/root/.bashrc
    30. #设置nginx的开机启动--手动添加
    31. #在/etc/rc.local中添加启动命令
    32. #/usr/local/scnginx66/sbin/nginx
    33. echo "/usr/local/nginx/sbin/nginx" >>/etc/rc.local
    34. #给文件可执行权限
    35. chmod +x /etc/rc.d/rc.local
    36. #刷新/root/.bashrc配置文件
    37. source ~/.bashrc
    38. #selinux和firewalld防火墙都需要关闭
    39. service firewalld stop
    40. systemctl disable firewalld
    41. #临时关闭selinux
    42. setenforce 0
    43. #永久关闭selinux (需要开机重启)
    44. #vim /etc/selinx/config
    45. sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
    46. #查看nginx是否运行成功
    47. ps aux|grep nginx
    48. [root@localhost ~]#

    安装完成后查看效果:

    docker上安装部署Mysql、Nginx、Redis容器

    首先拉取其中的镜像

    下图为拉取的镜像类型(nginx:1.24.0  Mysql:8.0.33  redis:7.0.11)

     使用docker run命令部署容器

    1. docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql-8.0.33 mysql:8.0.33
    2. docker run -d -p 80:80 --name nginx-1.24 nginx:1.24
    3. docker run -d -p 6379:6379 --name redis-7.0.11 redis:7.0.11

    部署成果:

    Kubernetes上安装部署Mysql、Nginx、Redis的Pod和通过Service发布

    创建Pod生成容器

    首先编辑nginx-deployment.yaml 文件

    1. (base) root@sd-cluster-04:~# cat nginx-deployment.yaml
    2. apiVersion: apps/v1
    3. kind: Deployment
    4. metadata:
    5. name: nginx-deployment
    6. namespace: testns
    7. spec:
    8. replicas: 1
    9. selector:
    10. matchLabels:
    11. app: nginx
    12. template:
    13. metadata:
    14. labels:
    15. app: nginx
    16. spec:
    17. containers:
    18. - name: nginx
    19. image: nginx:1.24
    20. ports:
    21. - containerPort: 80
    22. (base) root@sd-cluster-04:~#

    编辑mysql-deployment.yaml文件

    1. (base) root@sd-cluster-04:~# cat mysql-deployment.yaml
    2. apiVersion: apps/v1
    3. kind: Deployment
    4. metadata:
    5. name: mysql-deployment
    6. namespace: testns
    7. spec:
    8. replicas: 1
    9. selector:
    10. matchLabels:
    11. app: mysql
    12. template:
    13. metadata:
    14. labels:
    15. app: mysql
    16. spec:
    17. containers:
    18. - name: mysql
    19. image: mysql:8.0.33
    20. env:
    21. - name: MYSQL_ROOT_PASSWORD
    22. value: "123456"
    23. ports:
    24. - containerPort: 3306
    25. (base) root@sd-cluster-04:~#

    编辑 redis-deployment.yaml 

    1. (base) root@sd-cluster-04:~# cat redis-deployment.yaml
    2. apiVersion: apps/v1
    3. kind: Deployment
    4. metadata:
    5. name: redis-deployment
    6. namespace: testns
    7. spec:
    8. replicas: 1
    9. selector:
    10. matchLabels:
    11. app: redis
    12. template:
    13. metadata:
    14. labels:
    15. app: redis
    16. spec:
    17. containers:
    18. - name: redis
    19. image: redis:7.0.11
    20. ports:
    21. - containerPort: 6379
    22. (base) root@sd-cluster-04:~#

    使用 kubectl apply -f 命令运行.yaml文件

    (base) root@sd-cluster-04:~# kubectl apply -f mysql-deployment.yaml 

    查看效果

    1. (base) root@sd-cluster-04:~# kubectl get pods -n testns -o wide
    2. NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
    3. mysql-deployment-66c4d975f5-zm4sz 1/1 Running 0 77m 10.244.0.212 sd-cluster-04 <none> <none>
    4. nginx-deployment-76bd958557-slspm 1/1 Running 0 89m 10.244.1.250 sd-cluster-05 <none> <none>
    5. redis-deployment-f7d7dd455-xk7h8 1/1 Running 0 21m 10.244.0.215 sd-cluster-04 <none> <none>
    6. (base) root@sd-cluster-04:~#

    使用Service发布

    创建nginx-service.yaml文件

    1. (base) root@sd-cluster-04:~# cat nginx-service.yaml
    2. apiVersion: v1
    3. kind: Service
    4. metadata:
    5. name: nginx-service
    6. namespace: testns
    7. labels:
    8. app: nginx
    9. spec:
    10. type: NodePort
    11. selector:
    12. app: nginx
    13. ports:
    14. - protocol: TCP
    15. port: 80
    16. targetPort: 80
    17. (base) root@sd-cluster-04:~#

    编辑mysql-service.yaml文件

    1. (base) root@sd-cluster-04:~# cat mysql-service.yaml
    2. apiVersion: v1
    3. kind: Service
    4. metadata:
    5. name: mysql-service
    6. namespace: testns
    7. labels:
    8. app: mysql
    9. spec:
    10. type: NodePort
    11. ports:
    12. - port: 3306
    13. targetPort: 3306
    14. protocol: TCP
    15. selector:
    16. app: mysql
    17. (base) root@sd-cluster-04:~#

    编辑redis-service.yaml 文件

    1. (base) root@sd-cluster-04:~# cat redis-service.yaml
    2. apiVersion: v1
    3. kind: Service
    4. metadata:
    5. name: redis-service
    6. namespace: testns
    7. labels:
    8. app: redis
    9. spec:
    10. type: NodePort
    11. selector:
    12. app: redis
    13. ports:
    14. - protocol: TCP
    15. port: 6379
    16. targetPort: 6379
    17. (base) root@sd-cluster-04:~#

    使用kubectl apply -f 命令运行.yaml文件

    (base) root@sd-cluster-04:~# kubectl apply -f nginx-service.yaml 
    

    查看效果

    1. (base) root@sd-cluster-04:~# kubectl get service -n testns -o wide
    2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
    3. mysql-service NodePort 10.96.132.123 <none> 3306:30859/TCP 85m app=mysql
    4. nginx-service NodePort 10.96.16.39 <none> 80:30325/TCP 87m app=nginx
    5. redis-service NodePort 10.96.10.164 <none> 6379:30026/TCP 89m app=redis
    6. (base) root@sd-cluster-04:~#

  • 相关阅读:
    习题:循环结构(二)
    ROS1 学习11 坐标系tf 管理系统 简介及demo示例
    java计算机毕业设计ssm易物小店交换系统-二手咸鱼交易系统
    Foxit PDF
    网络中的一些概念
    代码随想录算法训练营第五十六天 | 1143. 最长公共子序列 & 1035.不相交的线 & 53. 最大子数组和
    如何正确选择ARM核心板的存储类型
    浏览器不能显示16位以上的数字
    1.jetson装jtop
    【大数据毕设】基于Hadoop的音乐推荐系统的设计和实现(六)
  • 原文地址:https://blog.csdn.net/lpfstudy/article/details/132760575